| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203 | 
							- /*
 
-  * JQuery zTree exedit v3.5.37
 
-  * http://treejs.cn/
 
-  *
 
-  * Copyright (c) 2010 Hunter.z
 
-  *
 
-  * Licensed same as jquery - MIT License
 
-  * http://www.opensource.org/licenses/mit-license.php
 
-  *
 
-  * email: hunter.z@263.net
 
-  * Date: 2018-08-21
 
-  */
 
- (function ($) {
 
-     //default consts of exedit
 
-     var _consts = {
 
-             event: {
 
-                 DRAG: "ztree_drag",
 
-                 DROP: "ztree_drop",
 
-                 RENAME: "ztree_rename",
 
-                 DRAGMOVE: "ztree_dragmove"
 
-             },
 
-             id: {
 
-                 EDIT: "_edit",
 
-                 INPUT: "_input",
 
-                 REMOVE: "_remove"
 
-             },
 
-             move: {
 
-                 TYPE_INNER: "inner",
 
-                 TYPE_PREV: "prev",
 
-                 TYPE_NEXT: "next"
 
-             },
 
-             node: {
 
-                 CURSELECTED_EDIT: "curSelectedNode_Edit",
 
-                 TMPTARGET_TREE: "tmpTargetzTree",
 
-                 TMPTARGET_NODE: "tmpTargetNode"
 
-             }
 
-         },
 
-         //default setting of exedit
 
-         _setting = {
 
-             edit: {
 
-                 enable: false,
 
-                 editNameSelectAll: false,
 
-                 showRemoveBtn: true,
 
-                 showRenameBtn: true,
 
-                 removeTitle: "remove",
 
-                 renameTitle: "rename",
 
-                 drag: {
 
-                     autoExpandTrigger: false,
 
-                     isCopy: true,
 
-                     isMove: true,
 
-                     prev: true,
 
-                     next: true,
 
-                     inner: true,
 
-                     minMoveSize: 5,
 
-                     borderMax: 10,
 
-                     borderMin: -5,
 
-                     maxShowNodeNum: 5,
 
-                     autoOpenTime: 500
 
-                 }
 
-             },
 
-             view: {
 
-                 addHoverDom: null,
 
-                 removeHoverDom: null
 
-             },
 
-             callback: {
 
-                 beforeDrag: null,
 
-                 beforeDragOpen: null,
 
-                 beforeDrop: null,
 
-                 beforeEditName: null,
 
-                 beforeRename: null,
 
-                 onDrag: null,
 
-                 onDragMove: null,
 
-                 onDrop: null,
 
-                 onRename: null
 
-             }
 
-         },
 
-         //default root of exedit
 
-         _initRoot = function (setting) {
 
-             var r = data.getRoot(setting), rs = data.getRoots();
 
-             r.curEditNode = null;
 
-             r.curEditInput = null;
 
-             r.curHoverNode = null;
 
-             r.dragFlag = 0;
 
-             r.dragNodeShowBefore = [];
 
-             r.dragMaskList = new Array();
 
-             rs.showHoverDom = true;
 
-         },
 
-         //default cache of exedit
 
-         _initCache = function (treeId) {
 
-         },
 
-         //default bind event of exedit
 
-         _bindEvent = function (setting) {
 
-             var o = setting.treeObj;
 
-             var c = consts.event;
 
-             o.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {
 
-                 tools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);
 
-             });
 
-             o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {
 
-                 tools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);
 
-             });
 
-             o.bind(c.DRAGMOVE, function (event, srcEvent, treeId, treeNodes) {
 
-                 tools.apply(setting.callback.onDragMove, [srcEvent, treeId, treeNodes]);
 
-             });
 
-             o.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {
 
-                 tools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);
 
-             });
 
-         },
 
-         _unbindEvent = function (setting) {
 
-             var o = setting.treeObj;
 
-             var c = consts.event;
 
-             o.unbind(c.RENAME);
 
-             o.unbind(c.DRAG);
 
-             o.unbind(c.DRAGMOVE);
 
-             o.unbind(c.DROP);
 
-         },
 
-         //default event proxy of exedit
 
-         _eventProxy = function (e) {
 
-             var target = e.target,
 
-                 setting = data.getSetting(e.data.treeId),
 
-                 relatedTarget = e.relatedTarget,
 
-                 tId = "", node = null,
 
-                 nodeEventType = "", treeEventType = "",
 
-                 nodeEventCallback = null, treeEventCallback = null,
 
-                 tmp = null;
 
-             if (tools.eqs(e.type, "mouseover")) {
 
-                 tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
 
-                 if (tmp) {
 
-                     tId = tools.getNodeMainDom(tmp).id;
 
-                     nodeEventType = "hoverOverNode";
 
-                 }
 
-             } else if (tools.eqs(e.type, "mouseout")) {
 
-                 tmp = tools.getMDom(setting, relatedTarget, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
 
-                 if (!tmp) {
 
-                     tId = "remove";
 
-                     nodeEventType = "hoverOutNode";
 
-                 }
 
-             } else if (tools.eqs(e.type, "mousedown")) {
 
-                 tmp = tools.getMDom(setting, target, [{tagName: "a", attrName: "treeNode" + consts.id.A}]);
 
-                 if (tmp) {
 
-                     tId = tools.getNodeMainDom(tmp).id;
 
-                     nodeEventType = "mousedownNode";
 
-                 }
 
-             }
 
-             if (tId.length > 0) {
 
-                 node = data.getNodeCache(setting, tId);
 
-                 switch (nodeEventType) {
 
-                     case "mousedownNode" :
 
-                         nodeEventCallback = _handler.onMousedownNode;
 
-                         break;
 
-                     case "hoverOverNode" :
 
-                         nodeEventCallback = _handler.onHoverOverNode;
 
-                         break;
 
-                     case "hoverOutNode" :
 
-                         nodeEventCallback = _handler.onHoverOutNode;
 
-                         break;
 
-                 }
 
-             }
 
-             var proxyResult = {
 
-                 stop: false,
 
-                 node: node,
 
-                 nodeEventType: nodeEventType,
 
-                 nodeEventCallback: nodeEventCallback,
 
-                 treeEventType: treeEventType,
 
-                 treeEventCallback: treeEventCallback
 
-             };
 
-             return proxyResult
 
-         },
 
-         //default init node of exedit
 
-         _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {
 
-             if (!n) return;
 
-             n.isHover = false;
 
-             n.editNameFlag = false;
 
-         },
 
-         //update zTreeObj, add method of edit
 
-         _zTreeTools = function (setting, zTreeTools) {
 
-             zTreeTools.cancelEditName = function (newName) {
 
-                 var root = data.getRoot(this.setting);
 
-                 if (!root.curEditNode) return;
 
-                 view.cancelCurEditNode(this.setting, newName ? newName : null, true);
 
-             }
 
-             zTreeTools.copyNode = function (targetNode, node, moveType, isSilent) {
 
-                 if (!node) return null;
 
-                 var isParent = data.nodeIsParent(setting, targetNode);
 
-                 if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;
 
-                 var _this = this,
 
-                     newNode = tools.clone(node);
 
-                 if (!targetNode) {
 
-                     targetNode = null;
 
-                     moveType = consts.move.TYPE_INNER;
 
-                 }
 
-                 if (moveType == consts.move.TYPE_INNER) {
 
-                     function copyCallback() {
 
-                         view.addNodes(_this.setting, targetNode, -1, [newNode], isSilent);
 
-                     }
 
-                     if (tools.canAsync(this.setting, targetNode)) {
 
-                         view.asyncNode(this.setting, targetNode, isSilent, copyCallback);
 
-                     } else {
 
-                         copyCallback();
 
-                     }
 
-                 } else {
 
-                     view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent);
 
-                     view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);
 
-                 }
 
-                 return newNode;
 
-             }
 
