Skip to content

Commit

Permalink
fix(*): Closes #137 - drag/drop should work even when compile-time de…
Browse files Browse the repository at this point in the history
…bugging is disabled
  • Loading branch information
codef0rmerz committed Dec 21, 2014
1 parent 5dc8b1f commit f268c57
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
"main": "src/angular-dragdrop.js",
"dependencies": {},
"devDependencies": {
"grunt": "~0.4.1",
"grunt-karma": "~0.4.4"
"grunt": "^0.4.5",
"grunt-karma": "^0.4.6"
},
"scripts": {},
"repository": {
Expand Down
9 changes: 7 additions & 2 deletions src/angular-dragdrop.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
'use strict';

var jqyoui = angular.module('ngDragDrop', []).service('ngDragDropService', ['$timeout', '$parse', function($timeout, $parse) {
this.draggableScope = null;
this.droppableScope = null;

this.callEventCallback = function (scope, callbackName, event, ui) {
if (!callbackName) return;

Expand Down Expand Up @@ -68,8 +71,8 @@ var jqyoui = angular.module('ngDragDrop', []).service('ngDragDropService', ['$ti
dragModelValue,
dropModelValue,
$droppableDraggable = null,
droppableScope = $droppable.scope(),
draggableScope = $draggable.scope();
droppableScope = this.droppableScope,
draggableScope = this.draggableScope;

dragModel = $draggable.ngattr('ng-model');
dropModel = $droppable.ngattr('ng-model');
Expand Down Expand Up @@ -255,6 +258,7 @@ var jqyoui = angular.module('ngDragDrop', []).service('ngDragDropService', ['$ti
.draggable(jqyouiOptions)
.draggable({
start: function(event, ui) {
ngDragDropService.draggableScope = scope;
zIndex = angular.element(jqyouiOptions.helper ? ui.helper : this).css('z-index');
angular.element(jqyouiOptions.helper ? ui.helper : this).css('z-index', 9999);
jqyoui.startXY = angular.element(this)[dragSettings.containment || 'offset']();
Expand Down Expand Up @@ -301,6 +305,7 @@ var jqyoui = angular.module('ngDragDrop', []).service('ngDragDropService', ['$ti
},
drop: function(event, ui) {
if (angular.element(ui.draggable).ngattr('ng-model') && attrs.ngModel) {
ngDragDropService.droppableScope = scope;
ngDragDropService.invokeDrop(angular.element(ui.draggable), angular.element(this), event, ui);
} else {
ngDragDropService.callEventCallback(scope, dropSettings.onDrop, event, ui);
Expand Down
2 changes: 1 addition & 1 deletion src/angular-dragdrop.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions test/spec/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ describe('Service: ngDragDropService', function() {
it('should move item from list1[0]:placeholderTrue to list2[0]:dummy', function() {
scope.list1 = [{ 'title': 'Item 1', 'drag': true}];
scope.list2 = [{}];
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
expect(scope.list1.length).toBe(1);
expect(scope.list2.length).toBe(1);
ngDragDropService.invokeDrop(
Expand All @@ -32,6 +33,7 @@ describe('Service: ngDragDropService', function() {
it('should move item from list1[0]:placeholderTrue to list2[0]:nodummy', function() {
scope.list1 = [{ 'title': 'Item 1', 'drag': true}];
scope.list2 = [];
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
expect(scope.list1.length).toBe(1);
expect(scope.list2.length).toBe(0);
ngDragDropService.invokeDrop(
Expand All @@ -50,6 +52,7 @@ describe('Service: ngDragDropService', function() {
it('should move item from list1[0]:placeholderFalse to list2[0]:dummy', function() {
scope.list1 = [{ 'title': 'Item 1', 'drag': true}];
scope.list2 = [{}];
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
expect(scope.list1.length).toBe(1);
expect(scope.list2.length).toBe(1);
ngDragDropService.invokeDrop(
Expand All @@ -67,6 +70,7 @@ describe('Service: ngDragDropService', function() {
it('should move item from list1[0]:placeholderFalse to list2[0]:nodummy', function() {
scope.list1 = [{ 'title': 'Item 1', 'drag': true}];
scope.list2 = [];
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
expect(scope.list1.length).toBe(1);
expect(scope.list2.length).toBe(0);
ngDragDropService.invokeDrop(
Expand All @@ -84,6 +88,7 @@ describe('Service: ngDragDropService', function() {
it('should swap items between list1[0] to list2[0]', function() {
scope.list1 = [{ 'title': 'Item 1', 'drag': true}];
scope.list2 = [{ 'title': 'Item 2', 'drag': true}];
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
expect(scope.list1.length).toBe(1);
expect(scope.list2.length).toBe(1);
ngDragDropService.invokeDrop(
Expand All @@ -102,6 +107,7 @@ describe('Service: ngDragDropService', function() {
it('should keep item in list1[0] as well as clone it in list2[0]', function() {
scope.list1 = [{ 'title': 'Item 1', 'drag': true}];
scope.list2 = {};
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
expect(scope.list1.length).toBe(1);
expect(scope.list2).toEqual({});
ngDragDropService.invokeDrop(
Expand All @@ -121,6 +127,7 @@ describe('Service: ngDragDropService', function() {
list1: [{ 'title': 'Item 1', 'drag': true}],
list2: [{}]
};
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
expect(scope.foo.list1.length).toBe(1);
expect(scope.foo.list2.length).toBe(1);
ngDragDropService.invokeDrop(
Expand All @@ -140,6 +147,8 @@ describe('Service: ngDragDropService', function() {
scope.list = [{'title': 'Item 1', 'drag': true}];
scope2 = rootScope.$new();
scope2.list = [{}];
ngDragDropService.draggableScope = scope;
ngDragDropService.droppableScope = scope2;
expect(scope.list.length).toBe(1);
expect(scope2.list.length).toBe(1);

Expand All @@ -158,6 +167,7 @@ describe('Service: ngDragDropService', function() {
it('should fix the index in case of filters used with ngRepeat such as orderBy', function() {
// Applicable only for array models
scope.list = [{'title': 'Item 2', 'drag': true}, {'title': 'Item 1', 'drag': true}];
ngDragDropService.draggableScope = ngDragDropService.droppableScope = scope;
scope.filterIt = function() {
return orderByFilter(scope.list, 'title');
};
Expand Down

0 comments on commit f268c57

Please sign in to comment.