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

Commit 19c968d

Browse files
committed
feat(sortable): add support for transcluded descendants
1 parent 4fd4207 commit 19c968d

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/sortable.js

+20-14
Original file line numberDiff line numberDiff line change
@@ -282,18 +282,32 @@ angular.module('ui.sortable', [])
282282
ui.item.sortable[key] = undefined;
283283
});
284284
},
285+
_connectedSortables: [],
285286
_getElementContext: function (element) {
286-
return getElementContext(this._connectedSortables || [], element);
287+
return getElementContext(this._connectedSortables, element);
287288
}
288289
};
289290
};
290291

291292
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+
292306
// We need to make a copy of the current element's contents so
293307
// we can restore it after sortable has messed it up.
294308
// This is inside activate (instead of start) in order to save
295309
// both lists when dragging between connected lists.
296-
savedNodes = element.contents();
310+
savedNodes = savedNodesOrigin.contents();
297311

298312
// If this list has a placeholder (the connected lists won't),
299313
// don't inlcude it in saved nodes.
@@ -302,16 +316,6 @@ angular.module('ui.sortable', [])
302316
var excludes = getPlaceholderExcludesludes(element, placeholder);
303317
savedNodes = savedNodes.not(excludes);
304318
}
305-
306-
// save the directive's scope so that it is accessible from ui.item.sortable
307-
var connectedSortables = ui.item.sortable._connectedSortables || [];
308-
309-
connectedSortables.push({
310-
element: element,
311-
scope: scope
312-
});
313-
314-
ui.item.sortable._connectedSortables = connectedSortables;
315319
};
316320

317321
callbacks.update = function(e, ui) {
@@ -345,7 +349,8 @@ angular.module('ui.sortable', [])
345349
// That way it will be garbage collected.
346350
savedNodes = savedNodes.not(sortingHelper);
347351
}
348-
savedNodes.appendTo(element);
352+
var elementContext = ui.item.sortable._getElementContext(element);
353+
savedNodes.appendTo(elementContext.savedNodesOrigin);
349354

350355
// If this is the target connected list then
351356
// it's safe to clear the restored nodes since:
@@ -394,7 +399,8 @@ angular.module('ui.sortable', [])
394399
// That way it will be garbage collected.
395400
savedNodes = savedNodes.not(sortingHelper);
396401
}
397-
savedNodes.appendTo(element);
402+
var elementContext = ui.item.sortable._getElementContext(element);
403+
savedNodes.appendTo(elementContext.savedNodesOrigin);
398404
}
399405

400406
// It's now safe to clear the savedNodes

0 commit comments

Comments
 (0)