-             zTreeTools.editName = function (node) {
 
-                 if (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;
 
-                 if (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);
 
-                 view.editNode(this.setting, node)
 
-             }
 
-             zTreeTools.moveNode = function (targetNode, node, moveType, isSilent) {
 
-                 if (!node) return node;
 
-                 var isParent = data.nodeIsParent(setting, targetNode);
 
-                 if (targetNode && !isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {
 
-                     return null;
 
-                 } else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find("#" + targetNode.tId).length > 0)) {
 
-                     return null;
 
-                 } else if (!targetNode) {
 
-                     targetNode = null;
 
-                 }
 
-                 var _this = this;
 
-                 function moveCallback() {
 
-                     view.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);
 
-                 }
 
-                 if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {
 
-                     view.asyncNode(this.setting, targetNode, isSilent, moveCallback);
 
-                 } else {
 
-                     moveCallback();
 
-                 }
 
-                 return node;
 
-             }
 
-             zTreeTools.setEditable = function (editable) {
 
-                 this.setting.edit.enable = editable;
 
-                 return this.refresh();
 
-             }
 
-         },
 
-         //method of operate data
 
-         _data = {
 
-             setSonNodeLevel: function (setting, parentNode, node) {
 
-                 if (!node) return;
 
-                 var children = data.nodeChildren(setting, node);
 
-                 node.level = (parentNode) ? parentNode.level + 1 : 0;
 
-                 if (!children) return;
 
-                 for (var i = 0, l = children.length; i < l; i++) {
 
-                     if (children[i]) data.setSonNodeLevel(setting, node, children[i]);
 
-                 }
 
-             }
 
-         },
 
-         //method of event proxy
 
-         _event = {},
 
-         //method of event handler
 
