Skip to content

Commit f52aa85

Browse files
author
Niels Dequeker
committed
refactor: Drag start function to remove dependence on the scope() method of the node's element + add tests
1 parent 6dcc5b3 commit f52aa85

File tree

3 files changed

+67
-12
lines changed

3 files changed

+67
-12
lines changed

source/directives/uiTreeNode.js

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,29 +65,29 @@
6565
});
6666

6767
dragStart = function (e) {
68-
if (!hasTouch && (e.button == 2 || e.which == 3)) {
69-
// disable right click
68+
// disable right click
69+
if (!hasTouch && (e.button === 2 || e.which === 3)) {
7070
return;
7171
}
72-
if (e.uiTreeDragging || (e.originalEvent && e.originalEvent.uiTreeDragging)) { // event has already fired in other scope.
72+
73+
// event has already fired in other scope
74+
if (e.uiTreeDragging || (e.originalEvent && e.originalEvent.uiTreeDragging)) {
7375
return;
7476
}
7577

7678
// the element which is clicked.
7779
var eventElm = angular.element(e.target),
78-
eventScope = eventElm.scope(),
7980
cloneElm = element.clone(),
8081
eventElmTagName, tagName,
81-
eventObj, tdElm, hStyle;
82-
if (!eventScope || !eventScope.$type) {
83-
return;
84-
}
85-
if (eventScope.$type != 'uiTreeNode'
86-
&& eventScope.$type != 'uiTreeHandle') { // Check if it is a node or a handle
82+
eventObj, tdElm, hStyle,
83+
isTreeNode = UiTreeHelper.elementIsTreeNode(eventElm),
84+
isTreeNodeHandle = UiTreeHelper.elementIsTreeNodeHandle(eventElm);
85+
86+
if (!isTreeNode && !isTreeNodeHandle) {
8787
return;
8888
}
89-
if (eventScope.$type == 'uiTreeNode'
90-
&& eventScope.$handleScope) { // If the node has a handle, then it should be clicked by the handle
89+
90+
if (isTreeNode && UiTreeHelper.elementContainsTreeNodeHandler(eventElm)) {
9191
return;
9292
}
9393

source/services/helper.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,18 @@
315315
}
316316

317317
pos.dirAx = newAx;
318+
},
319+
320+
elementIsTreeNode: function (element) {
321+
return typeof element.attr('ui-tree-node') !== 'undefined';
322+
},
323+
324+
elementIsTreeNodeHandle: function (element) {
325+
return typeof element.attr('ui-tree-handle') !== 'undefined';
326+
},
327+
328+
elementContainsTreeNodeHandler: function (element) {
329+
return element[0].querySelectorAll('[ui-tree-handle]').length >= 1;
318330
}
319331
};
320332
}

source/services/helper.spec.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
(function () {
2+
'use strict';
3+
4+
describe('the UiTreeHelper service', function () {
5+
var UiTreeHelper;
6+
7+
beforeEach(module('ui.tree'));
8+
beforeEach(inject(function ($injector) {
9+
UiTreeHelper = $injector.get('UiTreeHelper');
10+
}));
11+
12+
describe('the check if an element is a tree node', function () {
13+
it('should work for elements using the node directives', function () {
14+
var nodeElement = angular.element('<div ui-tree-node></div>'),
15+
notANodeElement = angular.element('<div></div>');
16+
17+
expect(UiTreeHelper.elementIsTreeNode(nodeElement)).toEqual(true);
18+
expect(UiTreeHelper.elementIsTreeNode(notANodeElement)).toEqual(false);
19+
});
20+
});
21+
22+
describe('the check if an element is a tree node', function () {
23+
it('should work for elements using the node directives', function () {
24+
var handleElement = angular.element('<div ui-tree-handle=""></div>'),
25+
notAHandleElement = angular.element('<div></div>');
26+
27+
expect(UiTreeHelper.elementIsTreeNodeHandle(handleElement)).toEqual(true);
28+
expect(UiTreeHelper.elementIsTreeNodeHandle(notAHandleElement)).toEqual(false);
29+
});
30+
});
31+
32+
describe('the check if an element contains a node handler', function () {
33+
it('should work for elements using the node directives', function () {
34+
var withHandle = angular.element('<div ui-tree-node><div ui-tree-handle></div></div>'),
35+
withoutHandle = angular.element('<div ui-tree-node></div>');
36+
37+
expect(UiTreeHelper.elementContainsTreeNodeHandler(withHandle)).toEqual(true);
38+
expect(UiTreeHelper.elementContainsTreeNodeHandler(withoutHandle)).toEqual(false);
39+
});
40+
});
41+
});
42+
43+
})();

0 commit comments

Comments
 (0)