├── .gitignore ├── README.md ├── ZTree.php ├── ZTreeAsset.php ├── assets ├── css │ ├── awesomeStyle │ │ ├── awesome.css │ │ ├── awesome.less │ │ ├── fa.less │ │ └── img │ │ │ └── loading.gif │ ├── metroStyle │ │ ├── img │ │ │ ├── line_conn.png │ │ │ ├── loading.gif │ │ │ ├── metro.gif │ │ │ └── metro.png │ │ └── metroStyle.css │ └── zTreeStyle │ │ ├── img │ │ ├── diy │ │ │ ├── 1_close.png │ │ │ ├── 1_open.png │ │ │ ├── 2.png │ │ │ ├── 3.png │ │ │ ├── 4.png │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ ├── 8.png │ │ │ └── 9.png │ │ ├── line_conn.gif │ │ ├── loading.gif │ │ ├── zTreeStandard.gif │ │ └── zTreeStandard.png │ │ └── zTreeStyle.css └── js │ ├── jquery-1.4.4.min.js │ ├── jquery.ztree.all-3.5.js │ ├── jquery.ztree.all-3.5.min.js │ ├── jquery.ztree.core-3.5.js │ ├── jquery.ztree.core-3.5.min.js │ ├── jquery.ztree.excheck-3.5.js │ ├── jquery.ztree.excheck-3.5.min.js │ ├── jquery.ztree.exedit-3.5.js │ ├── jquery.ztree.exedit-3.5.min.js │ ├── jquery.ztree.exhide-3.5.js │ └── jquery.ztree.exhide-3.5.min.js └── composer.json /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # yii2-ztree 2 | The zTree extension for the Yii framework 2.0 3 | 4 | ## Installation 5 | 6 | The preferred way to install this extension is through composer. 7 | 8 | Either run 9 | 10 | ``` bash 11 | php composer.phar require --prefer-dist liyuze/yii2-ztree "*" 12 | ``` 13 | or add 14 | ``` bash 15 | "liyuze/yii2-ztree": "*" 16 | ``` 17 | to the require section of your `composer.json` file. 18 | 19 | ## Usage 20 | 21 | Once the extension is installed, simply use it in your code by : 22 | 23 | ``` php 24 | = \liyuze\ztree\ZTree::widget([ 25 | 'setting' => '{ 26 | data: { 27 | simpleData: { 28 | enable: true 29 | } 30 | } 31 | }', 32 | 'nodes' => '[ 33 | { id:1, pId:0, name:"父节点1 - 展开", open:true}, 34 | { id:11, pId:1, name:"父节点11 - 折叠"}, 35 | { id:111, pId:11, name:"叶子节点111"}, 36 | { id:112, pId:11, name:"叶子节点112"}, 37 | { id:113, pId:11, name:"叶子节点113"}, 38 | { id:114, pId:11, name:"叶子节点114"}, 39 | { id:12, pId:1, name:"父节点12 - 折叠"}, 40 | { id:121, pId:12, name:"叶子节点121"}, 41 | { id:122, pId:12, name:"叶子节点122"}, 42 | { id:123, pId:12, name:"叶子节点123"}, 43 | { id:124, pId:12, name:"叶子节点124"}, 44 | { id:13, pId:1, name:"父节点13 - 没有子节点", isParent:true} 45 | ]' 46 | ]); 47 | ?> 48 | ``` 49 | 50 | or, standard use it on your code by: 51 | 52 | ``` php 53 | = \liyuze\ztree\ZTree::widget([ 54 | 'id' => 'category_tree', //自定义id 55 | 'setting' => '{ 56 | view: { 57 | dblClickExpand: false, 58 | showLine: false 59 | }, 60 | callback: { 61 | onClick: onClick 62 | } 63 | }', 64 | 'nodes' => '[ 65 | { name:"父节点1 - 展开", open:true, 66 | children: [ 67 | { name:"父节点11 - 折叠", 68 | children: [ 69 | { name:"叶子节点111"}, 70 | { name:"叶子节点112"}, 71 | { name:"叶子节点113"}, 72 | { name:"叶子节点114"} 73 | ]}, 74 | { name:"父节点12 - 折叠", 75 | children: [ 76 | { name:"叶子节点121"}, 77 | { name:"叶子节点122"}, 78 | { name:"叶子节点123"}, 79 | { name:"叶子节点124"} 80 | ]}, 81 | { name:"父节点13 - 没有子节点", isParent:true} 82 | ] 83 | } 84 | ]' 85 | ]); 86 | ?> 87 | 88 | 94 | ``` 95 | 96 | ## Extend 97 | [zTree GitHub](https://github.com/zTree/zTree_v3) 98 | [zTree API](http://www.ztree.me/v3/api.php) 99 | [zTree Demo](http://www.ztree.me/v3/demo.php) -------------------------------------------------------------------------------- /ZTree.php: -------------------------------------------------------------------------------- 1 | id)) 20 | $this->id = $this->getId(); 21 | } 22 | 23 | public function run() 24 | { 25 | echo '
0&&(l=i.appendNodes(b,a+1,p[m],p,-1,g,f&&p.open));f&&(i.makeDOMNodeMainBefore(j,b,p),i.makeDOMNodeLine(j,b,p),h.getBeforeA(b, 41 | p,j),i.makeDOMNodeNameBefore(j,b,p),h.getInnerBeforeA(b,p,j),i.makeDOMNodeIcon(j,b,p),h.getInnerAfterA(b,p,j),i.makeDOMNodeNameAfter(j,b,p),h.getAfterA(b,p,j),p.isParent&&p.open&&i.makeUlHtml(b,p,j,l.join("")),i.makeDOMNodeMainAfter(j,b,p),h.addCreatedNode(b,p))}return j},appendParentULDom:function(b,a){var c=[],d=k(a,b);!d.get(0)&&a.parentTId&&(i.appendParentULDom(b,a.getParentNode()),d=k(a,b));var e=k(a,f.id.UL,b);e.get(0)&&e.remove();e=i.appendNodes(b,a.level+1,a[b.data.key.children],a,-1,!1,!0); 42 | i.makeUlHtml(b,a,c,e.join(""));d.append(c.join(""))},asyncNode:function(b,a,c,d){var e,g;if(a&&!a.isParent)return j.apply(d),!1;else if(a&&a.isAjaxing)return!1;else if(j.apply(b.callback.beforeAsync,[b.treeId,a],!0)==!1)return j.apply(d),!1;if(a)a.isAjaxing=!0,k(a,f.id.ICON,b).attr({style:"","class":f.className.BUTTON+" "+f.className.ICO_LOADING});var n={};for(e=0,g=b.async.autoParam.length;a&&e1&&(m=o[1],o=o[0]);n[m]=a[o]}if(j.isArray(b.async.otherParam))for(e= 43 | 0,g=b.async.otherParam.length;e /g,">"),"'");b.push(">")},makeNodeFontCss:function(b,a){var c=j.apply(b.view.fontCss,[b.treeId,a],b.view.fontCss);return c&&typeof c!="function"?c:{}},makeNodeIcoClass:function(b,a){var c=["ico"]; 53 | a.isAjaxing||(c[0]=(a.iconSkin?a.iconSkin+"_":"")+c[0],a.isParent?c.push(a.open?f.folder.OPEN:f.folder.CLOSE):c.push(f.folder.DOCU));return f.className.BUTTON+" "+c.join("_")},makeNodeIcoStyle:function(b,a){var c=[];if(!a.isAjaxing){var d=a.isParent&&a.iconOpen&&a.iconClose?a.open?a.iconOpen:a.iconClose:a[b.data.key.icon];d&&c.push("background:url(",d,") 0 0 no-repeat;");(b.view.showIcon==!1||!j.apply(b.view.showIcon,[b.treeId,a],!0))&&c.push("width:0px;height:0px;")}return c.join("")},makeNodeLineClass:function(b, 54 | a){var c=[];b.view.showLine?a.level==0&&a.isFirstNode&&a.isLastNode?c.push(f.line.ROOT):a.level==0&&a.isFirstNode?c.push(f.line.ROOTS):a.isLastNode?c.push(f.line.BOTTOM):c.push(f.line.CENTER):c.push(f.line.NOLINE);a.isParent?c.push(a.open?f.folder.OPEN:f.folder.CLOSE):c.push(f.folder.DOCU);return i.makeNodeLineClassEx(a)+c.join("_")},makeNodeLineClassEx:function(b){return f.className.BUTTON+" "+f.className.LEVEL+b.level+" "+f.className.SWITCH+" "},makeNodeTarget:function(b){return b.target||"_blank"}, 55 | makeNodeUrl:function(b,a){var c=b.data.key.url;return a[c]?a[c]:null},makeUlHtml:function(b,a,c,d){c.push("=0;e--)if(g=d[e],a===g||!a&&(!c||c!==g))if(k(g, 45 | f.id.A,b).removeClass(f.node.CURSELECTED),a){h.removeSelectedNode(b,a);break}else d.splice(e,1),b.treeObj.trigger(f.event.UNSELECTED,[b.treeId,g])},createNodeCallback:function(b){if(b.callback.onNodeCreated||b.view.addDiyDom)for(var a=h.getRoot(b);a.createdNodes.length>0;){var c=a.createdNodes.shift();j.apply(b.view.addDiyDom,[b.treeId,c]);b.callback.onNodeCreated&&b.treeObj.trigger(f.event.NODECREATED,[b.treeId,c])}},createNodes:function(b,a,c,d,e){if(c&&c.length!=0){var g=h.getRoot(b),j=b.data.key.children, 46 | j=!d||d.open||!!k(d[j][0],b).get(0);g.createdNodes=[];var a=i.appendNodes(b,a,c,d,e,!0,j),o,m;d?(d=k(d,f.id.UL,b),d.get(0)&&(o=d)):o=b.treeObj;o&&(e>=0&&(m=o.children()[e]),e>=0&&m?q(m).before(a.join("")):o.append(a.join("")));i.createNodeCallback(b)}},destroy:function(b){b&&(h.initCache(b),h.initRoot(b),l.unbindTree(b),l.unbindEvent(b),b.treeObj.empty(),delete r[b.treeId])},expandCollapseNode:function(b,a,c,d,e){var g=h.getRoot(b),n=b.data.key.children;if(a){if(g.expandTriggerFlag){var o=e,e=function(){o&& 47 | o();a.open?b.treeObj.trigger(f.event.EXPAND,[b.treeId,a]):b.treeObj.trigger(f.event.COLLAPSE,[b.treeId,a])};g.expandTriggerFlag=!1}if(!a.open&&a.isParent&&(!k(a,f.id.UL,b).get(0)||a[n]&&a[n].length>0&&!k(a[n][0],b).get(0)))i.appendParentULDom(b,a),i.createNodeCallback(b);if(a.open==c)j.apply(e,[]);else{var c=k(a,f.id.UL,b),g=k(a,f.id.SWITCH,b),m=k(a,f.id.ICON,b);a.isParent?(a.open=!a.open,a.iconOpen&&a.iconClose&&m.attr("style",i.makeNodeIcoStyle(b,a)),a.open?(i.replaceSwitchClass(a,g,f.folder.OPEN), 48 | i.replaceIcoClass(a,m,f.folder.OPEN),d==!1||b.view.expandSpeed==""?(c.show(),j.apply(e,[])):a[n]&&a[n].length>0?c.slideDown(b.view.expandSpeed,e):(c.show(),j.apply(e,[]))):(i.replaceSwitchClass(a,g,f.folder.CLOSE),i.replaceIcoClass(a,m,f.folder.CLOSE),d==!1||b.view.expandSpeed==""||!(a[n]&&a[n].length>0)?(c.hide(),j.apply(e,[])):c.slideUp(b.view.expandSpeed,e))):j.apply(e,[])}}else j.apply(e,[])},expandCollapseParentNode:function(b,a,c,d,e){a&&(a.parentTId?(i.expandCollapseNode(b,a,c,d),a.parentTId&& 49 | i.expandCollapseParentNode(b,a.getParentNode(),c,d,e)):i.expandCollapseNode(b,a,c,d,e))},expandCollapseSonNode:function(b,a,c,d,e){var g=h.getRoot(b),f=b.data.key.children,g=a?a[f]:g[f],f=a?!1:d,j=h.getRoot(b).expandTriggerFlag;h.getRoot(b).expandTriggerFlag=!1;if(g)for(var k=0,l=g.length;k /g,">");b.push("",d,"")},makeDOMNodeLine:function(b,a,c){b.push("")},makeDOMNodeMainAfter:function(b){b.push("")},makeDOMNodeMainBefore:function(b,a,c){b.push("=0;d--)if(a===c[d])return!0;return!1},makeDOMNodeIcon:function(b,a,c){var d=h.getNodeName(a,c),d=a.view.nameIsHTML?d:d.replace(/&/g,"&").replace(/ ")},makeDOMNodeNameAfter:function(b){b.push("")},makeDOMNodeNameBefore:function(b,a,c){var d=h.getNodeTitle(a,c),e=i.makeNodeUrl(a,c),g=i.makeNodeFontCss(a,c),n=[],k;for(k in g)n.push(k,":",g[k],";");b.push("0?"href='"+e+"'":""," target='",i.makeNodeTarget(c),"' style='",n.join(""),"'");j.apply(a.view.showTitle,[a.treeId,c],a.view.showTitle)&&d&&b.push("title='",d.replace(/'/g,"'").replace(/ ");c.push(d);c.push("
")},makeUlLineClass:function(b,a){return b.view.showLine&&!a.isLastNode?f.line.LINE:""},removeChildNodes:function(b,a){if(a){var c=b.data.key.children,d=a[c];if(d){for(var e=0,g=d.length;e0)a[c][0].isFirstNode=!0},setLastNode:function(b,a){var c=b.data.key.children,d=a[c].length;if(d>0)a[c][d-1].isLastNode=!0},removeNode:function(b,a){var c=h.getRoot(b),d=b.data.key.children,e=a.parentTId?a.getParentNode(): 57 | c;a.isFirstNode=!1;a.isLastNode=!1;a.getPreNode=function(){return null};a.getNextNode=function(){return null};if(h.getNodeCache(b,a.tId)){k(a,b).remove();h.removeNodeCache(b,a);h.removeSelectedNode(b,a);for(var g=0,j=e[d].length;g 0){var m=e[d][g-1],g=k(m,f.id.UL,b),j=k(m,f.id.SWITCH,b);o=k(m,f.id.ICON,b);e==c?e[d].length==1?i.replaceSwitchClass(m,j,f.line.ROOT):(c=k(e[d][0],f.id.SWITCH,b),i.replaceSwitchClass(e[d][0],c,f.line.ROOTS),i.replaceSwitchClass(m,j,f.line.BOTTOM)):i.replaceSwitchClass(m,j,f.line.BOTTOM);g.removeClass(f.line.LINE)}}},replaceIcoClass:function(b,a,c){if(a&&!b.isAjaxing&&(b=a.attr("class"),b!=void 0)){b=b.split("_");switch(c){case f.folder.OPEN:case f.folder.CLOSE:case f.folder.DOCU:b[b.length- 59 | 1]=c}a.attr("class",b.join("_"))}},replaceSwitchClass:function(b,a,c){if(a){var d=a.attr("class");if(d!=void 0){d=d.split("_");switch(c){case f.line.ROOT:case f.line.ROOTS:case f.line.CENTER:case f.line.BOTTOM:case f.line.NOLINE:d[0]=i.makeNodeLineClassEx(b)+c;break;case f.folder.OPEN:case f.folder.CLOSE:case f.folder.DOCU:d[1]=c}a.attr("class",d.join("_"));c!==f.folder.DOCU?a.removeAttr("disabled"):a.attr("disabled","disabled")}}},selectNode:function(b,a,c){c||i.cancelPreSelectedNode(b,null,a);k(a, 60 | f.id.A,b).addClass(f.node.CURSELECTED);h.addSelectedNode(b,a);b.treeObj.trigger(f.event.SELECTED,[b.treeId,a])},setNodeFontCss:function(b,a){var c=k(a,f.id.A,b),d=i.makeNodeFontCss(b,a);d&&c.css(d)},setNodeLineIcos:function(b,a){if(a){var c=k(a,f.id.SWITCH,b),d=k(a,f.id.UL,b),e=k(a,f.id.ICON,b),g=i.makeUlLineClass(b,a);g.length==0?d.removeClass(f.line.LINE):d.addClass(g);c.attr("class",i.makeNodeLineClass(b,a));a.isParent?c.removeAttr("disabled"):c.attr("disabled","disabled");e.removeAttr("style"); 61 | e.attr("style",i.makeNodeIcoStyle(b,a));e.attr("class",i.makeNodeIcoClass(b,a))}},setNodeName:function(b,a){var c=h.getNodeTitle(b,a),d=k(a,f.id.SPAN,b);d.empty();b.view.nameIsHTML?d.html(h.getNodeName(b,a)):d.text(h.getNodeName(b,a));j.apply(b.view.showTitle,[b.treeId,a],b.view.showTitle)&&k(a,f.id.A,b).attr("title",!c?"":c)},setNodeTarget:function(b,a){k(a,f.id.A,b).attr("target",i.makeNodeTarget(a))},setNodeUrl:function(b,a){var c=k(a,f.id.A,b),d=i.makeNodeUrl(b,a);d==null||d.length==0?c.removeAttr("href"): 62 | c.attr("href",d)},switchNode:function(b,a){a.open||!j.canAsync(b,a)?i.expandCollapseNode(b,a,!a.open):b.async.enable?i.asyncNode(b,a)||i.expandCollapseNode(b,a,!a.open):a&&i.expandCollapseNode(b,a,!a.open)}};q.fn.zTree={consts:{className:{BUTTON:"button",LEVEL:"level",ICO_LOADING:"ico_loading",SWITCH:"switch",NAME:"node_name"},event:{NODECREATED:"ztree_nodeCreated",CLICK:"ztree_click",EXPAND:"ztree_expand",COLLAPSE:"ztree_collapse",ASYNC_SUCCESS:"ztree_async_success",ASYNC_ERROR:"ztree_async_error", 63 | REMOVE:"ztree_remove",SELECTED:"ztree_selected",UNSELECTED:"ztree_unselected"},id:{A:"_a",ICON:"_ico",SPAN:"_span",SWITCH:"_switch",UL:"_ul"},line:{ROOT:"root",ROOTS:"roots",CENTER:"center",BOTTOM:"bottom",NOLINE:"noline",LINE:"line"},folder:{OPEN:"open",CLOSE:"close",DOCU:"docu"},node:{CURSELECTED:"curSelectedNode"}},_z:{tools:j,view:i,event:l,data:h},getZTreeObj:function(b){return(b=h.getZTreeTools(b))?b:null},destroy:function(b){if(b&&b.length>0)i.destroy(h.getSetting(b));else for(var a in r)i.destroy(r[a])}, 64 | init:function(b,a,c){var d=j.clone(N);q.extend(!0,d,a);d.treeId=b.attr("id");d.treeObj=b;d.treeObj.empty();r[d.treeId]=d;if(typeof document.body.style.maxHeight==="undefined")d.view.expandSpeed="";h.initRoot(d);b=h.getRoot(d);a=d.data.key.children;c=c?j.clone(j.isArray(c)?c:[c]):[];b[a]=d.data.simpleData.enable?h.transformTozTreeFormat(d,c):c;h.initCache(d);l.unbindTree(d);l.bindTree(d);l.unbindEvent(d);l.bindEvent(d);c={setting:d,addNodes:function(a,b,c,f){function h(){i.addNodes(d,a,b,l,f==!0)} 65 | a||(a=null);if(a&&!a.isParent&&d.data.keep.leaf)return null;var k=parseInt(b,10);isNaN(k)?(f=!!c,c=b,b=-1):b=k;if(!c)return null;var l=j.clone(j.isArray(c)?c:[c]);j.canAsync(d,a)?i.asyncNode(d,a,f,h):h();return l},cancelSelectedNode:function(a){i.cancelPreSelectedNode(d,a)},destroy:function(){i.destroy(d)},expandAll:function(a){a=!!a;i.expandCollapseSonNode(d,null,a,!0);return a},expandNode:function(a,b,c,f,m){function l(){var b=k(a,d).get(0);if(b&&f!==!1)if(b.scrollIntoView)b.scrollIntoView(!1); 66 | else try{b.focus().blur()}catch(c){}}if(!a||!a.isParent)return null;b!==!0&&b!==!1&&(b=!a.open);if((m=!!m)&&b&&j.apply(d.callback.beforeExpand,[d.treeId,a],!0)==!1)return null;else if(m&&!b&&j.apply(d.callback.beforeCollapse,[d.treeId,a],!0)==!1)return null;b&&a.parentTId&&i.expandCollapseParentNode(d,a.getParentNode(),b,!1);if(b===a.open&&!c)return null;h.getRoot(d).expandTriggerFlag=m;!j.canAsync(d,a)&&c?i.expandCollapseSonNode(d,a,b,!0,l):(a.open=!b,i.switchNode(this.setting,a),l());return b}, 67 | getNodes:function(){return h.getNodes(d)},getNodeByParam:function(a,b,c){return!a?null:h.getNodeByParam(d,c?c[d.data.key.children]:h.getNodes(d),a,b)},getNodeByTId:function(a){return h.getNodeCache(d,a)},getNodesByParam:function(a,b,c){return!a?null:h.getNodesByParam(d,c?c[d.data.key.children]:h.getNodes(d),a,b)},getNodesByParamFuzzy:function(a,b,c){return!a?null:h.getNodesByParamFuzzy(d,c?c[d.data.key.children]:h.getNodes(d),a,b)},getNodesByFilter:function(a,b,c,f){b=!!b;return!a||typeof a!="function"? 68 | b?null:[]:h.getNodesByFilter(d,c?c[d.data.key.children]:h.getNodes(d),a,b,f)},getNodeIndex:function(a){if(!a)return null;for(var b=d.data.key.children,c=a.parentTId?a.getParentNode():h.getRoot(d),f=0,i=c[b].length;f0?i.createNodes(d,0,b[a],null,-1):d.async.enable&&d.async.url&&d.async.url!==""&&i.asyncNode(d); 72 | return c}};var O=q.fn.zTree,k=j.$,f=O.consts})(jQuery); 73 | -------------------------------------------------------------------------------- /assets/js/jquery.ztree.excheck-3.5.js: -------------------------------------------------------------------------------- 1 | /* 2 | * JQuery zTree excheck v3.5.20 3 | * http://zTree.me/ 4 | * 5 | * Copyright (c) 2010 Hunter.z 6 | * 7 | * Licensed same as jquery - MIT License 8 | * http://www.opensource.org/licenses/mit-license.php 9 | * 10 | * email: hunter.z@263.net 11 | * Date: 2016-01-20 12 | */ 13 | (function($){ 14 | //default consts of excheck 15 | var _consts = { 16 | event: { 17 | CHECK: "ztree_check" 18 | }, 19 | id: { 20 | CHECK: "_check" 21 | }, 22 | checkbox: { 23 | STYLE: "checkbox", 24 | DEFAULT: "chk", 25 | DISABLED: "disable", 26 | FALSE: "false", 27 | TRUE: "true", 28 | FULL: "full", 29 | PART: "part", 30 | FOCUS: "focus" 31 | }, 32 | radio: { 33 | STYLE: "radio", 34 | TYPE_ALL: "all", 35 | TYPE_LEVEL: "level" 36 | } 37 | }, 38 | //default setting of excheck 39 | _setting = { 40 | check: { 41 | enable: false, 42 | autoCheckTrigger: false, 43 | chkStyle: _consts.checkbox.STYLE, 44 | nocheckInherit: false, 45 | chkDisabledInherit: false, 46 | radioType: _consts.radio.TYPE_LEVEL, 47 | chkboxType: { 48 | "Y": "ps", 49 | "N": "ps" 50 | } 51 | }, 52 | data: { 53 | key: { 54 | checked: "checked" 55 | } 56 | }, 57 | callback: { 58 | beforeCheck:null, 59 | onCheck:null 60 | } 61 | }, 62 | //default root of excheck 63 | _initRoot = function (setting) { 64 | var r = data.getRoot(setting); 65 | r.radioCheckedList = []; 66 | }, 67 | //default cache of excheck 68 | _initCache = function(treeId) {}, 69 | //default bind event of excheck 70 | _bindEvent = function(setting) { 71 | var o = setting.treeObj, 72 | c = consts.event; 73 | o.bind(c.CHECK, function (event, srcEvent, treeId, node) { 74 | event.srcEvent = srcEvent; 75 | tools.apply(setting.callback.onCheck, [event, treeId, node]); 76 | }); 77 | }, 78 | _unbindEvent = function(setting) { 79 | var o = setting.treeObj, 80 | c = consts.event; 81 | o.unbind(c.CHECK); 82 | }, 83 | //default event proxy of excheck 84 | _eventProxy = function(e) { 85 | var target = e.target, 86 | setting = data.getSetting(e.data.treeId), 87 | tId = "", node = null, 88 | nodeEventType = "", treeEventType = "", 89 | nodeEventCallback = null, treeEventCallback = null; 90 | 91 | if (tools.eqs(e.type, "mouseover")) { 92 | if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) { 93 | tId = tools.getNodeMainDom(target).id; 94 | nodeEventType = "mouseoverCheck"; 95 | } 96 | } else if (tools.eqs(e.type, "mouseout")) { 97 | if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) { 98 | tId = tools.getNodeMainDom(target).id; 99 | nodeEventType = "mouseoutCheck"; 100 | } 101 | } else if (tools.eqs(e.type, "click")) { 102 | if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode"+ consts.id.CHECK) !== null) { 103 | tId = tools.getNodeMainDom(target).id; 104 | nodeEventType = "checkNode"; 105 | } 106 | } 107 | if (tId.length>0) { 108 | node = data.getNodeCache(setting, tId); 109 | switch (nodeEventType) { 110 | case "checkNode" : 111 | nodeEventCallback = _handler.onCheckNode; 112 | break; 113 | case "mouseoverCheck" : 114 | nodeEventCallback = _handler.onMouseoverCheck; 115 | break; 116 | case "mouseoutCheck" : 117 | nodeEventCallback = _handler.onMouseoutCheck; 118 | break; 119 | } 120 | } 121 | var proxyResult = { 122 | stop: nodeEventType === "checkNode", 123 | node: node, 124 | nodeEventType: nodeEventType, 125 | nodeEventCallback: nodeEventCallback, 126 | treeEventType: treeEventType, 127 | treeEventCallback: treeEventCallback 128 | }; 129 | return proxyResult 130 | }, 131 | //default init node of excheck 132 | _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { 133 | if (!n) return; 134 | var checkedKey = setting.data.key.checked; 135 | if (typeof n[checkedKey] == "string") n[checkedKey] = tools.eqs(n[checkedKey], "true"); 136 | n[checkedKey] = !!n[checkedKey]; 137 | n.checkedOld = n[checkedKey]; 138 | if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true"); 139 | n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck); 140 | if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true"); 141 | n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled); 142 | if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true"); 143 | n.halfCheck = !!n.halfCheck; 144 | n.check_Child_State = -1; 145 | n.check_Focus = false; 146 | n.getCheckStatus = function() {return data.getCheckStatus(setting, n);}; 147 | 148 | if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && n[checkedKey] ) { 149 | var r = data.getRoot(setting); 150 | r.radioCheckedList.push(n); 151 | } 152 | }, 153 | //add dom for check 154 | _beforeA = function(setting, node, html) { 155 | var checkedKey = setting.data.key.checked; 156 | if (setting.check.enable) { 157 | data.makeChkFlag(setting, node); 158 | html.push(""); 159 | } 160 | }, 161 | //update zTreeObj, add method of check 162 | _zTreeTools = function(setting, zTreeTools) { 163 | zTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) { 164 | var checkedKey = this.setting.data.key.checked; 165 | if (node.chkDisabled === true) return; 166 | if (checked !== true && checked !== false) { 167 | checked = !node[checkedKey]; 168 | } 169 | callbackFlag = !!callbackFlag; 170 | 171 | if (node[checkedKey] === checked && !checkTypeFlag) { 172 | return; 173 | } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) { 174 | return; 175 | } 176 | if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) { 177 | node[checkedKey] = checked; 178 | var checkObj = $$(node, consts.id.CHECK, this.setting); 179 | if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); 180 | view.setChkClass(this.setting, checkObj, node); 181 | view.repairParentChkClassWithSelf(this.setting, node); 182 | if (callbackFlag) { 183 | this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]); 184 | } 185 | } 186 | } 187 | 188 | zTreeTools.checkAllNodes = function(checked) { 189 | view.repairAllChk(this.setting, !!checked); 190 | } 191 | 192 | zTreeTools.getCheckedNodes = function(checked) { 193 | var childKey = this.setting.data.key.children; 194 | checked = (checked !== false); 195 | return data.getTreeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey], checked); 196 | } 197 | 198 | zTreeTools.getChangeCheckedNodes = function() { 199 | var childKey = this.setting.data.key.children; 200 | return data.getTreeChangeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey]); 201 | } 202 | 203 | zTreeTools.setChkDisabled = function(node, disabled, inheritParent, inheritChildren) { 204 | disabled = !!disabled; 205 | inheritParent = !!inheritParent; 206 | inheritChildren = !!inheritChildren; 207 | view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren); 208 | view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent); 209 | } 210 | 211 | var _updateNode = zTreeTools.updateNode; 212 | zTreeTools.updateNode = function(node, checkTypeFlag) { 213 | if (_updateNode) _updateNode.apply(zTreeTools, arguments); 214 | if (!node || !this.setting.check.enable) return; 215 | var nObj = $$(node, this.setting); 216 | if (nObj.get(0) && tools.uCanDo(this.setting)) { 217 | var checkObj = $$(node, consts.id.CHECK, this.setting); 218 | if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); 219 | view.setChkClass(this.setting, checkObj, node); 220 | view.repairParentChkClassWithSelf(this.setting, node); 221 | } 222 | } 223 | }, 224 | //method of operate data 225 | _data = { 226 | getRadioCheckedList: function(setting) { 227 | var checkedList = data.getRoot(setting).radioCheckedList; 228 | for (var i=0, j=checkedList.length; i -1 && node.check_Child_State < 2) : (node.check_Child_State > 0))) 242 | }; 243 | return r; 244 | }, 245 | getTreeCheckedNodes: function(setting, nodes, checked, results) { 246 | if (!nodes) return []; 247 | var childKey = setting.data.key.children, 248 | checkedKey = setting.data.key.checked, 249 | onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL); 250 | results = !results ? [] : results; 251 | for (var i = 0, l = nodes.length; i < l; i++) { 252 | if (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] == checked) { 253 | results.push(nodes[i]); 254 | if(onlyOne) { 255 | break; 256 | } 257 | } 258 | data.getTreeCheckedNodes(setting, nodes[i][childKey], checked, results); 259 | if(onlyOne && results.length > 0) { 260 | break; 261 | } 262 | } 263 | return results; 264 | }, 265 | getTreeChangeCheckedNodes: function(setting, nodes, results) { 266 | if (!nodes) return []; 267 | var childKey = setting.data.key.children, 268 | checkedKey = setting.data.key.checked; 269 | results = !results ? [] : results; 270 | for (var i = 0, l = nodes.length; i < l; i++) { 271 | if (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] != nodes[i].checkedOld) { 272 | results.push(nodes[i]); 273 | } 274 | data.getTreeChangeCheckedNodes(setting, nodes[i][childKey], results); 275 | } 276 | return results; 277 | }, 278 | makeChkFlag: function(setting, node) { 279 | if (!node) return; 280 | var childKey = setting.data.key.children, 281 | checkedKey = setting.data.key.checked, 282 | chkFlag = -1; 283 | if (node[childKey]) { 284 | for (var i = 0, l = node[childKey].length; i < l; i++) { 285 | var cNode = node[childKey][i]; 286 | var tmp = -1; 287 | if (setting.check.chkStyle == consts.radio.STYLE) { 288 | if (cNode.nocheck === true || cNode.chkDisabled === true) { 289 | tmp = cNode.check_Child_State; 290 | } else if (cNode.halfCheck === true) { 291 | tmp = 2; 292 | } else if (cNode[checkedKey]) { 293 | tmp = 2; 294 | } else { 295 | tmp = cNode.check_Child_State > 0 ? 2:0; 296 | } 297 | if (tmp == 2) { 298 | chkFlag = 2; break; 299 | } else if (tmp == 0){ 300 | chkFlag = 0; 301 | } 302 | } else if (setting.check.chkStyle == consts.checkbox.STYLE) { 303 | if (cNode.nocheck === true || cNode.chkDisabled === true) { 304 | tmp = cNode.check_Child_State; 305 | } else if (cNode.halfCheck === true) { 306 | tmp = 1; 307 | } else if (cNode[checkedKey] ) { 308 | tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1; 309 | } else { 310 | tmp = (cNode.check_Child_State > 0) ? 1 : 0; 311 | } 312 | if (tmp === 1) { 313 | chkFlag = 1; break; 314 | } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) { 315 | chkFlag = 1; break; 316 | } else if (chkFlag === 2 && tmp > -1 && tmp < 2) { 317 | chkFlag = 1; break; 318 | } else if (tmp > -1) { 319 | chkFlag = tmp; 320 | } 321 | } 322 | } 323 | } 324 | node.check_Child_State = chkFlag; 325 | } 326 | }, 327 | //method of event proxy 328 | _event = { 329 | 330 | }, 331 | //method of event handler 332 | _handler = { 333 | onCheckNode: function (event, node) { 334 | if (node.chkDisabled === true) return false; 335 | var setting = data.getSetting(event.data.treeId), 336 | checkedKey = setting.data.key.checked; 337 | if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true; 338 | node[checkedKey] = !node[checkedKey]; 339 | view.checkNodeRelation(setting, node); 340 | var checkObj = $$(node, consts.id.CHECK, setting); 341 | view.setChkClass(setting, checkObj, node); 342 | view.repairParentChkClassWithSelf(setting, node); 343 | setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]); 344 | return true; 345 | }, 346 | onMouseoverCheck: function(event, node) { 347 | if (node.chkDisabled === true) return false; 348 | var setting = data.getSetting(event.data.treeId), 349 | checkObj = $$(node, consts.id.CHECK, setting); 350 | node.check_Focus = true; 351 | view.setChkClass(setting, checkObj, node); 352 | return true; 353 | }, 354 | onMouseoutCheck: function(event, node) { 355 | if (node.chkDisabled === true) return false; 356 | var setting = data.getSetting(event.data.treeId), 357 | checkObj = $$(node, consts.id.CHECK, setting); 358 | node.check_Focus = false; 359 | view.setChkClass(setting, checkObj, node); 360 | return true; 361 | } 362 | }, 363 | //method of tools for zTree 364 | _tools = { 365 | 366 | }, 367 | //method of operate ztree dom 368 | _view = { 369 | checkNodeRelation: function(setting, node) { 370 | var pNode, i, l, 371 | childKey = setting.data.key.children, 372 | checkedKey = setting.data.key.checked, 373 | r = consts.radio; 374 | if (setting.check.chkStyle == r.STYLE) { 375 | var checkedList = data.getRadioCheckedList(setting); 376 | if (node[checkedKey]) { 377 | if (setting.check.radioType == r.TYPE_ALL) { 378 | for (i = checkedList.length-1; i >= 0; i--) { 379 | pNode = checkedList[i]; 380 | if (pNode[checkedKey] && pNode != node) { 381 | pNode[checkedKey] = false; 382 | checkedList.splice(i, 1); 383 | 384 | view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); 385 | if (pNode.parentTId != node.parentTId) { 386 | view.repairParentChkClassWithSelf(setting, pNode); 387 | } 388 | } 389 | } 390 | checkedList.push(node); 391 | } else { 392 | var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); 393 | for (i = 0, l = parentNode[childKey].length; i < l; i++) { 394 | pNode = parentNode[childKey][i]; 395 | if (pNode[checkedKey] && pNode != node) { 396 | pNode[checkedKey] = false; 397 | view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); 398 | } 399 | } 400 | } 401 | } else if (setting.check.radioType == r.TYPE_ALL) { 402 | for (i = 0, l = checkedList.length; i < l; i++) { 403 | if (node == checkedList[i]) { 404 | checkedList.splice(i, 1); 405 | break; 406 | } 407 | } 408 | } 409 | 410 | } else { 411 | if (node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.Y.indexOf("s") > -1)) { 412 | view.setSonNodeCheckBox(setting, node, true); 413 | } 414 | if (!node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.N.indexOf("s") > -1)) { 415 | view.setSonNodeCheckBox(setting, node, false); 416 | } 417 | if (node[checkedKey] && setting.check.chkboxType.Y.indexOf("p") > -1) { 418 | view.setParentNodeCheckBox(setting, node, true); 419 | } 420 | if (!node[checkedKey] && setting.check.chkboxType.N.indexOf("p") > -1) { 421 | view.setParentNodeCheckBox(setting, node, false); 422 | } 423 | } 424 | }, 425 | makeChkClass: function(setting, node) { 426 | var checkedKey = setting.data.key.checked, 427 | c = consts.checkbox, r = consts.radio, 428 | fullStyle = ""; 429 | if (node.chkDisabled === true) { 430 | fullStyle = c.DISABLED; 431 | } else if (node.halfCheck) { 432 | fullStyle = c.PART; 433 | } else if (setting.check.chkStyle == r.STYLE) { 434 | fullStyle = (node.check_Child_State < 1)? c.FULL:c.PART; 435 | } else { 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); 437 | } 438 | var chkName = setting.check.chkStyle + "_" + (node[checkedKey] ? c.TRUE : c.FALSE) + "_" + fullStyle; 439 | chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName; 440 | return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName; 441 | }, 442 | repairAllChk: function(setting, checked) { 443 | if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) { 444 | var checkedKey = setting.data.key.checked, 445 | childKey = setting.data.key.children, 446 | root = data.getRoot(setting); 447 | for (var i = 0, l = root[childKey].length; i 0) { 474 | view.repairParentChkClass(setting, node[childKey][0]); 475 | } else { 476 | view.repairParentChkClass(setting, node); 477 | } 478 | }, 479 | repairSonChkDisabled: function(setting, node, chkDisabled, inherit) { 480 | if (!node) return; 481 | var childKey = setting.data.key.children; 482 | if (node.chkDisabled != chkDisabled) { 483 | node.chkDisabled = chkDisabled; 484 | } 485 | view.repairChkClass(setting, node); 486 | if (node[childKey] && inherit) { 487 | for (var i = 0, l = node[childKey].length; i < l; i++) { 488 | var sNode = node[childKey][i]; 489 | view.repairSonChkDisabled(setting, sNode, chkDisabled, inherit); 490 | } 491 | } 492 | }, 493 | repairParentChkDisabled: function(setting, node, chkDisabled, inherit) { 494 | if (!node) return; 495 | if (node.chkDisabled != chkDisabled && inherit) { 496 | node.chkDisabled = chkDisabled; 497 | } 498 | view.repairChkClass(setting, node); 499 | view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit); 500 | }, 501 | setChkClass: function(setting, obj, node) { 502 | if (!obj) return; 503 | if (node.nocheck === true) { 504 | obj.hide(); 505 | } else { 506 | obj.show(); 507 | } 508 | obj.attr('class', view.makeChkClass(setting, node)); 509 | }, 510 | setParentNodeCheckBox: function(setting, node, value, srcNode) { 511 | var childKey = setting.data.key.children, 512 | checkedKey = setting.data.key.checked, 513 | checkObj = $$(node, consts.id.CHECK, setting); 514 | if (!srcNode) srcNode = node; 515 | data.makeChkFlag(setting, node); 516 | if (node.nocheck !== true && node.chkDisabled !== true) { 517 | node[checkedKey] = value; 518 | view.setChkClass(setting, checkObj, node); 519 | if (setting.check.autoCheckTrigger && node != srcNode) { 520 | setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); 521 | } 522 | } 523 | if (node.parentTId) { 524 | var pSign = true; 525 | if (!value) { 526 | var pNodes = node.getParentNode()[childKey]; 527 | for (var i = 0, l = pNodes.length; i < l; i++) { 528 | if ((pNodes[i].nocheck !== true && pNodes[i].chkDisabled !== true && pNodes[i][checkedKey]) 529 | || ((pNodes[i].nocheck === true || pNodes[i].chkDisabled === true) && pNodes[i].check_Child_State > 0)) { 530 | pSign = false; 531 | break; 532 | } 533 | } 534 | } 535 | if (pSign) { 536 | view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode); 537 | } 538 | } 539 | }, 540 | setSonNodeCheckBox: function(setting, node, value, srcNode) { 541 | if (!node) return; 542 | var childKey = setting.data.key.children, 543 | checkedKey = setting.data.key.checked, 544 | checkObj = $$(node, consts.id.CHECK, setting); 545 | if (!srcNode) srcNode = node; 546 | 547 | var hasDisable = false; 548 | if (node[childKey]) { 549 | for (var i = 0, l = node[childKey].length; i < l; i++) { 550 | var sNode = node[childKey][i]; 551 | view.setSonNodeCheckBox(setting, sNode, value, srcNode); 552 | if (sNode.chkDisabled === true) hasDisable = true; 553 | } 554 | } 555 | 556 | if (node != data.getRoot(setting) && node.chkDisabled !== true) { 557 | if (hasDisable && node.nocheck !== true) { 558 | data.makeChkFlag(setting, node); 559 | } 560 | if (node.nocheck !== true && node.chkDisabled !== true) { 561 | node[checkedKey] = value; 562 | if (!hasDisable) node.check_Child_State = (node[childKey] && node[childKey].length > 0) ? (value ? 2 : 0) : -1; 563 | } else { 564 | node.check_Child_State = -1; 565 | } 566 | view.setChkClass(setting, checkObj, node); 567 | if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) { 568 | setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); 569 | } 570 | } 571 | 572 | } 573 | }, 574 | 575 | _z = { 576 | tools: _tools, 577 | view: _view, 578 | event: _event, 579 | data: _data 580 | }; 581 | $.extend(true, $.fn.zTree.consts, _consts); 582 | $.extend(true, $.fn.zTree._z, _z); 583 | 584 | var zt = $.fn.zTree, 585 | tools = zt._z.tools, 586 | consts = zt.consts, 587 | view = zt._z.view, 588 | data = zt._z.data, 589 | event = zt._z.event, 590 | $$ = tools.$; 591 | 592 | data.exSetting(_setting); 593 | data.addInitBind(_bindEvent); 594 | data.addInitUnBind(_unbindEvent); 595 | data.addInitCache(_initCache); 596 | data.addInitNode(_initNode); 597 | data.addInitProxy(_eventProxy, true); 598 | data.addInitRoot(_initRoot); 599 | data.addBeforeA(_beforeA); 600 | data.addZTreeTools(_zTreeTools); 601 | 602 | var _createNodes = view.createNodes; 603 | view.createNodes = function(setting, level, nodes, parentNode, index) { 604 | if (_createNodes) _createNodes.apply(view, arguments); 605 | if (!nodes) return; 606 | view.repairParentChkClassWithSelf(setting, parentNode); 607 | } 608 | var _removeNode = view.removeNode; 609 | view.removeNode = function(setting, node) { 610 | var parentNode = node.getParentNode(); 611 | if (_removeNode) _removeNode.apply(view, arguments); 612 | if (!node || !parentNode) return; 613 | view.repairChkClass(setting, parentNode); 614 | view.repairParentChkClass(setting, parentNode); 615 | } 616 | 617 | var _appendNodes = view.appendNodes; 618 | view.appendNodes = function(setting, level, nodes, parentNode, index, initFlag, openFlag) { 619 | var html = ""; 620 | if (_appendNodes) { 621 | html = _appendNodes.apply(view, arguments); 622 | } 623 | if (parentNode) { 624 | data.makeChkFlag(setting, parentNode); 625 | } 626 | return html; 627 | } 628 | })(jQuery); -------------------------------------------------------------------------------- /assets/js/jquery.ztree.excheck-3.5.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * JQuery zTree excheck v3.5.20 3 | * http://zTree.me/ 4 | * 5 | * Copyright (c) 2010 Hunter.z 6 | * 7 | * Licensed same as jquery - MIT License 8 | * http://www.opensource.org/licenses/mit-license.php 9 | * 10 | * email: hunter.z@263.net 11 | * Date: 2016-01-20 12 | */ 13 | (function(m){var p,q,r,o={event:{CHECK:"ztree_check"},id:{CHECK:"_check"},checkbox:{STYLE:"checkbox",DEFAULT:"chk",DISABLED:"disable",FALSE:"false",TRUE:"true",FULL:"full",PART:"part",FOCUS:"focus"},radio:{STYLE:"radio",TYPE_ALL:"all",TYPE_LEVEL:"level"}},v={check:{enable:!1,autoCheckTrigger:!1,chkStyle:o.checkbox.STYLE,nocheckInherit:!1,chkDisabledInherit:!1,radioType:o.radio.TYPE_LEVEL,chkboxType:{Y:"ps",N:"ps"}},data:{key:{checked:"checked"}},callback:{beforeCheck:null,onCheck:null}};p=function(c, 14 | a){if(a.chkDisabled===!0)return!1;var b=g.getSetting(c.data.treeId),d=b.data.key.checked;if(k.apply(b.callback.beforeCheck,[b.treeId,a],!0)==!1)return!0;a[d]=!a[d];e.checkNodeRelation(b,a);d=n(a,j.id.CHECK,b);e.setChkClass(b,d,a);e.repairParentChkClassWithSelf(b,a);b.treeObj.trigger(j.event.CHECK,[c,b.treeId,a]);return!0};q=function(c,a){if(a.chkDisabled===!0)return!1;var b=g.getSetting(c.data.treeId),d=n(a,j.id.CHECK,b);a.check_Focus=!0;e.setChkClass(b,d,a);return!0};r=function(c,a){if(a.chkDisabled=== 15 | !0)return!1;var b=g.getSetting(c.data.treeId),d=n(a,j.id.CHECK,b);a.check_Focus=!1;e.setChkClass(b,d,a);return!0};m.extend(!0,m.fn.zTree.consts,o);m.extend(!0,m.fn.zTree._z,{tools:{},view:{checkNodeRelation:function(c,a){var b,d,h,i=c.data.key.children,l=c.data.key.checked;b=j.radio;if(c.check.chkStyle==b.STYLE){var f=g.getRadioCheckedList(c);if(a[l])if(c.check.radioType==b.TYPE_ALL){for(d=f.length-1;d>=0;d--)b=f[d],b[l]&&b!=a&&(b[l]=!1,f.splice(d,1),e.setChkClass(c,n(b,j.id.CHECK,c),b),b.parentTId!= 16 | a.parentTId&&e.repairParentChkClassWithSelf(c,b));f.push(a)}else{f=a.parentTId?a.getParentNode():g.getRoot(c);for(d=0,h=f[i].length;d -1)&&e.setSonNodeCheckBox(c,a,!0),!a[l]&&(!a[i]||a[i].length==0||c.check.chkboxType.N.indexOf("s")>-1)&&e.setSonNodeCheckBox(c, 17 | a,!1),a[l]&&c.check.chkboxType.Y.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!0),!a[l]&&c.check.chkboxType.N.indexOf("p")>-1&&e.setParentNodeCheckBox(c,a,!1)},makeChkClass:function(c,a){var b=c.data.key.checked,d=j.checkbox,h=j.radio,i="",i=a.chkDisabled===!0?d.DISABLED:a.halfCheck?d.PART:c.check.chkStyle==h.STYLE?a.check_Child_State<1?d.FULL:d.PART:a[b]?a.check_Child_State===2||a.check_Child_State===-1?d.FULL:d.PART:a.check_Child_State<1?d.FULL:d.PART,b=c.check.chkStyle+"_"+(a[b]?d.TRUE:d.FALSE)+ 18 | "_"+i,b=a.check_Focus&&a.chkDisabled!==!0?b+"_"+d.FOCUS:b;return j.className.BUTTON+" "+d.DEFAULT+" "+b},repairAllChk:function(c,a){if(c.check.enable&&c.check.chkStyle===j.checkbox.STYLE)for(var b=c.data.key.checked,d=c.data.key.children,h=g.getRoot(c),i=0,l=h[d].length;i 0?e.repairParentChkClass(c,a[b][0]):e.repairParentChkClass(c,a)}},repairSonChkDisabled:function(c,a,b,d){if(a){var h=c.data.key.children;if(a.chkDisabled!=b)a.chkDisabled=b;e.repairChkClass(c,a);if(a[h]&&d)for(var i=0,l=a[h].length;i 0){l=!1;break}l&&e.setParentNodeCheckBox(c,a.getParentNode(),b,d)}},setSonNodeCheckBox:function(c,a,b,d){if(a){var h=c.data.key.children,i=c.data.key.checked,l=n(a,j.id.CHECK,c);d||(d=a);var f=!1;if(a[h])for(var k=0,m=a[h].length;k 0?b?2:0:-1}else a.check_Child_State=-1;e.setChkClass(c,l,a);c.check.autoCheckTrigger&&a!=d&&a.nocheck!==!0&&a.chkDisabled!==!0&&c.treeObj.trigger(j.event.CHECK,[null,c.treeId,a])}}}},event:{},data:{getRadioCheckedList:function(c){for(var a=g.getRoot(c).radioCheckedList,b=0,d=a.length;b -1&&a.check_Child_State<2:a.check_Child_State>0}},getTreeCheckedNodes:function(c,a,b,d){if(!a)return[];for(var h=c.data.key.children,i=c.data.key.checked,e=b&&c.check.chkStyle==j.radio.STYLE&&c.check.radioType==j.radio.TYPE_ALL,d=!d?[]:d, 24 | f=0,k=a.length;f 0)break}return d},getTreeChangeCheckedNodes:function(c,a,b){if(!a)return[];for(var d=c.data.key.children,h=c.data.key.checked,b=!b?[]:b,i=0,e=a.length;i 0?2:0,g==2){h=2;break}else g==0&&(h=0);else if(c.check.chkStyle==j.checkbox.STYLE)if(g=f.nocheck===!0||f.chkDisabled===!0?f.check_Child_State:f.halfCheck===!0?1:f[d]?f.check_Child_State===-1||f.check_Child_State===2?2:1:f.check_Child_State>0?1:0,g===1){h=1;break}else if(g=== 26 | 2&&h>-1&&i>0&&g!==h){h=1;break}else if(h===2&&g>-1&&g<2){h=1;break}else g>-1&&(h=g)}a.check_Child_State=h}}}});var m=m.fn.zTree,k=m._z.tools,j=m.consts,e=m._z.view,g=m._z.data,n=k.$;g.exSetting(v);g.addInitBind(function(c){c.treeObj.bind(j.event.CHECK,function(a,b,d,h){a.srcEvent=b;k.apply(c.callback.onCheck,[a,d,h])})});g.addInitUnBind(function(c){c.treeObj.unbind(j.event.CHECK)});g.addInitCache(function(){});g.addInitNode(function(c,a,b,d){if(b){a=c.data.key.checked;typeof b[a]=="string"&&(b[a]= 27 | k.eqs(b[a],"true"));b[a]=!!b[a];b.checkedOld=b[a];if(typeof b.nocheck=="string")b.nocheck=k.eqs(b.nocheck,"true");b.nocheck=!!b.nocheck||c.check.nocheckInherit&&d&&!!d.nocheck;if(typeof b.chkDisabled=="string")b.chkDisabled=k.eqs(b.chkDisabled,"true");b.chkDisabled=!!b.chkDisabled||c.check.chkDisabledInherit&&d&&!!d.chkDisabled;if(typeof b.halfCheck=="string")b.halfCheck=k.eqs(b.halfCheck,"true");b.halfCheck=!!b.halfCheck;b.check_Child_State=-1;b.check_Focus=!1;b.getCheckStatus=function(){return g.getCheckStatus(c, 28 | b)};c.check.chkStyle==j.radio.STYLE&&c.check.radioType==j.radio.TYPE_ALL&&b[a]&&g.getRoot(c).radioCheckedList.push(b)}});g.addInitProxy(function(c){var a=c.target,b=g.getSetting(c.data.treeId),d="",h=null,e="",l=null;if(k.eqs(c.type,"mouseover")){if(b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d=k.getNodeMainDom(a).id,e="mouseoverCheck"}else if(k.eqs(c.type,"mouseout")){if(b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d= 29 | k.getNodeMainDom(a).id,e="mouseoutCheck"}else if(k.eqs(c.type,"click")&&b.check.enable&&k.eqs(a.tagName,"span")&&a.getAttribute("treeNode"+j.id.CHECK)!==null)d=k.getNodeMainDom(a).id,e="checkNode";if(d.length>0)switch(h=g.getNodeCache(b,d),e){case "checkNode":l=p;break;case "mouseoverCheck":l=q;break;case "mouseoutCheck":l=r}return{stop:e==="checkNode",node:h,nodeEventType:e,nodeEventCallback:l,treeEventType:"",treeEventCallback:null}},!0);g.addInitRoot(function(c){g.getRoot(c).radioCheckedList=[]}); 30 | g.addBeforeA(function(c,a,b){c.check.enable&&(g.makeChkFlag(c,a),b.push(""))});g.addZTreeTools(function(c,a){a.checkNode=function(a,b,c,g){var f=this.setting.data.key.checked;if(a.chkDisabled!==!0&&(b!==!0&&b!==!1&&(b=!a[f]),g=!!g,(a[f]!==b||c)&&!(g&&k.apply(this.setting.callback.beforeCheck,[this.setting.treeId,a],!0)==!1)&&k.uCanDo(this.setting)&&this.setting.check.enable&& 31 | a.nocheck!==!0))a[f]=b,b=n(a,j.id.CHECK,this.setting),(c||this.setting.check.chkStyle===j.radio.STYLE)&&e.checkNodeRelation(this.setting,a),e.setChkClass(this.setting,b,a),e.repairParentChkClassWithSelf(this.setting,a),g&&this.setting.treeObj.trigger(j.event.CHECK,[null,this.setting.treeId,a])};a.checkAllNodes=function(a){e.repairAllChk(this.setting,!!a)};a.getCheckedNodes=function(a){var b=this.setting.data.key.children;return g.getTreeCheckedNodes(this.setting,g.getRoot(this.setting)[b],a!==!1)}; 32 | a.getChangeCheckedNodes=function(){var a=this.setting.data.key.children;return g.getTreeChangeCheckedNodes(this.setting,g.getRoot(this.setting)[a])};a.setChkDisabled=function(a,b,c,g){b=!!b;c=!!c;e.repairSonChkDisabled(this.setting,a,b,!!g);e.repairParentChkDisabled(this.setting,a.getParentNode(),b,c)};var b=a.updateNode;a.updateNode=function(c,g){b&&b.apply(a,arguments);if(c&&this.setting.check.enable&&n(c,this.setting).get(0)&&k.uCanDo(this.setting)){var i=n(c,j.id.CHECK,this.setting);(g==!0||this.setting.check.chkStyle=== 33 | j.radio.STYLE)&&e.checkNodeRelation(this.setting,c);e.setChkClass(this.setting,i,c);e.repairParentChkClassWithSelf(this.setting,c)}}});var s=e.createNodes;e.createNodes=function(c,a,b,d,g){s&&s.apply(e,arguments);b&&e.repairParentChkClassWithSelf(c,d)};var t=e.removeNode;e.removeNode=function(c,a){var b=a.getParentNode();t&&t.apply(e,arguments);a&&b&&(e.repairChkClass(c,b),e.repairParentChkClass(c,b))};var u=e.appendNodes;e.appendNodes=function(c,a,b,d,h,i,j){var f="";u&&(f=u.apply(e,arguments)); 34 | d&&g.makeChkFlag(c,d);return f}})(jQuery); 35 | -------------------------------------------------------------------------------- /assets/js/jquery.ztree.exedit-3.5.js: -------------------------------------------------------------------------------- 1 | /* 2 | * JQuery zTree exedit v3.5.20 3 | * http://zTree.me/ 4 | * 5 | * Copyright (c) 2010 Hunter.z 6 | * 7 | * Licensed same as jquery - MIT License 8 | * http://www.opensource.org/licenses/mit-license.php 9 | * 10 | * email: hunter.z@263.net 11 | * Date: 2016-01-20 12 | */ 13 | (function($){ 14 | //default consts of exedit 15 | var _consts = { 16 | event: { 17 | DRAG: "ztree_drag", 18 | DROP: "ztree_drop", 19 | RENAME: "ztree_rename", 20 | DRAGMOVE:"ztree_dragmove" 21 | }, 22 | id: { 23 | EDIT: "_edit", 24 | INPUT: "_input", 25 | REMOVE: "_remove" 26 | }, 27 | move: { 28 | TYPE_INNER: "inner", 29 | TYPE_PREV: "prev", 30 | TYPE_NEXT: "next" 31 | }, 32 | node: { 33 | CURSELECTED_EDIT: "curSelectedNode_Edit", 34 | TMPTARGET_TREE: "tmpTargetzTree", 35 | TMPTARGET_NODE: "tmpTargetNode" 36 | } 37 | }, 38 | //default setting of exedit 39 | _setting = { 40 | edit: { 41 | enable: false, 42 | editNameSelectAll: false, 43 | showRemoveBtn: true, 44 | showRenameBtn: true, 45 | removeTitle: "remove", 46 | renameTitle: "rename", 47 | drag: { 48 | autoExpandTrigger: false, 49 | isCopy: true, 50 | isMove: true, 51 | prev: true, 52 | next: true, 53 | inner: true, 54 | minMoveSize: 5, 55 | borderMax: 10, 56 | borderMin: -5, 57 | maxShowNodeNum: 5, 58 | autoOpenTime: 500 59 | } 60 | }, 61 | view: { 62 | addHoverDom: null, 63 | removeHoverDom: null 64 | }, 65 | callback: { 66 | beforeDrag:null, 67 | beforeDragOpen:null, 68 | beforeDrop:null, 69 | beforeEditName:null, 70 | beforeRename:null, 71 | onDrag:null, 72 | onDragMove:null, 73 | onDrop:null, 74 | onRename:null 75 | } 76 | }, 77 | //default root of exedit 78 | _initRoot = function (setting) { 79 | var r = data.getRoot(setting), rs = data.getRoots(); 80 | r.curEditNode = null; 81 | r.curEditInput = null; 82 | r.curHoverNode = null; 83 | r.dragFlag = 0; 84 | r.dragNodeShowBefore = []; 85 | r.dragMaskList = new Array(); 86 | rs.showHoverDom = true; 87 | }, 88 | //default cache of exedit 89 | _initCache = function(treeId) {}, 90 | //default bind event of exedit 91 | _bindEvent = function(setting) { 92 | var o = setting.treeObj; 93 | var c = consts.event; 94 | o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) { 95 | tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]); 96 | }); 97 | 98 | o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) { 99 | tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]); 100 | }); 101 | 102 | o.bind(c.DRAGMOVE,function(event, srcEvent, treeId, treeNodes){ 103 | tools.apply(setting.callback.onDragMove,[srcEvent, treeId, treeNodes]); 104 | }); 105 | 106 | o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) { 107 | tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]); 108 | }); 109 | }, 110 | _unbindEvent = function(setting) { 111 | var o = setting.treeObj; 112 | var c = consts.event; 113 | o.unbind(c.RENAME); 114 | o.unbind(c.DRAG); 115 | o.unbind(c.DRAGMOVE); 116 | o.unbind(c.DROP); 117 | }, 118 | //default event proxy of exedit 119 | _eventProxy = function(e) { 120 | var target = e.target, 121 | setting = data.getSetting(e.data.treeId), 122 | relatedTarget = e.relatedTarget, 123 | tId = "", node = null, 124 | nodeEventType = "", treeEventType = "", 125 | nodeEventCallback = null, treeEventCallback = null, 126 | tmp = null; 127 | 128 | if (tools.eqs(e.type, "mouseover")) { 129 | tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]); 130 | if (tmp) { 131 | tId = tools.getNodeMainDom(tmp).id; 132 | nodeEventType = "hoverOverNode"; 133 | } 134 | } else if (tools.eqs(e.type, "mouseout")) { 135 | tmp = tools.getMDom(setting, relatedTarget, [{tagName:"a", attrName:"treeNode"+consts.id.A}]); 136 | if (!tmp) { 137 | tId = "remove"; 138 | nodeEventType = "hoverOutNode"; 139 | } 140 | } else if (tools.eqs(e.type, "mousedown")) { 141 | tmp = tools.getMDom(setting, target, [{tagName:"a", attrName:"treeNode"+consts.id.A}]); 142 | if (tmp) { 143 | tId = tools.getNodeMainDom(tmp).id; 144 | nodeEventType = "mousedownNode"; 145 | } 146 | } 147 | if (tId.length>0) { 148 | node = data.getNodeCache(setting, tId); 149 | switch (nodeEventType) { 150 | case "mousedownNode" : 151 | nodeEventCallback = _handler.onMousedownNode; 152 | break; 153 | case "hoverOverNode" : 154 | nodeEventCallback = _handler.onHoverOverNode; 155 | break; 156 | case "hoverOutNode" : 157 | nodeEventCallback = _handler.onHoverOutNode; 158 | break; 159 | } 160 | } 161 | var proxyResult = { 162 | stop: false, 163 | node: node, 164 | nodeEventType: nodeEventType, 165 | nodeEventCallback: nodeEventCallback, 166 | treeEventType: treeEventType, 167 | treeEventCallback: treeEventCallback 168 | }; 169 | return proxyResult 170 | }, 171 | //default init node of exedit 172 | _initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { 173 | if (!n) return; 174 | n.isHover = false; 175 | n.editNameFlag = false; 176 | }, 177 | //update zTreeObj, add method of edit 178 | _zTreeTools = function(setting, zTreeTools) { 179 | zTreeTools.cancelEditName = function(newName) { 180 | var root = data.getRoot(this.setting); 181 | if (!root.curEditNode) return; 182 | view.cancelCurEditNode(this.setting, newName?newName:null, true); 183 | } 184 | zTreeTools.copyNode = function(targetNode, node, moveType, isSilent) { 185 | if (!node) return null; 186 | if (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null; 187 | var _this = this, 188 | newNode = tools.clone(node); 189 | if (!targetNode) { 190 | targetNode = null; 191 | moveType = consts.move.TYPE_INNER; 192 | } 193 | if (moveType == consts.move.TYPE_INNER) { 194 | function copyCallback() { 195 | view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent); 196 | } 197 | 198 | if (tools.canAsync(this.setting, targetNode)) { 199 | view.asyncNode(this.setting, targetNode, isSilent, copyCallback); 200 | } else { 201 | copyCallback(); 202 | } 203 | } else { 204 | view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent); 205 | view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent); 206 | } 207 | return newNode; 208 | } 209 | zTreeTools.editName = function(node) { 210 | if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return; 211 | if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true); 212 | view.editNode(this.setting, node) 213 | } 214 | zTreeTools.moveNode = function(targetNode, node, moveType, isSilent) { 215 | if (!node) return node; 216 | if (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) { 217 | return null; 218 | } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) { 219 | return null; 220 | } else if (!targetNode) { 221 | targetNode = null; 222 | } 223 | var _this = this; 224 | function moveCallback() { 225 | view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent); 226 | } 227 | if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) { 228 | view.asyncNode(this.setting, targetNode, isSilent, moveCallback); 229 | } else { 230 | moveCallback(); 231 | } 232 | return node; 233 | } 234 | zTreeTools.setEditable = function(editable) { 235 | this.setting.edit.enable = editable; 236 | return this.refresh(); 237 | } 238 | }, 239 | //method of operate data 240 | _data = { 241 | setSonNodeLevel: function(setting, parentNode, node) { 242 | if (!node) return; 243 | var childKey = setting.data.key.children; 244 | node.level = (parentNode)? parentNode.level + 1 : 0; 245 | if (!node[childKey]) return; 246 | for (var i = 0, l = node[childKey].length; i < l; i++) { 247 | if (node[childKey][i]) data.setSonNodeLevel(setting, node, node[childKey][i]); 248 | } 249 | } 250 | }, 251 | //method of event proxy 252 | _event = { 253 | 254 | }, 255 | //method of event handler 256 | _handler = { 257 | onHoverOverNode: function(event, node) { 258 | var setting = data.getSetting(event.data.treeId), 259 | root = data.getRoot(setting); 260 | if (root.curHoverNode != node) { 261 | _handler.onHoverOutNode(event); 262 | } 263 | root.curHoverNode = node; 264 | view.addHoverDom(setting, node); 265 | }, 266 | onHoverOutNode: function(event, node) { 267 | var setting = data.getSetting(event.data.treeId), 268 | root = data.getRoot(setting); 269 | if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) { 270 | view.removeTreeDom(setting, root.curHoverNode); 271 | root.curHoverNode = null; 272 | } 273 | }, 274 | onMousedownNode: function(eventMouseDown, _node) { 275 | var i,l, 276 | setting = data.getSetting(eventMouseDown.data.treeId), 277 | root = data.getRoot(setting), roots = data.getRoots(); 278 | //right click can't drag & drop 279 | if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true; 280 | 281 | //input of edit node name can't drag & drop 282 | var target = eventMouseDown.target, 283 | _nodes = data.getRoot(setting).curSelectedList, 284 | nodes = []; 285 | if (!data.isSelectedNode(setting, _node)) { 286 | nodes = [_node]; 287 | } else { 288 | for (i=0, l=_nodes.length; i 1) { 356 | var pNodes = nodes[0].parentTId ? nodes[0].getParentNode()[childKey] : data.getNodes(setting); 357 | tmpNodes = []; 358 | for (i=0, l=pNodes.length; i -1 && (lastIndex+1) !== i) { 361 | isOrder = false; 362 | } 363 | tmpNodes.push(pNodes[i]); 364 | lastIndex = i; 365 | } 366 | if (nodes.length === tmpNodes.length) { 367 | nodes = tmpNodes; 368 | break; 369 | } 370 | } 371 | } 372 | if (isOrder) { 373 | preNode = nodes[0].getPreNode(); 374 | nextNode = nodes[nodes.length-1].getNextNode(); 375 | } 376 | 377 | //set node in selected 378 | curNode = $$(" ", setting); 379 | for (i=0, l=nodes.length; i
0); 383 | view.removeTreeDom(setting, tmpNode); 384 | 385 | if (i > setting.edit.drag.maxShowNodeNum-1) { 386 | continue; 387 | } 388 | 389 | tmpDom = $$("", setting); 390 | tmpDom.append($$(tmpNode, consts.id.A, setting).clone()); 391 | tmpDom.css("padding", "0"); 392 | tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED); 393 | curNode.append(tmpDom); 394 | if (i == setting.edit.drag.maxShowNodeNum-1) { 395 | tmpDom = $$(" ... ", setting); 396 | curNode.append(tmpDom); 397 | } 398 | } 399 | curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp"); 400 | curNode.addClass(setting.treeObj.attr("class")); 401 | curNode.appendTo(body); 402 | 403 | tmpArrow = $$("", setting); 404 | tmpArrow.attr("id", "zTreeMove_arrow_tmp"); 405 | tmpArrow.appendTo(body); 406 | 407 | setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]); 408 | } 409 | 410 | if (root.dragFlag == 1) { 411 | if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft()+2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) { 412 | var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget); 413 | event.target = (xT.length > 0) ? xT.get(0) : event.target; 414 | } else if (tmpTarget) { 415 | tmpTarget.removeClass(consts.node.TMPTARGET_TREE); 416 | if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) 417 | .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); 418 | } 419 | tmpTarget = null; 420 | tmpTargetNodeId = null; 421 | 422 | //judge drag & drop in multi ztree 423 | isOtherTree = false; 424 | targetSetting = setting; 425 | var settings = data.getSettings(); 426 | for (var s in settings) { 427 | if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId 428 | && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length>0)) { 429 | isOtherTree = true; 430 | targetSetting = settings[s]; 431 | } 432 | } 433 | 434 | var docScrollTop = doc.scrollTop(), 435 | docScrollLeft = doc.scrollLeft(), 436 | treeOffset = targetSetting.treeObj.offset(), 437 | scrollHeight = targetSetting.treeObj.get(0).scrollHeight, 438 | scrollWidth = targetSetting.treeObj.get(0).scrollWidth, 439 | dTop = (event.clientY + docScrollTop - treeOffset.top), 440 | dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop), 441 | dLeft = (event.clientX + docScrollLeft - treeOffset.left), 442 | dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft), 443 | isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin), 444 | isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin), 445 | isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin), 446 | isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin), 447 | isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin, 448 | isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0), 449 | isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height()+10) >= scrollHeight), 450 | isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0), 451 | isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width()+10) >= scrollWidth); 452 | 453 | if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) { 454 | //get nodedom 455 | var targetObj = event.target; 456 | while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) { 457 | targetObj = targetObj.parentNode; 458 | } 459 | 460 | var canMove = true; 461 | //don't move to self or children of self 462 | for (i=0, l=nodes.length; i 0) { 468 | canMove = false; 469 | break; 470 | } 471 | } 472 | if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) { 473 | tmpTarget = $(targetObj); 474 | tmpTargetNodeId = targetObj.id; 475 | } 476 | } 477 | 478 | //the mouse must be in zTree 479 | tmpNode = nodes[0]; 480 | if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) { 481 | //judge mouse move in root of ztree 482 | if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) { 483 | tmpTarget = targetSetting.treeObj; 484 | } 485 | //auto scroll top 486 | if (isTop) { 487 | targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()-10); 488 | } else if (isBottom) { 489 | targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()+10); 490 | } 491 | if (isLeft) { 492 | targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()-10); 493 | } else if (isRight) { 494 | targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+10); 495 | } 496 | //auto scroll left 497 | if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) { 498 | targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+ tmpTarget.offset().left - targetSetting.treeObj.offset().left); 499 | } 500 | } 501 | 502 | curNode.css({ 503 | "top": (event.clientY + docScrollTop + 3) + "px", 504 | "left": (event.clientX + docScrollLeft + 3) + "px" 505 | }); 506 | 507 | var dX = 0; 508 | var dY = 0; 509 | if (tmpTarget && tmpTarget.attr("id")!=targetSetting.treeId) { 510 | var tmpTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId), 511 | isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy), 512 | isPrev = !!(preNode && tmpTargetNodeId === preNode.tId), 513 | isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId), 514 | isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId), 515 | canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev), 516 | canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next), 517 | canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !tmpTargetNode.isParent) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner); 518 | if (!canPrev && !canNext && !canInner) { 519 | tmpTarget = null; 520 | tmpTargetNodeId = ""; 521 | moveType = consts.move.TYPE_INNER; 522 | tmpArrow.css({ 523 | "display":"none" 524 | }); 525 | if (window.zTreeMoveTimer) { 526 | clearTimeout(window.zTreeMoveTimer); 527 | window.zTreeMoveTargetNodeTId = null 528 | } 529 | } else { 530 | var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget), 531 | tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()), 532 | tmpTop = tmpTargetA.offset().top, 533 | tmpLeft = tmpTargetA.offset().left, 534 | prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1) ) : -1, 535 | nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0) ) : -1, 536 | dY_percent = (event.clientY + docScrollTop - tmpTop)/tmpTargetA.height(); 537 | if ((prevPercent==1 ||dY_percent<=prevPercent && dY_percent>=-.2) && canPrev) { 538 | dX = 1 - tmpArrow.width(); 539 | dY = tmpTop - tmpArrow.height()/2; 540 | moveType = consts.move.TYPE_PREV; 541 | } else if ((nextPercent==0 || dY_percent>=nextPercent && dY_percent<=1.2) && canNext) { 542 | dX = 1 - tmpArrow.width(); 543 | dY = (tmpNextA == null || (tmpTargetNode.isParent && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height()/2) : (tmpNextA.offset().top - tmpArrow.height()/2); 544 | moveType = consts.move.TYPE_NEXT; 545 | }else { 546 | dX = 5 - tmpArrow.width(); 547 | dY = tmpTop; 548 | moveType = consts.move.TYPE_INNER; 549 | } 550 | tmpArrow.css({ 551 | "display":"block", 552 | "top": dY + "px", 553 | "left": (tmpLeft + dX) + "px" 554 | }); 555 | tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType); 556 | 557 | if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) { 558 | startTime = (new Date()).getTime(); 559 | } 560 | if (tmpTargetNode && tmpTargetNode.isParent && moveType == consts.move.TYPE_INNER) { 561 | var startTimer = true; 562 | if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) { 563 | clearTimeout(window.zTreeMoveTimer); 564 | window.zTreeMoveTargetNodeTId = null; 565 | }else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) { 566 | startTimer = false; 567 | } 568 | if (startTimer) { 569 | window.zTreeMoveTimer = setTimeout(function() { 570 | if (moveType != consts.move.TYPE_INNER) return; 571 | if (tmpTargetNode && tmpTargetNode.isParent && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime 572 | && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) { 573 | view.switchNode(targetSetting, tmpTargetNode); 574 | if (targetSetting.edit.drag.autoExpandTrigger) { 575 | targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]); 576 | } 577 | } 578 | }, targetSetting.edit.drag.autoOpenTime+50); 579 | window.zTreeMoveTargetNodeTId = tmpTargetNode.tId; 580 | } 581 | } 582 | } 583 | } else { 584 | moveType = consts.move.TYPE_INNER; 585 | if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) { 586 | tmpTarget.addClass(consts.node.TMPTARGET_TREE); 587 | } else { 588 | tmpTarget = null; 589 | } 590 | tmpArrow.css({ 591 | "display":"none" 592 | }); 593 | if (window.zTreeMoveTimer) { 594 | clearTimeout(window.zTreeMoveTimer); 595 | window.zTreeMoveTargetNodeTId = null; 596 | } 597 | } 598 | preTmpTargetNodeId = tmpTargetNodeId; 599 | preTmpMoveType = moveType; 600 | 601 | setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]); 602 | } 603 | return false; 604 | } 605 | 606 | doc.bind("mouseup", _docMouseUp); 607 | function _docMouseUp(event) { 608 | if (window.zTreeMoveTimer) { 609 | clearTimeout(window.zTreeMoveTimer); 610 | window.zTreeMoveTargetNodeTId = null; 611 | } 612 | preTmpTargetNodeId = null; 613 | preTmpMoveType = null; 614 | doc.unbind("mousemove", _docMouseMove); 615 | doc.unbind("mouseup", _docMouseUp); 616 | doc.unbind("selectstart", _docSelect); 617 | body.css("cursor", "auto"); 618 | if (tmpTarget) { 619 | tmpTarget.removeClass(consts.node.TMPTARGET_TREE); 620 | if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV) 621 | .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER); 622 | } 623 | tools.showIfameMask(setting, false); 624 | 625 | roots.showHoverDom = true; 626 | if (root.dragFlag == 0) return; 627 | root.dragFlag = 0; 628 | 629 | var i, l, tmpNode; 630 | for (i=0, l=nodes.length; i 0) { 757 | root.dragMaskList[0].remove(); 758 | root.dragMaskList.shift(); 759 | } 760 | if (showSign) { 761 | //show mask 762 | var iframeList = $$("iframe", setting); 763 | for (var i = 0, l = iframeList.length; i < l; i++) { 764 | var obj = iframeList.get(i), 765 | r = tools.getAbs(obj), 766 | dragMask = $$("", setting); 767 | dragMask.appendTo($$("body", setting)); 768 | root.dragMaskList.push(dragMask); 769 | } 770 | } 771 | } 772 | }, 773 | //method of operate ztree dom 774 | _view = { 775 | addEditBtn: function(setting, node) { 776 | if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) { 777 | return; 778 | } 779 | if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) { 780 | return; 781 | } 782 | var aObj = $$(node, consts.id.A, setting), 783 | editStr = ""; 784 | aObj.append(editStr); 785 | 786 | $$(node, consts.id.EDIT, setting).bind('click', 787 | function() { 788 | if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false; 789 | view.editNode(setting, node); 790 | return false; 791 | } 792 | ).show(); 793 | }, 794 | addRemoveBtn: function(setting, node) { 795 | if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) { 796 | return; 797 | } 798 | if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) { 799 | return; 800 | } 801 | var aObj = $$(node, consts.id.A, setting), 802 | removeStr = ""; 803 | aObj.append(removeStr); 804 | 805 | $$(node, consts.id.REMOVE, setting).bind('click', 806 | function() { 807 | if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false; 808 | view.removeNode(setting, node); 809 | setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); 810 | return false; 811 | } 812 | ).bind('mousedown', 813 | function(eventMouseDown) { 814 | return true; 815 | } 816 | ).show(); 817 | }, 818 | addHoverDom: function(setting, node) { 819 | if (data.getRoots().showHoverDom) { 820 | node.isHover = true; 821 | if (setting.edit.enable) { 822 | view.addEditBtn(setting, node); 823 | view.addRemoveBtn(setting, node); 824 | } 825 | tools.apply(setting.view.addHoverDom, [setting.treeId, node]); 826 | } 827 | }, 828 | cancelCurEditNode: function (setting, forceName, isCancel) { 829 | var root = data.getRoot(setting), 830 | nameKey = setting.data.key.name, 831 | node = root.curEditNode; 832 | 833 | if (node) { 834 | var inputObj = root.curEditInput, 835 | newName = forceName ? forceName:(isCancel ? node[nameKey]: inputObj.val()); 836 | if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) { 837 | return false; 838 | } 839 | node[nameKey] = newName; 840 | var aObj = $$(node, consts.id.A, setting); 841 | aObj.removeClass(consts.node.CURSELECTED_EDIT); 842 | inputObj.unbind(); 843 | view.setNodeName(setting, node); 844 | node.editNameFlag = false; 845 | root.curEditNode = null; 846 | root.curEditInput = null; 847 | view.selectNode(setting, node, false); 848 | setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]); 849 | } 850 | root.noSelection = true; 851 | return true; 852 | }, 853 | editNode: function(setting, node) { 854 | var root = data.getRoot(setting); 855 | view.editNodeBlur = false; 856 | if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { 857 | setTimeout(function() {tools.inputFocus(root.curEditInput);}, 0); 858 | return; 859 | } 860 | var nameKey = setting.data.key.name; 861 | node.editNameFlag = true; 862 | view.removeTreeDom(setting, node); 863 | view.cancelCurEditNode(setting); 864 | view.selectNode(setting, node, false); 865 | $$(node, consts.id.SPAN, setting).html(""); 866 | var inputObj = $$(node, consts.id.INPUT, setting); 867 | inputObj.attr("value", node[nameKey]); 868 | if (setting.edit.editNameSelectAll) { 869 | tools.inputSelect(inputObj); 870 | } else { 871 | tools.inputFocus(inputObj); 872 | } 873 | 874 | inputObj.bind('blur', function(event) { 875 | if (!view.editNodeBlur) { 876 | view.cancelCurEditNode(setting); 877 | } 878 | }).bind('keydown', function(event) { 879 | if (event.keyCode=="13") { 880 | view.editNodeBlur = true; 881 | view.cancelCurEditNode(setting); 882 | } else if (event.keyCode=="27") { 883 | view.cancelCurEditNode(setting, null, true); 884 | } 885 | }).bind('click', function(event) { 886 | return false; 887 | }).bind('dblclick', function(event) { 888 | return false; 889 | }); 890 | 891 | $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT); 892 | root.curEditInput = inputObj; 893 | root.noSelection = false; 894 | root.curEditNode = node; 895 | }, 896 | moveNode: function(setting, targetNode, node, moveType, animateFlag, isSilent) { 897 | var root = data.getRoot(setting), 898 | childKey = setting.data.key.children; 899 | if (targetNode == node) return; 900 | if (setting.data.keep.leaf && targetNode && !targetNode.isParent && moveType == consts.move.TYPE_INNER) return; 901 | var oldParentNode = (node.parentTId ? node.getParentNode(): root), 902 | targetNodeIsRoot = (targetNode === null || targetNode == root); 903 | if (targetNodeIsRoot && targetNode === null) targetNode = root; 904 | if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER; 905 | var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root); 906 | 907 | if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) { 908 | moveType = consts.move.TYPE_INNER; 909 | } 910 | 911 | if (moveType == consts.move.TYPE_INNER) { 912 | if (targetNodeIsRoot) { 913 | //parentTId of root node is null 914 | node.parentTId = null; 915 | } else { 916 | if (!targetNode.isParent) { 917 | targetNode.isParent = true; 918 | targetNode.open = !!targetNode.open; 919 | view.setNodeLineIcos(setting, targetNode); 920 | } 921 | node.parentTId = targetNode.tId; 922 | } 923 | } 924 | 925 | //move node Dom 926 | var targetObj, target_ulObj; 927 | if (targetNodeIsRoot) { 928 | targetObj = setting.treeObj; 929 | target_ulObj = targetObj; 930 | } else { 931 | if (!isSilent && moveType == consts.move.TYPE_INNER) { 932 | view.expandCollapseNode(setting, targetNode, true, false); 933 | } else if (!isSilent) { 934 | view.expandCollapseNode(setting, targetNode.getParentNode(), true, false); 935 | } 936 | targetObj = $$(targetNode, setting); 937 | target_ulObj = $$(targetNode, consts.id.UL, setting); 938 | if (!!targetObj.get(0) && !target_ulObj.get(0)) { 939 | var ulstr = []; 940 | view.makeUlHtml(setting, targetNode, ulstr, ''); 941 | targetObj.append(ulstr.join('')); 942 | } 943 | target_ulObj = $$(targetNode, consts.id.UL, setting); 944 | } 945 | var nodeDom = $$(node, setting); 946 | if (!nodeDom.get(0)) { 947 | nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join(''); 948 | } else if (!targetObj.get(0)) { 949 | nodeDom.remove(); 950 | } 951 | if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) { 952 | target_ulObj.append(nodeDom); 953 | } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) { 954 | targetObj.before(nodeDom); 955 | } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) { 956 | targetObj.after(nodeDom); 957 | } 958 | 959 | //repair the data after move 960 | var i,l, 961 | tmpSrcIndex = -1, 962 | tmpTargetIndex = 0, 963 | oldNeighbor = null, 964 | newNeighbor = null, 965 | oldLevel = node.level; 966 | if (node.isFirstNode) { 967 | tmpSrcIndex = 0; 968 | if (oldParentNode[childKey].length > 1 ) { 969 | oldNeighbor = oldParentNode[childKey][1]; 970 | oldNeighbor.isFirstNode = true; 971 | } 972 | } else if (node.isLastNode) { 973 | tmpSrcIndex = oldParentNode[childKey].length -1; 974 | oldNeighbor = oldParentNode[childKey][tmpSrcIndex - 1]; 975 | oldNeighbor.isLastNode = true; 976 | } else { 977 | for (i = 0, l = oldParentNode[childKey].length; i < l; i++) { 978 | if (oldParentNode[childKey][i].tId == node.tId) { 979 | tmpSrcIndex = i; 980 | break; 981 | } 982 | } 983 | } 984 | if (tmpSrcIndex >= 0) { 985 | oldParentNode[childKey].splice(tmpSrcIndex, 1); 986 | } 987 | if (moveType != consts.move.TYPE_INNER) { 988 | for (i = 0, l = targetParentNode[childKey].length; i < l; i++) { 989 | if (targetParentNode[childKey][i].tId == targetNode.tId) tmpTargetIndex = i; 990 | } 991 | } 992 | if (moveType == consts.move.TYPE_INNER) { 993 | if (!targetNode[childKey]) targetNode[childKey] = new Array(); 994 | if (targetNode[childKey].length > 0) { 995 | newNeighbor = targetNode[childKey][targetNode[childKey].length - 1]; 996 | newNeighbor.isLastNode = false; 997 | } 998 | targetNode[childKey].splice(targetNode[childKey].length, 0, node); 999 | node.isLastNode = true; 1000 | node.isFirstNode = (targetNode[childKey].length == 1); 1001 | } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) { 1002 | targetParentNode[childKey].splice(tmpTargetIndex, 0, node); 1003 | newNeighbor = targetNode; 1004 | newNeighbor.isFirstNode = false; 1005 | node.parentTId = targetNode.parentTId; 1006 | node.isFirstNode = true; 1007 | node.isLastNode = false; 1008 | 1009 | } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) { 1010 | targetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node); 1011 | newNeighbor = targetNode; 1012 | newNeighbor.isLastNode = false; 1013 | node.parentTId = targetNode.parentTId; 1014 | node.isFirstNode = false; 1015 | node.isLastNode = true; 1016 | 1017 | } else { 1018 | if (moveType == consts.move.TYPE_PREV) { 1019 | targetParentNode[childKey].splice(tmpTargetIndex, 0, node); 1020 | } else { 1021 | targetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node); 1022 | } 1023 | node.parentTId = targetNode.parentTId; 1024 | node.isFirstNode = false; 1025 | node.isLastNode = false; 1026 | } 1027 | data.fixPIdKeyValue(setting, node); 1028 | data.setSonNodeLevel(setting, node.getParentNode(), node); 1029 | 1030 | //repair node what been moved 1031 | view.setNodeLineIcos(setting, node); 1032 | view.repairNodeLevelClass(setting, node, oldLevel) 1033 | 1034 | //repair node's old parentNode dom 1035 | if (!setting.data.keep.parent && oldParentNode[childKey].length < 1) { 1036 | //old parentNode has no child nodes 1037 | oldParentNode.isParent = false; 1038 | oldParentNode.open = false; 1039 | var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting), 1040 | tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting), 1041 | tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting); 1042 | view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU); 1043 | view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU); 1044 | tmp_ulObj.css("display", "none"); 1045 | 1046 | } else if (oldNeighbor) { 1047 | //old neigbor node 1048 | view.setNodeLineIcos(setting, oldNeighbor); 1049 | } 1050 | 1051 | //new neigbor node 1052 | if (newNeighbor) { 1053 | view.setNodeLineIcos(setting, newNeighbor); 1054 | } 1055 | 1056 | //repair checkbox / radio 1057 | if (!!setting.check && setting.check.enable && view.repairChkClass) { 1058 | view.repairChkClass(setting, oldParentNode); 1059 | view.repairParentChkClassWithSelf(setting, oldParentNode); 1060 | if (oldParentNode != node.parent) 1061 | view.repairParentChkClassWithSelf(setting, node); 1062 | } 1063 | 1064 | //expand parents after move 1065 | if (!isSilent) { 1066 | view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag); 1067 | } 1068 | }, 1069 | removeEditBtn: function(setting, node) { 1070 | $$(node, consts.id.EDIT, setting).unbind().remove(); 1071 | }, 1072 | removeRemoveBtn: function(setting, node) { 1073 | $$(node, consts.id.REMOVE, setting).unbind().remove(); 1074 | }, 1075 | removeTreeDom: function(setting, node) { 1076 | node.isHover = false; 1077 | view.removeEditBtn(setting, node); 1078 | view.removeRemoveBtn(setting, node); 1079 | tools.apply(setting.view.removeHoverDom, [setting.treeId, node]); 1080 | }, 1081 | repairNodeLevelClass: function(setting, node, oldLevel) { 1082 | if (oldLevel === node.level) return; 1083 | var liObj = $$(node, setting), 1084 | aObj = $$(node, consts.id.A, setting), 1085 | ulObj = $$(node, consts.id.UL, setting), 1086 | oldClass = consts.className.LEVEL + oldLevel, 1087 | newClass = consts.className.LEVEL + node.level; 1088 | liObj.removeClass(oldClass); 1089 | liObj.addClass(newClass); 1090 | aObj.removeClass(oldClass); 1091 | aObj.addClass(newClass); 1092 | ulObj.removeClass(oldClass); 1093 | ulObj.addClass(newClass); 1094 | }, 1095 | selectNodes : function(setting, nodes) { 1096 | for (var i=0, l=nodes.length; i 0); 1098 | } 1099 | } 1100 | }, 1101 | 1102 | _z = { 1103 | tools: _tools, 1104 | view: _view, 1105 | event: _event, 1106 | data: _data 1107 | }; 1108 | $.extend(true, $.fn.zTree.consts, _consts); 1109 | $.extend(true, $.fn.zTree._z, _z); 1110 | 1111 | var zt = $.fn.zTree, 1112 | tools = zt._z.tools, 1113 | consts = zt.consts, 1114 | view = zt._z.view, 1115 | data = zt._z.data, 1116 | event = zt._z.event, 1117 | $$ = tools.$; 1118 | 1119 | data.exSetting(_setting); 1120 | data.addInitBind(_bindEvent); 1121 | data.addInitUnBind(_unbindEvent); 1122 | data.addInitCache(_initCache); 1123 | data.addInitNode(_initNode); 1124 | data.addInitProxy(_eventProxy); 1125 | data.addInitRoot(_initRoot); 1126 | data.addZTreeTools(_zTreeTools); 1127 | 1128 | var _cancelPreSelectedNode = view.cancelPreSelectedNode; 1129 | view.cancelPreSelectedNode = function (setting, node) { 1130 | var list = data.getRoot(setting).curSelectedList; 1131 | for (var i=0, j=list.length; i 1){var j=l[0].parentTId?l[0].getParentNode()[i]:m.getNodes(e);i=[];for(a=0,c=j.length;a -1&&k+1!==a&&(n=!1),i.push(j[a]),k=a),l.length===i.length){l=i;break}}n&&(H=l[0].getPreNode(),R=l[l.length-1].getNextNode());D=o(" ", 16 | e);for(a=0,c=l.length;a
0),f.removeTreeDom(e,n),a>e.edit.drag.maxShowNodeNum-1||(k=o("",e),k.append(o(n,d.id.A,e).clone()),k.css("padding","0"),k.children("#"+n.tId+d.id.A).removeClass(d.node.CURSELECTED),D.append(k),a==e.edit.drag.maxShowNodeNum-1&&(k=o(" ... ",e),D.append(k)));D.attr("id",l[0].tId+d.id.UL+"_tmp");D.addClass(e.treeObj.attr("class"));D.appendTo(M);A=o("", 17 | e);A.attr("id","zTreeMove_arrow_tmp");A.appendTo(M);e.treeObj.trigger(d.event.DRAG,[b,e.treeId,l])}if(B.dragFlag==1){s&&A.attr("id")==b.target.id&&u&&b.clientX+F.scrollLeft()+2>v("#"+u+d.id.A,s).offset().left?(n=v("#"+u+d.id.A,s),b.target=n.length>0?n.get(0):b.target):s&&(s.removeClass(d.node.TMPTARGET_TREE),u&&v("#"+u+d.id.A,s).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER)); 18 | u=s=null;J=!1;h=e;n=m.getSettings();for(var y in n)if(n[y].treeId&&n[y].edit.enable&&n[y].treeId!=e.treeId&&(b.target.id==n[y].treeId||v(b.target).parents("#"+n[y].treeId).length>0))J=!0,h=n[y];y=F.scrollTop();k=F.scrollLeft();i=h.treeObj.offset();a=h.treeObj.get(0).scrollHeight;n=h.treeObj.get(0).scrollWidth;c=b.clientY+y-i.top;var p=h.treeObj.height()+i.top-b.clientY-y,q=b.clientX+k-i.left,x=h.treeObj.width()+i.left-b.clientX-k;i=ce.edit.drag.borderMin;var j=p e.edit.drag.borderMin,K=q e.edit.drag.borderMin,G=x e.edit.drag.borderMin,p=c>e.edit.drag.borderMin&&p>e.edit.drag.borderMin&&q>e.edit.drag.borderMin&&x>e.edit.drag.borderMin,q=i&&h.treeObj.scrollTop()<=0,x=j&&h.treeObj.scrollTop()+h.treeObj.height()+10>=a,P=K&&h.treeObj.scrollLeft()<=0,Q=G&&h.treeObj.scrollLeft()+h.treeObj.width()+10>=n;if(b.target&&g.isChildOrSelf(b.target,h.treeId)){for(var E=b.target;E&&E.tagName&&!g.eqs(E.tagName,"li")&&E.id!= 20 | h.treeId;)E=E.parentNode;var S=!0;for(a=0,c=l.length;a 0){S=!1;break}if(S&&b.target&&g.isChildOrSelf(b.target,E.id+d.id.A))s=v(E),u=E.id}n=l[0];if(p&&g.isChildOrSelf(b.target,h.treeId)){if(!s&&(b.target.id==h.treeId||q||x||P||Q)&&(J||!J&&n.parentTId))s=h.treeObj;i?h.treeObj.scrollTop(h.treeObj.scrollTop()-10):j&&h.treeObj.scrollTop(h.treeObj.scrollTop()+10);K?h.treeObj.scrollLeft(h.treeObj.scrollLeft()-10):G&&h.treeObj.scrollLeft(h.treeObj.scrollLeft()+ 21 | 10);s&&s!=h.treeObj&&s.offset().left =-0.2)&&n?(a=1-A.width(),i=j-A.height()/2,w=d.move.TYPE_PREV):(G==0||y>=G&&y<=1.2)&&a?(a=1-A.width(),i=i==null||z.isParent&&z.open?j+c.height()-A.height()/2:i.offset().top-A.height()/2,w=d.move.TYPE_NEXT):(a=5-A.width(),i=j,w=d.move.TYPE_INNER);A.css({display:"block",top:i+"px",left:k+a+"px"});c.addClass(d.node.TMPTARGET_NODE+"_"+w);if(T!=u||U!=w)L=(new Date).getTime();if(z&&z.isParent&&w==d.move.TYPE_INNER&&(y=!0,window.zTreeMoveTimer&& 24 | window.zTreeMoveTargetNodeTId!==z.tId?(clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null):window.zTreeMoveTimer&&window.zTreeMoveTargetNodeTId===z.tId&&(y=!1),y))window.zTreeMoveTimer=setTimeout(function(){w==d.move.TYPE_INNER&&z&&z.isParent&&!z.open&&(new Date).getTime()-L>h.edit.drag.autoOpenTime&&g.apply(h.callback.beforeDragOpen,[h.treeId,z],!0)&&(f.switchNode(h,z),h.edit.drag.autoExpandTrigger&&h.treeObj.trigger(d.event.EXPAND,[h.treeId,z]))},h.edit.drag.autoOpenTime+50), 25 | window.zTreeMoveTargetNodeTId=z.tId}}else if(w=d.move.TYPE_INNER,s&&g.apply(h.edit.drag.inner,[h.treeId,l,null],!!h.edit.drag.inner)?s.addClass(d.node.TMPTARGET_TREE):s=null,A.css({display:"none"}),window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;T=u;U=w;e.treeObj.trigger(d.event.DRAGMOVE,[b,e.treeId,l])}return!1}function r(b){if(window.zTreeMoveTimer)clearTimeout(window.zTreeMoveTimer),window.zTreeMoveTargetNodeTId=null;U=T=null;F.unbind("mousemove",c); 26 | F.unbind("mouseup",r);F.unbind("selectstart",k);M.css("cursor","auto");s&&(s.removeClass(d.node.TMPTARGET_TREE),u&&v("#"+u+d.id.A,s).removeClass(d.node.TMPTARGET_NODE+"_"+d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE+"_"+I.move.TYPE_INNER));g.showIfameMask(e,!1);t.showHoverDom=!0;if(B.dragFlag!=0){B.dragFlag=0;var a,i,j;for(a=0,i=l.length;a0;)c.dragMaskList[0].remove(),c.dragMaskList.shift();if(a)for(var d=o("iframe",b),f=0,i=d.length;f",b);j.appendTo(o("body",b));c.dragMaskList.push(j)}}},view:{addEditBtn:function(b, 33 | a){if(!(a.editNameFlag||o(a,d.id.EDIT,b).length>0)&&g.apply(b.edit.showRenameBtn,[b.treeId,a],b.edit.showRenameBtn)){var c=o(a,d.id.A,b),r="";c.append(r);o(a,d.id.EDIT,b).bind("click",function(){if(!g.uCanDo(b)||g.apply(b.callback.beforeEditName,[b.treeId,a],!0)==!1)return!1;f.editNode(b,a);return!1}).show()}}, 34 | addRemoveBtn:function(b,a){if(!(a.editNameFlag||o(a,d.id.REMOVE,b).length>0)&&g.apply(b.edit.showRemoveBtn,[b.treeId,a],b.edit.showRemoveBtn)){var c=o(a,d.id.A,b),r="";c.append(r);o(a,d.id.REMOVE,b).bind("click",function(){if(!g.uCanDo(b)||g.apply(b.callback.beforeRemove,[b.treeId,a],!0)==!1)return!1;f.removeNode(b, 35 | a);b.treeObj.trigger(d.event.REMOVE,[b.treeId,a]);return!1}).bind("mousedown",function(){return!0}).show()}},addHoverDom:function(b,a){if(m.getRoots().showHoverDom)a.isHover=!0,b.edit.enable&&(f.addEditBtn(b,a),f.addRemoveBtn(b,a)),g.apply(b.view.addHoverDom,[b.treeId,a])},cancelCurEditNode:function(b,a,c){var r=m.getRoot(b),k=b.data.key.name,i=r.curEditNode;if(i){var j=r.curEditInput,a=a?a:c?i[k]:j.val();if(g.apply(b.callback.beforeRename,[b.treeId,i,a,c],!0)===!1)return!1;i[k]=a;o(i,d.id.A,b).removeClass(d.node.CURSELECTED_EDIT); 36 | j.unbind();f.setNodeName(b,i);i.editNameFlag=!1;r.curEditNode=null;r.curEditInput=null;f.selectNode(b,i,!1);b.treeObj.trigger(d.event.RENAME,[b.treeId,i,c])}return r.noSelection=!0},editNode:function(b,a){var c=m.getRoot(b);f.editNodeBlur=!1;if(m.isSelectedNode(b,a)&&c.curEditNode==a&&a.editNameFlag)setTimeout(function(){g.inputFocus(c.curEditInput)},0);else{var r=b.data.key.name;a.editNameFlag=!0;f.removeTreeDom(b,a);f.cancelCurEditNode(b);f.selectNode(b,a,!1);o(a,d.id.SPAN,b).html("");var k=o(a,d.id.INPUT,b);k.attr("value",a[r]);b.edit.editNameSelectAll?g.inputSelect(k):g.inputFocus(k);k.bind("blur",function(){f.editNodeBlur||f.cancelCurEditNode(b)}).bind("keydown",function(a){a.keyCode=="13"?(f.editNodeBlur=!0,f.cancelCurEditNode(b)):a.keyCode=="27"&&f.cancelCurEditNode(b,null,!0)}).bind("click",function(){return!1}).bind("dblclick",function(){return!1});o(a,d.id.A,b).addClass(d.node.CURSELECTED_EDIT);c.curEditInput=k;c.noSelection= 38 | !1;c.curEditNode=a}},moveNode:function(b,a,c,r,k,i){var j=m.getRoot(b),e=b.data.key.children;if(a!=c&&(!b.data.keep.leaf||!a||a.isParent||r!=d.move.TYPE_INNER)){var g=c.parentTId?c.getParentNode():j,t=a===null||a==j;t&&a===null&&(a=j);if(t)r=d.move.TYPE_INNER;j=a.parentTId?a.getParentNode():j;if(r!=d.move.TYPE_PREV&&r!=d.move.TYPE_NEXT)r=d.move.TYPE_INNER;if(r==d.move.TYPE_INNER)if(t)c.parentTId=null;else{if(!a.isParent)a.isParent=!0,a.open=!!a.open,f.setNodeLineIcos(b,a);c.parentTId=a.tId}var p; 39 | t?p=t=b.treeObj:(!i&&r==d.move.TYPE_INNER?f.expandCollapseNode(b,a,!0,!1):i||f.expandCollapseNode(b,a.getParentNode(),!0,!1),t=o(a,b),p=o(a,d.id.UL,b),t.get(0)&&!p.get(0)&&(p=[],f.makeUlHtml(b,a,p,""),t.append(p.join(""))),p=o(a,d.id.UL,b));var q=o(c,b);q.get(0)?t.get(0)||q.remove():q=f.appendNodes(b,c.level,[c],null,-1,!1,!0).join("");p.get(0)&&r==d.move.TYPE_INNER?p.append(q):t.get(0)&&r==d.move.TYPE_PREV?t.before(q):t.get(0)&&r==d.move.TYPE_NEXT&&t.after(q);var l=-1,v=0,x=null,t=null,D=c.level; 40 | if(c.isFirstNode){if(l=0,g[e].length>1)x=g[e][1],x.isFirstNode=!0}else if(c.isLastNode)l=g[e].length-1,x=g[e][l-1],x.isLastNode=!0;else for(p=0,q=g[e].length;p =0&&g[e].splice(l,1);if(r!=d.move.TYPE_INNER)for(p=0,q=j[e].length;p0)t=a[e][a[e].length-1],t.isLastNode=!1;a[e].splice(a[e].length,0,c);c.isLastNode=!0;c.isFirstNode=a[e].length==1}else a.isFirstNode&&r==d.move.TYPE_PREV? 41 | (j[e].splice(v,0,c),t=a,t.isFirstNode=!1,c.parentTId=a.parentTId,c.isFirstNode=!0,c.isLastNode=!1):a.isLastNode&&r==d.move.TYPE_NEXT?(j[e].splice(v+1,0,c),t=a,t.isLastNode=!1,c.parentTId=a.parentTId,c.isFirstNode=!1,c.isLastNode=!0):(r==d.move.TYPE_PREV?j[e].splice(v,0,c):j[e].splice(v+1,0,c),c.parentTId=a.parentTId,c.isFirstNode=!1,c.isLastNode=!1);m.fixPIdKeyValue(b,c);m.setSonNodeLevel(b,c.getParentNode(),c);f.setNodeLineIcos(b,c);f.repairNodeLevelClass(b,c,D);!b.data.keep.parent&&g[e].length< 42 | 1?(g.isParent=!1,g.open=!1,a=o(g,d.id.UL,b),r=o(g,d.id.SWITCH,b),e=o(g,d.id.ICON,b),f.replaceSwitchClass(g,r,d.folder.DOCU),f.replaceIcoClass(g,e,d.folder.DOCU),a.css("display","none")):x&&f.setNodeLineIcos(b,x);t&&f.setNodeLineIcos(b,t);b.check&&b.check.enable&&f.repairChkClass&&(f.repairChkClass(b,g),f.repairParentChkClassWithSelf(b,g),g!=c.parent&&f.repairParentChkClassWithSelf(b,c));i||f.expandCollapseParentNode(b,c.getParentNode(),!0,k)}},removeEditBtn:function(b,a){o(a,d.id.EDIT,b).unbind().remove()}, 43 | removeRemoveBtn:function(b,a){o(a,d.id.REMOVE,b).unbind().remove()},removeTreeDom:function(b,a){a.isHover=!1;f.removeEditBtn(b,a);f.removeRemoveBtn(b,a);g.apply(b.view.removeHoverDom,[b.treeId,a])},repairNodeLevelClass:function(b,a,c){if(c!==a.level){var f=o(a,b),g=o(a,d.id.A,b),b=o(a,d.id.UL,b),c=d.className.LEVEL+c,a=d.className.LEVEL+a.level;f.removeClass(c);f.addClass(a);g.removeClass(c);g.addClass(a);b.removeClass(c);b.addClass(a)}},selectNodes:function(b,a){for(var c=0,d=a.length;c0)}},event:{},data:{setSonNodeLevel:function(b,a,c){if(c){var d=b.data.key.children;c.level=a?a.level+1:0;if(c[d])for(var a=0,f=c[d].length;a 0)switch(i=m.getNodeCache(c,k),j){case "mousedownNode":e=x.onMousedownNode;break;case "hoverOverNode":e=x.onHoverOverNode;break;case "hoverOutNode":e= 48 | x.onHoverOutNode}return{stop:!1,node:i,nodeEventType:j,nodeEventCallback:e,treeEventType:"",treeEventCallback:null}});m.addInitRoot(function(b){var b=m.getRoot(b),a=m.getRoots();b.curEditNode=null;b.curEditInput=null;b.curHoverNode=null;b.dragFlag=0;b.dragNodeShowBefore=[];b.dragMaskList=[];a.showHoverDom=!0});m.addZTreeTools(function(b,a){a.cancelEditName=function(a){m.getRoot(this.setting).curEditNode&&f.cancelCurEditNode(this.setting,a?a:null,!0)};a.copyNode=function(a,b,k,i){if(!b)return null; 49 | if(a&&!a.isParent&&this.setting.data.keep.leaf&&k===d.move.TYPE_INNER)return null;var j=this,e=g.clone(b);if(!a)a=null,k=d.move.TYPE_INNER;k==d.move.TYPE_INNER?(b=function(){f.addNodes(j.setting,a,-1,[e],i)},g.canAsync(this.setting,a)?f.asyncNode(this.setting,a,i,b):b()):(f.addNodes(this.setting,a.parentNode,-1,[e],i),f.moveNode(this.setting,a,e,k,!1,i));return e};a.editName=function(a){a&&a.tId&&a===m.getNodeCache(this.setting,a.tId)&&(a.parentTId&&f.expandCollapseParentNode(this.setting,a.getParentNode(), 50 | !0),f.editNode(this.setting,a))};a.moveNode=function(a,b,k,i){function j(){f.moveNode(e.setting,a,b,k,!1,i)}if(!b)return b;if(a&&!a.isParent&&this.setting.data.keep.leaf&&k===d.move.TYPE_INNER)return null;else if(a&&(b.parentTId==a.tId&&k==d.move.TYPE_INNER||o(b,this.setting).find("#"+a.tId).length>0))return null;else a||(a=null);var e=this;g.canAsync(this.setting,a)&&k===d.move.TYPE_INNER?f.asyncNode(this.setting,a,i,j):j();return b};a.setEditable=function(a){this.setting.edit.enable=a;return this.refresh()}}); 51 | var N=f.cancelPreSelectedNode;f.cancelPreSelectedNode=function(b,a){for(var c=m.getRoot(b).curSelectedList,d=0,g=c.length;d "); 117 | }, 118 | showNode: function(setting, node, options) { 119 | node.isHidden = false; 120 | data.initShowForExCheck(setting, node); 121 | $$(node, setting).show(); 122 | }, 123 | showNodes: function(setting, nodes, options) { 124 | if (!nodes || nodes.length == 0) { 125 | return; 126 | } 127 | var pList = {}, i, j; 128 | for (i=0, j=nodes.length; i 0 && !parentNode[childKey][0].isHidden) { 172 | parentNode[childKey][0].isFirstNode = true; 173 | } else if (childLength > 0) { 174 | view.setFirstNodeForHide(setting, parentNode[childKey]); 175 | } 176 | }, 177 | setLastNode: function(setting, parentNode) { 178 | var childKey = setting.data.key.children, childLength = parentNode[childKey].length; 179 | if (childLength > 0 && !parentNode[childKey][0].isHidden) { 180 | parentNode[childKey][childLength - 1].isLastNode = true; 181 | } else if (childLength > 0) { 182 | view.setLastNodeForHide(setting, parentNode[childKey]); 183 | } 184 | }, 185 | setFirstNodeForHide: function(setting, nodes) { 186 | var n,i,j; 187 | for (i=0, j=nodes.length; i =0; i--) { 227 | n = nodes[i]; 228 | if (n.isLastNode) { 229 | break; 230 | } 231 | if (!n.isHidden && !n.isLastNode) { 232 | n.isLastNode = true; 233 | view.setNodeLineIcos(setting, n); 234 | break; 235 | } else { 236 | n = null; 237 | } 238 | } 239 | return n; 240 | }, 241 | setLastNodeForShow: function(setting, nodes) { 242 | var n,i,j, last, old; 243 | for (i=nodes.length-1; i>=0; i--) { 244 | n = nodes[i]; 245 | if (!last && !n.isHidden && n.isLastNode) { 246 | last = n; 247 | break; 248 | } else if (!last && !n.isHidden && !n.isLastNode) { 249 | n.isLastNode = true; 250 | last = n; 251 | view.setNodeLineIcos(setting, n); 252 | } else if (last && n.isLastNode) { 253 | n.isLastNode = false; 254 | old = n; 255 | view.setNodeLineIcos(setting, n); 256 | break; 257 | } else { 258 | n = null; 259 | } 260 | } 261 | return {"new":last, "old":old}; 262 | } 263 | }, 264 | 265 | _z = { 266 | view: _view, 267 | data: _data 268 | }; 269 | $.extend(true, $.fn.zTree._z, _z); 270 | 271 | var zt = $.fn.zTree, 272 | tools = zt._z.tools, 273 | consts = zt.consts, 274 | view = zt._z.view, 275 | data = zt._z.data, 276 | event = zt._z.event, 277 | $$ = tools.$; 278 | 279 | data.addInitNode(_initNode); 280 | data.addBeforeA(_beforeA); 281 | data.addZTreeTools(_zTreeTools); 282 | 283 | // Override method in core 284 | var _dInitNode = data.initNode; 285 | data.initNode = function(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) { 286 | var tmpPNode = (parentNode) ? parentNode: data.getRoot(setting), 287 | children = tmpPNode[setting.data.key.children]; 288 | data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children); 289 | data.tmpHideLastNode = view.setLastNodeForHide(setting, children); 290 | if (openFlag) { 291 | view.setNodeLineIcos(setting, data.tmpHideFirstNode); 292 | view.setNodeLineIcos(setting, data.tmpHideLastNode); 293 | } 294 | isFirstNode = (data.tmpHideFirstNode === node); 295 | isLastNode = (data.tmpHideLastNode === node); 296 | if (_dInitNode) _dInitNode.apply(data, arguments); 297 | if (openFlag && isLastNode) { 298 | view.clearOldLastNode(setting, node, openFlag); 299 | } 300 | }; 301 | 302 | var _makeChkFlag = data.makeChkFlag; 303 | if (!!_makeChkFlag) { 304 | data.makeChkFlag = function(setting, node) { 305 | if (!!node && !!node.isHidden) { 306 | return; 307 | } 308 | _makeChkFlag.apply(data, arguments); 309 | } 310 | } 311 | 312 | var _getTreeCheckedNodes = data.getTreeCheckedNodes; 313 | if (!!_getTreeCheckedNodes) { 314 | data.getTreeCheckedNodes = function(setting, nodes, checked, results) { 315 | if (!!nodes && nodes.length > 0) { 316 | var p = nodes[0].getParentNode(); 317 | if (!!p && !!p.isHidden) { 318 | return []; 319 | } 320 | } 321 | return _getTreeCheckedNodes.apply(data, arguments); 322 | } 323 | } 324 | 325 | var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes; 326 | if (!!_getTreeChangeCheckedNodes) { 327 | data.getTreeChangeCheckedNodes = function(setting, nodes, results) { 328 | if (!!nodes && nodes.length > 0) { 329 | var p = nodes[0].getParentNode(); 330 | if (!!p && !!p.isHidden) { 331 | return []; 332 | } 333 | } 334 | return _getTreeChangeCheckedNodes.apply(data, arguments); 335 | } 336 | } 337 | 338 | var _expandCollapseSonNode = view.expandCollapseSonNode; 339 | if (!!_expandCollapseSonNode) { 340 | view.expandCollapseSonNode = function(setting, node, expandFlag, animateFlag, callback) { 341 | if (!!node && !!node.isHidden) { 342 | return; 343 | } 344 | _expandCollapseSonNode.apply(view, arguments); 345 | } 346 | } 347 | 348 | var _setSonNodeCheckBox = view.setSonNodeCheckBox; 349 | if (!!_setSonNodeCheckBox) { 350 | view.setSonNodeCheckBox = function(setting, node, value, srcNode) { 351 | if (!!node && !!node.isHidden) { 352 | return; 353 | } 354 | _setSonNodeCheckBox.apply(view, arguments); 355 | } 356 | } 357 | 358 | var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf; 359 | if (!!_repairParentChkClassWithSelf) { 360 | view.repairParentChkClassWithSelf = function(setting, node) { 361 | if (!!node && !!node.isHidden) { 362 | return; 363 | } 364 | _repairParentChkClassWithSelf.apply(view, arguments); 365 | } 366 | } 367 | })(jQuery); -------------------------------------------------------------------------------- /assets/js/jquery.ztree.exhide-3.5.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * JQuery zTree exHideNodes v3.5.20 3 | * http://zTree.me/ 4 | * 5 | * Copyright (c) 2010 Hunter.z 6 | * 7 | * Licensed same as jquery - MIT License 8 | * http://www.opensource.org/licenses/mit-license.php 9 | * 10 | * email: hunter.z@263.net 11 | * Date: 2016-01-20 12 | */ 13 | (function(i){i.extend(!0,i.fn.zTree._z,{view:{clearOldFirstNode:function(c,a){for(var b=a.getNextNode();b;){if(b.isFirstNode){b.isFirstNode=!1;d.setNodeLineIcos(c,b);break}if(b.isLastNode)break;b=b.getNextNode()}},clearOldLastNode:function(c,a,b){for(a=a.getPreNode();a;){if(a.isLastNode){a.isLastNode=!1;b&&d.setNodeLineIcos(c,a);break}if(a.isFirstNode)break;a=a.getPreNode()}},makeDOMNodeMainBefore:function(c,a,b){c.push(" ")},showNode:function(c,a){a.isHidden=!1;f.initShowForExCheck(c,a);j(a,c).show()},showNodes:function(c,a,b){if(a&&a.length!=0){var e={},g,k;for(g=0,k=a.length;g 0&&!a[b][0].isHidden? 16 | a[b][0].isFirstNode=!0:e>0&&d.setFirstNodeForHide(c,a[b])},setLastNode:function(c,a){var b=c.data.key.children,e=a[b].length;e>0&&!a[b][0].isHidden?a[b][e-1].isLastNode=!0:e>0&&d.setLastNodeForHide(c,a[b])},setFirstNodeForHide:function(c,a){var b,e,g;for(e=0,g=a.length;e =0;e--){b=a[e];if(b.isLastNode)break;if(!b.isHidden&&!b.isLastNode){b.isLastNode=!0;d.setNodeLineIcos(c,b);break}else b=null}return b},setLastNodeForShow:function(c,a){var b,e,g,f;for(e=a.length-1;e>=0;e--)if(b=a[e],!g&&!b.isHidden&& 18 | b.isLastNode){g=b;break}else if(!g&&!b.isHidden&&!b.isLastNode)b.isLastNode=!0,g=b,d.setNodeLineIcos(c,b);else if(g&&b.isLastNode){b.isLastNode=!1;f=b;d.setNodeLineIcos(c,b);break}return{"new":g,old:f}}},data:{initHideForExCheck:function(c,a){if(a.isHidden&&c.check&&c.check.enable){if(typeof a._nocheck=="undefined")a._nocheck=!!a.nocheck,a.nocheck=!0;a.check_Child_State=-1;d.repairParentChkClassWithSelf&&d.repairParentChkClassWithSelf(c,a)}},initShowForExCheck:function(c,a){if(!a.isHidden&&c.check&& 19 | c.check.enable){if(typeof a._nocheck!="undefined")a.nocheck=a._nocheck,delete a._nocheck;if(d.setChkClass){var b=j(a,l.id.CHECK,c);d.setChkClass(c,b,a)}d.repairParentChkClassWithSelf&&d.repairParentChkClassWithSelf(c,a)}}}});var i=i.fn.zTree,m=i._z.tools,l=i.consts,d=i._z.view,f=i._z.data,j=m.$;f.addInitNode(function(c,a,b){if(typeof b.isHidden=="string")b.isHidden=m.eqs(b.isHidden,"true");b.isHidden=!!b.isHidden;f.initHideForExCheck(c,b)});f.addBeforeA(function(){});f.addZTreeTools(function(c,a){a.showNodes= 20 | function(a,b){d.showNodes(c,a,b)};a.showNode=function(a,b){a&&d.showNodes(c,[a],b)};a.hideNodes=function(a,b){d.hideNodes(c,a,b)};a.hideNode=function(a,b){a&&d.hideNodes(c,[a],b)};var b=a.checkNode;if(b)a.checkNode=function(c,d,f,h){(!c||!c.isHidden)&&b.apply(a,arguments)}});var n=f.initNode;f.initNode=function(c,a,b,e,g,i,h){var j=(e?e:f.getRoot(c))[c.data.key.children];f.tmpHideFirstNode=d.setFirstNodeForHide(c,j);f.tmpHideLastNode=d.setLastNodeForHide(c,j);h&&(d.setNodeLineIcos(c,f.tmpHideFirstNode), 21 | d.setNodeLineIcos(c,f.tmpHideLastNode));g=f.tmpHideFirstNode===b;i=f.tmpHideLastNode===b;n&&n.apply(f,arguments);h&&i&&d.clearOldLastNode(c,b,h)};var o=f.makeChkFlag;if(o)f.makeChkFlag=function(c,a){(!a||!a.isHidden)&&o.apply(f,arguments)};var p=f.getTreeCheckedNodes;if(p)f.getTreeCheckedNodes=function(c,a,b,e){if(a&&a.length>0){var d=a[0].getParentNode();if(d&&d.isHidden)return[]}return p.apply(f,arguments)};var q=f.getTreeChangeCheckedNodes;if(q)f.getTreeChangeCheckedNodes=function(c,a,b){if(a&& 22 | a.length>0){var d=a[0].getParentNode();if(d&&d.isHidden)return[]}return q.apply(f,arguments)};var r=d.expandCollapseSonNode;if(r)d.expandCollapseSonNode=function(c,a,b,e,f){(!a||!a.isHidden)&&r.apply(d,arguments)};var s=d.setSonNodeCheckBox;if(s)d.setSonNodeCheckBox=function(c,a,b,e){(!a||!a.isHidden)&&s.apply(d,arguments)};var t=d.repairParentChkClassWithSelf;if(t)d.repairParentChkClassWithSelf=function(c,a){(!a||!a.isHidden)&&t.apply(d,arguments)}})(jQuery); 23 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "liyuze/yii2-ztree", 3 | "description": "The zTree extension for the Yii framework 2.0", 4 | "homepage": "https://github.com/liyuze/yii2-ztree", 5 | "type": "yii2-extension", 6 | "keywords": [ 7 | "yii2", 8 | "extension", 9 | "widget", 10 | "tree", 11 | "ztree" 12 | ], 13 | "license": "BSD-3-Clause", 14 | "authors": [ 15 | { 16 | "name": "li yuze", 17 | "email": "290315384@qq.com" 18 | } 19 | ], 20 | "require": { 21 | "yiisoft/yii2": "*" 22 | }, 23 | "autoload": { 24 | "psr-4": { 25 | "liyuze\\ztree\\": "" 26 | } 27 | }, 28 | "minimum-stability": "dev", 29 | "prefer-stable": true 30 | } --------------------------------------------------------------------------------