-         _handler = {
 
-             onHoverOverNode: function (event, node) {
 
-                 var setting = data.getSetting(event.data.treeId),
 
-                     root = data.getRoot(setting);
 
-                 if (root.curHoverNode != node) {
 
-                     _handler.onHoverOutNode(event);
 
-                 }
 
-                 root.curHoverNode = node;
 
-                 view.addHoverDom(setting, node);
 
-             },
 
-             onHoverOutNode: function (event, node) {
 
-                 var setting = data.getSetting(event.data.treeId),
 
-                     root = data.getRoot(setting);
 
-                 if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {
 
-                     view.removeTreeDom(setting, root.curHoverNode);
 
-                     root.curHoverNode = null;
 
-                 }
 
-             },
 
-             onMousedownNode: function (eventMouseDown, _node) {
 
-                 var i, l,
 
-                     setting = data.getSetting(eventMouseDown.data.treeId),
 
-                     root = data.getRoot(setting), roots = data.getRoots();
 
-                 //right click can't drag & drop
 
-                 if (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;
 
-                 //input of edit node name can't drag & drop
 
-                 var target = eventMouseDown.target,
 
-                     _nodes = data.getRoot(setting).curSelectedList,
 
-                     nodes = [];
 
-                 if (!data.isSelectedNode(setting, _node)) {
 
-                     nodes = [_node];
 
-                 } else {
 
-                     for (i = 0, l = _nodes.length; i < l; i++) {
 
-                         if (_nodes[i].editNameFlag && tools.eqs(target.tagName, "input") && target.getAttribute("treeNode" + consts.id.INPUT) !== null) {
 
-                             return true;
 
-                         }
 
-                         nodes.push(_nodes[i]);
 
-                         if (nodes[0].parentTId !== _nodes[i].parentTId) {
 
-                             nodes = [_node];
 
-                             break;
 
-                         }
 
-                     }
 
-                 }
 
-                 view.editNodeBlur = true;
 
-                 view.cancelCurEditNode(setting);
 
-                 var doc = $(setting.treeObj.get(0).ownerDocument),
 
-                     body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,
 
-                     isOtherTree = false,
 
-                     targetSetting = setting,
 
-                     sourceSetting = setting,
 
-                     preNode, nextNode,
 
-                     preTmpTargetNodeId = null,
 
-                     preTmpMoveType = null,
 
-                     tmpTargetNodeId = null,
 
-                     moveType = consts.move.TYPE_INNER,
 
-                     mouseDownX = eventMouseDown.clientX,
 
-                     mouseDownY = eventMouseDown.clientY,
 
-                     startTime = (new Date()).getTime();
 
-                 if (tools.uCanDo(setting)) {
 
-                     doc.bind("mousemove", _docMouseMove);
 
-                 }
 
-                 function _docMouseMove(event) {
 
-                     //avoid start drag after click node
 
-                     if (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize
 
-                         && Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {
 
-                         return true;
 
-                     }
 
-                     var i, l, tmpNode, tmpDom, tmpNodes;
 
-                     body.css("cursor", "pointer");
 
-                     if (root.dragFlag == 0) {
 
-                         if (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {
 
-                             _docMouseUp(event);
 
-                             return true;
 
-                         }
 
-                         for (i = 0, l = nodes.length; i < l; i++) {
 
-                             if (i == 0) {
 
-                                 root.dragNodeShowBefore = [];
 
-                             }
 
-                             tmpNode = nodes[i];
 
-                             if (data.nodeIsParent(setting, tmpNode) && tmpNode.open) {
 
-                                 view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
 
-                                 root.dragNodeShowBefore[tmpNode.tId] = true;
 
-                             } else {
 
-                                 root.dragNodeShowBefore[tmpNode.tId] = false;
 
-                             }
 
-                         }
 
-                         root.dragFlag = 1;
 
-                         roots.showHoverDom = false;
 
-                         tools.showIfameMask(setting, true);
 
-                         //sort
 
-                         var isOrder = true, lastIndex = -1;
 
-                         if (nodes.length > 1) {
 
-                             var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting);
 
-                             tmpNodes = [];
 
-                             for (i = 0, l = pNodes.length; i < l; i++) {
 
-                                 if (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {
 
-                                     if (isOrder && lastIndex > -1 && (lastIndex + 1) !== i) {
 
-                                         isOrder = false;
 
-                                     }
 
-                                     tmpNodes.push(pNodes[i]);
 
-                                     lastIndex = i;
 
-                                 }
 
-                                 if (nodes.length === tmpNodes.length) {
 
-                                     nodes = tmpNodes;
 
-                                     break;
 
-                                 }
 
-                             }
 
-                         }
 
-                         if (isOrder) {
 
-                             preNode = nodes[0].getPreNode();
 
-                             nextNode = nodes[nodes.length - 1].getNextNode();
 
-                         }
 
-                         //set node in selected
 
-                         curNode = $$("<ul class='zTreeDragUL'></ul>", setting);
 
-                         for (i = 0, l = nodes.length; i < l; i++) {
 
-                             tmpNode = nodes[i];
 
-                             tmpNode.editNameFlag = false;
 
-                             view.selectNode(setting, tmpNode, i > 0);
 
-                             view.removeTreeDom(setting, tmpNode);
 
-                             if (i > setting.edit.drag.maxShowNodeNum - 1) {
 
-                                 continue;
 
-                             }
 
-                             tmpDom = $$("<li id='" + tmpNode.tId + "_tmp'></li>", setting);
 
-                             tmpDom.append($$(tmpNode, consts.id.A, setting).clone());
 
-                             tmpDom.css("padding", "0");
 
-                             tmpDom.children("#" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);
 
-                             curNode.append(tmpDom);
 
-                             if (i == setting.edit.drag.maxShowNodeNum - 1) {
 
-                                 tmpDom = $$("<li id='" + tmpNode.tId + "_moretmp'><a>  ...  </a></li>", setting);
 
-                                 curNode.append(tmpDom);
 
-                             }
 
-                         }
 
-                         curNode.attr("id", nodes[0].tId + consts.id.UL + "_tmp");
 
-                         curNode.addClass(setting.treeObj.attr("class"));
 
-                         curNode.appendTo(body);
 
-                         tmpArrow = $$("<span class='tmpzTreeMove_arrow'></span>", setting);
 
-                         tmpArrow.attr("id", "zTreeMove_arrow_tmp");
 
-                         tmpArrow.appendTo(body);
 
-                         setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);
 
-                     }
 
-                     if (root.dragFlag == 1) {
 
-                         if (tmpTarget && tmpArrow.attr("id") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft() + 2) > ($("#" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {
 
-                             var xT = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget);
 
-                             event.target = (xT.length > 0) ? xT.get(0) : event.target;
 
-                         } else if (tmpTarget) {
 
-                             tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
 
-                             if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
 
-                                 .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
 
-                         }
 
-                         tmpTarget = null;
 
-                         tmpTargetNodeId = null;
 
-                         //judge drag & drop in multi ztree
 
-                         isOtherTree = false;
 
-                         targetSetting = setting;
 
-                         var settings = data.getSettings();
 
-                         for (var s in settings) {
 
-                             if (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId
 
-                                 && (event.target.id == settings[s].treeId || $(event.target).parents("#" + settings[s].treeId).length > 0)) {
 
-                                 isOtherTree = true;
 
-                                 targetSetting = settings[s];
 
-                             }
 
-                         }
 
-                         var docScrollTop = doc.scrollTop(),
 
-                             docScrollLeft = doc.scrollLeft(),
 
-                             treeOffset = targetSetting.treeObj.offset(),
 
-                             scrollHeight = targetSetting.treeObj.get(0).scrollHeight,
 
-                             scrollWidth = targetSetting.treeObj.get(0).scrollWidth,
 
-                             dTop = (event.clientY + docScrollTop - treeOffset.top),
 
-                             dBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),
 
-                             dLeft = (event.clientX + docScrollLeft - treeOffset.left),
 
-                             dRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),
 
-                             isTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),
 
-                             isBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),
 
-                             isLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),
 
-                             isRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),
 
-                             isTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,
 
-                             isTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),
 
-                             isTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height() + 10) >= scrollHeight),
 
-                             isTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),
 
-                             isTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width() + 10) >= scrollWidth);
 
-                         if (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
 
-                             //get node <li> dom
 
-                             var targetObj = event.target;
 
-                             while (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, "li") && targetObj.id != targetSetting.treeId) {
 
-                                 targetObj = targetObj.parentNode;
 
-                             }
 
-                             var canMove = true;
 
-                             //don't move to self or children of self
 
-                             for (i = 0, l = nodes.length; i < l; i++) {
 
-                                 tmpNode = nodes[i];
 
-                                 if (targetObj.id === tmpNode.tId) {
 
-                                     canMove = false;
 
-                                     break;
 
-                                 } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) {
 
-                                     canMove = false;
 
-                                     break;
 
-                                 }
 
