Skip to content

Commit 83b6b86

Browse files
author
Niels Dequeker
committed
Get the correct target element during the dragMove event
1 parent 937b70f commit 83b6b86

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

source/directives/uiTreeNode.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,21 @@
8383

8484
// the node being dragged
8585
var eventElm = angular.element(e.target),
86-
cloneElm = element.clone(),
87-
eventElmTagName, tagName,
86+
isHandleChild, cloneElm, eventElmTagName, tagName,
8887
eventObj, tdElm, hStyle,
89-
isTreeNode = UiTreeHelper.elementIsTreeNode(eventElm),
90-
isTreeNodeHandle = UiTreeHelper.elementIsTreeNodeHandle(eventElm);
88+
isTreeNode,
89+
isTreeNodeHandle;
90+
91+
// if the target element is a child element of a ui-tree-handle,
92+
// use the containing handle element as target element
93+
isHandleChild = UiTreeHelper.treeNodeHandlerContainerOfElement(eventElm);
94+
if (isHandleChild) {
95+
eventElm = angular.element(isHandleChild);
96+
}
97+
98+
cloneElm = element.clone();
99+
isTreeNode = UiTreeHelper.elementIsTreeNode(eventElm);
100+
isTreeNodeHandle = UiTreeHelper.elementIsTreeNodeHandle(eventElm);
91101

92102
if (!isTreeNode && !isTreeNodeHandle) {
93103
return;

source/services/helper.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,30 @@
335335
},
336336
elementContainsTreeNodeHandler: function (element) {
337337
return element[0].querySelectorAll('[ui-tree-handle]').length >= 1;
338+
},
339+
treeNodeHandlerContainerOfElement: function (element) {
340+
return findFirstParentElementWithAttribute('ui-tree-handle', element[0]);
338341
}
339342
};
340343
}
341-
342344
]);
343345

346+
// TODO: optimize this loop
347+
function findFirstParentElementWithAttribute(attributeName, childObj) {
348+
var testObj = childObj.parentNode;
349+
var count = 1;
350+
var res = testObj.hasAttribute(attributeName) ? testObj : null;
351+
while (!testObj.hasAttribute(attributeName)) {
352+
testObj = testObj.parentNode;
353+
res = testObj;
354+
if (testObj === document.documentElement) {
355+
res = null;
356+
break;
357+
}
358+
count++;
359+
}
360+
361+
return res;
362+
}
363+
344364
})();

0 commit comments

Comments
 (0)