| 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);
 |