-                             }
 
-                             if (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {
 
-                                 tmpTarget = $(targetObj);
 
-                                 tmpTargetNodeId = targetObj.id;
 
-                             }
 
-                         }
 
-                         //the mouse must be in zTree
 
-                         tmpNode = nodes[0];
 
-                         if (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {
 
-                             //judge mouse move in root of ztree
 
-                             if (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {
 
-                                 tmpTarget = targetSetting.treeObj;
 
-                             }
 
-                             //auto scroll top
 
-                             if (isTop) {
 
-                                 targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() - 10);
 
-                             } else if (isBottom) {
 
-                                 targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10);
 
-                             }
 
-                             if (isLeft) {
 
-                                 targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10);
 
-                             } else if (isRight) {
 
-                                 targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10);
 
-                             }
 
-                             //auto scroll left
 
-                             if (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {
 
-                                 targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + tmpTarget.offset().left - targetSetting.treeObj.offset().left);
 
-                             }
 
-                         }
 
-                         curNode.css({
 
-                             "top": (event.clientY + docScrollTop + 3) + "px",
 
-                             "left": (event.clientX + docScrollLeft + 3) + "px"
 
-                         });
 
-                         var dX = 0;
 
-                         var dY = 0;
 
-                         if (tmpTarget && tmpTarget.attr("id") != targetSetting.treeId) {
 
-                             var tmpTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId),
 
-                                 isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),
 
-                                 isPrev = !!(preNode && tmpTargetNodeId === preNode.tId),
 
-                                 isNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),
 
-                                 isInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),
 
-                                 canPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),
 
-                                 canNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),
 
-                                 canInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !data.nodeIsParent(setting, tmpTargetNode)) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);
 
-                             function clearMove() {
 
-                                 tmpTarget = null;
 
-                                 tmpTargetNodeId = "";
 
-                                 moveType = consts.move.TYPE_INNER;
 
-                                 tmpArrow.css({
 
-                                     "display": "none"
 
-                                 });
 
-                                 if (window.zTreeMoveTimer) {
 
-                                     clearTimeout(window.zTreeMoveTimer);
 
-                                     window.zTreeMoveTargetNodeTId = null
 
-                                 }
 
-                             }
 
-                             if (!canPrev && !canNext && !canInner) {
 
-                                 clearMove();
 
-                             } else {
 
-                                 var tmpTargetA = $("#" + tmpTargetNodeId + consts.id.A, tmpTarget),
 
-                                     tmpNextA = tmpTargetNode.isLastNode ? null : $("#" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),
 
-                                     tmpTop = tmpTargetA.offset().top,
 
-                                     tmpLeft = tmpTargetA.offset().left,
 
-                                     prevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1)) : -1,
 
-                                     nextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0)) : -1,
 
-                                     dY_percent = (event.clientY + docScrollTop - tmpTop) / tmpTargetA.height();
 
-                                 if ((prevPercent == 1 || dY_percent <= prevPercent && dY_percent >= -.2) && canPrev) {
 
-                                     dX = 1 - tmpArrow.width();
 
-                                     dY = tmpTop - tmpArrow.height() / 2;
 
-                                     moveType = consts.move.TYPE_PREV;
 
-                                 } else if ((nextPercent == 0 || dY_percent >= nextPercent && dY_percent <= 1.2) && canNext) {
 
-                                     dX = 1 - tmpArrow.width();
 
-                                     dY = (tmpNextA == null || (data.nodeIsParent(setting, tmpTargetNode) && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height() / 2) : (tmpNextA.offset().top - tmpArrow.height() / 2);
 
-                                     moveType = consts.move.TYPE_NEXT;
 
-                                 } else if (canInner) {
 
-                                     dX = 5 - tmpArrow.width();
 
-                                     dY = tmpTop;
 
-                                     moveType = consts.move.TYPE_INNER;
 
-                                 } else {
 
-                                     clearMove();
 
-                                 }
 
-                                 if (tmpTarget) {
 
-                                     tmpArrow.css({
 
-                                         "display": "block",
 
-                                         "top": dY + "px",
 
-                                         "left": (tmpLeft + dX) + "px"
 
-                                     });
 
-                                     tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType);
 
-                                     if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {
 
-                                         startTime = (new Date()).getTime();
 
-                                     }
 
-                                     if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) {
 
-                                         var startTimer = true;
 
-                                         if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {
 
-                                             clearTimeout(window.zTreeMoveTimer);
 
-                                             window.zTreeMoveTargetNodeTId = null;
 
-                                         } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {
 
-                                             startTimer = false;
 
-                                         }
 
-                                         if (startTimer) {
 
-                                             window.zTreeMoveTimer = setTimeout(function () {
 
-                                                 if (moveType != consts.move.TYPE_INNER) return;
 
-                                                 if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime
 
-                                                     && tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {
 
-                                                     view.switchNode(targetSetting, tmpTargetNode);
 
-                                                     if (targetSetting.edit.drag.autoExpandTrigger) {
 
-                                                         targetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);
 
-                                                     }
 
-                                                 }
 
-                                             }, targetSetting.edit.drag.autoOpenTime + 50);
 
-                                             window.zTreeMoveTargetNodeTId = tmpTargetNode.tId;
 
-                                         }
 
-                                     }
 
-                                 }
 
-                             }
 
-                         } else {
 
-                             moveType = consts.move.TYPE_INNER;
 
-                             if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {
 
-                                 tmpTarget.addClass(consts.node.TMPTARGET_TREE);
 
-                             } else {
 
-                                 tmpTarget = null;
 
-                             }
 
-                             tmpArrow.css({
 
-                                 "display": "none"
 
-                             });
 
-                             if (window.zTreeMoveTimer) {
 
-                                 clearTimeout(window.zTreeMoveTimer);
 
-                                 window.zTreeMoveTargetNodeTId = null;
 
-                             }
 
-                         }
 
-                         preTmpTargetNodeId = tmpTargetNodeId;
 
-                         preTmpMoveType = moveType;
 
-                         setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);
 
-                     }
 
-                     return false;
 
-                 }
 
