Skip to content

Commit 489b56a

Browse files
committed
Implemented restore to node functionality
1 parent d19df88 commit 489b56a

File tree

6 files changed

+172
-50
lines changed

6 files changed

+172
-50
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bootstrap-ui-treeview",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"homepage": "https://github.com/Gillardo/bootstrap-ui-treeview",
55
"authors": [
66
"Gillardo <[email protected]>"

dist/tree-view.js

Lines changed: 85 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
// https://github.com/Gillardo/bootstrap-ui-treeview
2-
// Version: 1.0.0
3-
// Released: 2015-03-13
2+
// Version: 1.0.1
3+
// Released: 2015-05-27
44
angular.module('ui.bootstrap.treeview', []).factory('TreeViewService', function () {
55
var factory = {};
66

7+
factory.treeView = [];
8+
factory._restoreNode = null;
9+
710
factory.selectedNode = null;
811

912
factory.unselectNode = function () {
10-
if (factory.selectedNode) factory.selectedNode.selected = undefined;
11-
1213
factory.selectedNode = null;
1314
};
1415

@@ -21,10 +22,6 @@ angular.module('ui.bootstrap.treeview', []).factory('TreeViewService', function
2122
};
2223

2324
factory.toggleNode = function (node) {
24-
// no node selected
25-
if (!node) return;
26-
27-
// no children
2825
if (!node.children) return;
2926

3027
// collapse / expand
@@ -33,17 +30,75 @@ angular.module('ui.bootstrap.treeview', []).factory('TreeViewService', function
3330
}
3431
};
3532

36-
factory.toggleAll = function (node) {
37-
// no node selected
38-
if (!node) return;
33+
factory.hasChild = function (list, id) {
34+
for (var i = 0; i < list.length; i++) {
35+
if (list[i].id == id) {
36+
return true;
37+
}
38+
}
39+
return false;
40+
};
41+
42+
factory.restoreToNode = function (node) {
43+
factory._restoreNode = node;
44+
};
45+
46+
factory.restore = function () {
47+
if (!factory._restoreNode) return;
48+
49+
var id = factory._restoreNode.id;
50+
51+
var hasRestoreNode = function (node) {
52+
if (node.id == id) {
53+
54+
// set node as selected
55+
node.selected = true;
56+
57+
// save node to service
58+
factory.selectedNode = node;
59+
60+
return true;
61+
} else {
62+
if (!node.children) return;
63+
64+
for (var i = 0; i < node.children.length; i++) {
65+
if (hasRestoreNode(node.children[i])) {
66+
return true;
67+
}
68+
}
69+
}
70+
71+
return false;
72+
};
73+
74+
var collapse = function (node) {
75+
if (hasRestoreNode(node)) {
76+
node.collapsed = true;
77+
78+
if (!node.children) return;
79+
80+
for (var i = 0; i < node.children.length; i++) {
81+
collapse(node.children[i]);
82+
}
83+
} else {
84+
node.collapsed = false;
85+
}
86+
};
87+
88+
// check if this node contains the child id
89+
for (var i = 0; i < factory.treeView.length; i++) {
90+
collapse(factory.treeView[i]);
91+
}
92+
};
3993

94+
factory.toggleAll = function (node) {
4095
// set all children equal to what the parent will be,
4196
// else can get out of sync
4297
var collapsed = !node.collapsed;
4398

4499
var iterate = function (child) {
45100
if (!child.children) {
46-
return null;
101+
return;
47102
} else {
48103
child.collapsed = collapsed;
49104

@@ -56,7 +111,7 @@ angular.module('ui.bootstrap.treeview', []).factory('TreeViewService', function
56111
if (node) {
57112
iterate(node);
58113
}
59-
114+
60115
};
61116

62117
return factory;
@@ -78,22 +133,28 @@ angular.module('ui.bootstrap.treeview').directive('treeView', ['$compile', 'Tree
78133
// template
79134
var template =
80135
'<ul class="tree-view">' +
81-
'<li ng-repeat="node in ' + model + '">' +
82-
'<div>' +
83-
'<div>' +
84-
'<i ng-click="toggleNode(node)" ng-show="node.children && node.children.length > 0" ng-class="!node.collapsed ? \'has-child\' : \'has-child-open\'"></i>' +
85-
'<i ng-click="toggleNode(node)" class="no-child" ng-show="!node.children || node.children.length == 0"></i>' +
86-
'<span ng-click="selectNode(node)" ng-bind="node.' + nodeLabel + '" ng-class="{\'selected\' : node.selected}"></span>' +
87-
'</div>' +
88-
itemIncludeHtml +
89-
'</div>' +
90-
'<div class="tree-view" collapse="!node.collapsed" tree-view="node.children" tree-root="false" node-label="' + nodeLabel + '" item-ng-include="' + itemInclude + '" ></div>' +
91-
'</li>' +
136+
'<li ng-repeat="node in ' + model + '">' +
137+
'<div>' +
138+
'<div>' +
139+
'<i ng-click="toggleNode(node)" ng-show="node.children && node.children.length > 0" ng-class="!node.collapsed ? \'has-child\' : \'has-child-open\'"></i>' +
140+
'<i ng-click="toggleNode(node)" class="no-child" ng-show="!node.children || node.children.length == 0"></i>' +
141+
'<span ng-click="selectNode(node)" ng-bind="node.' + nodeLabel + '" ng-class="{\'selected\' : node.selected}"></span>' +
142+
'</div>' +
143+
itemIncludeHtml +
144+
'</div>' +
145+
'<div class="tree-view" collapse="!node.collapsed" tree-view="node.children" tree-root="false" node-label="' + nodeLabel + '" item-ng-include="' + itemInclude + '" ></div>' +
146+
'</li>' +
92147
'</ul>';
93148

94149
// root node
95150
if (isRoot) {
96151

152+
// store our list
153+
TreeViewService.treeView = scope.$eval(attrs.treeView);
154+
155+
// restore to previously opened node, if one
156+
TreeViewService.restore();
157+
97158
// toggle when icon clicked
98159
scope.toggleNode = function (node) {
99160
TreeViewService.toggleNode(node);

dist/tree-view.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "bootstrap-ui-treeview",
33
"url": "https://github.com/Gillardo/bootstrap-ui-treeview",
4-
"version": "1.0.0",
4+
"version": "1.0.1",
55
"devDependencies": {
66
"grunt": "^0.4.5",
77
"grunt-contrib-concat": "^0.5.0",

tree-view-directive.js

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,28 @@
1515
// template
1616
var template =
1717
'<ul class="tree-view">' +
18-
'<li ng-repeat="node in ' + model + '">' +
19-
'<div>' +
20-
'<div>' +
21-
'<i ng-click="toggleNode(node)" ng-show="node.children && node.children.length > 0" ng-class="!node.collapsed ? \'has-child\' : \'has-child-open\'"></i>' +
22-
'<i ng-click="toggleNode(node)" class="no-child" ng-show="!node.children || node.children.length == 0"></i>' +
23-
'<span ng-click="selectNode(node)" ng-bind="node.' + nodeLabel + '" ng-class="{\'selected\' : node.selected}"></span>' +
24-
'</div>' +
25-
itemIncludeHtml +
26-
'</div>' +
27-
'<div class="tree-view" collapse="!node.collapsed" tree-view="node.children" tree-root="false" node-label="' + nodeLabel + '" item-ng-include="' + itemInclude + '" ></div>' +
28-
'</li>' +
18+
'<li ng-repeat="node in ' + model + '">' +
19+
'<div>' +
20+
'<div>' +
21+
'<i ng-click="toggleNode(node)" ng-show="node.children && node.children.length > 0" ng-class="!node.collapsed ? \'has-child\' : \'has-child-open\'"></i>' +
22+
'<i ng-click="toggleNode(node)" class="no-child" ng-show="!node.children || node.children.length == 0"></i>' +
23+
'<span ng-click="selectNode(node)" ng-bind="node.' + nodeLabel + '" ng-class="{\'selected\' : node.selected}"></span>' +
24+
'</div>' +
25+
itemIncludeHtml +
26+
'</div>' +
27+
'<div class="tree-view" collapse="!node.collapsed" tree-view="node.children" tree-root="false" node-label="' + nodeLabel + '" item-ng-include="' + itemInclude + '" ></div>' +
28+
'</li>' +
2929
'</ul>';
3030

3131
// root node
3232
if (isRoot) {
3333

34+
// store our list
35+
TreeViewService.treeView = scope.$eval(attrs.treeView);
36+
37+
// restore to previously opened node, if one
38+
TreeViewService.restore();
39+
3440
// toggle when icon clicked
3541
scope.toggleNode = function (node) {
3642
TreeViewService.toggleNode(node);

tree-view-service.js

Lines changed: 66 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
angular.module('ui.bootstrap.treeview', []).factory('TreeViewService', function () {
22
var factory = {};
33

4+
factory.treeView = [];
5+
factory._restoreNode = null;
6+
47
factory.selectedNode = null;
58

69
factory.unselectNode = function () {
7-
if (factory.selectedNode) factory.selectedNode.selected = undefined;
8-
910
factory.selectedNode = null;
1011
};
1112

@@ -18,10 +19,6 @@
1819
};
1920

2021
factory.toggleNode = function (node) {
21-
// no node selected
22-
if (!node) return;
23-
24-
// no children
2522
if (!node.children) return;
2623

2724
// collapse / expand
@@ -30,17 +27,75 @@
3027
}
3128
};
3229

33-
factory.toggleAll = function (node) {
34-
// no node selected
35-
if (!node) return;
30+
factory.hasChild = function (list, id) {
31+
for (var i = 0; i < list.length; i++) {
32+
if (list[i].id == id) {
33+
return true;
34+
}
35+
}
36+
return false;
37+
};
38+
39+
factory.restoreToNode = function (node) {
40+
factory._restoreNode = node;
41+
};
42+
43+
factory.restore = function () {
44+
if (!factory._restoreNode) return;
45+
46+
var id = factory._restoreNode.id;
47+
48+
var hasRestoreNode = function (node) {
49+
if (node.id == id) {
50+
51+
// set node as selected
52+
node.selected = true;
53+
54+
// save node to service
55+
factory.selectedNode = node;
56+
57+
return true;
58+
} else {
59+
if (!node.children) return;
3660

61+
for (var i = 0; i < node.children.length; i++) {
62+
if (hasRestoreNode(node.children[i])) {
63+
return true;
64+
}
65+
}
66+
}
67+
68+
return false;
69+
};
70+
71+
var collapse = function (node) {
72+
if (hasRestoreNode(node)) {
73+
node.collapsed = true;
74+
75+
if (!node.children) return;
76+
77+
for (var i = 0; i < node.children.length; i++) {
78+
collapse(node.children[i]);
79+
}
80+
} else {
81+
node.collapsed = false;
82+
}
83+
};
84+
85+
// check if this node contains the child id
86+
for (var i = 0; i < factory.treeView.length; i++) {
87+
collapse(factory.treeView[i]);
88+
}
89+
};
90+
91+
factory.toggleAll = function (node) {
3792
// set all children equal to what the parent will be,
3893
// else can get out of sync
3994
var collapsed = !node.collapsed;
4095

4196
var iterate = function (child) {
4297
if (!child.children) {
43-
return null;
98+
return;
4499
} else {
45100
child.collapsed = collapsed;
46101

@@ -53,7 +108,7 @@
53108
if (node) {
54109
iterate(node);
55110
}
56-
111+
57112
};
58113

59114
return factory;

0 commit comments

Comments
 (0)