Skip to content

Commit

Permalink
Build v2.15.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Niels Dequeker committed Jan 28, 2016
1 parent 443d4c8 commit 7e81766
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 51 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
@@ -1,3 +1,7 @@
# 2.15.0

* Remove scope dependency [#648](https://github.com/angular-ui-tree/angular-ui-tree/pull/648)

# 2.14.0

* Include the CSS source files in the build [#685](https://github.com/angular-ui-tree/angular-ui-tree/pull/685)
Expand Down
2 changes: 1 addition & 1 deletion bower.json
@@ -1,6 +1,6 @@
{
"name": "angular-ui-tree",
"version": "2.14.0",
"version": "2.15.0",
"homepage": "https://github.com/angular-ui-tree/angular-ui-tree",
"authors": [
"Jim Liu <https://github.com/JimLiu>",
Expand Down
161 changes: 116 additions & 45 deletions dist/angular-ui-tree.js
@@ -1,6 +1,6 @@
/**
* @license Angular UI Tree v2.14.0
* (c) 2010-2015. https://github.com/angular-ui-tree/angular-ui-tree
* @license Angular UI Tree v2.15.0
* (c) 2010-2016. https://github.com/angular-ui-tree/angular-ui-tree
* License: MIT
*/
(function () {
Expand Down Expand Up @@ -330,27 +330,6 @@
};

$scope.resetEmptyElement = this.resetEmptyElement;

var collapseOrExpand = function (scope, collapsed) {
var i, subScope,
nodes = scope.childNodes();
for (i = 0; i < nodes.length; i++) {
collapsed ? nodes[i].collapse() : nodes[i].expand();
subScope = nodes[i].$childNodesScope;
if (subScope) {
collapseOrExpand(subScope, collapsed);
}
}
};

$scope.collapseAll = function () {
collapseOrExpand($scope.$nodesScope, true);
};

$scope.expandAll = function () {
collapseOrExpand($scope.$nodesScope, false);
};

}
]);
})();
Expand Down Expand Up @@ -601,7 +580,10 @@
bindDragMoveEvents,
unbindDragMoveEvents,
keydownHandler,
outOfBounds;
outOfBounds,
isHandleChild,
el;

angular.extend(config, treeConfig);
if (config.nodeClass) {
element.addClass(config.nodeClass);
Expand All @@ -622,34 +604,52 @@
attrs.$set('collapsed', val);
});

scope.$on('angular-ui-tree:collapse-all', function () {
scope.collapsed = true;
});

scope.$on('angular-ui-tree:expand-all', function () {
scope.collapsed = false;
});