-                 doc.bind("mouseup", _docMouseUp);
 
-                 function _docMouseUp(event) {
 
-                     if (window.zTreeMoveTimer) {
 
-                         clearTimeout(window.zTreeMoveTimer);
 
-                         window.zTreeMoveTargetNodeTId = null;
 
-                     }
 
-                     preTmpTargetNodeId = null;
 
-                     preTmpMoveType = null;
 
-                     doc.unbind("mousemove", _docMouseMove);
 
-                     doc.unbind("mouseup", _docMouseUp);
 
-                     doc.unbind("selectstart", _docSelect);
 
-                     body.css("cursor", "");
 
-                     if (tmpTarget) {
 
-                         tmpTarget.removeClass(consts.node.TMPTARGET_TREE);
 
-                         if (tmpTargetNodeId) $("#" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + "_" + consts.move.TYPE_PREV)
 
-                             .removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + "_" + _consts.move.TYPE_INNER);
 
-                     }
 
-                     tools.showIfameMask(setting, false);
 
-                     roots.showHoverDom = true;
 
-                     if (root.dragFlag == 0) return;
 
-                     root.dragFlag = 0;
 
-                     var i, l, tmpNode;
 
-                     for (i = 0, l = nodes.length; i < l; i++) {
 
-                         tmpNode = nodes[i];
 
-                         if (data.nodeIsParent(setting, tmpNode) && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {
 
-                             view.expandCollapseNode(setting, tmpNode, !tmpNode.open);
 
-                             delete root.dragNodeShowBefore[tmpNode.tId];
 
-                         }
 
-                     }
 
-                     if (curNode) curNode.remove();
 
-                     if (tmpArrow) tmpArrow.remove();
 
-                     var isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);
 
-                     if (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId == nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {
 
-                         tmpTarget = null;
 
-                     }
 
-                     if (tmpTarget) {
 
-                         var dragTargetNode = tmpTargetNodeId == null ? null : data.getNodeCache(targetSetting, tmpTargetNodeId);
 
-                         if (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {
 
-                             view.selectNodes(sourceSetting, nodes);
 
-                             return;
 
-                         }
 
-                         var newNodes = isCopy ? tools.clone(nodes) : nodes;
 
-                         function dropCallback() {
 
-                             if (isOtherTree) {
 
-                                 if (!isCopy) {
 
-                                     for (var i = 0, l = nodes.length; i < l; i++) {
 
-                                         view.removeNode(setting, nodes[i]);
 
-                                     }
 
-                                 }
 
-                                 if (moveType == consts.move.TYPE_INNER) {
 
-                                     view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
 
-                                 } else {
 
-                                     view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
 
-                                 }
 
-                             } else {
 
-                                 if (isCopy && moveType == consts.move.TYPE_INNER) {
 
-                                     view.addNodes(targetSetting, dragTargetNode, -1, newNodes);
 
-                                 } else if (isCopy) {
 
-                                     view.addNodes(targetSetting, dragTargetNode.getParentNode(), moveType == consts.move.TYPE_PREV ? dragTargetNode.getIndex() : dragTargetNode.getIndex() + 1, newNodes);
 
-                                 } else {
 
-                                     if (moveType != consts.move.TYPE_NEXT) {
 
-                                         for (i = 0, l = newNodes.length; i < l; i++) {
 
-                                             view.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);
 
-                                         }
 
-                                     } else {
 
-                                         for (i = -1, l = newNodes.length - 1; i < l; l--) {
 
-                                             view.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, false);
 
-                                         }
 
-                                     }
 
-                                 }
 
-                             }
 
-                             view.selectNodes(targetSetting, newNodes);
 
-                             var a = $$(newNodes[0], setting).get(0);
 
-                             view.scrollIntoView(setting, a);
 
-                             setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);
 
-                         }
 
-                         if (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {
 
-                             view.asyncNode(targetSetting, dragTargetNode, false, dropCallback);
 
-                         } else {
 
-                             dropCallback();
 
-                         }
 
-                     } else {
 
-                         view.selectNodes(sourceSetting, nodes);
 
-                         setting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);
 
-                     }
 
-                 }
 
-                 doc.bind("selectstart", _docSelect);
 
-                 function _docSelect() {
 
-                     return false;
 
-                 }
 
-                 // 2018-03-30 FireFox has fixed this issue.
 
-                 //Avoid FireFox's Bug
 
-                 //If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.
 
-                 // if(eventMouseDown.preventDefault) {
 
-                 // 	eventMouseDown.preventDefault();
 
-                 // }
 
-                 return true;
 
-             }
 
-         },
 
-         //method of tools for zTree
 
-         _tools = {
 
-             getAbs: function (obj) {
 
-                 var oRect = obj.getBoundingClientRect(),
 
-                     scrollTop = document.body.scrollTop + document.documentElement.scrollTop,
 
-                     scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;
 
-                 return [oRect.left + scrollLeft, oRect.top + scrollTop];
 
-             },
 
-             inputFocus: function (inputObj) {
 
-                 if (inputObj.get(0)) {
 
-                     inputObj.focus();
 
-                     tools.setCursorPosition(inputObj.get(0), inputObj.val().length);
 
-                 }
 
-             },
 
-             inputSelect: function (inputObj) {
 
-                 if (inputObj.get(0)) {
 
-                     inputObj.focus();
 
-                     inputObj.select();
 
-                 }
 
-             },
 
-             setCursorPosition: function (obj, pos) {
 
-                 if (obj.setSelectionRange) {
 
-                     obj.focus();
 
-                     obj.setSelectionRange(pos, pos);
 
-                 } else if (obj.createTextRange) {
 
-                     var range = obj.createTextRange();
 
-                     range.collapse(true);
 
-                     range.moveEnd('character', pos);
 
-                     range.moveStart('character', pos);
 
-                     range.select();
 
-                 }
 
-             },
 
-             showIfameMask: function (setting, showSign) {
 
-                 var root = data.getRoot(setting);
 
-                 //clear full mask
 
-                 while (root.dragMaskList.length > 0) {
 
-                     root.dragMaskList[0].remove();
 
-                     root.dragMaskList.shift();
 
-                 }
 
-                 if (showSign) {
 
-                     //show mask
 
-                     var iframeList = $$("iframe", setting);
 
-                     for (var i = 0, l = iframeList.length; i < l; i++) {
 
-                         var obj = iframeList.get(i),
 
-                             r = tools.getAbs(obj),
 
-                             dragMask = $$("<div id='zTreeMask_" + i + "' class='zTreeMask' style='top:" + r[1] + "px; left:" + r[0] + "px; width:" + obj.offsetWidth + "px; height:" + obj.offsetHeight + "px;'></div>", setting);
 
-                         dragMask.appendTo($$("body", setting));
 
-                         root.dragMaskList.push(dragMask);
 
-                     }
 
-                 }
 
-             }
 
-         },
 
