Skip to content
This repository was archived by the owner on Sep 8, 2020. It is now read-only.

Commit 8926a05

Browse files
author
AngularUI (via TravisCI)
committed
Travis commit : build 491
1 parent 1a5b8c1 commit 8926a05

File tree

3 files changed

+41
-32
lines changed

3 files changed

+41
-32
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angular-ui-sortable",
3-
"version": "0.15.1",
3+
"version": "0.16.0",
44
"main": ["./sortable.js"],
55
"dependencies": {
66
"angular": ">=1.2.x",

sortable.js

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* angular-ui-sortable - This directive allows you to jQueryUI Sortable.
3-
* @version v0.15.1 - 2016-11-28
3+
* @version v0.16.0 - 2016-12-04
44
* @link http://angular-ui.github.com
55
* @license MIT
66
*/
@@ -106,7 +106,7 @@ angular.module('ui.sortable', [])
106106
}
107107
return;
108108
}
109-
109+
110110
if (!defaultOptions) {
111111
defaultOptions = angular.element.ui.sortable().options;
112112
}
@@ -195,16 +195,13 @@ angular.module('ui.sortable', [])
195195
return (/left|right/).test(item.css('float')) || (/inline|table-cell/).test(item.css('display'));
196196
}
197197

198-
function getElementScope(elementScopes, element) {
199-
var result = null;
198+
function getElementContext(elementScopes, element) {
200199
for (var i = 0; i < elementScopes.length; i++) {
201-
var x = elementScopes[i];
202-
if (x.element[0] === element[0]) {
203-
result = x.scope;
204-
break;
200+
var c = elementScopes[i];
201+
if (c.element[0] === element[0]) {
202+
return c;
205203
}
206204
}
207-
return result;
208205
}
209206

210207
function afterStop(e, ui) {
@@ -275,7 +272,8 @@ angular.module('ui.sortable', [])
275272
ui.item.sortable = {
276273
model: ngModel.$modelValue[index],
277274
index: index,
278-
source: ui.item.parent(),
275+
source: element,
276+
sourceList: ui.item.parent(),
279277
sourceModel: ngModel.$modelValue,
280278
cancel: function () {
281279
ui.item.sortable._isCanceled = true;
@@ -292,16 +290,33 @@ angular.module('ui.sortable', [])
292290
angular.forEach(ui.item.sortable, function(value, key) {
293291
ui.item.sortable[key] = undefined;
294292
});
293+
},
294+
_connectedSortables: [],
295+
_getElementContext: function (element) {
296+
return getElementContext(this._connectedSortables, element);
295297
}
296298
};
297299
};
298300

299301
callbacks.activate = function(e, ui) {
302+
var isSourceContext = ui.item.sortable.source === element;
303+
var savedNodesOrigin = isSourceContext ?
304+
ui.item.sortable.sourceList :
305+
element;
306+
var elementContext = {
307+
element: element,
308+
scope: scope,
309+
isSourceContext: isSourceContext,
310+
savedNodesOrigin: savedNodesOrigin
311+
};
312+
// save the directive's scope so that it is accessible from ui.item.sortable
313+
ui.item.sortable._connectedSortables.push(elementContext);
314+
300315
// We need to make a copy of the current element's contents so
301316
// we can restore it after sortable has messed it up.
302317
// This is inside activate (instead of start) in order to save
303318
// both lists when dragging between connected lists.
304-
savedNodes = element.contents();
319+
savedNodes = savedNodesOrigin.contents();
305320

306321
// If this list has a placeholder (the connected lists won't),
307322
// don't inlcude it in saved nodes.
@@ -310,16 +325,6 @@ angular.module('ui.sortable', [])
310325
var excludes = getPlaceholderExcludesludes(element, placeholder);
311326
savedNodes = savedNodes.not(excludes);
312327
}
313-
314-
// save the directive's scope so that it is accessible from ui.item.sortable
315-
var connectedSortables = ui.item.sortable._connectedSortables || [];
316-
317-
connectedSortables.push({
318-
element: element,
319-
scope: scope
320-
});
321-
322-
ui.item.sortable._connectedSortables = connectedSortables;
323328
};
324329

325330
callbacks.update = function(e, ui) {
@@ -328,11 +333,12 @@ angular.module('ui.sortable', [])
328333
// the value will be overwritten with the old value
329334
if(!ui.item.sortable.received) {
330335
ui.item.sortable.dropindex = getItemIndex(ui.item);
331-
var droptarget = ui.item.parent();
336+
var droptarget = ui.item.closest('[ui-sortable]');
332337
ui.item.sortable.droptarget = droptarget;
338+
ui.item.sortable.droptargetList = ui.item.parent();
333339

334-
var droptargetScope = getElementScope(ui.item.sortable._connectedSortables, droptarget);
335-
ui.item.sortable.droptargetModel = droptargetScope.ngModel;
340+
var droptargetContext = ui.item.sortable._getElementContext(droptarget);
341+
ui.item.sortable.droptargetModel = droptargetContext.scope.ngModel;
336342

337343
// Cancel the sort (let ng-repeat do the sort for us)
338344
// Don't cancel if this is the received list because it has
@@ -352,7 +358,8 @@ angular.module('ui.sortable', [])
352358
// That way it will be garbage collected.
353359
savedNodes = savedNodes.not(sortingHelper);
354360
}
355-
savedNodes.appendTo(element);
361+
var elementContext = ui.item.sortable._getElementContext(element);
362+
savedNodes.appendTo(elementContext.savedNodesOrigin);
356363

357364
// If this is the target connected list then
358365
// it's safe to clear the restored nodes since:
@@ -401,7 +408,8 @@ angular.module('ui.sortable', [])
401408
// That way it will be garbage collected.
402409
savedNodes = savedNodes.not(sortingHelper);
403410
}
404-
savedNodes.appendTo(element);
411+
var elementContext = ui.item.sortable._getElementContext(element);
412+
savedNodes.appendTo(elementContext.savedNodesOrigin);
405413
}
406414

407415
// It's now safe to clear the savedNodes
@@ -442,7 +450,8 @@ angular.module('ui.sortable', [])
442450
item.sortable = {
443451
model: ngModel.$modelValue[index],
444452
index: index,
445-
source: item.parent(),
453+
source: element,
454+
sourceList: item.parent(),
446455
sourceModel: ngModel.$modelValue,
447456
_restore: function () {
448457
angular.forEach(item.sortable, function(value, key) {
@@ -468,7 +477,7 @@ angular.module('ui.sortable', [])
468477
var sortableWidgetInstance = getSortableWidgetInstance(element);
469478
if (!!sortableWidgetInstance) {
470479
var optsDiff = patchUISortableOptions(newVal, oldVal, sortableWidgetInstance);
471-
480+
472481
if (optsDiff) {
473482
element.sortable('option', optsDiff);
474483
}
@@ -484,7 +493,7 @@ angular.module('ui.sortable', [])
484493
} else {
485494
$log.info('ui.sortable: ngModel not provided!', element);
486495
}
487-
496+
488497
// Create sortable
489498
element.sortable(opts);
490499
}

sortable.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)