1
1
/**
2
2
* 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
4
4
* @link http://angular-ui.github.com
5
5
* @license MIT
6
6
*/
@@ -106,7 +106,7 @@ angular.module('ui.sortable', [])
106
106
}
107
107
return ;
108
108
}
109
-
109
+
110
110
if ( ! defaultOptions ) {
111
111
defaultOptions = angular . element . ui . sortable ( ) . options ;
112
112
}
@@ -195,16 +195,13 @@ angular.module('ui.sortable', [])
195
195
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' ) ) ;
196
196
}
197
197
198
- function getElementScope ( elementScopes , element ) {
199
- var result = null ;
198
+ function getElementContext ( elementScopes , element ) {
200
199
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 ;
205
203
}
206
204
}
207
- return result ;
208
205
}
209
206
210
207
function afterStop ( e , ui ) {
@@ -275,7 +272,8 @@ angular.module('ui.sortable', [])
275
272
ui . item . sortable = {
276
273
model : ngModel . $modelValue [ index ] ,
277
274
index : index ,
278
- source : ui . item . parent ( ) ,
275
+ source : element ,
276
+ sourceList : ui . item . parent ( ) ,
279
277
sourceModel : ngModel . $modelValue ,
280
278
cancel : function ( ) {
281
279
ui . item . sortable . _isCanceled = true ;
@@ -292,16 +290,33 @@ angular.module('ui.sortable', [])
292
290
angular . forEach ( ui . item . sortable , function ( value , key ) {
293
291
ui . item . sortable [ key ] = undefined ;
294
292
} ) ;
293
+ } ,
294
+ _connectedSortables : [ ] ,
295
+ _getElementContext : function ( element ) {
296
+ return getElementContext ( this . _connectedSortables , element ) ;
295
297
}
296
298
} ;
297
299
} ;
298
300
299
301
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
+
300
315
// We need to make a copy of the current element's contents so
301
316
// we can restore it after sortable has messed it up.
302
317
// This is inside activate (instead of start) in order to save
303
318
// both lists when dragging between connected lists.
304
- savedNodes = element . contents ( ) ;
319
+ savedNodes = savedNodesOrigin . contents ( ) ;
305
320
306
321
// If this list has a placeholder (the connected lists won't),
307
322
// don't inlcude it in saved nodes.
@@ -310,16 +325,6 @@ angular.module('ui.sortable', [])
310
325
var excludes = getPlaceholderExcludesludes ( element , placeholder ) ;
311
326
savedNodes = savedNodes . not ( excludes ) ;
312
327
}
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 ;
323
328
} ;
324
329
325
330
callbacks . update = function ( e , ui ) {
@@ -328,11 +333,12 @@ angular.module('ui.sortable', [])
328
333
// the value will be overwritten with the old value
329
334
if ( ! ui . item . sortable . received ) {
330
335
ui . item . sortable . dropindex = getItemIndex ( ui . item ) ;
331
- var droptarget = ui . item . parent ( ) ;
336
+ var droptarget = ui . item . closest ( '[ui-sortable]' ) ;
332
337
ui . item . sortable . droptarget = droptarget ;
338
+ ui . item . sortable . droptargetList = ui . item . parent ( ) ;
333
339
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 ;
336
342
337
343
// Cancel the sort (let ng-repeat do the sort for us)
338
344
// Don't cancel if this is the received list because it has
@@ -352,7 +358,8 @@ angular.module('ui.sortable', [])
352
358
// That way it will be garbage collected.
353
359
savedNodes = savedNodes . not ( sortingHelper ) ;
354
360
}
355
- savedNodes . appendTo ( element ) ;
361
+ var elementContext = ui . item . sortable . _getElementContext ( element ) ;
362
+ savedNodes . appendTo ( elementContext . savedNodesOrigin ) ;
356
363
357
364
// If this is the target connected list then
358
365
// it's safe to clear the restored nodes since:
@@ -401,7 +408,8 @@ angular.module('ui.sortable', [])
401
408
// That way it will be garbage collected.
402
409
savedNodes = savedNodes . not ( sortingHelper ) ;
403
410
}
404
- savedNodes . appendTo ( element ) ;
411
+ var elementContext = ui . item . sortable . _getElementContext ( element ) ;
412
+ savedNodes . appendTo ( elementContext . savedNodesOrigin ) ;
405
413
}
406
414
407
415
// It's now safe to clear the savedNodes
@@ -442,7 +450,8 @@ angular.module('ui.sortable', [])
442
450
item . sortable = {
443
451
model : ngModel . $modelValue [ index ] ,
444
452
index : index ,
445
- source : item . parent ( ) ,
453
+ source : element ,
454
+ sourceList : item . parent ( ) ,
446
455
sourceModel : ngModel . $modelValue ,
447
456
_restore : function ( ) {
448
457
angular . forEach ( item . sortable , function ( value , key ) {
@@ -468,7 +477,7 @@ angular.module('ui.sortable', [])
468
477
var sortableWidgetInstance = getSortableWidgetInstance ( element ) ;
469
478
if ( ! ! sortableWidgetInstance ) {
470
479
var optsDiff = patchUISortableOptions ( newVal , oldVal , sortableWidgetInstance ) ;
471
-
480
+
472
481
if ( optsDiff ) {
473
482
element . sortable ( 'option' , optsDiff ) ;
474
483
}
@@ -484,7 +493,7 @@ angular.module('ui.sortable', [])
484
493
} else {
485
494
$log . info ( 'ui.sortable: ngModel not provided!' , element ) ;
486
495
}
487
-
496
+
488
497
// Create sortable
489
498
element . sortable ( opts ) ;
490
499
}
0 commit comments