-         //method of operate ztree dom
 
-         _view = {
 
-             addEditBtn: function (setting, node) {
 
-                 if (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {
 
-                     return;
 
-                 }
 
-                 if (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {
 
-                     return;
 
-                 }
 
-                 var aObj = $$(node, consts.id.A, setting),
 
-                     editStr = "<span class='" + consts.className.BUTTON + " edit' id='" + node.tId + consts.id.EDIT + "' title='" + tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle) + "' treeNode" + consts.id.EDIT + " style='display:none;'></span>";
 
-                 aObj.append(editStr);
 
-                 $$(node, consts.id.EDIT, setting).bind('click',
 
-                     function () {
 
-                         if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;
 
-                         view.editNode(setting, node);
 
-                         return false;
 
-                     }
 
-                 ).show();
 
-             },
 
-             addRemoveBtn: function (setting, node) {
 
-                 if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {
 
-                     return;
 
-                 }
 
-                 if (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {
 
-                     return;
 
-                 }
 
-                 var aObj = $$(node, consts.id.A, setting),
 
-                     removeStr = "<span class='" + consts.className.BUTTON + " remove' id='" + node.tId + consts.id.REMOVE + "' title='" + tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle) + "' treeNode" + consts.id.REMOVE + " style='display:none;'></span>";
 
-                 aObj.append(removeStr);
 
-                 $$(node, consts.id.REMOVE, setting).bind('click',
 
-                     function () {
 
-                         if (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;
 
-                         view.removeNode(setting, node);
 
-                         setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);
 
-                         return false;
 
-                     }
 
-                 ).bind('mousedown',
 
-                     function (eventMouseDown) {
 
-                         return true;
 
-                     }
 
-                 ).show();
 
-             },
 
-             addHoverDom: function (setting, node) {
 
-                 if (data.getRoots().showHoverDom) {
 
-                     node.isHover = true;
 
-                     if (setting.edit.enable) {
 
-                         view.addEditBtn(setting, node);
 
-                         view.addRemoveBtn(setting, node);
 
-                     }
 
-                     tools.apply(setting.view.addHoverDom, [setting.treeId, node]);
 
-                 }
 
-             },
 
-             cancelCurEditNode: function (setting, forceName, isCancel) {
 
-                 var root = data.getRoot(setting),
 
-                     node = root.curEditNode;
 
-                 if (node) {
 
-                     var inputObj = root.curEditInput,
 
-                         newName = forceName ? forceName : (isCancel ? data.nodeName(setting, node) : inputObj.val());
 
-                     if (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {
 
-                         return false;
 
-                     }
 
-                     data.nodeName(setting, node, newName);
 
-                     var aObj = $$(node, consts.id.A, setting);
 
-                     aObj.removeClass(consts.node.CURSELECTED_EDIT);
 
-                     inputObj.unbind();
 
-                     view.setNodeName(setting, node);
 
-                     node.editNameFlag = false;
 
-                     root.curEditNode = null;
 
-                     root.curEditInput = null;
 
-                     view.selectNode(setting, node, false);
 
-                     setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);
 
-                 }
 
-                 root.noSelection = true;
 
-                 return true;
 
-             },
 
-             editNode: function (setting, node) {
 
-                 var root = data.getRoot(setting);
 
-                 view.editNodeBlur = false;
 
-                 if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
 
-                     setTimeout(function () {
 
-                         tools.inputFocus(root.curEditInput);
 
-                     }, 0);
 
-                     return;
 
-                 }
 
-                 node.editNameFlag = true;
 
-                 view.removeTreeDom(setting, node);
 
-                 view.cancelCurEditNode(setting);
 
-                 view.selectNode(setting, node, false);
 
-                 $$(node, consts.id.SPAN, setting).html("<input type=text class='rename' id='" + node.tId + consts.id.INPUT + "' treeNode" + consts.id.INPUT + " >");
 
-                 var inputObj = $$(node, consts.id.INPUT, setting);
 
-                 inputObj.attr("value", data.nodeName(setting, node));
 
-                 if (setting.edit.editNameSelectAll) {
 
-                     tools.inputSelect(inputObj);
 
-                 } else {
 
-                     tools.inputFocus(inputObj);
 
-                 }
 
-                 inputObj.bind('blur', function (event) {
 
-                     if (!view.editNodeBlur) {
 
-                         view.cancelCurEditNode(setting);
 
-                     }
 
-                 }).bind('keydown', function (event) {
 
-                     if (event.keyCode == "13") {
 
-                         view.editNodeBlur = true;
 
-                         view.cancelCurEditNode(setting);
 
-                     } else if (event.keyCode == "27") {
 
-                         view.cancelCurEditNode(setting, null, true);
 
-                     }
 
-                 }).bind('click', function (event) {
 
-                     return false;
 
-                 }).bind('dblclick', function (event) {
 
-                     return false;
 
-                 });
 
-                 $$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);
 
-                 root.curEditInput = inputObj;
 
-                 root.noSelection = false;
 
-                 root.curEditNode = node;
 
-             },
 