/**
* Called when the user has grabbed a node and started dragging it
* @param e
*/
dragStart = function (e) {
if (!hasTouch && (e.button == 2 || e.which == 3)) {
// disable right click
// disable right click
if (!hasTouch && (e.button === 2 || e.which === 3)) {
return;
}
if (e.uiTreeDragging || (e.originalEvent && e.originalEvent.uiTreeDragging)) { // event has already fired in other scope.

// event has already fired in other scope
if (e.uiTreeDragging || (e.originalEvent && e.originalEvent.uiTreeDragging)) {
return;
}

// the node being dragged
var eventElm = angular.element(e.target),
eventScope = eventElm.scope(),
cloneElm = element.clone(),
eventElmTagName, tagName,
eventObj, tdElm, hStyle;
if (!eventScope || !eventScope.$type) {
return;
isHandleChild, cloneElm, eventElmTagName, tagName,
eventObj, tdElm, hStyle,
isTreeNode,
isTreeNodeHandle;

// if the target element is a child element of a ui-tree-handle,
// use the containing handle element as target element
isHandleChild = UiTreeHelper.treeNodeHandlerContainerOfElement(eventElm);
if (isHandleChild) {
eventElm = angular.element(isHandleChild);
}
if (eventScope.$type != 'uiTreeNode'
&& eventScope.$type != 'uiTreeHandle') { // Check if it is a node or a handle

cloneElm = element.clone();
isTreeNode = UiTreeHelper.elementIsTreeNode(eventElm);
isTreeNodeHandle = UiTreeHelper.elementIsTreeNodeHandle(eventElm);

if (!isTreeNode && !isTreeNodeHandle) {
return;
}
if (eventScope.$type == 'uiTreeNode'
&& eventScope.$handleScope) { // If the node has a handle, then it should be clicked by the handle

if (isTreeNode && UiTreeHelper.elementContainsTreeNodeHandler(eventElm)) {
return;
}

Expand All @@ -662,11 +662,12 @@
}

// check if it or it's parents has a 'data-nodrag' attribute
while (eventElm && eventElm[0] && eventElm[0] != element) {
if (UiTreeHelper.nodrag(eventElm)) { // if the node mark as `nodrag`, DONOT drag it.
el = angular.element(e.target);
while (el && el[0] && el[0] !== element) {
if (UiTreeHelper.nodrag(el)) { // if the node mark as `nodrag`, DONOT drag it.
return;
}
eventElm = eventElm.parent();
el = el.parent();
}

if (!scope.beforeDrag(scope)) {
Expand Down Expand Up @@ -852,13 +853,24 @@

targetElm = angular.element($window.document.elementFromPoint(targetX, targetY));

// if the target element is a child element of a ui-tree-handle,
// use the containing handle element as target element
isHandleChild = UiTreeHelper.treeNodeHandlerContainerOfElement(targetElm);
if (isHandleChild) {
targetElm = angular.element(isHandleChild);
}

if (angular.isFunction(dragElm.show)) {
dragElm.show();
} else {
dragElm[0].style.display = displayElm;
}

outOfBounds = !targetElm.scope() || !(targetElm.scope().$type);
outOfBounds = !UiTreeHelper.elementIsTreeNodeHandle(targetElm) &&
!UiTreeHelper.elementIsTreeNode(targetElm) &&
!UiTreeHelper.elementIsTreeNodes(targetElm) &&
!UiTreeHelper.elementIsTree(targetElm) &&
!UiTreeHelper.elementIsPlaceholder(targetElm);

// Detect out of bounds condition, update drop target display, and prevent drop
if (outOfBounds) {
Expand Down Expand Up @@ -904,8 +916,22 @@

// move vertical
if (!pos.dirAx) {
if (UiTreeHelper.elementIsTree(targetElm)) {
targetNode = targetElm.controller('uiTree').scope;
} else if (UiTreeHelper.elementIsTreeNodeHandle(targetElm)) {
targetNode = targetElm.controller('uiTreeHandle').scope;
} else if (UiTreeHelper.elementIsTreeNode(targetElm)) {
targetNode = targetElm.controller('uiTreeNode').scope;
} else if (UiTreeHelper.elementIsTreeNodes(targetElm)) {
targetNode = targetElm.controller('uiTreeNodes').scope;
} else if (UiTreeHelper.elementIsPlaceholder(targetElm)) {
targetNode = targetElm.controller('uiTreeNodes').scope;
} else if (targetElm.controller('uiTreeNode')) {
// is a child element of a node
targetNode = targetElm.controller('uiTreeNode').scope;
}

// check it's new position
targetNode = targetElm.scope();
isEmpty = false;
if (!targetNode) {
return;
Expand Down Expand Up @@ -1186,8 +1212,8 @@
* @description
* angular-ui-tree.
*/
.factory('UiTreeHelper', ['$document', '$window',
function ($document, $window) {
.factory('UiTreeHelper', ['$document', '$window', 'treeConfig',
function ($document, $window, treeConfig) {
return {

/**
Expand Down Expand Up @@ -1489,10 +1515,55 @@
}

pos.dirAx = newAx;
},

elementIsTreeNode: function (element) {
return typeof element.attr('ui-tree-node') !== 'undefined';
},

elementIsTreeNodeHandle: function (element) {
return typeof element.attr('ui-tree-handle') !== 'undefined';
},
elementIsTree: function (element) {
return typeof element.attr('ui-tree') !== 'undefined';
},
elementIsTreeNodes: function (element) {
return typeof element.attr('ui-tree-nodes') !== 'undefined';
},
elementIsPlaceholder: function (element) {
return element.hasClass(treeConfig.placeholderClass);
},
elementContainsTreeNodeHandler: function (element) {
return element[0].querySelectorAll('[ui-tree-handle]').length >= 1;
},
treeNodeHandlerContainerOfElement: function (element) {
return findFirstParentElementWithAttribute('ui-tree-handle', element[0]);
}
};
}

]);

// TODO: optimize this loop
function findFirstParentElementWithAttribute(attributeName, childObj) {
// undefined if the mouse leaves the browser window
if (childObj === undefined) {
return null;
}
var testObj = childObj.parentNode,
count = 1,
// check for setAttribute due to exception thrown by Firefox when a node is dragged outside the browser window
res = (typeof testObj.setAttribute === 'function' && testObj.hasAttribute(attributeName)) ? testObj : null;
while (testObj && typeof testObj.setAttribute === 'function' && !testObj.hasAttribute(attributeName)) {
testObj = testObj.parentNode;
res = testObj;
if (testObj === document.documentElement) {
res = null;
break;
}
count++;
}

return res;
}

})();

0 comments on commit 7e81766

Please sign in to comment.