CLIENT GUI Framework
[vnfsdk/refrepo.git] / portal-common / src / main / webapp / common / thirdparty / zTree / js / jquery.ztree.exhide.js
1 /*\r
2  * JQuery zTree exHideNodes v3.5.16\r
3  * http://zTree.me/\r
4  *\r
5  * Copyright (c) 2010 Hunter.z\r
6  *\r
7  * Licensed same as jquery - MIT License\r
8  * http://www.opensource.org/licenses/mit-license.php\r
9  *\r
10  * email: hunter.z@263.net\r
11  * Date: 2014-03-09\r
12  */\r
13 (function($){\r
14         //default init node of exLib\r
15         var _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\r
16                 if (typeof n.isHidden == "string") n.isHidden = tools.eqs(n.isHidden, "true");\r
17                 n.isHidden = !!n.isHidden;\r
18                 data.initHideForExCheck(setting, n);\r
19         },\r
20         //add dom for check\r
21         _beforeA = function(setting, node, html) {},\r
22         //update zTreeObj, add method of exLib\r
23         _zTreeTools = function(setting, zTreeTools) {\r
24                 zTreeTools.showNodes = function(nodes, options) {\r
25                         view.showNodes(setting, nodes, options);\r
26                 }\r
27                 zTreeTools.showNode = function(node, options) {\r
28                         if (!node) {\r
29                                 return;\r
30                         }\r
31                         view.showNodes(setting, [node], options);\r
32                 }\r
33                 zTreeTools.hideNodes = function(nodes, options) {\r
34                         view.hideNodes(setting, nodes, options);\r
35                 }\r
36                 zTreeTools.hideNode = function(node, options) {\r
37                         if (!node) {\r
38                                 return;\r
39                         }\r
40                         view.hideNodes(setting, [node], options);\r
41                 }\r
42 \r
43                 var _checkNode = zTreeTools.checkNode;\r
44                 if (_checkNode) {\r
45                         zTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {\r
46                                 if (!!node && !!node.isHidden) {\r
47                                         return;\r
48                                 }\r
49                                 _checkNode.apply(zTreeTools, arguments);\r
50                         }\r
51                 }\r
52         },\r
53         //method of operate data\r
54         _data = {\r
55                 initHideForExCheck: function(setting, n) {\r
56                         if (n.isHidden && setting.check && setting.check.enable) {\r
57                                 if(typeof n._nocheck == "undefined") {\r
58                                         n._nocheck = !!n.nocheck\r
59                                         n.nocheck = true;\r
60                                 }\r
61                                 n.check_Child_State = -1;\r
62                                 if (view.repairParentChkClassWithSelf) {\r
63                                         view.repairParentChkClassWithSelf(setting, n);\r
64                                 }\r
65                         }\r
66                 },\r
67                 initShowForExCheck: function(setting, n) {\r
68                         if (!n.isHidden && setting.check && setting.check.enable) {\r
69                                 if(typeof n._nocheck != "undefined") {\r
70                                         n.nocheck = n._nocheck;\r
71                                         delete n._nocheck;\r
72                                 }\r
73                                 if (view.setChkClass) {\r
74                                         var checkObj = $$(n, consts.id.CHECK, setting);\r
75                                         view.setChkClass(setting, checkObj, n);\r
76                                 }\r
77                                 if (view.repairParentChkClassWithSelf) {\r
78                                         view.repairParentChkClassWithSelf(setting, n);\r
79                                 }\r
80                         }\r
81                 }\r
82         },\r
83         //method of operate ztree dom\r
84         _view = {\r
85                 clearOldFirstNode: function(setting, node) {\r
86                         var n = node.getNextNode();\r
87                         while(!!n){\r
88                                 if (n.isFirstNode) {\r
89                                         n.isFirstNode = false;\r
90                                         view.setNodeLineIcos(setting, n);\r
91                                         break;\r
92                                 }\r
93                                 if (n.isLastNode) {\r
94                                         break;\r
95                                 }\r
96                                 n = n.getNextNode();\r
97                         }\r
98                 },\r
99                 clearOldLastNode: function(setting, node) {\r
100                         var n = node.getPreNode();\r
101                         while(!!n){\r
102                                 if (n.isLastNode) {\r
103                                         n.isLastNode = false;\r
104                                         view.setNodeLineIcos(setting, n);\r
105                                         break;\r
106                                 }\r
107                                 if (n.isFirstNode) {\r
108                                         break;\r
109                                 }\r
110                                 n = n.getPreNode();\r
111                         }\r
112                 },\r
113                 makeDOMNodeMainBefore: function(html, setting, node) {\r
114                         html.push("<li ", (node.isHidden ? "style='display:none;' " : ""), "id='", node.tId, "' class='", consts.className.LEVEL, node.level,"' tabindex='0' hidefocus='true' treenode>");\r
115                 },\r
116                 showNode: function(setting, node, options) {\r
117                         node.isHidden = false;\r
118                         data.initShowForExCheck(setting, node);\r
119                         $$(node, setting).show();\r
120                 },\r
121                 showNodes: function(setting, nodes, options) {\r
122                         if (!nodes || nodes.length == 0) {\r
123                                 return;\r
124                         }\r
125                         var pList = {}, i, j;\r
126                         for (i=0, j=nodes.length; i<j; i++) {\r
127                                 var n = nodes[i];\r
128                                 if (!pList[n.parentTId]) {\r
129                                         var pn = n.getParentNode();\r
130                                         pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\r
131                                 }\r
132                                 view.showNode(setting, n, options);\r
133                         }\r
134                         for (var tId in pList) {\r
135                                 var children = pList[tId][setting.data.key.children];\r
136                                 view.setFirstNodeForShow(setting, children);\r
137                                 view.setLastNodeForShow(setting, children);\r
138                         }\r
139                 },\r
140                 hideNode: function(setting, node, options) {\r
141                         node.isHidden = true;\r
142                         node.isFirstNode = false;\r
143                         node.isLastNode = false;\r
144                         data.initHideForExCheck(setting, node);\r
145                         view.cancelPreSelectedNode(setting, node);\r
146                         $$(node, setting).hide();\r
147                 },\r
148                 hideNodes: function(setting, nodes, options) {\r
149                         if (!nodes || nodes.length == 0) {\r
150                                 return;\r
151                         }\r
152                         var pList = {}, i, j;\r
153                         for (i=0, j=nodes.length; i<j; i++) {\r
154                                 var n = nodes[i];\r
155                                 if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) {\r
156                                         var pn = n.getParentNode();\r
157                                         pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\r
158                                 }\r
159                                 view.hideNode(setting, n, options);\r
160                         }\r
161                         for (var tId in pList) {\r
162                                 var children = pList[tId][setting.data.key.children];\r
163                                 view.setFirstNodeForHide(setting, children);\r
164                                 view.setLastNodeForHide(setting, children);\r
165                         }\r
166                 },\r
167                 setFirstNode: function(setting, parentNode) {\r
168                         var childKey = setting.data.key.children, childLength = parentNode[childKey].length;\r
169                         if (childLength > 0 && !parentNode[childKey][0].isHidden) {\r
170                                 parentNode[childKey][0].isFirstNode = true;\r
171                         } else if (childLength > 0) {\r
172                                 view.setFirstNodeForHide(setting, parentNode[childKey]);\r
173                         }\r
174                 },\r
175                 setLastNode: function(setting, parentNode) {\r
176                         var childKey = setting.data.key.children, childLength = parentNode[childKey].length;\r
177                         if (childLength > 0 && !parentNode[childKey][0].isHidden) {\r
178                                 parentNode[childKey][childLength - 1].isLastNode = true;\r
179                         } else if (childLength > 0) {\r
180                                 view.setLastNodeForHide(setting, parentNode[childKey]);\r
181                         }\r
182                 },\r
183                 setFirstNodeForHide: function(setting, nodes) {\r
184                         var n,i,j;\r
185                         for (i=0, j=nodes.length; i<j; i++) {\r
186                                 n = nodes[i];\r
187                                 if (n.isFirstNode) {\r
188                                         break;\r
189                                 }\r
190                                 if (!n.isHidden && !n.isFirstNode) {\r
191                                         n.isFirstNode = true;\r
192                                         view.setNodeLineIcos(setting, n);\r
193                                         break;\r
194                                 } else {\r
195                                         n = null;\r
196                                 }\r
197                         }\r
198                         return n;\r
199                 },\r
200                 setFirstNodeForShow: function(setting, nodes) {\r
201                         var n,i,j, first, old;\r
202                         for(i=0, j=nodes.length; i<j; i++) {\r
203                                 n = nodes[i];\r
204                                 if (!first && !n.isHidden && n.isFirstNode) {\r
205                                         first = n;\r
206                                         break;\r
207                                 } else if (!first && !n.isHidden && !n.isFirstNode) {\r
208                                         n.isFirstNode = true;\r
209                                         first = n;\r
210                                         view.setNodeLineIcos(setting, n);\r
211                                 } else if (first && n.isFirstNode) {\r
212                                         n.isFirstNode = false;\r
213                                         old = n;\r
214                                         view.setNodeLineIcos(setting, n);\r
215                                         break;\r
216                                 } else {\r
217                                         n = null;\r
218                                 }\r
219                         }\r
220                         return {"new":first, "old":old};\r
221                 },\r
222                 setLastNodeForHide: function(setting, nodes) {\r
223                         var n,i;\r
224                         for (i=nodes.length-1; i>=0; i--) {\r
225                                 n = nodes[i];\r
226                                 if (n.isLastNode) {\r
227                                         break;\r
228                                 }\r
229                                 if (!n.isHidden && !n.isLastNode) {\r
230                                         n.isLastNode = true;\r
231                                         view.setNodeLineIcos(setting, n);\r
232                                         break;\r
233                                 } else {\r
234                                         n = null;\r
235                                 }\r
236                         }\r
237                         return n;\r
238                 },\r
239                 setLastNodeForShow: function(setting, nodes) {\r
240                         var n,i,j, last, old;\r
241                         for (i=nodes.length-1; i>=0; i--) {\r
242                                 n = nodes[i];\r
243                                 if (!last && !n.isHidden && n.isLastNode) {\r
244                                         last = n;\r
245                                         break;\r
246                                 } else if (!last && !n.isHidden && !n.isLastNode) {\r
247                                         n.isLastNode = true;\r
248                                         last = n;\r
249                                         view.setNodeLineIcos(setting, n);\r
250                                 } else if (last && n.isLastNode) {\r
251                                         n.isLastNode = false;\r
252                                         old = n;\r
253                                         view.setNodeLineIcos(setting, n);\r
254                                         break;\r
255                                 } else {\r
256                                         n = null;\r
257                                 }\r
258                         }\r
259                         return {"new":last, "old":old};\r
260                 }\r
261         },\r
262 \r
263         _z = {\r
264                 view: _view,\r
265                 data: _data\r
266         };\r
267         $.extend(true, $.fn.zTree._z, _z);\r
268 \r
269         var zt = $.fn.zTree,\r
270         tools = zt._z.tools,\r
271         consts = zt.consts,\r
272         view = zt._z.view,\r
273         data = zt._z.data,\r
274         event = zt._z.event,\r
275         $$ = tools.$;\r
276 \r
277         data.addInitNode(_initNode);\r
278         data.addBeforeA(_beforeA);\r
279         data.addZTreeTools(_zTreeTools);\r
280 \r
281 //      Override method in core\r
282         var _dInitNode = data.initNode;\r
283         data.initNode = function(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) {\r
284                 var tmpPNode = (parentNode) ? parentNode: data.getRoot(setting),\r
285                         children = tmpPNode[setting.data.key.children];\r
286                 data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children);\r
287                 data.tmpHideLastNode = view.setLastNodeForHide(setting, children);\r
288                 view.setNodeLineIcos(setting, data.tmpHideFirstNode);\r
289                 view.setNodeLineIcos(setting, data.tmpHideLastNode);\r
290                 isFirstNode = (data.tmpHideFirstNode === node);\r
291                 isLastNode = (data.tmpHideLastNode === node);\r
292                 if (_dInitNode) _dInitNode.apply(data, arguments);\r
293                 if (isLastNode) {\r
294                         view.clearOldLastNode(setting, node);\r
295                 }\r
296         };\r
297 \r
298         var _makeChkFlag = data.makeChkFlag;\r
299         if (!!_makeChkFlag) {\r
300                 data.makeChkFlag = function(setting, node) {\r
301                         if (!!node && !!node.isHidden) {\r
302                                 return;\r
303                         }\r
304                         _makeChkFlag.apply(data, arguments);\r
305                 }\r
306         }\r
307 \r
308         var _getTreeCheckedNodes = data.getTreeCheckedNodes;\r
309         if (!!_getTreeCheckedNodes) {\r
310                 data.getTreeCheckedNodes = function(setting, nodes, checked, results) {\r
311                         if (!!nodes && nodes.length > 0) {\r
312                                 var p = nodes[0].getParentNode();\r
313                                 if (!!p && !!p.isHidden) {\r
314                                         return [];\r
315                                 }\r
316                         }\r
317                         return _getTreeCheckedNodes.apply(data, arguments);\r
318                 }\r
319         }\r
320 \r
321         var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;\r
322         if (!!_getTreeChangeCheckedNodes) {\r
323                 data.getTreeChangeCheckedNodes = function(setting, nodes, results) {\r
324                         if (!!nodes && nodes.length > 0) {\r
325                                 var p = nodes[0].getParentNode();\r
326                                 if (!!p && !!p.isHidden) {\r
327                                         return [];\r
328                                 }\r
329                         }\r
330                         return _getTreeChangeCheckedNodes.apply(data, arguments);\r
331                 }\r
332         }\r
333 \r
334         var _expandCollapseSonNode = view.expandCollapseSonNode;\r
335         if (!!_expandCollapseSonNode) {\r
336                 view.expandCollapseSonNode = function(setting, node, expandFlag, animateFlag, callback) {\r
337                         if (!!node && !!node.isHidden) {\r
338                                 return;\r
339                         }\r
340                         _expandCollapseSonNode.apply(view, arguments);\r
341                 }\r
342         }\r
343 \r
344         var _setSonNodeCheckBox = view.setSonNodeCheckBox;\r
345         if (!!_setSonNodeCheckBox) {\r
346                 view.setSonNodeCheckBox = function(setting, node, value, srcNode) {\r
347                         if (!!node && !!node.isHidden) {\r
348                                 return;\r
349                         }\r
350                         _setSonNodeCheckBox.apply(view, arguments);\r
351                 }\r
352         }\r
353 \r
354         var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;\r
355         if (!!_repairParentChkClassWithSelf) {\r
356                 view.repairParentChkClassWithSelf = function(setting, node) {\r
357                         if (!!node && !!node.isHidden) {\r
358                                 return;\r
359                         }\r
360                         _repairParentChkClassWithSelf.apply(view, arguments);\r
361                 }\r
362         }\r
363 })(jQuery);