-             moveNode: function (setting, targetNode, node, moveType, animateFlag, isSilent) {
 
-                 var root = data.getRoot(setting);
 
-                 if (targetNode == node) return;
 
-                 if (setting.data.keep.leaf && targetNode && !data.nodeIsParent(setting, targetNode) && moveType == consts.move.TYPE_INNER) return;
 
-                 var oldParentNode = (node.parentTId ? node.getParentNode() : root),
 
-                     targetNodeIsRoot = (targetNode === null || targetNode == root);
 
-                 if (targetNodeIsRoot && targetNode === null) targetNode = root;
 
-                 if (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;
 
-                 var targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);
 
-                 if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {
 
-                     moveType = consts.move.TYPE_INNER;
 
-                 }
 
-                 if (moveType == consts.move.TYPE_INNER) {
 
-                     if (targetNodeIsRoot) {
 
-                         //parentTId of root node is null
 
-                         node.parentTId = null;
 
-                     } else {
 
-                         if (!data.nodeIsParent(setting, targetNode)) {
 
-                             data.nodeIsParent(setting, targetNode, true);
 
-                             targetNode.open = !!targetNode.open;
 
-                             view.setNodeLineIcos(setting, targetNode);
 
-                         }
 
-                         node.parentTId = targetNode.tId;
 
-                     }
 
-                 }
 
-                 //move node Dom
 
-                 var targetObj, target_ulObj;
 
-                 if (targetNodeIsRoot) {
 
-                     targetObj = setting.treeObj;
 
-                     target_ulObj = targetObj;
 
-                 } else {
 
-                     if (!isSilent && moveType == consts.move.TYPE_INNER) {
 
-                         view.expandCollapseNode(setting, targetNode, true, false);
 
-                     } else if (!isSilent) {
 
-                         view.expandCollapseNode(setting, targetNode.getParentNode(), true, false);
 
-                     }
 
-                     targetObj = $$(targetNode, setting);
 
-                     target_ulObj = $$(targetNode, consts.id.UL, setting);
 
-                     if (!!targetObj.get(0) && !target_ulObj.get(0)) {
 
-                         var ulstr = [];
 
-                         view.makeUlHtml(setting, targetNode, ulstr, '');
 
-                         targetObj.append(ulstr.join(''));
 
-                     }
 
-                     target_ulObj = $$(targetNode, consts.id.UL, setting);
 
-                 }
 
-                 var nodeDom = $$(node, setting);
 
-                 if (!nodeDom.get(0)) {
 
-                     nodeDom = view.appendNodes(setting, node.level, [node], null, -1, false, true).join('');
 
-                 } else if (!targetObj.get(0)) {
 
-                     nodeDom.remove();
 
-                 }
 
-                 if (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {
 
-                     target_ulObj.append(nodeDom);
 
-                 } else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {
 
-                     targetObj.before(nodeDom);
 
-                 } else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {
 
-                     targetObj.after(nodeDom);
 
-                 }
 
-                 //repair the data after move
 
-                 var i, l,
 
-                     tmpSrcIndex = -1,
 
-                     tmpTargetIndex = 0,
 
-                     oldNeighbor = null,
 
-                     newNeighbor = null,
 
-                     oldLevel = node.level;
 
-                 var oldChildren = data.nodeChildren(setting, oldParentNode);
 
-                 var targetParentChildren = data.nodeChildren(setting, targetParentNode);
 
-                 var targetChildren = data.nodeChildren(setting, targetNode);
 
-                 if (node.isFirstNode) {
 
-                     tmpSrcIndex = 0;
 
-                     if (oldChildren.length > 1) {
 
-                         oldNeighbor = oldChildren[1];
 
-                         oldNeighbor.isFirstNode = true;
 
-                     }
 
-                 } else if (node.isLastNode) {
 
-                     tmpSrcIndex = oldChildren.length - 1;
 
-                     oldNeighbor = oldChildren[tmpSrcIndex - 1];
 
-                     oldNeighbor.isLastNode = true;
 
-                 } else {
 
-                     for (i = 0, l = oldChildren.length; i < l; i++) {
 
-                         if (oldChildren[i].tId == node.tId) {
 
-                             tmpSrcIndex = i;
 
-                             break;
 
-                         }
 
-                     }
 
-                 }
 
-                 if (tmpSrcIndex >= 0) {
 
-                     oldChildren.splice(tmpSrcIndex, 1);
 
-                 }
 
-                 if (moveType != consts.move.TYPE_INNER) {
 
-                     for (i = 0, l = targetParentChildren.length; i < l; i++) {
 
-                         if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i;
 
-                     }
 
-                 }
 
-                 if (moveType == consts.move.TYPE_INNER) {
 
-                     if (!targetChildren) {
 
-                         targetChildren = data.nodeChildren(setting, targetNode, []);
 
-                     }
 
-                     if (targetChildren.length > 0) {
 
-                         newNeighbor = targetChildren[targetChildren.length - 1];
 
-                         newNeighbor.isLastNode = false;
 
-                     }
 
-                     targetChildren.splice(targetChildren.length, 0, node);
 
-                     node.isLastNode = true;
 
-                     node.isFirstNode = (targetChildren.length == 1);
 
-                 } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {
 
-                     targetParentChildren.splice(tmpTargetIndex, 0, node);
 
-                     newNeighbor = targetNode;
 
-                     newNeighbor.isFirstNode = false;
 
-                     node.parentTId = targetNode.parentTId;
 
-                     node.isFirstNode = true;
 
-                     node.isLastNode = false;
 
-                 } else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {
 
-                     targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
 
-                     newNeighbor = targetNode;
 
-                     newNeighbor.isLastNode = false;
 
-                     node.parentTId = targetNode.parentTId;
 
-                     node.isFirstNode = false;
 
-                     node.isLastNode = true;
 
-                 } else {
 
-                     if (moveType == consts.move.TYPE_PREV) {
 
-                         targetParentChildren.splice(tmpTargetIndex, 0, node);
 
-                     } else {
 
-                         targetParentChildren.splice(tmpTargetIndex + 1, 0, node);
 
-                     }
 
-                     node.parentTId = targetNode.parentTId;
 
-                     node.isFirstNode = false;
 
-                     node.isLastNode = false;
 
-                 }
 
-                 data.fixPIdKeyValue(setting, node);
 
-                 data.setSonNodeLevel(setting, node.getParentNode(), node);
 
-                 //repair node what been moved
 
-                 view.setNodeLineIcos(setting, node);
 
-                 view.repairNodeLevelClass(setting, node, oldLevel);
 
-                 //repair node's old parentNode dom
 
-                 if (!setting.data.keep.parent && oldChildren.length < 1) {
 
-                     //old parentNode has no child nodes
 
-                     data.nodeIsParent(setting, oldParentNode, false);
 
-                     oldParentNode.open = false;
 
-                     var tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),
 
-                         tmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),
 
-                         tmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);
 
