CLIENT GUI Framework
[vnfsdk/refrepo.git] / portal-common / src / main / webapp / common / thirdparty / zTree / js / jquery.ztree.excheck.js
1 /*\r
2  * JQuery zTree excheck 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 consts of excheck\r
15         var _consts = {\r
16                 event: {\r
17                         CHECK: "ztree_check"\r
18                 },\r
19                 id: {\r
20                         CHECK: "_check"\r
21                 },\r
22                 checkbox: {\r
23                         STYLE: "checkbox",\r
24                         DEFAULT: "chk",\r
25                         DISABLED: "disable",\r
26                         FALSE: "false",\r
27                         TRUE: "true",\r
28                         FULL: "full",\r
29                         PART: "part",\r
30                         FOCUS: "focus"\r
31                 },\r
32                 radio: {\r
33                         STYLE: "radio",\r
34                         TYPE_ALL: "all",\r
35                         TYPE_LEVEL: "level"\r
36                 }\r
37         },\r
38         //default setting of excheck\r
39         _setting = {\r
40                 check: {\r
41                         enable: false,\r
42                         autoCheckTrigger: false,\r
43                         chkStyle: _consts.checkbox.STYLE,\r
44                         nocheckInherit: false,\r
45                         chkDisabledInherit: false,\r
46                         radioType: _consts.radio.TYPE_LEVEL,\r
47                         chkboxType: {\r
48                                 "Y": "ps",\r
49                                 "N": "ps"\r
50                         }\r
51                 },\r
52                 data: {\r
53                         key: {\r
54                                 checked: "checked"\r
55                         }\r
56                 },\r
57                 callback: {\r
58                         beforeCheck:null,\r
59                         onCheck:null\r
60                 }\r
61         },\r
62         //default root of excheck\r
63         _initRoot = function (setting) {\r
64                 var r = data.getRoot(setting);\r
65                 r.radioCheckedList = [];\r
66         },\r
67         //default cache of excheck\r
68         _initCache = function(treeId) {},\r
69         //default bind event of excheck\r
70         _bindEvent = function(setting) {\r
71                 var o = setting.treeObj,\r
72                 c = consts.event;\r
73                 o.bind(c.CHECK, function (event, srcEvent, treeId, node) {\r
74                         event.srcEvent = srcEvent;\r
75                         tools.apply(setting.callback.onCheck, [event, treeId, node]);\r
76                 });\r
77         },\r
78         _unbindEvent = function(setting) {\r
79                 var o = setting.treeObj,\r
80                 c = consts.event;\r
81                 o.unbind(c.CHECK);\r
82         },\r
83         //default event proxy of excheck\r
84         _eventProxy = function(e) {\r
85                 var target = e.target,\r
86                 setting = data.getSetting(e.data.treeId),\r
87                 tId = "", node = null,\r
88                 nodeEventType = "", treeEventType = "",\r
89                 nodeEventCallback = null, treeEventCallback = null;\r
90 \r
91                 if (tools.eqs(e.type, "mouseover")) {\r
92                         if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {\r
93                                 tId = tools.getNodeMainDom(target).id;\r
94                                 nodeEventType = "mouseoverCheck";\r
95                         }\r
96                 } else if (tools.eqs(e.type, "mouseout")) {\r
97                         if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {\r
98                                 tId = tools.getNodeMainDom(target).id;\r
99                                 nodeEventType = "mouseoutCheck";\r
100                         }\r
101                 } else if (tools.eqs(e.type, "click")) {\r
102                         if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) {\r
103                                 tId = tools.getNodeMainDom(target).id;\r
104                                 nodeEventType = "checkNode";\r
105                         }\r
106                 }\r
107                 if (tId.length>0) {\r
108                         node = data.getNodeCache(setting, tId);\r
109                         switch (nodeEventType) {\r
110                                 case "checkNode" :\r
111                                         nodeEventCallback = _handler.onCheckNode;\r
112                                         break;\r
113                                 case "mouseoverCheck" :\r
114                                         nodeEventCallback = _handler.onMouseoverCheck;\r
115                                         break;\r
116                                 case "mouseoutCheck" :\r
117                                         nodeEventCallback = _handler.onMouseoutCheck;\r
118                                         break;\r
119                         }\r
120                 }\r
121                 var proxyResult = {\r
122                         stop: nodeEventType === "checkNode",\r
123                         node: node,\r
124                         nodeEventType: nodeEventType,\r
125                         nodeEventCallback: nodeEventCallback,\r
126                         treeEventType: treeEventType,\r
127                         treeEventCallback: treeEventCallback\r
128                 };\r
129                 return proxyResult\r
130         },\r
131         //default init node of excheck\r
132         _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\r
133                 if (!n) return;\r
134                 var checkedKey = setting.data.key.checked;\r
135                 if (typeof n[checkedKey] == "string") n[checkedKey] = tools.eqs(n[checkedKey], "true");\r
136                 n[checkedKey] = !!n[checkedKey];\r
137                 n.checkedOld = n[checkedKey];\r
138                 if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true");\r
139                 n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);\r
140                 if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true");\r
141                 n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);\r
142                 if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true");\r
143                 n.halfCheck = !!n.halfCheck;\r
144                 n.check_Child_State = -1;\r
145                 n.check_Focus = false;\r
146                 n.getCheckStatus = function() {return data.getCheckStatus(setting, n);};\r
147 \r
148                 if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && n[checkedKey] ) {\r
149                         var r = data.getRoot(setting);\r
150                         r.radioCheckedList.push(n);\r
151                 }\r
152         },\r
153         //add dom for check\r
154         _beforeA = function(setting, node, html) {\r
155                 var checkedKey = setting.data.key.checked;\r
156                 if (setting.check.enable) {\r
157                         data.makeChkFlag(setting, node);\r
158                         html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true?" style='display:none;'":""),"></span>");\r
159                 }\r
160         },\r
161         //update zTreeObj, add method of check\r
162         _zTreeTools = function(setting, zTreeTools) {\r
163                 zTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {\r
164                         var checkedKey = this.setting.data.key.checked;\r
165                         if (node.chkDisabled === true) return;\r
166                         if (checked !== true && checked !== false) {\r
167                                 checked = !node[checkedKey];\r
168                         }\r
169                         callbackFlag = !!callbackFlag;\r
170 \r
171                         if (node[checkedKey] === checked && !checkTypeFlag) {\r
172                                 return;\r
173                         } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {\r
174                                 return;\r
175                         }\r
176                         if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {\r
177                                 node[checkedKey] = checked;\r
178                                 var checkObj = $$(node, consts.id.CHECK, this.setting);\r
179                                 if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\r
180                                 view.setChkClass(this.setting, checkObj, node);\r
181                                 view.repairParentChkClassWithSelf(this.setting, node);\r
182                                 if (callbackFlag) {\r
183                                         this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);\r
184                                 }\r
185                         }\r
186                 }\r
187 \r
188                 zTreeTools.checkAllNodes = function(checked) {\r
189                         view.repairAllChk(this.setting, !!checked);\r
190                 }\r
191 \r
192                 zTreeTools.getCheckedNodes = function(checked) {\r
193                         var childKey = this.setting.data.key.children;\r
194                         checked = (checked !== false);\r
195                         return data.getTreeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey], checked);\r
196                 }\r
197 \r
198                 zTreeTools.getChangeCheckedNodes = function() {\r
199                         var childKey = this.setting.data.key.children;\r
200                         return data.getTreeChangeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey]);\r
201                 }\r
202 \r
203                 zTreeTools.setChkDisabled = function(node, disabled, inheritParent, inheritChildren) {\r
204                         disabled = !!disabled;\r
205                         inheritParent = !!inheritParent;\r
206                         inheritChildren = !!inheritChildren;\r
207                         view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);\r
208                         view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);\r
209                 }\r
210 \r
211                 var _updateNode = zTreeTools.updateNode;\r
212                 zTreeTools.updateNode = function(node, checkTypeFlag) {\r
213                         if (_updateNode) _updateNode.apply(zTreeTools, arguments);\r
214                         if (!node || !this.setting.check.enable) return;\r
215                         var nObj = $$(node, this.setting);\r
216                         if (nObj.get(0) && tools.uCanDo(this.setting)) {\r
217                                 var checkObj = $$(node, consts.id.CHECK, this.setting);\r
218                                 if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\r
219                                 view.setChkClass(this.setting, checkObj, node);\r
220                                 view.repairParentChkClassWithSelf(this.setting, node);\r
221                         }\r
222                 }\r
223         },\r
224         //method of operate data\r
225         _data = {\r
226                 getRadioCheckedList: function(setting) {\r
227                         var checkedList = data.getRoot(setting).radioCheckedList;\r
228                         for (var i=0, j=checkedList.length; i<j; i++) {\r
229                                 if(!data.getNodeCache(setting, checkedList[i].tId)) {\r
230                                         checkedList.splice(i, 1);\r
231                                         i--; j--;\r
232                                 }\r
233                         }\r
234                         return checkedList;\r
235                 },\r
236                 getCheckStatus: function(setting, node) {\r
237                         if (!setting.check.enable || node.nocheck || node.chkDisabled) return null;\r
238                         var checkedKey = setting.data.key.checked,\r
239                         r = {\r
240                                 checked: node[checkedKey],\r
241                                 half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (node[checkedKey] ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))\r
242                         };\r
243                         return r;\r
244                 },\r
245                 getTreeCheckedNodes: function(setting, nodes, checked, results) {\r
246                         if (!nodes) return [];\r
247                         var childKey = setting.data.key.children,\r
248                         checkedKey = setting.data.key.checked,\r
249                         onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);\r
250                         results = !results ? [] : results;\r
251                         for (var i = 0, l = nodes.length; i < l; i++) {\r
252                                 if (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] == checked) {\r
253                                         results.push(nodes[i]);\r
254                                         if(onlyOne) {\r
255                                                 break;\r
256                                         }\r
257                                 }\r
258                                 data.getTreeCheckedNodes(setting, nodes[i][childKey], checked, results);\r
259                                 if(onlyOne && results.length > 0) {\r
260                                         break;\r
261                                 }\r
262                         }\r
263                         return results;\r
264                 },\r
265                 getTreeChangeCheckedNodes: function(setting, nodes, results) {\r
266                         if (!nodes) return [];\r
267                         var childKey = setting.data.key.children,\r
268                         checkedKey = setting.data.key.checked;\r
269                         results = !results ? [] : results;\r
270                         for (var i = 0, l = nodes.length; i < l; i++) {\r
271                                 if (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] != nodes[i].checkedOld) {\r
272                                         results.push(nodes[i]);\r
273                                 }\r
274                                 data.getTreeChangeCheckedNodes(setting, nodes[i][childKey], results);\r
275                         }\r
276                         return results;\r
277                 },\r
278                 makeChkFlag: function(setting, node) {\r
279                         if (!node) return;\r
280                         var childKey = setting.data.key.children,\r
281                         checkedKey = setting.data.key.checked,\r
282                         chkFlag = -1;\r
283                         if (node[childKey]) {\r
284                                 for (var i = 0, l = node[childKey].length; i < l; i++) {\r
285                                         var cNode = node[childKey][i];\r
286                                         var tmp = -1;\r
287                                         if (setting.check.chkStyle == consts.radio.STYLE) {\r
288                                                 if (cNode.nocheck === true || cNode.chkDisabled === true) {\r
289                                                         tmp = cNode.check_Child_State;\r
290                                                 } else if (cNode.halfCheck === true) {\r
291                                                         tmp = 2;\r
292                                                 } else if (cNode[checkedKey]) {\r
293                                                         tmp = 2;\r
294                                                 } else {\r
295                                                         tmp = cNode.check_Child_State > 0 ? 2:0;\r
296                                                 }\r
297                                                 if (tmp == 2) {\r
298                                                         chkFlag = 2; break;\r
299                                                 } else if (tmp == 0){\r
300                                                         chkFlag = 0;\r
301                                                 }\r
302                                         } else if (setting.check.chkStyle == consts.checkbox.STYLE) {\r
303                                                 if (cNode.nocheck === true || cNode.chkDisabled === true) {\r
304                                                         tmp = cNode.check_Child_State;\r
305                                                 } else if (cNode.halfCheck === true) {\r
306                                                         tmp = 1;\r
307                                                 } else if (cNode[checkedKey] ) {\r
308                                                         tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;\r
309                                                 } else {\r
310                                                         tmp = (cNode.check_Child_State > 0) ? 1 : 0;\r
311                                                 }\r
312                                                 if (tmp === 1) {\r
313                                                         chkFlag = 1; break;\r
314                                                 } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {\r
315                                                         chkFlag = 1; break;\r
316                                                 } else if (chkFlag === 2 && tmp > -1 && tmp < 2) {\r
317                                                         chkFlag = 1; break;\r
318                                                 } else if (tmp > -1) {\r
319                                                         chkFlag = tmp;\r
320                                                 }\r
321                                         }\r
322                                 }\r
323                         }\r
324                         node.check_Child_State = chkFlag;\r
325                 }\r
326         },\r
327         //method of event proxy\r
328         _event = {\r
329 \r
330         },\r
331         //method of event handler\r
332         _handler = {\r
333                 onCheckNode: function (event, node) {\r
334                         if (node.chkDisabled === true) return false;\r
335                         var setting = data.getSetting(event.data.treeId),\r
336                         checkedKey = setting.data.key.checked;\r
337                         if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;\r
338                         node[checkedKey] = !node[checkedKey];\r
339                         view.checkNodeRelation(setting, node);\r
340                         var checkObj = $$(node, consts.id.CHECK, setting);\r
341                         view.setChkClass(setting, checkObj, node);\r
342                         view.repairParentChkClassWithSelf(setting, node);\r
343                         setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);\r
344                         return true;\r
345                 },\r
346                 onMouseoverCheck: function(event, node) {\r
347                         if (node.chkDisabled === true) return false;\r
348                         var setting = data.getSetting(event.data.treeId),\r
349                         checkObj = $$(node, consts.id.CHECK, setting);\r
350                         node.check_Focus = true;\r
351                         view.setChkClass(setting, checkObj, node);\r
352                         return true;\r
353                 },\r
354                 onMouseoutCheck: function(event, node) {\r
355                         if (node.chkDisabled === true) return false;\r
356                         var setting = data.getSetting(event.data.treeId),\r
357                         checkObj = $$(node, consts.id.CHECK, setting);\r
358                         node.check_Focus = false;\r
359                         view.setChkClass(setting, checkObj, node);\r
360                         return true;\r
361                 }\r
362         },\r
363         //method of tools for zTree\r
364         _tools = {\r
365 \r
366         },\r
367         //method of operate ztree dom\r
368         _view = {\r
369                 checkNodeRelation: function(setting, node) {\r
370                         var pNode, i, l,\r
371                         childKey = setting.data.key.children,\r
372                         checkedKey = setting.data.key.checked,\r
373                         r = consts.radio;\r
374                         if (setting.check.chkStyle == r.STYLE) {\r
375                                 var checkedList = data.getRadioCheckedList(setting);\r
376                                 if (node[checkedKey]) {\r
377                                         if (setting.check.radioType == r.TYPE_ALL) {\r
378                                                 for (i = checkedList.length-1; i >= 0; i--) {\r
379                                                         pNode = checkedList[i];\r
380                                                         if (pNode[checkedKey] && pNode != node) {\r
381                                                                 pNode[checkedKey] = false;\r
382                                                                 checkedList.splice(i, 1);\r
383 \r
384                                                                 view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\r
385                                                                 if (pNode.parentTId != node.parentTId) {\r
386                                                                         view.repairParentChkClassWithSelf(setting, pNode);\r
387                                                                 }\r
388                                                         }\r
389                                                 }\r
390                                                 checkedList.push(node);\r
391                                         } else {\r
392                                                 var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\r
393                                                 for (i = 0, l = parentNode[childKey].length; i < l; i++) {\r
394                                                         pNode = parentNode[childKey][i];\r
395                                                         if (pNode[checkedKey] && pNode != node) {\r
396                                                                 pNode[checkedKey] = false;\r
397                                                                 view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\r
398                                                         }\r
399                                                 }\r
400                                         }\r
401                                 } else if (setting.check.radioType == r.TYPE_ALL) {\r
402                                         for (i = 0, l = checkedList.length; i < l; i++) {\r
403                                                 if (node == checkedList[i]) {\r
404                                                         checkedList.splice(i, 1);\r
405                                                         break;\r
406                                                 }\r
407                                         }\r
408                                 }\r
409 \r
410                         } else {\r
411                                 if (node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.Y.indexOf("s") > -1)) {\r
412                                         view.setSonNodeCheckBox(setting, node, true);\r
413                                 }\r
414                                 if (!node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.N.indexOf("s") > -1)) {\r
415                                         view.setSonNodeCheckBox(setting, node, false);\r
416                                 }\r
417                                 if (node[checkedKey] && setting.check.chkboxType.Y.indexOf("p") > -1) {\r
418                                         view.setParentNodeCheckBox(setting, node, true);\r
419                                 }\r
420                                 if (!node[checkedKey] && setting.check.chkboxType.N.indexOf("p") > -1) {\r
421                                         view.setParentNodeCheckBox(setting, node, false);\r
422                                 }\r
423                         }\r
424                 },\r
425                 makeChkClass: function(setting, node) {\r
426                         var checkedKey = setting.data.key.checked,\r
427                         c = consts.checkbox, r = consts.radio,\r
428                         fullStyle = "";\r
429                         if (node.chkDisabled === true) {\r
430                                 fullStyle = c.DISABLED;\r
431                         } else if (node.halfCheck) {\r
432                                 fullStyle = c.PART;\r
433                         } else if (setting.check.chkStyle == r.STYLE) {\r
434                                 fullStyle = (node.check_Child_State < 1)? c.FULL:c.PART;\r
435                         } else {\r
436                                 fullStyle = node[checkedKey] ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL:c.PART) : ((node.check_Child_State < 1)? c.FULL:c.PART);\r
437                         }\r
438                         var chkName = setting.check.chkStyle + "_" + (node[checkedKey] ? c.TRUE : c.FALSE) + "_" + fullStyle;\r
439                         chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName;\r
440                         return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName;\r
441                 },\r
442                 repairAllChk: function(setting, checked) {\r
443                         if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {\r
444                                 var checkedKey = setting.data.key.checked,\r
445                                 childKey = setting.data.key.children,\r
446                                 root = data.getRoot(setting);\r
447                                 for (var i = 0, l = root[childKey].length; i<l ; i++) {\r
448                                         var node = root[childKey][i];\r
449                                         if (node.nocheck !== true && node.chkDisabled !== true) {\r
450                                                 node[checkedKey] = checked;\r
451                                         }\r
452                                         view.setSonNodeCheckBox(setting, node, checked);\r
453                                 }\r
454                         }\r
455                 },\r
456                 repairChkClass: function(setting, node) {\r
457                         if (!node) return;\r
458                         data.makeChkFlag(setting, node);\r
459                         if (node.nocheck !== true) {\r
460                                 var checkObj = $$(node, consts.id.CHECK, setting);\r
461                                 view.setChkClass(setting, checkObj, node);\r
462                         }\r
463                 },\r
464                 repairParentChkClass: function(setting, node) {\r
465                         if (!node || !node.parentTId) return;\r
466                         var pNode = node.getParentNode();\r
467                         view.repairChkClass(setting, pNode);\r
468                         view.repairParentChkClass(setting, pNode);\r
469                 },\r
470                 repairParentChkClassWithSelf: function(setting, node) {\r
471                         if (!node) return;\r
472                         var childKey = setting.data.key.children;\r
473                         if (node[childKey] && node[childKey].length > 0) {\r
474                                 view.repairParentChkClass(setting, node[childKey][0]);\r
475                         } else {\r
476                                 view.repairParentChkClass(setting, node);\r
477                         }\r
478                 },\r
479                 repairSonChkDisabled: function(setting, node, chkDisabled, inherit) {\r
480                         if (!node) return;\r
481                         var childKey = setting.data.key.children;\r
482                         if (node.chkDisabled != chkDisabled) {\r
483                                 node.chkDisabled = chkDisabled;\r
484                         }\r
485                         view.repairChkClass(setting, node);\r
486                         if (node[childKey] && inherit) {\r
487                                 for (var i = 0, l = node[childKey].length; i < l; i++) {\r
488                                         var sNode = node[childKey][i];\r
489                                         view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);\r
490                                 }\r
491                         }\r
492                 },\r
493                 repairParentChkDisabled: function(setting, node, chkDisabled, inherit) {\r
494                         if (!node) return;\r
495                         if (node.chkDisabled != chkDisabled && inherit) {\r
496                                 node.chkDisabled = chkDisabled;\r
497                         }\r
498                         view.repairChkClass(setting, node);\r
499                         view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);\r
500                 },\r
501                 setChkClass: function(setting, obj, node) {\r
502                         if (!obj) return;\r
503                         if (node.nocheck === true) {\r
504                                 obj.hide();\r
505                         } else {\r
506                                 obj.show();\r
507                         }\r
508                         obj.removeClass();\r
509                         obj.addClass(view.makeChkClass(setting, node));\r
510                 },\r
511                 setParentNodeCheckBox: function(setting, node, value, srcNode) {\r
512                         var childKey = setting.data.key.children,\r
513                         checkedKey = setting.data.key.checked,\r
514                         checkObj = $$(node, consts.id.CHECK, setting);\r
515                         if (!srcNode) srcNode = node;\r
516                         data.makeChkFlag(setting, node);\r
517                         if (node.nocheck !== true && node.chkDisabled !== true) {\r
518                                 node[checkedKey] = value;\r
519                                 view.setChkClass(setting, checkObj, node);\r
520                                 if (setting.check.autoCheckTrigger && node != srcNode) {\r
521                                         setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\r
522                                 }\r
523                         }\r
524                         if (node.parentTId) {\r
525                                 var pSign = true;\r
526                                 if (!value) {\r
527                                         var pNodes = node.getParentNode()[childKey];\r
528                                         for (var i = 0, l = pNodes.length; i < l; i++) {\r
529                                                 if ((pNodes[i].nocheck !== true && pNodes[i].chkDisabled !== true && pNodes[i][checkedKey])\r
530                                                 || ((pNodes[i].nocheck === true || pNodes[i].chkDisabled === true) && pNodes[i].check_Child_State > 0)) {\r
531                                                         pSign = false;\r
532                                                         break;\r
533                                                 }\r
534                                         }\r
535                                 }\r
536                                 if (pSign) {\r
537                                         view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);\r
538                                 }\r
539                         }\r
540                 },\r
541                 setSonNodeCheckBox: function(setting, node, value, srcNode) {\r
542                         if (!node) return;\r
543                         var childKey = setting.data.key.children,\r
544                         checkedKey = setting.data.key.checked,\r
545                         checkObj = $$(node, consts.id.CHECK, setting);\r
546                         if (!srcNode) srcNode = node;\r
547 \r
548                         var hasDisable = false;\r
549                         if (node[childKey]) {\r
550                                 for (var i = 0, l = node[childKey].length; i < l && node.chkDisabled !== true; i++) {\r
551                                         var sNode = node[childKey][i];\r
552                                         view.setSonNodeCheckBox(setting, sNode, value, srcNode);\r
553                                         if (sNode.chkDisabled === true) hasDisable = true;\r
554                                 }\r
555                         }\r
556 \r
557                         if (node != data.getRoot(setting) && node.chkDisabled !== true) {\r
558                                 if (hasDisable && node.nocheck !== true) {\r
559                                         data.makeChkFlag(setting, node);\r
560                                 }\r
561                                 if (node.nocheck !== true && node.chkDisabled !== true) {\r
562                                         node[checkedKey] = value;\r
563                                         if (!hasDisable) node.check_Child_State = (node[childKey] && node[childKey].length > 0) ? (value ? 2 : 0) : -1;\r
564                                 } else {\r
565                                         node.check_Child_State = -1;\r
566                                 }\r
567                                 view.setChkClass(setting, checkObj, node);\r
568                                 if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {\r
569                                         setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\r
570                                 }\r
571                         }\r
572 \r
573                 }\r
574         },\r
575 \r
576         _z = {\r
577                 tools: _tools,\r
578                 view: _view,\r
579                 event: _event,\r
580                 data: _data\r
581         };\r
582         $.extend(true, $.fn.zTree.consts, _consts);\r
583         $.extend(true, $.fn.zTree._z, _z);\r
584 \r
585         var zt = $.fn.zTree,\r
586         tools = zt._z.tools,\r
587         consts = zt.consts,\r
588         view = zt._z.view,\r
589         data = zt._z.data,\r
590         event = zt._z.event,\r
591         $$ = tools.$;\r
592 \r
593         data.exSetting(_setting);\r
594         data.addInitBind(_bindEvent);\r
595         data.addInitUnBind(_unbindEvent);\r
596         data.addInitCache(_initCache);\r
597         data.addInitNode(_initNode);\r
598         data.addInitProxy(_eventProxy, true);\r
599         data.addInitRoot(_initRoot);\r
600         data.addBeforeA(_beforeA);\r
601         data.addZTreeTools(_zTreeTools);\r
602 \r
603         var _createNodes = view.createNodes;\r
604         view.createNodes = function(setting, level, nodes, parentNode) {\r
605                 if (_createNodes) _createNodes.apply(view, arguments);\r
606                 if (!nodes) return;\r
607                 view.repairParentChkClassWithSelf(setting, parentNode);\r
608         }\r
609         var _removeNode = view.removeNode;\r
610         view.removeNode = function(setting, node) {\r
611                 var parentNode = node.getParentNode();\r
612                 if (_removeNode) _removeNode.apply(view, arguments);\r
613                 if (!node || !parentNode) return;\r
614                 view.repairChkClass(setting, parentNode);\r
615                 view.repairParentChkClass(setting, parentNode);\r
616         }\r
617 \r
618         var _appendNodes = view.appendNodes;\r
619         view.appendNodes = function(setting, level, nodes, parentNode, initFlag, openFlag) {\r
620                 var html = "";\r
621                 if (_appendNodes) {\r
622                         html = _appendNodes.apply(view, arguments);\r
623                 }\r
624                 if (parentNode) {\r
625                         data.makeChkFlag(setting, parentNode);\r
626                 }\r
627                 return html;\r
628         }\r
629 })(jQuery);