| /* | 
|  * JQuery zTree exHideNodes v3.5.24 | 
|  * http://zTree.me/ | 
|  * | 
|  * Copyright (c) 2010 Hunter.z | 
|  * | 
|  * Licensed same as jquery - MIT License | 
|  * http://www.opensource.org/licenses/mit-license.php | 
|  * | 
|  * email: hunter.z@263.net | 
|  * Date: 2016-06-06 | 
|  */ | 
| (function($){ | 
|     //default init node of exLib | 
|     var _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { | 
|         if (typeof n.isHidden == "string") n.isHidden = tools.eqs(n.isHidden, "true"); | 
|         n.isHidden = !!n.isHidden; | 
|         data.initHideForExCheck(setting, n); | 
|     }, | 
|     //add dom for check | 
|     _beforeA = function(setting, node, html) {}, | 
|     //update zTreeObj, add method of exLib | 
|     _zTreeTools = function(setting, zTreeTools) { | 
|         zTreeTools.showNodes = function(nodes, options) { | 
|             view.showNodes(setting, nodes, options); | 
|         } | 
|         zTreeTools.showNode = function(node, options) { | 
|             if (!node) { | 
|                 return; | 
|             } | 
|             view.showNodes(setting, [node], options); | 
|         } | 
|         zTreeTools.hideNodes = function(nodes, options) { | 
|             view.hideNodes(setting, nodes, options); | 
|         } | 
|         zTreeTools.hideNode = function(node, options) { | 
|             if (!node) { | 
|                 return; | 
|             } | 
|             view.hideNodes(setting, [node], options); | 
|         } | 
|   | 
|         var _checkNode = zTreeTools.checkNode; | 
|         if (_checkNode) { | 
|             zTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) { | 
|                 if (!!node && !!node.isHidden) { | 
|                     return; | 
|                 } | 
|                 _checkNode.apply(zTreeTools, arguments); | 
|             } | 
|         } | 
|     }, | 
|     //method of operate data | 
|     _data = { | 
|         initHideForExCheck: function(setting, n) { | 
|             if (n.isHidden && setting.check && setting.check.enable) { | 
|                 if(typeof n._nocheck == "undefined") { | 
|                     n._nocheck = !!n.nocheck | 
|                     n.nocheck = true; | 
|                 } | 
|                 n.check_Child_State = -1; | 
|                 if (view.repairParentChkClassWithSelf) { | 
|                     view.repairParentChkClassWithSelf(setting, n); | 
|                 } | 
|             } | 
|         }, | 
|         initShowForExCheck: function(setting, n) { | 
|             if (!n.isHidden && setting.check && setting.check.enable) { | 
|                 if(typeof n._nocheck != "undefined") { | 
|                     n.nocheck = n._nocheck; | 
|                     delete n._nocheck; | 
|                 } | 
|                 if (view.setChkClass) { | 
|                     var checkObj = $$(n, consts.id.CHECK, setting); | 
|                     view.setChkClass(setting, checkObj, n); | 
|                 } | 
|                 if (view.repairParentChkClassWithSelf) { | 
|                     view.repairParentChkClassWithSelf(setting, n); | 
|                 } | 
|             } | 
|         } | 
|     }, | 
|     //method of operate ztree dom | 
|     _view = { | 
|         clearOldFirstNode: function(setting, node) { | 
|             var n = node.getNextNode(); | 
|             while(!!n){ | 
|                 if (n.isFirstNode) { | 
|                     n.isFirstNode = false; | 
|                     view.setNodeLineIcos(setting, n); | 
|                     break; | 
|                 } | 
|                 if (n.isLastNode) { | 
|                     break; | 
|                 } | 
|                 n = n.getNextNode(); | 
|             } | 
|         }, | 
|         clearOldLastNode: function(setting, node, openFlag) { | 
|             var n = node.getPreNode(); | 
|             while(!!n){ | 
|                 if (n.isLastNode) { | 
|                     n.isLastNode = false; | 
|                     if (openFlag) { | 
|                         view.setNodeLineIcos(setting, n); | 
|                     } | 
|                     break; | 
|                 } | 
|                 if (n.isFirstNode) { | 
|                     break; | 
|                 } | 
|                 n = n.getPreNode(); | 
|             } | 
|         }, | 
|         makeDOMNodeMainBefore: function(html, setting, node) { | 
|             html.push("<li ", (node.isHidden ? "style='display:none;' " : ""), "id='", node.tId, "' class='", consts.className.LEVEL, node.level,"' tabindex='0' hidefocus='true' treenode>"); | 
|         }, | 
|         showNode: function(setting, node, options) { | 
|             node.isHidden = false; | 
|             data.initShowForExCheck(setting, node); | 
|             $$(node, setting).show(); | 
|         }, | 
|         showNodes: function(setting, nodes, options) { | 
|             if (!nodes || nodes.length == 0) { | 
|                 return; | 
|             } | 
|             var pList = {}, i, j; | 
|             for (i=0, j=nodes.length; i<j; i++) { | 
|                 var n = nodes[i]; | 
|                 if (!pList[n.parentTId]) { | 
|                     var pn = n.getParentNode(); | 
|                     pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode(); | 
|                 } | 
|                 view.showNode(setting, n, options); | 
|             } | 
|             for (var tId in pList) { | 
|                 var children = pList[tId][setting.data.key.children]; | 
|                 view.setFirstNodeForShow(setting, children); | 
|                 view.setLastNodeForShow(setting, children); | 
|             } | 
|         }, | 
|         hideNode: function(setting, node, options) { | 
|             node.isHidden = true; | 
|             node.isFirstNode = false; | 
|             node.isLastNode = false; | 
|             data.initHideForExCheck(setting, node); | 
|             view.cancelPreSelectedNode(setting, node); | 
|             $$(node, setting).hide(); | 
|         }, | 
|         hideNodes: function(setting, nodes, options) { | 
|             if (!nodes || nodes.length == 0) { | 
|                 return; | 
|             } | 
|             var pList = {}, i, j; | 
|             for (i=0, j=nodes.length; i<j; i++) { | 
|                 var n = nodes[i]; | 
|                 if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) { | 
|                     var pn = n.getParentNode(); | 
|                     pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode(); | 
|                 } | 
|                 view.hideNode(setting, n, options); | 
|             } | 
|             for (var tId in pList) { | 
|                 var children = pList[tId][setting.data.key.children]; | 
|                 view.setFirstNodeForHide(setting, children); | 
|                 view.setLastNodeForHide(setting, children); | 
|             } | 
|         }, | 
|         setFirstNode: function(setting, parentNode) { | 
|             var childKey = setting.data.key.children, childLength = parentNode[childKey].length; | 
|             if (childLength > 0 && !parentNode[childKey][0].isHidden) { | 
|                 parentNode[childKey][0].isFirstNode = true; | 
|             } else if (childLength > 0) { | 
|                 view.setFirstNodeForHide(setting, parentNode[childKey]); | 
|             } | 
|         }, | 
|         setLastNode: function(setting, parentNode) { | 
|             var childKey = setting.data.key.children, childLength = parentNode[childKey].length; | 
|             if (childLength > 0 && !parentNode[childKey][0].isHidden) { | 
|                 parentNode[childKey][childLength - 1].isLastNode = true; | 
|             } else if (childLength > 0) { | 
|                 view.setLastNodeForHide(setting, parentNode[childKey]); | 
|             } | 
|         }, | 
|         setFirstNodeForHide: function(setting, nodes) { | 
|             var n,i,j; | 
|             for (i=0, j=nodes.length; i<j; i++) { | 
|                 n = nodes[i]; | 
|                 if (n.isFirstNode) { | 
|                     break; | 
|                 } | 
|                 if (!n.isHidden && !n.isFirstNode) { | 
|                     n.isFirstNode = true; | 
|                     view.setNodeLineIcos(setting, n); | 
|                     break; | 
|                 } else { | 
|                     n = null; | 
|                 } | 
|             } | 
|             return n; | 
|         }, | 
|         setFirstNodeForShow: function(setting, nodes) { | 
|             var n,i,j, first, old; | 
|             for(i=0, j=nodes.length; i<j; i++) { | 
|                 n = nodes[i]; | 
|                 if (!first && !n.isHidden && n.isFirstNode) { | 
|                     first = n; | 
|                     break; | 
|                 } else if (!first && !n.isHidden && !n.isFirstNode) { | 
|                     n.isFirstNode = true; | 
|                     first = n; | 
|                     view.setNodeLineIcos(setting, n); | 
|                 } else if (first && n.isFirstNode) { | 
|                     n.isFirstNode = false; | 
|                     old = n; | 
|                     view.setNodeLineIcos(setting, n); | 
|                     break; | 
|                 } else { | 
|                     n = null; | 
|                 } | 
|             } | 
|             return {"new":first, "old":old}; | 
|         }, | 
|         setLastNodeForHide: function(setting, nodes) { | 
|             var n,i; | 
|             for (i=nodes.length-1; i>=0; i--) { | 
|                 n = nodes[i]; | 
|                 if (n.isLastNode) { | 
|                     break; | 
|                 } | 
|                 if (!n.isHidden && !n.isLastNode) { | 
|                     n.isLastNode = true; | 
|                     view.setNodeLineIcos(setting, n); | 
|                     break; | 
|                 } else { | 
|                     n = null; | 
|                 } | 
|             } | 
|             return n; | 
|         }, | 
|         setLastNodeForShow: function(setting, nodes) { | 
|             var n,i,j, last, old; | 
|             for (i=nodes.length-1; i>=0; i--) { | 
|                 n = nodes[i]; | 
|                 if (!last && !n.isHidden && n.isLastNode) { | 
|                     last = n; | 
|                     break; | 
|                 } else if (!last && !n.isHidden && !n.isLastNode) { | 
|                     n.isLastNode = true; | 
|                     last = n; | 
|                     view.setNodeLineIcos(setting, n); | 
|                 } else if (last && n.isLastNode) { | 
|                     n.isLastNode = false; | 
|                     old = n; | 
|                     view.setNodeLineIcos(setting, n); | 
|                     break; | 
|                 } else { | 
|                     n = null; | 
|                 } | 
|             } | 
|             return {"new":last, "old":old}; | 
|         } | 
|     }, | 
|   | 
|     _z = { | 
|         view: _view, | 
|         data: _data | 
|     }; | 
|     $.extend(true, $.fn.zTree._z, _z); | 
|   | 
|     var zt = $.fn.zTree, | 
|     tools = zt._z.tools, | 
|     consts = zt.consts, | 
|     view = zt._z.view, | 
|     data = zt._z.data, | 
|     event = zt._z.event, | 
|     $$ = tools.$; | 
|   | 
|     data.addInitNode(_initNode); | 
|     data.addBeforeA(_beforeA); | 
|     data.addZTreeTools(_zTreeTools); | 
|   | 
| //    Override method in core | 
|     var _dInitNode = data.initNode; | 
|     data.initNode = function(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) { | 
|         var tmpPNode = (parentNode) ? parentNode: data.getRoot(setting), | 
|             children = tmpPNode[setting.data.key.children]; | 
|         data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children); | 
|         data.tmpHideLastNode = view.setLastNodeForHide(setting, children); | 
|         if (openFlag) { | 
|             view.setNodeLineIcos(setting, data.tmpHideFirstNode); | 
|             view.setNodeLineIcos(setting, data.tmpHideLastNode); | 
|         } | 
|         isFirstNode = (data.tmpHideFirstNode === node); | 
|         isLastNode = (data.tmpHideLastNode === node); | 
|         if (_dInitNode) _dInitNode.apply(data, arguments); | 
|         if (openFlag && isLastNode) { | 
|             view.clearOldLastNode(setting, node, openFlag); | 
|         } | 
|     }; | 
|   | 
|     var _makeChkFlag = data.makeChkFlag; | 
|     if (!!_makeChkFlag) { | 
|         data.makeChkFlag = function(setting, node) { | 
|             if (!!node && !!node.isHidden) { | 
|                 return; | 
|             } | 
|             _makeChkFlag.apply(data, arguments); | 
|         } | 
|     } | 
|   | 
|     var _getTreeCheckedNodes = data.getTreeCheckedNodes; | 
|     if (!!_getTreeCheckedNodes) { | 
|         data.getTreeCheckedNodes = function(setting, nodes, checked, results) { | 
|             if (!!nodes && nodes.length > 0) { | 
|                 var p = nodes[0].getParentNode(); | 
|                 if (!!p && !!p.isHidden) { | 
|                     return []; | 
|                 } | 
|             } | 
|             return _getTreeCheckedNodes.apply(data, arguments); | 
|         } | 
|     } | 
|   | 
|     var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes; | 
|     if (!!_getTreeChangeCheckedNodes) { | 
|         data.getTreeChangeCheckedNodes = function(setting, nodes, results) { | 
|             if (!!nodes && nodes.length > 0) { | 
|                 var p = nodes[0].getParentNode(); | 
|                 if (!!p && !!p.isHidden) { | 
|                     return []; | 
|                 } | 
|             } | 
|             return _getTreeChangeCheckedNodes.apply(data, arguments); | 
|         } | 
|     } | 
|   | 
|     var _expandCollapseSonNode = view.expandCollapseSonNode; | 
|     if (!!_expandCollapseSonNode) { | 
|         view.expandCollapseSonNode = function(setting, node, expandFlag, animateFlag, callback) { | 
|             if (!!node && !!node.isHidden) { | 
|                 return; | 
|             } | 
|             _expandCollapseSonNode.apply(view, arguments); | 
|         } | 
|     } | 
|   | 
|     var _setSonNodeCheckBox = view.setSonNodeCheckBox; | 
|     if (!!_setSonNodeCheckBox) { | 
|         view.setSonNodeCheckBox = function(setting, node, value, srcNode) { | 
|             if (!!node && !!node.isHidden) { | 
|                 return; | 
|             } | 
|             _setSonNodeCheckBox.apply(view, arguments); | 
|         } | 
|     } | 
|   | 
|     var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf; | 
|     if (!!_repairParentChkClassWithSelf) { | 
|         view.repairParentChkClassWithSelf = function(setting, node) { | 
|             if (!!node && !!node.isHidden) { | 
|                 return; | 
|             } | 
|             _repairParentChkClassWithSelf.apply(view, arguments); | 
|         } | 
|     } | 
| })(jQuery); |