-                     view.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);
 
-                     view.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);
 
-                     tmp_ulObj.css("display", "none");
 
-                 } else if (oldNeighbor) {
 
-                     //old neigbor node
 
-                     view.setNodeLineIcos(setting, oldNeighbor);
 
-                 }
 
-                 //new neigbor node
 
-                 if (newNeighbor) {
 
-                     view.setNodeLineIcos(setting, newNeighbor);
 
-                 }
 
-                 //repair checkbox / radio
 
-                 if (!!setting.check && setting.check.enable && view.repairChkClass) {
 
-                     view.repairChkClass(setting, oldParentNode);
 
-                     view.repairParentChkClassWithSelf(setting, oldParentNode);
 
-                     if (oldParentNode != node.parent)
 
-                         view.repairParentChkClassWithSelf(setting, node);
 
-                 }
 
-                 //expand parents after move
 
-                 if (!isSilent) {
 
-                     view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);
 
-                 }
 
-             },
 
-             removeEditBtn: function (setting, node) {
 
-                 $$(node, consts.id.EDIT, setting).unbind().remove();
 
-             },
 
-             removeRemoveBtn: function (setting, node) {
 
-                 $$(node, consts.id.REMOVE, setting).unbind().remove();
 
-             },
 
-             removeTreeDom: function (setting, node) {
 
-                 node.isHover = false;
 
-                 view.removeEditBtn(setting, node);
 
-                 view.removeRemoveBtn(setting, node);
 
-                 tools.apply(setting.view.removeHoverDom, [setting.treeId, node]);
 
-             },
 
-             repairNodeLevelClass: function (setting, node, oldLevel) {
 
-                 if (oldLevel === node.level) return;
 
-                 var liObj = $$(node, setting),
 
-                     aObj = $$(node, consts.id.A, setting),
 
-                     ulObj = $$(node, consts.id.UL, setting),
 
-                     oldClass = consts.className.LEVEL + oldLevel,
 
-                     newClass = consts.className.LEVEL + node.level;
 
-                 liObj.removeClass(oldClass);
 
-                 liObj.addClass(newClass);
 
-                 aObj.removeClass(oldClass);
 
-                 aObj.addClass(newClass);
 
-                 ulObj.removeClass(oldClass);
 
-                 ulObj.addClass(newClass);
 
-             },
 
-             selectNodes: function (setting, nodes) {
 
-                 for (var i = 0, l = nodes.length; i < l; i++) {
 
-                     view.selectNode(setting, nodes[i], i > 0);
 
-                 }
 
-             }
 
-         },
 
-         _z = {
 
-             tools: _tools,
 
-             view: _view,
 
-             event: _event,
 
-             data: _data
 
-         };
 
-     $.extend(true, $.fn.zTree.consts, _consts);
 
-     $.extend(true, $.fn.zTree._z, _z);
 
-     var zt = $.fn.zTree,
 
-         tools = zt._z.tools,
 
-         consts = zt.consts,
 
-         view = zt._z.view,
 
-         data = zt._z.data,
 
-         event = zt._z.event,
 
-         $$ = tools.$;
 
-     data.exSetting(_setting);
 
-     data.addInitBind(_bindEvent);
 
-     data.addInitUnBind(_unbindEvent);
 
-     data.addInitCache(_initCache);
 
-     data.addInitNode(_initNode);
 
-     data.addInitProxy(_eventProxy);
 
-     data.addInitRoot(_initRoot);
 
-     data.addZTreeTools(_zTreeTools);
 
-     var _cancelPreSelectedNode = view.cancelPreSelectedNode;
 
-     view.cancelPreSelectedNode = function (setting, node) {
 
-         var list = data.getRoot(setting).curSelectedList;
 
-         for (var i = 0, j = list.length; i < j; i++) {
 
-             if (!node || node === list[i]) {
 
-                 view.removeTreeDom(setting, list[i]);
 
-                 if (node) break;
 
-             }
 
-         }
 
-         if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);
 
-     }
 
-     var _createNodes = view.createNodes;
 
-     view.createNodes = function (setting, level, nodes, parentNode, index) {
 
-         if (_createNodes) {
 
-             _createNodes.apply(view, arguments);
 
-         }
 
-         if (!nodes) return;
 
-         if (view.repairParentChkClassWithSelf) {
 
-             view.repairParentChkClassWithSelf(setting, parentNode);
 
-         }
 
-     }
 
-     var _makeNodeUrl = view.makeNodeUrl;
 
-     view.makeNodeUrl = function (setting, node) {
 
-         return setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));
 
-     }
 
-     var _removeNode = view.removeNode;
 
-     view.removeNode = function (setting, node) {
 
-         var root = data.getRoot(setting);
 
-         if (root.curEditNode === node) root.curEditNode = null;
 
-         if (_removeNode) {
 
-             _removeNode.apply(view, arguments);
 
-         }
 
-     }
 
-     var _selectNode = view.selectNode;
 
-     view.selectNode = function (setting, node, addFlag) {
 
-         var root = data.getRoot(setting);
 
-         if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {
 
-             return false;
 
-         }
 
-         if (_selectNode) _selectNode.apply(view, arguments);
 
-         view.addHoverDom(setting, node);
 
-         return true;
 
-     }
 
-     var _uCanDo = tools.uCanDo;
 
-     tools.uCanDo = function (setting, e) {
 
-         var root = data.getRoot(setting);
 
-         if (e && (tools.eqs(e.type, "mouseover") || tools.eqs(e.type, "mouseout") || tools.eqs(e.type, "mousedown") || tools.eqs(e.type, "mouseup"))) {
 
-             return true;
 
-         }
 
-         if (root.curEditNode) {
 
-             view.editNodeBlur = false;
 
-             root.curEditInput.focus();
 
-         }
 
-         return (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);
 
-     }
 
- })(jQuery);
 
 
  |