@@ -97,7 +97,7 @@ angular.module('ui.sortable', [])
97
97
}
98
98
return ;
99
99
}
100
-
100
+
101
101
if ( ! defaultOptions ) {
102
102
defaultOptions = angular . element . ui . sortable ( ) . options ;
103
103
}
@@ -186,16 +186,13 @@ angular.module('ui.sortable', [])
186
186
return ( / l e f t | r i g h t / ) . test ( item . css ( 'float' ) ) || ( / i n l i n e | t a b l e - c e l l / ) . test ( item . css ( 'display' ) ) ;
187
187
}
188
188
189
- function getElementScope ( elementScopes , element ) {
190
- var result = null ;
189
+ function getElementContext ( elementScopes , element ) {
191
190
for ( var i = 0 ; i < elementScopes . length ; i ++ ) {
192
- var x = elementScopes [ i ] ;
193
- if ( x . element [ 0 ] === element [ 0 ] ) {
194
- result = x . scope ;
195
- break ;
191
+ var c = elementScopes [ i ] ;
192
+ if ( c . element [ 0 ] === element [ 0 ] ) {
193
+ return c ;
196
194
}
197
195
}
198
- return result ;
199
196
}
200
197
201
198
function afterStop ( e , ui ) {
@@ -266,7 +263,8 @@ angular.module('ui.sortable', [])
266
263
ui . item . sortable = {
267
264
model : ngModel . $modelValue [ index ] ,
268
265
index : index ,
269
- source : ui . item . parent ( ) ,
266
+ source : element ,
267
+ sourceList : ui . item . parent ( ) ,
270
268
sourceModel : ngModel . $modelValue ,
271
269
cancel : function ( ) {
272
270
ui . item . sortable . _isCanceled = true ;
@@ -283,16 +281,33 @@ angular.module('ui.sortable', [])
283
281
angular . forEach ( ui . item . sortable , function ( value , key ) {
284
282
ui . item . sortable [ key ] = undefined ;
285
283
} ) ;
284
+ } ,
285
+ _connectedSortables : [ ] ,
286
+ _getElementContext : function ( element ) {
287
+ return getElementContext ( this . _connectedSortables , element ) ;
286
288
}
287
289
} ;
288
290
} ;
289
291
290
292
callbacks . activate = function ( e , ui ) {
293
+ var isSourceContext = ui . item . sortable . source === element ;
294
+ var savedNodesOrigin = isSourceContext ?
295
+ ui . item . sortable . sourceList :
296
+ element ;
297
+ var elementContext = {
298
+ element : element ,
299
+ scope : scope ,
300
+ isSourceContext : isSourceContext ,
301
+ savedNodesOrigin : savedNodesOrigin
302
+ } ;
303
+ // save the directive's scope so that it is accessible from ui.item.sortable
304
+ ui . item . sortable . _connectedSortables . push ( elementContext ) ;
305
+
291
306
// We need to make a copy of the current element's contents so
292
307
// we can restore it after sortable has messed it up.
293
308
// This is inside activate (instead of start) in order to save
294
309
// both lists when dragging between connected lists.
295
- savedNodes = element . contents ( ) ;
310
+ savedNodes = savedNodesOrigin . contents ( ) ;
296
311
297
312
// If this list has a placeholder (the connected lists won't),
298
313
// don't inlcude it in saved nodes.
@@ -301,16 +316,6 @@ angular.module('ui.sortable', [])
301
316
var excludes = getPlaceholderExcludesludes ( element , placeholder ) ;
302
317
savedNodes = savedNodes . not ( excludes ) ;
303
318
}
304
-
305
- // save the directive's scope so that it is accessible from ui.item.sortable
306
- var connectedSortables = ui . item . sortable . _connectedSortables || [ ] ;
307
-
308
- connectedSortables . push ( {
309
- element : element ,
310
- scope : scope
311
- } ) ;
312
-
313
- ui . item . sortable . _connectedSortables = connectedSortables ;
314
319
} ;
315
320
316
321
callbacks . update = function ( e , ui ) {
@@ -319,11 +324,12 @@ angular.module('ui.sortable', [])
319
324
// the value will be overwritten with the old value
320
325
if ( ! ui . item . sortable . received ) {
321
326
ui . item . sortable . dropindex = getItemIndex ( ui . item ) ;
322
- var droptarget = ui . item . parent ( ) ;
327
+ var droptarget = ui . item . closest ( '[ui-sortable]' ) ;
323
328
ui . item . sortable . droptarget = droptarget ;
329
+ ui . item . sortable . droptargetList = ui . item . parent ( ) ;
324
330
325
- var droptargetScope = getElementScope ( ui . item . sortable . _connectedSortables , droptarget ) ;
326
- ui . item . sortable . droptargetModel = droptargetScope . ngModel ;
331
+ var droptargetContext = ui . item . sortable . _getElementContext ( droptarget ) ;
332
+ ui . item . sortable . droptargetModel = droptargetContext . scope . ngModel ;
327
333
328
334
// Cancel the sort (let ng-repeat do the sort for us)
329
335
// Don't cancel if this is the received list because it has
@@ -343,7 +349,8 @@ angular.module('ui.sortable', [])
343
349
// That way it will be garbage collected.
344
350
savedNodes = savedNodes . not ( sortingHelper ) ;
345
351
}
346
- savedNodes . appendTo ( element ) ;
352
+ var elementContext = ui . item . sortable . _getElementContext ( element ) ;
353
+ savedNodes . appendTo ( elementContext . savedNodesOrigin ) ;
347
354
348
355
// If this is the target connected list then
349
356
// it's safe to clear the restored nodes since:
@@ -392,7 +399,8 @@ angular.module('ui.sortable', [])
392
399
// That way it will be garbage collected.
393
400
savedNodes = savedNodes . not ( sortingHelper ) ;
394
401
}
395
- savedNodes . appendTo ( element ) ;
402
+ var elementContext = ui . item . sortable . _getElementContext ( element ) ;
403
+ savedNodes . appendTo ( elementContext . savedNodesOrigin ) ;
396
404
}
397
405
398
406
// It's now safe to clear the savedNodes
@@ -433,7 +441,8 @@ angular.module('ui.sortable', [])
433
441
item . sortable = {
434
442
model : ngModel . $modelValue [ index ] ,
435
443
index : index ,
436
- source : item . parent ( ) ,
444
+ source : element ,
445
+ sourceList : item . parent ( ) ,
437
446
sourceModel : ngModel . $modelValue ,
438
447
_restore : function ( ) {
439
448
angular . forEach ( item . sortable , function ( value , key ) {
@@ -459,7 +468,7 @@ angular.module('ui.sortable', [])
459
468
var sortableWidgetInstance = getSortableWidgetInstance ( element ) ;
460
469
if ( ! ! sortableWidgetInstance ) {
461
470
var optsDiff = patchUISortableOptions ( newVal , oldVal , sortableWidgetInstance ) ;
462
-
471
+
463
472
if ( optsDiff ) {
464
473
element . sortable ( 'option' , optsDiff ) ;
465
474
}
@@ -475,7 +484,7 @@ angular.module('ui.sortable', [])
475
484
} else {
476
485
$log . info ( 'ui.sortable: ngModel not provided!' , element ) ;
477
486
}
478
-
487
+
479
488
// Create sortable
480
489
element . sortable ( opts ) ;
481
490
}
0 commit comments