Skip to content

Commit 372bc89

Browse files
author
Niels Dequeker
committed
refactor: Expand and collapse all nodes of a tree using events
1 parent 3eb22ba commit 372bc89

File tree

5 files changed

+61
-23
lines changed

5 files changed

+61
-23
lines changed

examples/js/basic-example.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
};
2727

2828
$scope.collapseAll = function () {
29-
$scope.$broadcast('collapseAll');
29+
$scope.$broadcast('angular-ui-tree:collapse-all');
3030
};
3131

3232
$scope.expandAll = function () {
33-
$scope.$broadcast('expandAll');
33+
$scope.$broadcast('angular-ui-tree:expand-all');
3434
};
3535

3636
$scope.data = [{

examples/views/basic-example.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
<div class="row">
2323
<div class="col-sm-12">
2424
<h3>Basic Example</h3>
25+
26+
<button ng-click="expandAll()">Expand all</button>
27+
<button ng-click="collapseAll()">Collapse all</button>
2528
</div>
2629
</div>
2730

source/controllers/treeCtrl.js

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,6 @@
4242
};
4343

4444
$scope.resetEmptyElement = this.resetEmptyElement;
45-
46-
var collapseOrExpand = function (scope, collapsed) {
47-
var i, subScope,
48-
nodes = scope.childNodes();
49-
for (i = 0; i < nodes.length; i++) {
50-
collapsed ? nodes[i].collapse() : nodes[i].expand();
51-
subScope = nodes[i].$childNodesScope;
52-
if (subScope) {
53-
collapseOrExpand(subScope, collapsed);
54-
}
55-
}
56-
};
57-
58-
$scope.collapseAll = function () {
59-
collapseOrExpand($scope.$nodesScope, true);
60-
};
61-
62-
$scope.expandAll = function () {
63-
collapseOrExpand($scope.$nodesScope, false);
64-
};
65-
6645
}
6746
]);
6847
})();

source/directives/uiTreeNode.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@
5858
attrs.$set('collapsed', val);
5959
});
6060

61+
scope.$on('angular-ui-tree:collapse-all', function () {
62+
scope.collapsed = true;
63+
});
64+
65+
scope.$on('angular-ui-tree:expand-all', function () {
66+
scope.collapsed = false;
67+
});
68+
6169
/**
6270
* Called when the user has grabbed a node and started dragging it
6371
* @param e

source/directives/uiTreeNode.spec.js

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
(function () {
2+
'use strict';
3+
4+
describe('the uiTreeNode directive', function () {
5+
var $rootScope, $compile, $scope, element;
6+
7+
beforeEach(module('ui.tree'));
8+
beforeEach(inject(function ($injector) {
9+
$rootScope = $injector.get('$rootScope');
10+
$compile = $injector.get('$compile');
11+
$scope = $rootScope.$new();
12+
13+
$scope.items = [{
14+
'id': 42,
15+
'title': 'Node 42'
16+
}];
17+
}));
18+
19+
beforeEach(function () {
20+
element = createElement();
21+
});
22+
23+
function createElement() {
24+
var template = '<div ui-tree><ol ui-tree-nodes ng-model="items"><li ng-repeat="item in items" ui-tree-node><div ui-tree-handle>{{item.title}}</div></li></ol></div>';
25+
element = angular.element(template);
26+
$compile(element)($scope);
27+
$scope.$digest();
28+
return element;
29+
}
30+
31+
it('should collapse on receiving the angular-ui-tree:collapse-all event', function () {
32+
$rootScope.$broadcast('angular-ui-tree:collapse-all');
33+
$scope.$digest();
34+
35+
expect(element.find('[ui-tree-node]').attr('collapsed')).toEqual('true');
36+
expect(element.find('[ui-tree-node]').scope().collapsed).toEqual(true);
37+
});
38+
39+
it('should expand on receiving the angular-ui-tree:expand-all event', function () {
40+
$rootScope.$broadcast('angular-ui-tree:expand-all');
41+
$scope.$digest();
42+
43+
expect(element.find('[ui-tree-node]').attr('collapsed')).toEqual('false');
44+
expect(element.find('[ui-tree-node]').scope().collapsed).toEqual(false);
45+
});
46+
});
47+
48+
}());

0 commit comments

Comments
 (0)