| | |
| | | * Date: 2020-11-21 |
| | | */ |
| | | |
| | | (function ($) { |
| | | var settings = {}, roots = {}, caches = {}, |
| | | (function($) { |
| | | var settings = {}, |
| | | roots = {}, |
| | | caches = {}, |
| | | //default consts of core |
| | | _consts = { |
| | | className: { |
| | |
| | | LEVEL: "level", |
| | | ICO_LOADING: "ico_loading", |
| | | SWITCH: "switch", |
| | | NAME: 'node_name' |
| | | NAME: "node_name", |
| | | }, |
| | | event: { |
| | | NODECREATED: "ztree_nodeCreated", |
| | |
| | | ASYNC_ERROR: "ztree_async_error", |
| | | REMOVE: "ztree_remove", |
| | | SELECTED: "ztree_selected", |
| | | UNSELECTED: "ztree_unselected" |
| | | UNSELECTED: "ztree_unselected", |
| | | }, |
| | | id: { |
| | | A: "_a", |
| | | ICON: "_ico", |
| | | SPAN: "_span", |
| | | SWITCH: "_switch", |
| | | UL: "_ul" |
| | | UL: "_ul", |
| | | }, |
| | | line: { |
| | | ROOT: "root", |
| | |
| | | CENTER: "center", |
| | | BOTTOM: "bottom", |
| | | NOLINE: "noline", |
| | | LINE: "line" |
| | | LINE: "line", |
| | | }, |
| | | folder: { |
| | | OPEN: "open", |
| | | CLOSE: "close", |
| | | DOCU: "docu" |
| | | DOCU: "docu", |
| | | }, |
| | | node: { |
| | | CURSELECTED: "curSelectedNode" |
| | | } |
| | | CURSELECTED: "curSelectedNode", |
| | | }, |
| | | }, |
| | | //default setting of core |
| | | _setting = { |
| | |
| | | showIcon: true, |
| | | showLine: true, |
| | | showTitle: true, |
| | | txtSelectedEnable: false |
| | | txtSelectedEnable: false, |
| | | }, |
| | | data: { |
| | | key: { |
| | |
| | | name: "name", |
| | | title: "", |
| | | url: "url", |
| | | icon: "icon" |
| | | icon: "icon", |
| | | }, |
| | | render: { |
| | | name: null, |
| | |
| | | enable: false, |
| | | idKey: "id", |
| | | pIdKey: "pId", |
| | | rootPId: null |
| | | rootPId: null, |
| | | }, |
| | | keep: { |
| | | parent: false, |
| | | leaf: false |
| | | } |
| | | leaf: false, |
| | | }, |
| | | }, |
| | | async: { |
| | | enable: false, |
| | |
| | | url: "", |
| | | autoParam: [], |
| | | otherParam: [], |
| | | dataFilter: null |
| | | dataFilter: null, |
| | | }, |
| | | callback: { |
| | | beforeAsync: null, |
| | |
| | | onMouseUp: null, |
| | | onExpand: null, |
| | | onCollapse: null, |
| | | onRemove: null |
| | | } |
| | | onRemove: null, |
| | | }, |
| | | }, |
| | | //default root of core |
| | | //zTree use root to save full data |
| | | _initRoot = function (setting) { |
| | | _initRoot = function(setting) { |
| | | var r = data.getRoot(setting); |
| | | if (!r) { |
| | | r = {}; |
| | |
| | | r.noSelection = true; |
| | | r.createdNodes = []; |
| | | r.zId = 0; |
| | | r._ver = (new Date()).getTime(); |
| | | r._ver = new Date().getTime(); |
| | | }, |
| | | //default cache of core |
| | | _initCache = function (setting) { |
| | | _initCache = function(setting) { |
| | | var c = data.getCache(setting); |
| | | if (!c) { |
| | | c = {}; |
| | |
| | | c.doms = []; |
| | | }, |
| | | //default bindEvent of core |
| | | _bindEvent = function (setting) { |
| | | _bindEvent = function(setting) { |
| | | var o = setting.treeObj, |
| | | c = consts.event; |
| | | o.bind(c.NODECREATED, function (event, treeId, node) { |
| | | o.bind(c.NODECREATED, function(event, treeId, node) { |
| | | tools.apply(setting.callback.onNodeCreated, [event, treeId, node]); |
| | | }); |
| | | |
| | | o.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) { |
| | | tools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]); |
| | | o.bind(c.CLICK, function(event, srcEvent, treeId, node, clickFlag) { |
| | | tools.apply(setting.callback.onClick, [ |
| | | srcEvent, |
| | | treeId, |
| | | node, |
| | | clickFlag, |
| | | ]); |
| | | }); |
| | | |
| | | o.bind(c.EXPAND, function (event, treeId, node) { |
| | | o.bind(c.EXPAND, function(event, treeId, node) { |
| | | tools.apply(setting.callback.onExpand, [event, treeId, node]); |
| | | }); |
| | | |
| | | o.bind(c.COLLAPSE, function (event, treeId, node) { |
| | | o.bind(c.COLLAPSE, function(event, treeId, node) { |
| | | tools.apply(setting.callback.onCollapse, [event, treeId, node]); |
| | | }); |
| | | |
| | | o.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) { |
| | | tools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]); |
| | | o.bind(c.ASYNC_SUCCESS, function(event, treeId, node, msg) { |
| | | tools.apply(setting.callback.onAsyncSuccess, [ |
| | | event, |
| | | treeId, |
| | | node, |
| | | msg, |
| | | ]); |
| | | }); |
| | | |
| | | o.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) { |
| | | tools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]); |
| | | o.bind(c.ASYNC_ERROR, function( |
| | | event, |
| | | treeId, |
| | | node, |
| | | XMLHttpRequest, |
| | | textStatus, |
| | | errorThrown |
| | | ) { |
| | | tools.apply(setting.callback.onAsyncError, [ |
| | | event, |
| | | treeId, |
| | | node, |
| | | XMLHttpRequest, |
| | | textStatus, |
| | | errorThrown, |
| | | ]); |
| | | }); |
| | | |
| | | o.bind(c.REMOVE, function (event, treeId, treeNode) { |
| | | o.bind(c.REMOVE, function(event, treeId, treeNode) { |
| | | tools.apply(setting.callback.onRemove, [event, treeId, treeNode]); |
| | | }); |
| | | |
| | | o.bind(c.SELECTED, function (event, treeId, node) { |
| | | o.bind(c.SELECTED, function(event, treeId, node) { |
| | | tools.apply(setting.callback.onSelected, [treeId, node]); |
| | | }); |
| | | o.bind(c.UNSELECTED, function (event, treeId, node) { |
| | | o.bind(c.UNSELECTED, function(event, treeId, node) { |
| | | tools.apply(setting.callback.onUnSelected, [treeId, node]); |
| | | }); |
| | | }, |
| | | _unbindEvent = function (setting) { |
| | | _unbindEvent = function(setting) { |
| | | var o = setting.treeObj, |
| | | c = consts.event; |
| | | o.unbind(c.NODECREATED) |
| | |
| | | .unbind(c.UNSELECTED); |
| | | }, |
| | | //default event proxy of core |
| | | _eventProxy = function (event) { |
| | | _eventProxy = function(event) { |
| | | var target = event.target, |
| | | setting = data.getSetting(event.data.treeId), |
| | | tId = "", node = null, |
| | | nodeEventType = "", treeEventType = "", |
| | | nodeEventCallback = null, treeEventCallback = null, |
| | | tId = "", |
| | | node = null, |
| | | nodeEventType = "", |
| | | treeEventType = "", |
| | | nodeEventCallback = null, |
| | | treeEventCallback = null, |
| | | tmp = null; |
| | | |
| | | if (tools.eqs(event.type, "mousedown")) { |
| | |
| | | } else if (tools.eqs(event.type, "contextmenu")) { |
| | | treeEventType = "contextmenu"; |
| | | } else if (tools.eqs(event.type, "click")) { |
| | | if (tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.SWITCH) !== null) { |
| | | if ( |
| | | tools.eqs(target.tagName, "span") && |
| | | target.getAttribute("treeNode" + consts.id.SWITCH) !== null |
| | | ) { |
| | | tId = tools.getNodeMainDom(target).id; |
| | | nodeEventType = "switchNode"; |
| | | } else { |
| | | tmp = tools.getMDom(setting, target, [{ tagName: "a", attrName: "treeNode" + consts.id.A }]); |
| | | tmp = tools.getMDom(setting, target, [ |
| | | { tagName: "a", attrName: "treeNode" + consts.id.A }, |
| | | ]); |
| | | if (tmp) { |
| | | tId = tools.getNodeMainDom(tmp).id; |
| | | nodeEventType = "clickNode"; |
| | |
| | | } |
| | | } else if (tools.eqs(event.type, "dblclick")) { |
| | | treeEventType = "dblclick"; |
| | | tmp = tools.getMDom(setting, target, [{ tagName: "a", attrName: "treeNode" + consts.id.A }]); |
| | | tmp = tools.getMDom(setting, target, [ |
| | | { tagName: "a", attrName: "treeNode" + consts.id.A }, |
| | | ]); |
| | | if (tmp) { |
| | | tId = tools.getNodeMainDom(tmp).id; |
| | | nodeEventType = "switchNode"; |
| | | } |
| | | } |
| | | if (treeEventType.length > 0 && tId.length == 0) { |
| | | tmp = tools.getMDom(setting, target, [{ tagName: "a", attrName: "treeNode" + consts.id.A }]); |
| | | tmp = tools.getMDom(setting, target, [ |
| | | { tagName: "a", attrName: "treeNode" + consts.id.A }, |
| | | ]); |
| | | if (tmp) { |
| | | tId = tools.getNodeMainDom(tmp).id; |
| | | } |
| | |
| | | var isParent = data.nodeIsParent(setting, node); |
| | | if (!isParent) { |
| | | nodeEventType = ""; |
| | | } else if (tools.eqs(event.type, "click") |
| | | || (tools.eqs(event.type, "dblclick") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) { |
| | | } else if ( |
| | | tools.eqs(event.type, "click") || |
| | | (tools.eqs(event.type, "dblclick") && |
| | | tools.apply( |
| | | setting.view.dblClickExpand, |
| | | [setting.treeId, node], |
| | | setting.view.dblClickExpand |
| | | )) |
| | | ) { |
| | | nodeEventCallback = handler.onSwitchNode; |
| | | } else { |
| | | nodeEventType = ""; |
| | |
| | | nodeEventType: nodeEventType, |
| | | nodeEventCallback: nodeEventCallback, |
| | | treeEventType: treeEventType, |
| | | treeEventCallback: treeEventCallback |
| | | treeEventCallback: treeEventCallback, |
| | | }; |
| | | return proxyResult |
| | | return proxyResult; |
| | | }, |
| | | //default init node of core |
| | | _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { |
| | | _initNode = function( |
| | | setting, |
| | | level, |
| | | n, |
| | | parentNode, |
| | | isFirstNode, |
| | | isLastNode, |
| | | openFlag |
| | | ) { |
| | | if (!n) return; |
| | | var r = data.getRoot(setting), |
| | | children = data.nodeChildren(setting, n); |
| | | n.level = level; |
| | | n.tId = setting.treeId + "_" + (++r.zId); |
| | | n.tId = setting.treeId + "_" + ++r.zId; |
| | | n.parentTId = parentNode ? parentNode.tId : null; |
| | | n.open = (typeof n.open == "string") ? tools.eqs(n.open, "true") : !!n.open; |
| | | n.open = typeof n.open == "string" ? tools.eqs(n.open, "true") : !!n.open; |
| | | var isParent = data.nodeIsParent(setting, n); |
| | | if (tools.isArray(children)) { |
| | | data.nodeIsParent(setting, n, true); |
| | | n.zAsync = true; |
| | | } else { |
| | | isParent = data.nodeIsParent(setting, n, isParent); |
| | | n.open = (isParent && !setting.async.enable) ? n.open : false; |
| | | n.open = isParent && !setting.async.enable ? n.open : false; |
| | | n.zAsync = !isParent; |
| | | } |
| | | n.isFirstNode = isFirstNode; |
| | | n.isLastNode = isLastNode; |
| | | n.getParentNode = function () { |
| | | n.getParentNode = function() { |
| | | return data.getNodeCache(setting, n.parentTId); |
| | | }; |
| | | n.getPreNode = function () { |
| | | n.getPreNode = function() { |
| | | return data.getPreNode(setting, n); |
| | | }; |
| | | n.getNextNode = function () { |
| | | n.getNextNode = function() { |
| | | return data.getNextNode(setting, n); |
| | | }; |
| | | n.getIndex = function () { |
| | | n.getIndex = function() { |
| | | return data.getNodeIndex(setting, n); |
| | | }; |
| | | n.getPath = function () { |
| | | n.getPath = function() { |
| | | return data.getNodePath(setting, n); |
| | | }; |
| | | n.isAjaxing = false; |
| | |
| | | afterA: [], |
| | | innerBeforeA: [], |
| | | innerAfterA: [], |
| | | zTreeTools: [] |
| | | zTreeTools: [], |
| | | }, |
| | | //method of operate data |
| | | data = { |
| | | addNodeCache: function (setting, node) { |
| | | addNodeCache: function(setting, node) { |
| | | data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node; |
| | | }, |
| | | getNodeCacheId: function (tId) { |
| | | getNodeCacheId: function(tId) { |
| | | return tId.substring(tId.lastIndexOf("_") + 1); |
| | | }, |
| | | addAfterA: function (afterA) { |
| | | addAfterA: function(afterA) { |
| | | _init.afterA.push(afterA); |
| | | }, |
| | | addBeforeA: function (beforeA) { |
| | | addBeforeA: function(beforeA) { |
| | | _init.beforeA.push(beforeA); |
| | | }, |
| | | addInnerAfterA: function (innerAfterA) { |
| | | addInnerAfterA: function(innerAfterA) { |
| | | _init.innerAfterA.push(innerAfterA); |
| | | }, |
| | | addInnerBeforeA: function (innerBeforeA) { |
| | | addInnerBeforeA: function(innerBeforeA) { |
| | | _init.innerBeforeA.push(innerBeforeA); |
| | | }, |
| | | addInitBind: function (bindEvent) { |
| | | addInitBind: function(bindEvent) { |
| | | _init.bind.push(bindEvent); |
| | | }, |
| | | addInitUnBind: function (unbindEvent) { |
| | | addInitUnBind: function(unbindEvent) { |
| | | _init.unbind.push(unbindEvent); |
| | | }, |
| | | addInitCache: function (initCache) { |
| | | addInitCache: function(initCache) { |
| | | _init.caches.push(initCache); |
| | | }, |
| | | addInitNode: function (initNode) { |
| | | addInitNode: function(initNode) { |
| | | _init.nodes.push(initNode); |
| | | }, |
| | | addInitProxy: function (initProxy, isFirst) { |
| | | addInitProxy: function(initProxy, isFirst) { |
| | | if (!!isFirst) { |
| | | _init.proxys.splice(0, 0, initProxy); |
| | | } else { |
| | | _init.proxys.push(initProxy); |
| | | } |
| | | }, |
| | | addInitRoot: function (initRoot) { |
| | | addInitRoot: function(initRoot) { |
| | | _init.roots.push(initRoot); |
| | | }, |
| | | addNodesData: function (setting, parentNode, index, nodes) { |
| | | var children = data.nodeChildren(setting, parentNode), params; |
| | | addNodesData: function(setting, parentNode, index, nodes) { |
| | | var children = data.nodeChildren(setting, parentNode), |
| | | params; |
| | | if (!children) { |
| | | children = data.nodeChildren(setting, parentNode, []); |
| | | index = -1; |
| | |
| | | children.splice.apply(children, params); |
| | | } |
| | | }, |
| | | addSelectedNode: function (setting, node) { |
| | | addSelectedNode: function(setting, node) { |
| | | var root = data.getRoot(setting); |
| | | if (!data.isSelectedNode(setting, node)) { |
| | | root.curSelectedList.push(node); |
| | | } |
| | | }, |
| | | addCreatedNode: function (setting, node) { |
| | | addCreatedNode: function(setting, node) { |
| | | if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { |
| | | var root = data.getRoot(setting); |
| | | root.createdNodes.push(node); |
| | | } |
| | | }, |
| | | addZTreeTools: function (zTreeTools) { |
| | | addZTreeTools: function(zTreeTools) { |
| | | _init.zTreeTools.push(zTreeTools); |
| | | }, |
| | | exSetting: function (s) { |
| | | exSetting: function(s) { |
| | | $.extend(true, _setting, s); |
| | | }, |
| | | fixPIdKeyValue: function (setting, node) { |
| | | fixPIdKeyValue: function(setting, node) { |
| | | if (setting.data.simpleData.enable) { |
| | | node[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId; |
| | | node[setting.data.simpleData.pIdKey] = node.parentTId |
| | | ? node.getParentNode()[setting.data.simpleData.idKey] |
| | | : setting.data.simpleData.rootPId; |
| | | } |
| | | }, |
| | | getAfterA: function (setting, node, array) { |
| | | getAfterA: function(setting, node, array) { |
| | | for (var i = 0, j = _init.afterA.length; i < j; i++) { |
| | | _init.afterA[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | getBeforeA: function (setting, node, array) { |
| | | getBeforeA: function(setting, node, array) { |
| | | for (var i = 0, j = _init.beforeA.length; i < j; i++) { |
| | | _init.beforeA[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | getInnerAfterA: function (setting, node, array) { |
| | | getInnerAfterA: function(setting, node, array) { |
| | | for (var i = 0, j = _init.innerAfterA.length; i < j; i++) { |
| | | _init.innerAfterA[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | getInnerBeforeA: function (setting, node, array) { |
| | | getInnerBeforeA: function(setting, node, array) { |
| | | for (var i = 0, j = _init.innerBeforeA.length; i < j; i++) { |
| | | _init.innerBeforeA[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | getCache: function (setting) { |
| | | getCache: function(setting) { |
| | | return caches[setting.treeId]; |
| | | }, |
| | | getNodeIndex: function (setting, node) { |
| | | getNodeIndex: function(setting, node) { |
| | | if (!node) return null; |
| | | var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), |
| | | children = data.nodeChildren(setting, p); |
| | |
| | | } |
| | | return -1; |
| | | }, |
| | | getNextNode: function (setting, node) { |
| | | getNextNode: function(setting, node) { |
| | | if (!node) return null; |
| | | var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), |
| | | children = data.nodeChildren(setting, p); |
| | | for (var i = 0, l = children.length - 1; i <= l; i++) { |
| | | if (children[i] === node) { |
| | | return (i == l ? null : children[i + 1]); |
| | | return i == l ? null : children[i + 1]; |
| | | } |
| | | } |
| | | return null; |
| | | }, |
| | | getNodeByParam: function (setting, nodes, key, value) { |
| | | getNodeByParam: function(setting, nodes, key, value) { |
| | | if (!nodes || !key) return null; |
| | | for (var i = 0, l = nodes.length; i < l; i++) { |
| | | var node = nodes[i]; |
| | |
| | | } |
| | | return null; |
| | | }, |
| | | getNodeCache: function (setting, tId) { |
| | | getNodeCache: function(setting, tId) { |
| | | if (!tId) return null; |
| | | var n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)]; |
| | | return n ? n : null; |
| | | }, |
| | | getNodePath: function (setting, node) { |
| | | getNodePath: function(setting, node) { |
| | | if (!node) return null; |
| | | |
| | | var path; |
| | |
| | | |
| | | return path; |
| | | }, |
| | | getNodes: function (setting) { |
| | | getNodes: function(setting) { |
| | | return data.nodeChildren(setting, data.getRoot(setting)); |
| | | }, |
| | | getNodesByParam: function (setting, nodes, key, value) { |
| | | getNodesByParam: function(setting, nodes, key, value) { |
| | | if (!nodes || !key) return []; |
| | | var result = []; |
| | | for (var i = 0, l = nodes.length; i < l; i++) { |
| | |
| | | result.push(node); |
| | | } |
| | | var children = data.nodeChildren(setting, node); |
| | | result = result.concat(data.getNodesByParam(setting, children, key, value)); |
| | | result = result.concat( |
| | | data.getNodesByParam(setting, children, key, value) |
| | | ); |
| | | } |
| | | return result; |
| | | }, |
| | | getNodesByParamFuzzy: function (setting, nodes, key, value) { |
| | | getNodesByParamFuzzy: function(setting, nodes, key, value) { |
| | | if (!nodes || !key) return []; |
| | | var result = []; |
| | | value = value.toLowerCase(); |
| | | for (var i = 0, l = nodes.length; i < l; i++) { |
| | | var node = nodes[i]; |
| | | if (typeof node[key] == "string" && nodes[i][key].toLowerCase().indexOf(value) > -1) { |
| | | if ( |
| | | typeof node[key] == "string" && |
| | | nodes[i][key].toLowerCase().indexOf(value) > -1 |
| | | ) { |
| | | result.push(node); |
| | | } |
| | | var children = data.nodeChildren(setting, node); |
| | | result = result.concat(data.getNodesByParamFuzzy(setting, children, key, value)); |
| | | result = result.concat( |
| | | data.getNodesByParamFuzzy(setting, children, key, value) |
| | | ); |
| | | } |
| | | return result; |
| | | }, |
| | | getNodesByFilter: function (setting, nodes, filter, isSingle, invokeParam) { |
| | | if (!nodes) return (isSingle ? null : []); |
| | | getNodesByFilter: function( |
| | | setting, |
| | | nodes, |
| | | filter, |
| | | isSingle, |
| | | invokeParam |
| | | ) { |
| | | if (!nodes) return isSingle ? null : []; |
| | | var result = isSingle ? null : []; |
| | | for (var i = 0, l = nodes.length; i < l; i++) { |
| | | var node = nodes[i]; |
| | |
| | | result.push(node); |
| | | } |
| | | var children = data.nodeChildren(setting, node); |
| | | var tmpResult = data.getNodesByFilter(setting, children, filter, isSingle, invokeParam); |
| | | var tmpResult = data.getNodesByFilter( |
| | | setting, |
| | | children, |
| | | filter, |
| | | isSingle, |
| | | invokeParam |
| | | ); |
| | | if (isSingle && !!tmpResult) { |
| | | return tmpResult; |
| | | } |
| | |
| | | } |
| | | return result; |
| | | }, |
| | | getPreNode: function (setting, node) { |
| | | getPreNode: function(setting, node) { |
| | | if (!node) return null; |
| | | var p = node.parentTId ? node.getParentNode() : data.getRoot(setting), |
| | | children = data.nodeChildren(setting, p); |
| | | for (var i = 0, l = children.length; i < l; i++) { |
| | | if (children[i] === node) { |
| | | return (i == 0 ? null : children[i - 1]); |
| | | return i == 0 ? null : children[i - 1]; |
| | | } |
| | | } |
| | | return null; |
| | | }, |
| | | getRoot: function (setting) { |
| | | getRoot: function(setting) { |
| | | return setting ? roots[setting.treeId] : null; |
| | | }, |
| | | getRoots: function () { |
| | | getRoots: function() { |
| | | return roots; |
| | | }, |
| | | getSetting: function (treeId) { |
| | | getSetting: function(treeId) { |
| | | return settings[treeId]; |
| | | }, |
| | | getSettings: function () { |
| | | getSettings: function() { |
| | | return settings; |
| | | }, |
| | | getZTreeTools: function (treeId) { |
| | | getZTreeTools: function(treeId) { |
| | | var r = this.getRoot(this.getSetting(treeId)); |
| | | return r ? r.treeTools : null; |
| | | }, |
| | | initCache: function (setting) { |
| | | initCache: function(setting) { |
| | | for (var i = 0, j = _init.caches.length; i < j; i++) { |
| | | _init.caches[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | initNode: function (setting, level, node, parentNode, preNode, nextNode) { |
| | | initNode: function(setting, level, node, parentNode, preNode, nextNode) { |
| | | for (var i = 0, j = _init.nodes.length; i < j; i++) { |
| | | _init.nodes[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | initRoot: function (setting) { |
| | | initRoot: function(setting) { |
| | | for (var i = 0, j = _init.roots.length; i < j; i++) { |
| | | _init.roots[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | isSelectedNode: function (setting, node) { |
| | | isSelectedNode: function(setting, node) { |
| | | var root = data.getRoot(setting); |
| | | for (var i = 0, j = root.curSelectedList.length; i < j; i++) { |
| | | if (node === root.curSelectedList[i]) return true; |
| | | } |
| | | return false; |
| | | }, |
| | | nodeChildren: function (setting, node, newChildren) { |
| | | nodeChildren: function(setting, node, newChildren) { |
| | | if (!node) { |
| | | return null; |
| | | } |
| | | var key = setting.data.key.children; |
| | | if (typeof newChildren !== 'undefined') { |
| | | if (typeof newChildren !== "undefined") { |
| | | node[key] = newChildren; |
| | | } |
| | | return node[key]; |
| | | }, |
| | | nodeIsParent: function (setting, node, newIsParent) { |
| | | nodeIsParent: function(setting, node, newIsParent) { |
| | | if (!node) { |
| | | return false; |
| | | } |
| | | |
| | | var key = setting.data.key.isParent; |
| | | if (typeof newIsParent !== 'undefined') { |
| | | if (typeof newIsParent !== "undefined") { |
| | | if (typeof newIsParent === "string") { |
| | | newIsParent = tools.eqs(newIsParent, "true"); |
| | | } |
| | |
| | | node[key] = true; |
| | | } |
| | | |
| | | if (node.type == "4") { |
| | | node[key] = false; |
| | | } |
| | | |
| | | return node[key]; |
| | | }, |
| | | nodeName: function (setting, node, newName) { |
| | | nodeName: function(setting, node, newName) { |
| | | var key = setting.data.key.name; |
| | | if (typeof newName !== 'undefined') { |
| | | if (typeof newName !== "undefined") { |
| | | node[key] = newName; |
| | | } |
| | | var rawName = "" + node[key]; |
| | | if (typeof setting.data.render.name === 'function') { |
| | | if (typeof setting.data.render.name === "function") { |
| | | return setting.data.render.name.call(this, rawName, node); |
| | | } |
| | | return rawName; |
| | | }, |
| | | nodeTitle: function (setting, node) { |
| | | var t = setting.data.key.title === "" ? setting.data.key.name : setting.data.key.title; |
| | | nodeTitle: function(setting, node) { |
| | | var t = |
| | | setting.data.key.title === "" |
| | | ? setting.data.key.name |
| | | : setting.data.key.title; |
| | | var rawTitle = "" + node[t]; |
| | | if (typeof setting.data.render.title === 'function') { |
| | | if (typeof setting.data.render.title === "function") { |
| | | return setting.data.render.title.call(this, rawTitle, node); |
| | | } |
| | | return rawTitle; |
| | | }, |
| | | removeNodeCache: function (setting, node) { |
| | | removeNodeCache: function(setting, node) { |
| | | var children = data.nodeChildren(setting, node); |
| | | if (children) { |
| | | for (var i = 0, l = children.length; i < l; i++) { |
| | |
| | | } |
| | | data.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null; |
| | | }, |
| | | removeSelectedNode: function (setting, node) { |
| | | removeSelectedNode: function(setting, node) { |
| | | var root = data.getRoot(setting); |
| | | for (var i = 0, j = root.curSelectedList.length; i < j; i++) { |
| | | if (node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) { |
| | | if ( |
| | | node === root.curSelectedList[i] || |
| | | !data.getNodeCache(setting, root.curSelectedList[i].tId) |
| | | ) { |
| | | root.curSelectedList.splice(i, 1); |
| | | setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, node]); |
| | | setting.treeObj.trigger(consts.event.UNSELECTED, [ |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | i--; |
| | | j--; |
| | | } |
| | | } |
| | | }, |
| | | setCache: function (setting, cache) { |
| | | setCache: function(setting, cache) { |
| | | caches[setting.treeId] = cache; |
| | | }, |
| | | setRoot: function (setting, root) { |
| | | setRoot: function(setting, root) { |
| | | roots[setting.treeId] = root; |
| | | }, |
| | | setZTreeTools: function (setting, zTreeTools) { |
| | | setZTreeTools: function(setting, zTreeTools) { |
| | | for (var i = 0, j = _init.zTreeTools.length; i < j; i++) { |
| | | _init.zTreeTools[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | transformToArrayFormat: function (setting, nodes) { |
| | | transformToArrayFormat: function(setting, nodes) { |
| | | if (!nodes) return []; |
| | | var r = []; |
| | | if (tools.isArray(nodes)) { |
| | |
| | | } |
| | | } |
| | | }, |
| | | transformTozTreeFormat: function (setting, sNodes) { |
| | | var i, l, |
| | | transformTozTreeFormat: function(setting, sNodes) { |
| | | var i, |
| | | l, |
| | | key = setting.data.simpleData.idKey, |
| | | parentKey = setting.data.simpleData.pIdKey; |
| | | if (!key || key == "" || !sNodes) return []; |
| | |
| | | } else { |
| | | return [sNodes]; |
| | | } |
| | | } |
| | | }, |
| | | }, |
| | | //method of event proxy |
| | | event = { |
| | | bindEvent: function (setting) { |
| | | bindEvent: function(setting) { |
| | | for (var i = 0, j = _init.bind.length; i < j; i++) { |
| | | _init.bind[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | unbindEvent: function (setting) { |
| | | unbindEvent: function(setting) { |
| | | for (var i = 0, j = _init.unbind.length; i < j; i++) { |
| | | _init.unbind[i].apply(this, arguments); |
| | | } |
| | | }, |
| | | bindTree: function (setting) { |
| | | bindTree: function(setting) { |
| | | var eventParam = { |
| | | treeId: setting.treeId |
| | | }, |
| | | treeId: setting.treeId, |
| | | }, |
| | | o = setting.treeObj; |
| | | if (!setting.view.txtSelectedEnable) { |
| | | // for can't select text |
| | | o.bind('selectstart', handler.onSelectStart).css({ |
| | | "-moz-user-select": "-moz-none" |
| | | o.bind("selectstart", handler.onSelectStart).css({ |
| | | "-moz-user-select": "-moz-none", |
| | | }); |
| | | } |
| | | o.bind('click', eventParam, event.proxy); |
| | | o.bind('dblclick', eventParam, event.proxy); |
| | | o.bind('mouseover', eventParam, event.proxy); |
| | | o.bind('mouseout', eventParam, event.proxy); |
| | | o.bind('mousedown', eventParam, event.proxy); |
| | | o.bind('mouseup', eventParam, event.proxy); |
| | | o.bind('contextmenu', eventParam, event.proxy); |
| | | o.bind("click", eventParam, event.proxy); |
| | | o.bind("dblclick", eventParam, event.proxy); |
| | | o.bind("mouseover", eventParam, event.proxy); |
| | | o.bind("mouseout", eventParam, event.proxy); |
| | | o.bind("mousedown", eventParam, event.proxy); |
| | | o.bind("mouseup", eventParam, event.proxy); |
| | | o.bind("contextmenu", eventParam, event.proxy); |
| | | }, |
| | | unbindTree: function (setting) { |
| | | unbindTree: function(setting) { |
| | | var o = setting.treeObj; |
| | | o.unbind('selectstart', handler.onSelectStart) |
| | | .unbind('click', event.proxy) |
| | | .unbind('dblclick', event.proxy) |
| | | .unbind('mouseover', event.proxy) |
| | | .unbind('mouseout', event.proxy) |
| | | .unbind('mousedown', event.proxy) |
| | | .unbind('mouseup', event.proxy) |
| | | .unbind('contextmenu', event.proxy); |
| | | o.unbind("selectstart", handler.onSelectStart) |
| | | .unbind("click", event.proxy) |
| | | .unbind("dblclick", event.proxy) |
| | | .unbind("mouseover", event.proxy) |
| | | .unbind("mouseout", event.proxy) |
| | | .unbind("mousedown", event.proxy) |
| | | .unbind("mouseup", event.proxy) |
| | | .unbind("contextmenu", event.proxy); |
| | | }, |
| | | doProxy: function (e) { |
| | | doProxy: function(e) { |
| | | var results = []; |
| | | for (var i = 0, j = _init.proxys.length; i < j; i++) { |
| | | var proxyResult = _init.proxys[i].apply(this, arguments); |
| | |
| | | } |
| | | return results; |
| | | }, |
| | | proxy: function (e) { |
| | | proxy: function(e) { |
| | | var setting = data.getSetting(e.data.treeId); |
| | | if (!tools.uCanDo(setting, e)) return true; |
| | | var results = event.doProxy(e), |
| | | r = true, x = false; |
| | | r = true, |
| | | x = false; |
| | | for (var i = 0, l = results.length; i < l; i++) { |
| | | var proxyResult = results[i]; |
| | | if (proxyResult.nodeEventCallback) { |
| | | x = true; |
| | | r = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; |
| | | r = |
| | | proxyResult.nodeEventCallback.apply(proxyResult, [ |
| | | e, |
| | | proxyResult.node, |
| | | ]) && r; |
| | | } |
| | | if (proxyResult.treeEventCallback) { |
| | | x = true; |
| | | r = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r; |
| | | r = |
| | | proxyResult.treeEventCallback.apply(proxyResult, [ |
| | | e, |
| | | proxyResult.node, |
| | | ]) && r; |
| | | } |
| | | } |
| | | return r; |
| | | } |
| | | }, |
| | | }, |
| | | //method of event handler |
| | | handler = { |
| | | onSwitchNode: function (event, node) { |
| | | onSwitchNode: function(event, node) { |
| | | var setting = data.getSetting(event.data.treeId); |
| | | if (node.open) { |
| | | if (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true; |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeCollapse, |
| | | [setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) |
| | | return true; |
| | | data.getRoot(setting).expandTriggerFlag = true; |
| | | view.switchNode(setting, node); |
| | | } else { |
| | | if (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true; |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeExpand, |
| | | [setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) |
| | | return true; |
| | | data.getRoot(setting).expandTriggerFlag = true; |
| | | view.switchNode(setting, node); |
| | | } |
| | | return true; |
| | | }, |
| | | onClickNode: function (event, node) { |
| | | onClickNode: function(event, node) { |
| | | // debugger |
| | | var setting = data.getSetting(event.data.treeId), |
| | | clickFlag = ((setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1; |
| | | if (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true; |
| | | clickFlag = |
| | | setting.view.autoCancelSelected && |
| | | (event.ctrlKey || event.metaKey) && |
| | | data.isSelectedNode(setting, node) |
| | | ? 0 |
| | | : setting.view.autoCancelSelected && |
| | | (event.ctrlKey || event.metaKey) && |
| | | setting.view.selectedMulti |
| | | ? 2 |
| | | : 1; |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeClick, |
| | | [setting.treeId, node, clickFlag], |
| | | true |
| | | ) == false |
| | | ) |
| | | return true; |
| | | if (clickFlag === 0) { |
| | | view.cancelPreSelectedNode(setting, node); |
| | | } else { |
| | | view.selectNode(setting, node, clickFlag === 2); |
| | | } |
| | | setting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]); |
| | | setting.treeObj.trigger(consts.event.CLICK, [ |
| | | event, |
| | | setting.treeId, |
| | | node, |
| | | clickFlag, |
| | | ]); |
| | | return true; |
| | | }, |
| | | onZTreeMousedown: function (event, node) { |
| | | onZTreeMousedown: function(event, node) { |
| | | var setting = data.getSetting(event.data.treeId); |
| | | if (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) { |
| | | tools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]); |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeMouseDown, |
| | | [setting.treeId, node], |
| | | true |
| | | ) |
| | | ) { |
| | | tools.apply(setting.callback.onMouseDown, [ |
| | | event, |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | return true; |
| | | }, |
| | | onZTreeMouseup: function (event, node) { |
| | | onZTreeMouseup: function(event, node) { |
| | | var setting = data.getSetting(event.data.treeId); |
| | | if (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) { |
| | | tools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]); |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeMouseUp, |
| | | [setting.treeId, node], |
| | | true |
| | | ) |
| | | ) { |
| | | tools.apply(setting.callback.onMouseUp, [ |
| | | event, |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | return true; |
| | | }, |
| | | onZTreeDblclick: function (event, node) { |
| | | onZTreeDblclick: function(event, node) { |
| | | var setting = data.getSetting(event.data.treeId); |
| | | if (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) { |
| | | tools.apply(setting.callback.onDblClick, [event, setting.treeId, node]); |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeDblClick, |
| | | [setting.treeId, node], |
| | | true |
| | | ) |
| | | ) { |
| | | tools.apply(setting.callback.onDblClick, [ |
| | | event, |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | return true; |
| | | }, |
| | | onZTreeContextmenu: function (event, node) { |
| | | onZTreeContextmenu: function(event, node) { |
| | | var setting = data.getSetting(event.data.treeId); |
| | | if (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) { |
| | | tools.apply(setting.callback.onRightClick, [event, setting.treeId, node]); |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeRightClick, |
| | | [setting.treeId, node], |
| | | true |
| | | ) |
| | | ) { |
| | | tools.apply(setting.callback.onRightClick, [ |
| | | event, |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | return (typeof setting.callback.onRightClick) != "function"; |
| | | return typeof setting.callback.onRightClick != "function"; |
| | | }, |
| | | onSelectStart: function (e) { |
| | | onSelectStart: function(e) { |
| | | var n = e.originalEvent.srcElement.nodeName.toLowerCase(); |
| | | return (n === "input" || n === "textarea"); |
| | | } |
| | | return n === "input" || n === "textarea"; |
| | | }, |
| | | }, |
| | | //method of tools for zTree |
| | | tools = { |
| | | apply: function (fun, param, defaultValue) { |
| | | if ((typeof fun) == "function") { |
| | | apply: function(fun, param, defaultValue) { |
| | | if (typeof fun == "function") { |
| | | return fun.apply(zt, param ? param : []); |
| | | } |
| | | return defaultValue; |
| | | }, |
| | | canAsync: function (setting, node) { |
| | | canAsync: function(setting, node) { |
| | | var children = data.nodeChildren(setting, node); |
| | | var isParent = data.nodeIsParent(setting, node); |
| | | return (setting.async.enable && node && isParent && !(node.zAsync || (children && children.length > 0))); |
| | | return ( |
| | | setting.async.enable && |
| | | node && |
| | | isParent && |
| | | !(node.zAsync || (children && children.length > 0)) |
| | | ); |
| | | }, |
| | | clone: function (obj) { |
| | | clone: function(obj) { |
| | | if (obj === null) return null; |
| | | var o = tools.isArray(obj) ? [] : {}; |
| | | for (var i in obj) { |
| | | o[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === "object" ? tools.clone(obj[i]) : obj[i]); |
| | | o[i] = |
| | | obj[i] instanceof Date |
| | | ? new Date(obj[i].getTime()) |
| | | : typeof obj[i] === "object" |
| | | ? tools.clone(obj[i]) |
| | | : obj[i]; |
| | | } |
| | | return o; |
| | | }, |
| | | eqs: function (str1, str2) { |
| | | eqs: function(str1, str2) { |
| | | return str1.toLowerCase() === str2.toLowerCase(); |
| | | }, |
| | | isArray: function (arr) { |
| | | isArray: function(arr) { |
| | | return Object.prototype.toString.apply(arr) === "[object Array]"; |
| | | }, |
| | | isElement: function (o) { |
| | | return ( |
| | | typeof HTMLElement === "object" ? o instanceof HTMLElement : //DOM2 |
| | | o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string" |
| | | ); |
| | | isElement: function(o) { |
| | | return typeof HTMLElement === "object" |
| | | ? o instanceof HTMLElement //DOM2 |
| | | : o && |
| | | typeof o === "object" && |
| | | o !== null && |
| | | o.nodeType === 1 && |
| | | typeof o.nodeName === "string"; |
| | | }, |
| | | $: function (node, exp, setting) { |
| | | $: function(node, exp, setting) { |
| | | if (!!exp && typeof exp != "string") { |
| | | setting = exp; |
| | | exp = ""; |
| | |
| | | return $("#" + node.tId + exp, setting ? setting.treeObj : null); |
| | | } |
| | | }, |
| | | getMDom: function (setting, curDom, targetExpr) { |
| | | getMDom: function(setting, curDom, targetExpr) { |
| | | if (!curDom) return null; |
| | | while (curDom && curDom.id !== setting.treeId) { |
| | | for (var i = 0, l = targetExpr.length; curDom.tagName && i < l; i++) { |
| | | if (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) { |
| | | if ( |
| | | tools.eqs(curDom.tagName, targetExpr[i].tagName) && |
| | | curDom.getAttribute(targetExpr[i].attrName) !== null |
| | | ) { |
| | | return curDom; |
| | | } |
| | | } |
| | |
| | | } |
| | | return null; |
| | | }, |
| | | getNodeMainDom: function (target) { |
| | | return ($(target).parent("li").get(0) || $(target).parentsUntil("li").parent().get(0)); |
| | | getNodeMainDom: function(target) { |
| | | return ( |
| | | $(target) |
| | | .parent("li") |
| | | .get(0) || |
| | | $(target) |
| | | .parentsUntil("li") |
| | | .parent() |
| | | .get(0) |
| | | ); |
| | | }, |
| | | isChildOrSelf: function (dom, parentId) { |
| | | return ($(dom).closest("#" + parentId).length > 0); |
| | | isChildOrSelf: function(dom, parentId) { |
| | | return $(dom).closest("#" + parentId).length > 0; |
| | | }, |
| | | uCanDo: function (setting, e) { |
| | | uCanDo: function(setting, e) { |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | //method of operate ztree dom |
| | | view = { |
| | | addNodes: function (setting, parentNode, index, newNodes, isSilent) { |
| | | addNodes: function(setting, parentNode, index, newNodes, isSilent) { |
| | | var isParent = data.nodeIsParent(setting, parentNode); |
| | | if (setting.data.keep.leaf && parentNode && !isParent) { |
| | | return; |
| | |
| | | target_ulObj = $$(parentNode, consts.id.UL, setting); |
| | | |
| | | if (!parentNode.open) { |
| | | view.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE); |
| | | view.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE); |
| | | view.replaceSwitchClass( |
| | | parentNode, |
| | | target_switchObj, |
| | | consts.folder.CLOSE |
| | | ); |
| | | view.replaceIcoClass( |
| | | parentNode, |
| | | target_icoObj, |
| | | consts.folder.CLOSE |
| | | ); |
| | | parentNode.open = false; |
| | | target_ulObj.css({ |
| | | "display": "none" |
| | | display: "none", |
| | | }); |
| | | } |
| | | |
| | | data.addNodesData(setting, parentNode, index, newNodes); |
| | | view.createNodes(setting, parentNode.level + 1, newNodes, parentNode, index); |
| | | view.createNodes( |
| | | setting, |
| | | parentNode.level + 1, |
| | | newNodes, |
| | | parentNode, |
| | | index |
| | | ); |
| | | if (!isSilent) { |
| | | view.expandCollapseParentNode(setting, parentNode, true); |
| | | } |
| | |
| | | view.createNodes(setting, 0, newNodes, null, index); |
| | | } |
| | | }, |
| | | appendNodes: function (setting, level, nodes, parentNode, index, initFlag, openFlag) { |
| | | appendNodes: function( |
| | | setting, |
| | | level, |
| | | nodes, |
| | | parentNode, |
| | | index, |
| | | initFlag, |
| | | openFlag |
| | | ) { |
| | | if (!nodes) return []; |
| | | var html = []; |
| | | |
| | | var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting), |
| | | var tmpPNode = parentNode ? parentNode : data.getRoot(setting), |
| | | tmpPChild = data.nodeChildren(setting, tmpPNode), |
| | | isFirstNode, isLastNode; |
| | | isFirstNode, |
| | | isLastNode; |
| | | |
| | | if (!tmpPChild || index >= tmpPChild.length - nodes.length) { |
| | | index = -1; |
| | |
| | | for (var i = 0, l = nodes.length; i < l; i++) { |
| | | var node = nodes[i]; |
| | | if (initFlag) { |
| | | isFirstNode = ((index === 0 || tmpPChild.length == nodes.length) && (i == 0)); |
| | | isLastNode = (index < 0 && i == (nodes.length - 1)); |
| | | data.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag); |
| | | isFirstNode = |
| | | (index === 0 || tmpPChild.length == nodes.length) && i == 0; |
| | | isLastNode = index < 0 && i == nodes.length - 1; |
| | | data.initNode( |
| | | setting, |
| | | level, |
| | | node, |
| | | parentNode, |
| | | isFirstNode, |
| | | isLastNode, |
| | | openFlag |
| | | ); |
| | | data.addNodeCache(setting, node); |
| | | } |
| | | var isParent = data.nodeIsParent(setting, node); |
| | |
| | | var children = data.nodeChildren(setting, node); |
| | | if (children && children.length > 0) { |
| | | //make child html first, because checkType |
| | | childHtml = view.appendNodes(setting, level + 1, children, node, -1, initFlag, openFlag && node.open); |
| | | childHtml = view.appendNodes( |
| | | setting, |
| | | level + 1, |
| | | children, |
| | | node, |
| | | -1, |
| | | initFlag, |
| | | openFlag && node.open |
| | | ); |
| | | } |
| | | if (openFlag) { |
| | | view.makeDOMNodeMainBefore(html, setting, node); |
| | |
| | | view.makeDOMNodeNameAfter(html, setting, node); |
| | | data.getAfterA(setting, node, html); |
| | | if (isParent && node.open) { |
| | | view.makeUlHtml(setting, node, html, childHtml.join('')); |
| | | view.makeUlHtml(setting, node, html, childHtml.join("")); |
| | | } |
| | | view.makeDOMNodeMainAfter(html, setting, node); |
| | | data.addCreatedNode(setting, node); |
| | |
| | | } |
| | | return html; |
| | | }, |
| | | appendParentULDom: function (setting, node) { |
| | | appendParentULDom: function(setting, node) { |
| | | var html = [], |
| | | nObj = $$(node, setting); |
| | | if (!nObj.get(0) && !!node.parentTId) { |
| | |
| | | ulObj.remove(); |
| | | } |
| | | var children = data.nodeChildren(setting, node), |
| | | childHtml = view.appendNodes(setting, node.level + 1, children, node, -1, false, true); |
| | | view.makeUlHtml(setting, node, html, childHtml.join('')); |
| | | nObj.append(html.join('')); |
| | | childHtml = view.appendNodes( |
| | | setting, |
| | | node.level + 1, |
| | | children, |
| | | node, |
| | | -1, |
| | | false, |
| | | true |
| | | ); |
| | | view.makeUlHtml(setting, node, html, childHtml.join("")); |
| | | nObj.append(html.join("")); |
| | | }, |
| | | asyncNode: function (setting, node, isSilent, callback) { |
| | | asyncNode: function(setting, node, isSilent, callback) { |
| | | var i, l; |
| | | var isParent = data.nodeIsParent(setting, node); |
| | | if (node && !isParent) { |
| | |
| | | return false; |
| | | } else if (node && node.isAjaxing) { |
| | | return false; |
| | | } else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) { |
| | | } else if ( |
| | | tools.apply( |
| | | setting.callback.beforeAsync, |
| | | [setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) { |
| | | tools.apply(callback); |
| | | return false; |
| | | } |
| | | if (node) { |
| | | node.isAjaxing = true; |
| | | var icoObj = $$(node, consts.id.ICON, setting); |
| | | icoObj.attr({ "style": "", "class": consts.className.BUTTON + " " + consts.className.ICO_LOADING }); |
| | | icoObj.attr({ |
| | | style: "", |
| | | class: consts.className.BUTTON + " " + consts.className.ICO_LOADING, |
| | | }); |
| | | } |
| | | |
| | | var tmpParam = {}; |
| | | var autoParam = tools.apply(setting.async.autoParam, [setting.treeId, node], setting.async.autoParam); |
| | | var autoParam = tools.apply( |
| | | setting.async.autoParam, |
| | | [setting.treeId, node], |
| | | setting.async.autoParam |
| | | ); |
| | | for (i = 0, l = autoParam.length; node && i < l; i++) { |
| | | var pKey = autoParam[i].split("="), spKey = pKey; |
| | | var pKey = autoParam[i].split("="), |
| | | spKey = pKey; |
| | | if (pKey.length > 1) { |
| | | spKey = pKey[1]; |
| | | pKey = pKey[0]; |
| | | } |
| | | tmpParam[spKey] = node[pKey]; |
| | | } |
| | | var otherParam = tools.apply(setting.async.otherParam, [setting.treeId, node], setting.async.otherParam); |
| | | var otherParam = tools.apply( |
| | | setting.async.otherParam, |
| | | [setting.treeId, node], |
| | | setting.async.otherParam |
| | | ); |
| | | if (tools.isArray(otherParam)) { |
| | | for (i = 0, l = otherParam.length; i < l; i += 2) { |
| | | tmpParam[otherParam[i]] = otherParam[i + 1]; |
| | |
| | | contentType: setting.async.contentType, |
| | | cache: false, |
| | | type: setting.async.type, |
| | | url: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url), |
| | | data: setting.async.contentType.indexOf('application/json') > -1 ? JSON.stringify(tmpParam) : tmpParam, |
| | | url: tools.apply( |
| | | setting.async.url, |
| | | [setting.treeId, node], |
| | | setting.async.url |
| | | ), |
| | | data: |
| | | setting.async.contentType.indexOf("application/json") > -1 |
| | | ? JSON.stringify(tmpParam) |
| | | : tmpParam, |
| | | dataType: setting.async.dataType, |
| | | headers: setting.async.headers, |
| | | xhrFields: setting.async.xhrFields, |
| | | success: function (msg) { |
| | | success: function(msg) { |
| | | if (_tmpV != data.getRoot(setting)._ver) { |
| | | return; |
| | | } |
| | |
| | | } |
| | | view.setNodeLineIcos(setting, node); |
| | | if (newNodes && newNodes !== "") { |
| | | newNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes); |
| | | view.addNodes(setting, node, -1, !!newNodes ? tools.clone(newNodes) : [], !!isSilent); |
| | | newNodes = tools.apply( |
| | | setting.async.dataFilter, |
| | | [setting.treeId, node, newNodes], |
| | | newNodes |
| | | ); |
| | | view.addNodes( |
| | | setting, |
| | | node, |
| | | -1, |
| | | !!newNodes ? tools.clone(newNodes) : [], |
| | | !!isSilent |
| | | ); |
| | | } else { |
| | | view.addNodes(setting, node, -1, [], !!isSilent); |
| | | } |
| | | setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]); |
| | | setting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [ |
| | | setting.treeId, |
| | | node, |
| | | msg, |
| | | ]); |
| | | tools.apply(callback); |
| | | }, |
| | | error: function (XMLHttpRequest, textStatus, errorThrown) { |
| | | error: function(XMLHttpRequest, textStatus, errorThrown) { |
| | | if (_tmpV != data.getRoot(setting)._ver) { |
| | | return; |
| | | } |
| | | if (node) node.isAjaxing = null; |
| | | view.setNodeLineIcos(setting, node); |
| | | setting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]); |
| | | } |
| | | setting.treeObj.trigger(consts.event.ASYNC_ERROR, [ |
| | | setting.treeId, |
| | | node, |
| | | XMLHttpRequest, |
| | | textStatus, |
| | | errorThrown, |
| | | ]); |
| | | }, |
| | | }); |
| | | return true; |
| | | }, |
| | | cancelPreSelectedNode: function (setting, node, excludeNode) { |
| | | cancelPreSelectedNode: function(setting, node, excludeNode) { |
| | | var list = data.getRoot(setting).curSelectedList, |
| | | i, n; |
| | | i, |
| | | n; |
| | | for (i = list.length - 1; i >= 0; i--) { |
| | | n = list[i]; |
| | | if (node === n || (!node && (!excludeNode || excludeNode !== n))) { |
| | |
| | | break; |
| | | } else { |
| | | list.splice(i, 1); |
| | | setting.treeObj.trigger(consts.event.UNSELECTED, [setting.treeId, n]); |
| | | setting.treeObj.trigger(consts.event.UNSELECTED, [ |
| | | setting.treeId, |
| | | n, |
| | | ]); |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | createNodeCallback: function (setting) { |
| | | createNodeCallback: function(setting) { |
| | | if (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) { |
| | | var root = data.getRoot(setting); |
| | | while (root.createdNodes.length > 0) { |
| | | var node = root.createdNodes.shift(); |
| | | tools.apply(setting.view.addDiyDom, [setting.treeId, node]); |
| | | if (!!setting.callback.onNodeCreated) { |
| | | setting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]); |
| | | setting.treeObj.trigger(consts.event.NODECREATED, [ |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | createNodes: function (setting, level, nodes, parentNode, index) { |
| | | createNodes: function(setting, level, nodes, parentNode, index) { |
| | | if (!nodes || nodes.length == 0) return; |
| | | var root = data.getRoot(setting), |
| | | openFlag = !parentNode || parentNode.open || !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0); |
| | | openFlag = |
| | | !parentNode || |
| | | parentNode.open || |
| | | !!$$(data.nodeChildren(setting, parentNode)[0], setting).get(0); |
| | | root.createdNodes = []; |
| | | var zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, index, true, openFlag), |
| | | parentObj, nextObj; |
| | | var zTreeHtml = view.appendNodes( |
| | | setting, |
| | | level, |
| | | nodes, |
| | | parentNode, |
| | | index, |
| | | true, |
| | | openFlag |
| | | ), |
| | | parentObj, |
| | | nextObj; |
| | | |
| | | if (!parentNode) { |
| | | parentObj = setting.treeObj; |
| | |
| | | nextObj = parentObj.children()[index]; |
| | | } |
| | | if (index >= 0 && nextObj) { |
| | | $(nextObj).before(zTreeHtml.join('')); |
| | | $(nextObj).before(zTreeHtml.join("")); |
| | | } else { |
| | | parentObj.append(zTreeHtml.join('')); |
| | | parentObj.append(zTreeHtml.join("")); |
| | | } |
| | | } |
| | | |
| | | view.createNodeCallback(setting); |
| | | }, |
| | | destroy: function (setting) { |
| | | destroy: function(setting) { |
| | | if (!setting) return; |
| | | data.initCache(setting); |
| | | data.initRoot(setting); |
| | |
| | | setting.treeObj.empty(); |
| | | delete settings[setting.treeId]; |
| | | }, |
| | | expandCollapseNode: function (setting, node, expandFlag, animateFlag, callback) { |
| | | expandCollapseNode: function( |
| | | setting, |
| | | node, |
| | | expandFlag, |
| | | animateFlag, |
| | | callback |
| | | ) { |
| | | var root = data.getRoot(setting); |
| | | var tmpCb, _callback; |
| | | if (!node) { |
| | |
| | | var isParent = data.nodeIsParent(setting, node); |
| | | if (root.expandTriggerFlag) { |
| | | _callback = callback; |
| | | tmpCb = function () { |
| | | tmpCb = function() { |
| | | if (_callback) _callback(); |
| | | if (node.open) { |
| | | setting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]); |
| | | setting.treeObj.trigger(consts.event.EXPAND, [ |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } else { |
| | | setting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]); |
| | | setting.treeObj.trigger(consts.event.COLLAPSE, [ |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | }; |
| | | callback = tmpCb; |
| | | root.expandTriggerFlag = false; |
| | | } |
| | | if (!node.open && isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (children && children.length > 0 && !$$(children[0], setting).get(0)))) { |
| | | if ( |
| | | !node.open && |
| | | isParent && |
| | | (!$$(node, consts.id.UL, setting).get(0) || |
| | | (children && |
| | | children.length > 0 && |
| | | !$$(children[0], setting).get(0))) |
| | | ) { |
| | | view.appendParentULDom(setting, node); |
| | | view.createNodeCallback(setting); |
| | | } |
| | |
| | | } else { |
| | | view.replaceSwitchClass(node, switchObj, consts.folder.CLOSE); |
| | | view.replaceIcoClass(node, icoObj, consts.folder.CLOSE); |
| | | if (animateFlag == false || setting.view.expandSpeed == "" || !(children && children.length > 0)) { |
| | | if ( |
| | | animateFlag == false || |
| | | setting.view.expandSpeed == "" || |
| | | !(children && children.length > 0) |
| | | ) { |
| | | ulObj.hide(); |
| | | tools.apply(callback, []); |
| | | } else { |
| | |
| | | tools.apply(callback, []); |
| | | } |
| | | }, |
| | | expandCollapseParentNode: function (setting, node, expandFlag, animateFlag, callback) { |
| | | expandCollapseParentNode: function( |
| | | setting, |
| | | node, |
| | | expandFlag, |
| | | animateFlag, |
| | | callback |
| | | ) { |
| | | if (!node) return; |
| | | if (!node.parentTId) { |
| | | view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); |
| | | view.expandCollapseNode( |
| | | setting, |
| | | node, |
| | | expandFlag, |
| | | animateFlag, |
| | | callback |
| | | ); |
| | | return; |
| | | } else { |
| | | view.expandCollapseNode(setting, node, expandFlag, animateFlag); |
| | | } |
| | | if (node.parentTId) { |
| | | view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback); |
| | | view.expandCollapseParentNode( |
| | | setting, |
| | | node.getParentNode(), |
| | | expandFlag, |
| | | animateFlag, |
| | | callback |
| | | ); |
| | | } |
| | | }, |
| | | expandCollapseSonNode: function (setting, node, expandFlag, animateFlag, callback) { |
| | | expandCollapseSonNode: function( |
| | | setting, |
| | | node, |
| | | expandFlag, |
| | | animateFlag, |
| | | callback |
| | | ) { |
| | | var root = data.getRoot(setting), |
| | | treeNodes = (node) ? data.nodeChildren(setting, node) : data.nodeChildren(setting, root), |
| | | selfAnimateSign = (node) ? false : animateFlag, |
| | | treeNodes = node |
| | | ? data.nodeChildren(setting, node) |
| | | : data.nodeChildren(setting, root), |
| | | selfAnimateSign = node ? false : animateFlag, |
| | | expandTriggerFlag = data.getRoot(setting).expandTriggerFlag; |
| | | data.getRoot(setting).expandTriggerFlag = false; |
| | | if (treeNodes) { |
| | | for (var i = 0, l = treeNodes.length; i < l; i++) { |
| | | if (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign); |
| | | if (treeNodes[i]) |
| | | view.expandCollapseSonNode( |
| | | setting, |
| | | treeNodes[i], |
| | | expandFlag, |
| | | selfAnimateSign |
| | | ); |
| | | } |
| | | } |
| | | data.getRoot(setting).expandTriggerFlag = expandTriggerFlag; |
| | | view.expandCollapseNode(setting, node, expandFlag, animateFlag, callback); |
| | | view.expandCollapseNode( |
| | | setting, |
| | | node, |
| | | expandFlag, |
| | | animateFlag, |
| | | callback |
| | | ); |
| | | }, |
| | | isSelectedNode: function (setting, node) { |
| | | isSelectedNode: function(setting, node) { |
| | | if (!node) { |
| | | return false; |
| | | } |
| | |
| | | } |
| | | return false; |
| | | }, |
| | | makeDOMNodeIcon: function (html, setting, node) { |
| | | makeDOMNodeIcon: function(html, setting, node) { |
| | | var nameStr = data.nodeName(setting, node), |
| | | name = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); |
| | | html.push("<span id='", node.tId, consts.id.ICON, |
| | | "' title='' treeNode", consts.id.ICON, " class='", view.makeNodeIcoClass(setting, node), |
| | | "' style='", view.makeNodeIcoStyle(setting, node), "'></span><span id='", node.tId, consts.id.SPAN, |
| | | "' class='", view.makeNodeNameClass(node), |
| | | "'>", name, "</span>"); |
| | | name = setting.view.nameIsHTML |
| | | ? nameStr |
| | | : nameStr |
| | | .replace(/&/g, "&") |
| | | .replace(/</g, "<") |
| | | .replace(/>/g, ">"); |
| | | html.push( |
| | | "<span id='", |
| | | node.tId, |
| | | consts.id.ICON, |
| | | "' title='' treeNode", |
| | | consts.id.ICON, |
| | | " class='", |
| | | view.makeNodeIcoClass(setting, node), |
| | | "' style='", |
| | | view.makeNodeIcoStyle(setting, node), |
| | | "'></span><span id='", |
| | | node.tId, |
| | | consts.id.SPAN, |
| | | "' class='", |
| | | view.makeNodeNameClass(node), |
| | | "'>", |
| | | name, |
| | | "</span>" |
| | | ); |
| | | }, |
| | | makeDOMNodeLine: function (html, setting, node) { |
| | | html.push("<span id='", node.tId, consts.id.SWITCH, "' title='' class='", view.makeNodeLineClass(setting, node), "' treeNode", consts.id.SWITCH, "></span>"); |
| | | makeDOMNodeLine: function(html, setting, node) { |
| | | html.push( |
| | | "<span id='", |
| | | node.tId, |
| | | consts.id.SWITCH, |
| | | "' title='' class='", |
| | | view.makeNodeLineClass(setting, node), |
| | | "' treeNode", |
| | | consts.id.SWITCH, |
| | | "></span>" |
| | | ); |
| | | }, |
| | | makeDOMNodeMainAfter: function (html, setting, node) { |
| | | makeDOMNodeMainAfter: function(html, setting, node) { |
| | | html.push("</li>"); |
| | | }, |
| | | makeDOMNodeMainBefore: function (html, setting, node) { |
| | | html.push("<li id='", node.tId, "' class='", consts.className.LEVEL, node.level, "' tabindex='0' hidefocus='true' treenode>"); |
| | | makeDOMNodeMainBefore: function(html, setting, node) { |
| | | html.push( |
| | | "<li id='", |
| | | node.tId, |
| | | "' class='", |
| | | consts.className.LEVEL, |
| | | node.level, |
| | | "' tabindex='0' hidefocus='true' treenode>" |
| | | ); |
| | | }, |
| | | makeDOMNodeNameAfter: function (html, setting, node) { |
| | | makeDOMNodeNameAfter: function(html, setting, node) { |
| | | html.push("</a>"); |
| | | }, |
| | | makeDOMNodeNameBefore: function (html, setting, node) { |
| | | makeDOMNodeNameBefore: function(html, setting, node) { |
| | | var title = data.nodeTitle(setting, node), |
| | | url = view.makeNodeUrl(setting, node), |
| | | fontcss = view.makeNodeFontCss(setting, node), |
| | |
| | | for (var f in fontcss) { |
| | | fontStyle.push(f, ":", fontcss[f], ";"); |
| | | } |
| | | html.push("<a id='", node.tId, consts.id.A, "' class='", consts.className.LEVEL, node.level, |
| | | nodeClasses.add ? ' ' + nodeClasses.add.join(' ') : '', |
| | | "' treeNode", consts.id.A, |
| | | node.click ? " onclick=\"" + node.click + "\"" : "", |
| | | ((url != null && url.length > 0) ? " href='" + url + "'" : ""), " target='", view.makeNodeTarget(node), "' style='", fontStyle.join(''), |
| | | "'"); |
| | | if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) { |
| | | html.push("title='", title.replace(/'/g, "'").replace(/</g, '<').replace(/>/g, '>'), "'"); |
| | | html.push( |
| | | "<a id='", |
| | | node.tId, |
| | | consts.id.A, |
| | | "' class='", |
| | | consts.className.LEVEL, |
| | | node.level, |
| | | nodeClasses.add ? " " + nodeClasses.add.join(" ") : "", |
| | | "' treeNode", |
| | | consts.id.A, |
| | | node.click ? ' onclick="' + node.click + '"' : "", |
| | | url != null && url.length > 0 ? " href='" + url + "'" : "", |
| | | " target='", |
| | | view.makeNodeTarget(node), |
| | | "' style='", |
| | | fontStyle.join(""), |
| | | "'" |
| | | ); |
| | | if ( |
| | | tools.apply( |
| | | setting.view.showTitle, |
| | | [setting.treeId, node], |
| | | setting.view.showTitle |
| | | ) && |
| | | title |
| | | ) { |
| | | html.push( |
| | | "title='", |
| | | title |
| | | .replace(/'/g, "'") |
| | | .replace(/</g, "<") |
| | | .replace(/>/g, ">"), |
| | | "'" |
| | | ); |
| | | } |
| | | html.push(">"); |
| | | }, |
| | | makeNodeFontCss: function (setting, node) { |
| | | var fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss); |
| | | return (fontCss && ((typeof fontCss) != "function")) ? fontCss : {}; |
| | | makeNodeFontCss: function(setting, node) { |
| | | var fontCss = tools.apply( |
| | | setting.view.fontCss, |
| | | [setting.treeId, node], |
| | | setting.view.fontCss |
| | | ); |
| | | return fontCss && typeof fontCss != "function" ? fontCss : {}; |
| | | }, |
| | | makeNodeClasses: function (setting, node) { |
| | | var classes = tools.apply(setting.view.nodeClasses, [setting.treeId, node], setting.view.nodeClasses); |
| | | return (classes && (typeof classes !== "function")) ? classes : { add: [], remove: [] }; |
| | | makeNodeClasses: function(setting, node) { |
| | | var classes = tools.apply( |
| | | setting.view.nodeClasses, |
| | | [setting.treeId, node], |
| | | setting.view.nodeClasses |
| | | ); |
| | | return classes && typeof classes !== "function" |
| | | ? classes |
| | | : { add: [], remove: [] }; |
| | | }, |
| | | makeNodeIcoClass: function (setting, node) { |
| | | makeNodeIcoClass: function(setting, node) { |
| | | var icoCss = ["ico"]; |
| | | if (!node.isAjaxing) { |
| | | var isParent = data.nodeIsParent(setting, node); |
| | |
| | | icoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE); |
| | | } else { |
| | | // 定制子节点图标 |
| | | let fontClass = "" |
| | | if (node.type === '4' && !node.isAI) { |
| | | fontClass = "iconjiankongshexiangji" |
| | | let fontClass = ""; |
| | | if (node.type === "4" && !node.isAI) { |
| | | fontClass = "iconjiankongshexiangji"; |
| | | } else if (node.isAI) { |
| | | fontClass = "iconfenxishexiangji" |
| | | fontClass = "iconfenxishexiangji"; |
| | | } else if (node.type === "camera") { |
| | | fontClass = "iconjiankongshexiangji"; |
| | | if (node.alive == 1) { |
| | | fontClass = fontClass + " running"; |
| | | } |
| | | } |
| | | |
| | | if (node.isRunning) { |
| | | fontClass = fontClass + " running" |
| | | fontClass = fontClass + " running"; |
| | | } |
| | | |
| | | return "iconfont " + fontClass |
| | | return "iconfont " + fontClass; |
| | | } |
| | | } |
| | | return consts.className.BUTTON + " " + icoCss.join('_'); |
| | | return consts.className.BUTTON + " " + icoCss.join("_"); |
| | | }, |
| | | makeNodeNameClass: function (node) { |
| | | makeNodeNameClass: function(node) { |
| | | let icoCss = ""; |
| | | if (node.isRunning) { |
| | | icoCss = " running"; |
| | | } |
| | | return consts.className.NAME + icoCss; |
| | | }, |
| | | makeNodeIcoStyle: function (setting, node) { |
| | | makeNodeIcoStyle: function(setting, node) { |
| | | var icoStyle = []; |
| | | if (!node.isAjaxing) { |
| | | var isParent = data.nodeIsParent(setting, node); |
| | | var icon = (isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node[setting.data.key.icon]; |
| | | var icon = |
| | | isParent && node.iconOpen && node.iconClose |
| | | ? node.open |
| | | ? node.iconOpen |
| | | : node.iconClose |
| | | : node[setting.data.key.icon]; |
| | | if (icon) icoStyle.push("background:url(", icon, ") 0 0 no-repeat;"); |
| | | if (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) { |
| | | if ( |
| | | setting.view.showIcon == false || |
| | | !tools.apply(setting.view.showIcon, [setting.treeId, node], true) |
| | | ) { |
| | | icoStyle.push("display:none;"); |
| | | } |
| | | } |
| | | return icoStyle.join(''); |
| | | return icoStyle.join(""); |
| | | }, |
| | | makeNodeLineClass: function (setting, node) { |
| | | makeNodeLineClass: function(setting, node) { |
| | | var lineClass = []; |
| | | if (setting.view.showLine) { |
| | | if (node.level == 0 && node.isFirstNode && node.isLastNode) { |
| | |
| | | } else { |
| | | lineClass.push(consts.folder.DOCU); |
| | | } |
| | | return view.makeNodeLineClassEx(node) + lineClass.join('_'); |
| | | return view.makeNodeLineClassEx(node) + lineClass.join("_"); |
| | | }, |
| | | makeNodeLineClassEx: function (node) { |
| | | return consts.className.BUTTON + " " + consts.className.LEVEL + node.level + " " + consts.className.SWITCH + " "; |
| | | makeNodeLineClassEx: function(node) { |
| | | return ( |
| | | consts.className.BUTTON + |
| | | " " + |
| | | consts.className.LEVEL + |
| | | node.level + |
| | | " " + |
| | | consts.className.SWITCH + |
| | | " " |
| | | ); |
| | | }, |
| | | makeNodeTarget: function (node) { |
| | | return (node.target || "_blank"); |
| | | makeNodeTarget: function(node) { |
| | | return node.target || "_blank"; |
| | | }, |
| | | makeNodeUrl: function (setting, node) { |
| | | makeNodeUrl: function(setting, node) { |
| | | var urlKey = setting.data.key.url; |
| | | return node[urlKey] ? node[urlKey] : null; |
| | | }, |
| | | makeUlHtml: function (setting, node, html, content) { |
| | | html.push("<ul id='", node.tId, consts.id.UL, "' class='", consts.className.LEVEL, node.level, " ", view.makeUlLineClass(setting, node), "' style='display:", (node.open ? "block" : "none"), "'>"); |
| | | makeUlHtml: function(setting, node, html, content) { |
| | | html.push( |
| | | "<ul id='", |
| | | node.tId, |
| | | consts.id.UL, |
| | | "' class='", |
| | | consts.className.LEVEL, |
| | | node.level, |
| | | " ", |
| | | view.makeUlLineClass(setting, node), |
| | | "' style='display:", |
| | | node.open ? "block" : "none", |
| | | "'>" |
| | | ); |
| | | html.push(content); |
| | | html.push("</ul>"); |
| | | }, |
| | | makeUlLineClass: function (setting, node) { |
| | | return ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : ""); |
| | | makeUlLineClass: function(setting, node) { |
| | | return setting.view.showLine && !node.isLastNode |
| | | ? consts.line.LINE |
| | | : ""; |
| | | }, |
| | | removeChildNodes: function (setting, node) { |
| | | removeChildNodes: function(setting, node) { |
| | | if (!node) return; |
| | | var nodes = data.nodeChildren(setting, node); |
| | | if (!nodes) return; |
| | |
| | | $$(node, consts.id.UL, setting).empty(); |
| | | } |
| | | }, |
| | | scrollIntoView: function (setting, dom) { |
| | | scrollIntoView: function(setting, dom) { |
| | | if (!dom) { |
| | | return; |
| | | } |
| | | // support IE 7 / 8 |
| | | if (typeof Element === 'undefined' || typeof HTMLElement === 'undefined') { |
| | | if ( |
| | | typeof Element === "undefined" || |
| | | typeof HTMLElement === "undefined" |
| | | ) { |
| | | var contRect = setting.treeObj.get(0).getBoundingClientRect(), |
| | | findMeRect = dom.getBoundingClientRect(); |
| | | if (findMeRect.top < contRect.top || findMeRect.bottom > contRect.bottom |
| | | || findMeRect.right > contRect.right || findMeRect.left < contRect.left) { |
| | | if ( |
| | | findMeRect.top < contRect.top || |
| | | findMeRect.bottom > contRect.bottom || |
| | | findMeRect.right > contRect.right || |
| | | findMeRect.left < contRect.left |
| | | ) { |
| | | dom.scrollIntoView(); |
| | | } |
| | | return; |
| | | } |
| | | // CC-BY jocki84@googlemail.com, https://gist.github.com/jocki84/6ffafd003387179a988e |
| | | if (!Element.prototype.scrollIntoViewIfNeeded) { |
| | | Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) { |
| | | Element.prototype.scrollIntoViewIfNeeded = function(centerIfNeeded) { |
| | | "use strict"; |
| | | |
| | | function makeRange(start, length) { |
| | | return { "start": start, "length": length, "end": start + length }; |
| | | return { start: start, length: length, end: start + length }; |
| | | } |
| | | |
| | | function coverRange(inner, outer) { |
| | |
| | | |
| | | function makePoint(x, y) { |
| | | return { |
| | | "x": x, |
| | | "y": y, |
| | | "translate": function translate(dX, dY) { |
| | | x: x, |
| | | y: y, |
| | | translate: function translate(dX, dY) { |
| | | return makePoint(x + dX, y + dY); |
| | | } |
| | | }, |
| | | }; |
| | | } |
| | | |
| | |
| | | |
| | | while (elem instanceof HTMLElement) { |
| | | // Apply desired scroll amount. |
| | | origin = absolute(elem, makePoint(elem.clientLeft, elem.clientTop)); |
| | | origin = absolute( |
| | | elem, |
| | | makePoint(elem.clientLeft, elem.clientTop) |
| | | ); |
| | | elem.scrollLeft = coverRange( |
| | | makeRange(target.x - origin.x, extent.x), |
| | | makeRange(elem.scrollLeft, elem.clientWidth) |
| | |
| | | } |
| | | dom.scrollIntoViewIfNeeded(); |
| | | }, |
| | | setFirstNode: function (setting, parentNode) { |
| | | setFirstNode: function(setting, parentNode) { |
| | | var children = data.nodeChildren(setting, parentNode); |
| | | if (children.length > 0) { |
| | | children[0].isFirstNode = true; |
| | | } |
| | | }, |
| | | setLastNode: function (setting, parentNode) { |
| | | setLastNode: function(setting, parentNode) { |
| | | var children = data.nodeChildren(setting, parentNode); |
| | | if (children.length > 0) { |
| | | children[children.length - 1].isLastNode = true; |
| | | } |
| | | }, |
| | | removeNode: function (setting, node) { |
| | | removeNode: function(setting, node) { |
| | | var root = data.getRoot(setting), |
| | | parentNode = (node.parentTId) ? node.getParentNode() : root; |
| | | parentNode = node.parentTId ? node.getParentNode() : root; |
| | | |
| | | node.isFirstNode = false; |
| | | node.isLastNode = false; |
| | | node.getPreNode = function () { |
| | | node.getPreNode = function() { |
| | | return null; |
| | | }; |
| | | node.getNextNode = function () { |
| | | node.getNextNode = function() { |
| | | return null; |
| | | }; |
| | | |
| | |
| | | view.setFirstNode(setting, parentNode); |
| | | view.setLastNode(setting, parentNode); |
| | | |
| | | var tmp_ulObj, tmp_switchObj, tmp_icoObj, |
| | | var tmp_ulObj, |
| | | tmp_switchObj, |
| | | tmp_icoObj, |
| | | childLength = children.length; |
| | | |
| | | //repair nodes old parent |
| | |
| | | tmp_ulObj = $$(parentNode, consts.id.UL, setting); |
| | | tmp_switchObj = $$(parentNode, consts.id.SWITCH, setting); |
| | | tmp_icoObj = $$(parentNode, consts.id.ICON, setting); |
| | | view.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU); |
| | | view.replaceSwitchClass( |
| | | parentNode, |
| | | tmp_switchObj, |
| | | consts.folder.DOCU |
| | | ); |
| | | view.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU); |
| | | tmp_ulObj.css("display", "none"); |
| | | |
| | | } else if (setting.view.showLine && childLength > 0) { |
| | | //old parentNode has child nodes |
| | | var newLast = children[childLength - 1]; |
| | |
| | | //node was root, and ztree has only one root after move node |
| | | view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT); |
| | | } else { |
| | | var tmp_first_switchObj = $$(children[0], consts.id.SWITCH, setting); |
| | | view.replaceSwitchClass(children[0], tmp_first_switchObj, consts.line.ROOTS); |
| | | view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); |
| | | var tmp_first_switchObj = $$( |
| | | children[0], |
| | | consts.id.SWITCH, |
| | | setting |
| | | ); |
| | | view.replaceSwitchClass( |
| | | children[0], |
| | | tmp_first_switchObj, |
| | | consts.line.ROOTS |
| | | ); |
| | | view.replaceSwitchClass( |
| | | newLast, |
| | | tmp_switchObj, |
| | | consts.line.BOTTOM |
| | | ); |
| | | } |
| | | } else { |
| | | view.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM); |
| | |
| | | tmp_ulObj.removeClass(consts.line.LINE); |
| | | } |
| | | }, |
| | | replaceIcoClass: function (node, obj, newName) { |
| | | replaceIcoClass: function(node, obj, newName) { |
| | | if (!obj || node.isAjaxing) return; |
| | | var tmpName = obj.attr("class"); |
| | | if (tmpName == undefined) return; |
| | |
| | | } |
| | | obj.attr("class", tmpList.join("_")); |
| | | }, |
| | | replaceSwitchClass: function (node, obj, newName) { |
| | | replaceSwitchClass: function(node, obj, newName) { |
| | | if (!obj) return; |
| | | var tmpName = obj.attr("class"); |
| | | if (tmpName == undefined) return; |
| | |
| | | obj.attr("disabled", "disabled"); |
| | | } |
| | | }, |
| | | selectNode: function (setting, node, addFlag) { |
| | | selectNode: function(setting, node, addFlag) { |
| | | // debugger |
| | | if (!addFlag) { |
| | | view.cancelPreSelectedNode(setting, null, node); |
| | |
| | | data.addSelectedNode(setting, node); |
| | | setting.treeObj.trigger(consts.event.SELECTED, [setting.treeId, node]); |
| | | }, |
| | | setNodeFontCss: function (setting, treeNode) { |
| | | setNodeFontCss: function(setting, treeNode) { |
| | | var aObj = $$(treeNode, consts.id.A, setting), |
| | | fontCss = view.makeNodeFontCss(setting, treeNode); |
| | | if (fontCss) { |
| | | aObj.css(fontCss); |
| | | } |
| | | }, |
| | | setNodeClasses: function (setting, treeNode) { |
| | | setNodeClasses: function(setting, treeNode) { |
| | | var aObj = $$(treeNode, consts.id.A, setting), |
| | | classes = view.makeNodeClasses(setting, treeNode); |
| | | if ('add' in classes && classes.add.length) { |
| | | aObj.addClass(classes.add.join(' ')); |
| | | if ("add" in classes && classes.add.length) { |
| | | aObj.addClass(classes.add.join(" ")); |
| | | } |
| | | if ('remove' in classes && classes.remove.length) { |
| | | aObj.removeClass(classes.remove.join(' ')); |
| | | if ("remove" in classes && classes.remove.length) { |
| | | aObj.removeClass(classes.remove.join(" ")); |
| | | } |
| | | }, |
| | | setNodeLineIcos: function (setting, node) { |
| | | setNodeLineIcos: function(setting, node) { |
| | | if (!node) return; |
| | | var switchObj = $$(node, consts.id.SWITCH, setting), |
| | | ulObj = $$(node, consts.id.UL, setting), |
| | |
| | | icoObj.attr("class", view.makeNodeIcoClass(setting, node)); |
| | | // icoObj.attr("class", view.makeNodeNameClass(setting, node)); |
| | | }, |
| | | setNodeName: function (setting, node) { |
| | | setNodeName: function(setting, node) { |
| | | var title = data.nodeTitle(setting, node), |
| | | nObj = $$(node, consts.id.SPAN, setting); |
| | | nObj.empty(); |
| | |
| | | } else { |
| | | nObj.text(data.nodeName(setting, node)); |
| | | } |
| | | if (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) { |
| | | if ( |
| | | tools.apply( |
| | | setting.view.showTitle, |
| | | [setting.treeId, node], |
| | | setting.view.showTitle |
| | | ) |
| | | ) { |
| | | var aObj = $$(node, consts.id.A, setting); |
| | | aObj.attr("title", !title ? "" : title); |
| | | } |
| | | }, |
| | | setNodeTarget: function (setting, node) { |
| | | setNodeTarget: function(setting, node) { |
| | | var aObj = $$(node, consts.id.A, setting); |
| | | aObj.attr("target", view.makeNodeTarget(node)); |
| | | }, |
| | | setNodeUrl: function (setting, node) { |
| | | setNodeUrl: function(setting, node) { |
| | | var aObj = $$(node, consts.id.A, setting), |
| | | url = view.makeNodeUrl(setting, node); |
| | | if (url == null || url.length == 0) { |
| | |
| | | aObj.attr("href", url); |
| | | } |
| | | }, |
| | | switchNode: function (setting, node) { |
| | | switchNode: function(setting, node) { |
| | | if (node.open || !tools.canAsync(setting, node)) { |
| | | view.expandCollapseNode(setting, node, !node.open); |
| | | } else if (setting.async.enable) { |
| | |
| | | } else if (node) { |
| | | view.expandCollapseNode(setting, node, !node.open); |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | // zTree defind |
| | | $.fn.zTree = { |
| | |
| | | tools: tools, |
| | | view: view, |
| | | event: event, |
| | | data: data |
| | | data: data, |
| | | }, |
| | | getZTreeObj: function (treeId) { |
| | | getZTreeObj: function(treeId) { |
| | | var o = data.getZTreeTools(treeId); |
| | | return o ? o : null; |
| | | }, |
| | | destroy: function (treeId) { |
| | | destroy: function(treeId) { |
| | | if (!!treeId && treeId.length > 0) { |
| | | view.destroy(data.getSetting(treeId)); |
| | | } else { |
| | |
| | | } |
| | | } |
| | | }, |
| | | init: function (obj, zSetting, zNodes) { |
| | | init: function(obj, zSetting, zNodes) { |
| | | var setting = tools.clone(_setting); |
| | | $.extend(true, setting, zSetting); |
| | | setting.treeId = obj.attr("id"); |
| | |
| | | } |
| | | data.initRoot(setting); |
| | | var root = data.getRoot(setting); |
| | | zNodes = zNodes ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) : []; |
| | | zNodes = zNodes |
| | | ? tools.clone(tools.isArray(zNodes) ? zNodes : [zNodes]) |
| | | : []; |
| | | if (setting.data.simpleData.enable) { |
| | | data.nodeChildren(setting, root, data.transformTozTreeFormat(setting, zNodes)); |
| | | data.nodeChildren( |
| | | setting, |
| | | root, |
| | | data.transformTozTreeFormat(setting, zNodes) |
| | | ); |
| | | } else { |
| | | data.nodeChildren(setting, root, zNodes); |
| | | } |
| | |
| | | |
| | | var zTreeTools = { |
| | | setting: setting, |
| | | addNodes: function (parentNode, index, newNodes, isSilent) { |
| | | addNodes: function(parentNode, index, newNodes, isSilent) { |
| | | if (!parentNode) parentNode = null; |
| | | var isParent = data.nodeIsParent(setting, parentNode); |
| | | if (parentNode && !isParent && setting.data.keep.leaf) return null; |
| | |
| | | } |
| | | if (!newNodes) return null; |
| | | |
| | | |
| | | var xNewNodes = tools.clone(tools.isArray(newNodes) ? newNodes : [newNodes]); |
| | | var xNewNodes = tools.clone( |
| | | tools.isArray(newNodes) ? newNodes : [newNodes] |
| | | ); |
| | | |
| | | function addCallback() { |
| | | view.addNodes(setting, parentNode, index, xNewNodes, (isSilent == true)); |
| | | view.addNodes( |
| | | setting, |
| | | parentNode, |
| | | index, |
| | | xNewNodes, |
| | | isSilent == true |
| | | ); |
| | | } |
| | | |
| | | if (tools.canAsync(setting, parentNode)) { |
| | |
| | | } |
| | | return xNewNodes; |
| | | }, |
| | | cancelSelectedNode: function (node) { |
| | | cancelSelectedNode: function(node) { |
| | | view.cancelPreSelectedNode(setting, node); |
| | | }, |
| | | destroy: function () { |
| | | destroy: function() { |
| | | view.destroy(setting); |
| | | }, |
| | | expandAll: function (expandFlag) { |
| | | expandAll: function(expandFlag) { |
| | | expandFlag = !!expandFlag; |
| | | view.expandCollapseSonNode(setting, null, expandFlag, true); |
| | | return expandFlag; |
| | | }, |
| | | expandNode: function (node, expandFlag, sonSign, focus, callbackFlag) { |
| | | expandNode: function(node, expandFlag, sonSign, focus, callbackFlag) { |
| | | if (!node || !data.nodeIsParent(setting, node)) return null; |
| | | if (expandFlag !== true && expandFlag !== false) { |
| | | expandFlag = !node.open; |
| | | } |
| | | callbackFlag = !!callbackFlag; |
| | | |
| | | if (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) { |
| | | if ( |
| | | callbackFlag && |
| | | expandFlag && |
| | | tools.apply( |
| | | setting.callback.beforeExpand, |
| | | [setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) { |
| | | return null; |
| | | } else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) { |
| | | } else if ( |
| | | callbackFlag && |
| | | !expandFlag && |
| | | tools.apply( |
| | | setting.callback.beforeCollapse, |
| | | [setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) { |
| | | return null; |
| | | } |
| | | if (expandFlag && node.parentTId) { |
| | | view.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false); |
| | | view.expandCollapseParentNode( |
| | | setting, |
| | | node.getParentNode(), |
| | | expandFlag, |
| | | false |
| | | ); |
| | | } |
| | | if (expandFlag === node.open && !sonSign) { |
| | | return null; |
| | |
| | | |
| | | data.getRoot(setting).expandTriggerFlag = callbackFlag; |
| | | if (!tools.canAsync(setting, node) && sonSign) { |
| | | view.expandCollapseSonNode(setting, node, expandFlag, true, showNodeFocus); |
| | | view.expandCollapseSonNode( |
| | | setting, |
| | | node, |
| | | expandFlag, |
| | | true, |
| | | showNodeFocus |
| | | ); |
| | | } else { |
| | | node.open = !expandFlag; |
| | | view.switchNode(this.setting, node); |
| | |
| | | } |
| | | } |
| | | }, |
| | | getNodes: function () { |
| | | getNodes: function() { |
| | | return data.getNodes(setting); |
| | | }, |
| | | getNodeByParam: function (key, value, parentNode) { |
| | | getNodeByParam: function(key, value, parentNode) { |
| | | if (!key) return null; |
| | | return data.getNodeByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); |
| | | return data.getNodeByParam( |
| | | setting, |
| | | parentNode |
| | | ? data.nodeChildren(setting, parentNode) |
| | | : data.getNodes(setting), |
| | | key, |
| | | value |
| | | ); |
| | | }, |
| | | getNodeByTId: function (tId) { |
| | | getNodeByTId: function(tId) { |
| | | return data.getNodeCache(setting, tId); |
| | | }, |
| | | getNodesByParam: function (key, value, parentNode) { |
| | | getNodesByParam: function(key, value, parentNode) { |
| | | if (!key) return null; |
| | | return data.getNodesByParam(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); |
| | | return data.getNodesByParam( |
| | | setting, |
| | | parentNode |
| | | ? data.nodeChildren(setting, parentNode) |
| | | : data.getNodes(setting), |
| | | key, |
| | | value |
| | | ); |
| | | }, |
| | | getNodesByParamFuzzy: function (key, value, parentNode) { |
| | | getNodesByParamFuzzy: function(key, value, parentNode) { |
| | | if (!key) return null; |
| | | return data.getNodesByParamFuzzy(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), key, value); |
| | | return data.getNodesByParamFuzzy( |
| | | setting, |
| | | parentNode |
| | | ? data.nodeChildren(setting, parentNode) |
| | | : data.getNodes(setting), |
| | | key, |
| | | value |
| | | ); |
| | | }, |
| | | getNodesByFilter: function (filter, isSingle, parentNode, invokeParam) { |
| | | getNodesByFilter: function(filter, isSingle, parentNode, invokeParam) { |
| | | isSingle = !!isSingle; |
| | | if (!filter || (typeof filter != "function")) return (isSingle ? null : []); |
| | | return data.getNodesByFilter(setting, parentNode ? data.nodeChildren(setting, parentNode) : data.getNodes(setting), filter, isSingle, invokeParam); |
| | | if (!filter || typeof filter != "function") |
| | | return isSingle ? null : []; |
| | | return data.getNodesByFilter( |
| | | setting, |
| | | parentNode |
| | | ? data.nodeChildren(setting, parentNode) |
| | | : data.getNodes(setting), |
| | | filter, |
| | | isSingle, |
| | | invokeParam |
| | | ); |
| | | }, |
| | | getNodeIndex: function (node) { |
| | | getNodeIndex: function(node) { |
| | | if (!node) return null; |
| | | var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); |
| | | var parentNode = node.parentTId |
| | | ? node.getParentNode() |
| | | : data.getRoot(setting); |
| | | var children = data.nodeChildren(setting, parentNode); |
| | | for (var i = 0, l = children.length; i < l; i++) { |
| | | if (children[i] == node) return i; |
| | | } |
| | | return -1; |
| | | }, |
| | | getSelectedNodes: function () { |
| | | var r = [], list = data.getRoot(setting).curSelectedList; |
| | | getSelectedNodes: function() { |
| | | var r = [], |
| | | list = data.getRoot(setting).curSelectedList; |
| | | for (var i = 0, l = list.length; i < l; i++) { |
| | | r.push(list[i]); |
| | | } |
| | | return r; |
| | | }, |
| | | isSelectedNode: function (node) { |
| | | isSelectedNode: function(node) { |
| | | return data.isSelectedNode(setting, node); |
| | | }, |
| | | reAsyncChildNodesPromise: function (parentNode, reloadType, isSilent) { |
| | | var promise = new Promise(function (resolve, reject) { |
| | | reAsyncChildNodesPromise: function(parentNode, reloadType, isSilent) { |
| | | var promise = new Promise(function(resolve, reject) { |
| | | try { |
| | | zTreeTools.reAsyncChildNodes(parentNode, reloadType, isSilent, function () { |
| | | resolve(parentNode); |
| | | }); |
| | | zTreeTools.reAsyncChildNodes( |
| | | parentNode, |
| | | reloadType, |
| | | isSilent, |
| | | function() { |
| | | resolve(parentNode); |
| | | } |
| | | ); |
| | | } catch (e) { |
| | | reject(e); |
| | | } |
| | | }); |
| | | return promise; |
| | | }, |
| | | reAsyncChildNodes: function (parentNode, reloadType, isSilent, callback) { |
| | | reAsyncChildNodes: function( |
| | | parentNode, |
| | | reloadType, |
| | | isSilent, |
| | | callback |
| | | ) { |
| | | if (!this.setting.async.enable) return; |
| | | var isRoot = !parentNode; |
| | | if (isRoot) { |
| | |
| | | ulObj.empty(); |
| | | } |
| | | } |
| | | view.asyncNode(this.setting, isRoot ? null : parentNode, !!isSilent, callback); |
| | | view.asyncNode( |
| | | this.setting, |
| | | isRoot ? null : parentNode, |
| | | !!isSilent, |
| | | callback |
| | | ); |
| | | }, |
| | | refresh: function () { |
| | | refresh: function() { |
| | | this.setting.treeObj.empty(); |
| | | var root = data.getRoot(setting), |
| | | nodes = data.nodeChildren(setting, root); |
| | | data.initRoot(setting); |
| | | data.nodeChildren(setting, root, nodes); |
| | | data.initCache(setting); |
| | | view.createNodes(setting, 0, data.nodeChildren(setting, root), null, -1); |
| | | view.createNodes( |
| | | setting, |
| | | 0, |
| | | data.nodeChildren(setting, root), |
| | | null, |
| | | -1 |
| | | ); |
| | | }, |
| | | removeChildNodes: function (node) { |
| | | removeChildNodes: function(node) { |
| | | if (!node) return null; |
| | | var nodes = data.nodeChildren(setting, node); |
| | | view.removeChildNodes(setting, node); |
| | | return nodes ? nodes : null; |
| | | }, |
| | | removeNode: function (node, callbackFlag) { |
| | | removeNode: function(node, callbackFlag) { |
| | | if (!node) return; |
| | | callbackFlag = !!callbackFlag; |
| | | if (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return; |
| | | if ( |
| | | callbackFlag && |
| | | tools.apply( |
| | | setting.callback.beforeRemove, |
| | | [setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) |
| | | return; |
| | | view.removeNode(setting, node); |
| | | if (callbackFlag) { |
| | | this.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]); |
| | | this.setting.treeObj.trigger(consts.event.REMOVE, [ |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | }, |
| | | selectNode: function (node, addFlag, isSilent) { |
| | | selectNode: function(node, addFlag, isSilent) { |
| | | if (!node) return; |
| | | if (tools.uCanDo(setting)) { |
| | | addFlag = setting.view.selectedMulti && addFlag; |
| | | if (node.parentTId) { |
| | | view.expandCollapseParentNode(setting, node.getParentNode(), true, false, showNodeFocus); |
| | | view.expandCollapseParentNode( |
| | | setting, |
| | | node.getParentNode(), |
| | | true, |
| | | false, |
| | | showNodeFocus |
| | | ); |
| | | } else if (!isSilent) { |
| | | try { |
| | | $$(node, setting).focus().blur(); |
| | | } catch (e) { |
| | | } |
| | | $$(node, setting) |
| | | .focus() |
| | | .blur(); |
| | | } catch (e) {} |
| | | } |
| | | view.selectNode(setting, node, addFlag); |
| | | } |
| | |
| | | view.scrollIntoView(setting, a); |
| | | } |
| | | }, |
| | | transformTozTreeNodes: function (simpleNodes) { |
| | | transformTozTreeNodes: function(simpleNodes) { |
| | | return data.transformTozTreeFormat(setting, simpleNodes); |
| | | }, |
| | | transformToArray: function (nodes) { |
| | | transformToArray: function(nodes) { |
| | | return data.transformToArrayFormat(setting, nodes); |
| | | }, |
| | | updateNode: function (node, checkTypeFlag) { |
| | | updateNode: function(node, checkTypeFlag) { |
| | | if (!node) return; |
| | | var nObj = $$(node, setting); |
| | | if (nObj.get(0) && tools.uCanDo(setting)) { |
| | |
| | | view.setNodeFontCss(setting, node); |
| | | view.setNodeClasses(setting, node); |
| | | } |
| | | } |
| | | }, |
| | | }; |
| | | root.treeTools = zTreeTools; |
| | | data.setZTreeTools(setting, zTreeTools); |
| | | var children = data.nodeChildren(setting, root); |
| | | if (children && children.length > 0) { |
| | | view.createNodes(setting, 0, children, null, -1); |
| | | } else if (setting.async.enable && setting.async.url && setting.async.url !== '') { |
| | | } else if ( |
| | | setting.async.enable && |
| | | setting.async.url && |
| | | setting.async.url !== "" |
| | | ) { |
| | | view.asyncNode(setting); |
| | | } |
| | | return zTreeTools; |
| | | } |
| | | }, |
| | | }; |
| | | |
| | | var zt = $.fn.zTree, |
| | |
| | | * Date: 2020-11-21 |
| | | */ |
| | | |
| | | (function ($) { |
| | | (function($) { |
| | | //default consts of excheck |
| | | var _consts = { |
| | | event: { |
| | | CHECK: "ztree_check" |
| | | event: { |
| | | CHECK: "ztree_check", |
| | | }, |
| | | id: { |
| | | CHECK: "_check", |
| | | }, |
| | | checkbox: { |
| | | STYLE: "checkbox", |
| | | DEFAULT: "chk", |
| | | DISABLED: "disable", |
| | | FALSE: "false", |
| | | TRUE: "true", |
| | | FULL: "full", |
| | | PART: "part", |
| | | FOCUS: "focus", |
| | | }, |
| | | radio: { |
| | | STYLE: "radio", |
| | | TYPE_ALL: "all", |
| | | TYPE_LEVEL: "level", |
| | | }, |
| | | }, |
| | | id: { |
| | | CHECK: "_check" |
| | | }, |
| | | checkbox: { |
| | | STYLE: "checkbox", |
| | | DEFAULT: "chk", |
| | | DISABLED: "disable", |
| | | FALSE: "false", |
| | | TRUE: "true", |
| | | FULL: "full", |
| | | PART: "part", |
| | | FOCUS: "focus" |
| | | }, |
| | | radio: { |
| | | STYLE: "radio", |
| | | TYPE_ALL: "all", |
| | | TYPE_LEVEL: "level" |
| | | } |
| | | }, |
| | | //default setting of excheck |
| | | _setting = { |
| | | check: { |
| | |
| | | chkDisabledInherit: false, |
| | | radioType: _consts.radio.TYPE_LEVEL, |
| | | chkboxType: { |
| | | "Y": "ps", |
| | | "N": "ps" |
| | | } |
| | | Y: "ps", |
| | | N: "ps", |
| | | }, |
| | | }, |
| | | data: { |
| | | key: { |
| | | checked: "checked" |
| | | } |
| | | checked: "checked", |
| | | }, |
| | | }, |
| | | callback: { |
| | | beforeCheck: null, |
| | | onCheck: null |
| | | } |
| | | onCheck: null, |
| | | }, |
| | | }, |
| | | //default root of excheck |
| | | _initRoot = function (setting) { |
| | | _initRoot = function(setting) { |
| | | var r = data.getRoot(setting); |
| | | r.radioCheckedList = []; |
| | | }, |
| | | //default cache of excheck |
| | | _initCache = function (treeId) { |
| | | }, |
| | | _initCache = function(treeId) {}, |
| | | //default bind event of excheck |
| | | _bindEvent = function (setting) { |
| | | _bindEvent = function(setting) { |
| | | var o = setting.treeObj, |
| | | c = consts.event; |
| | | o.bind(c.CHECK, function (event, srcEvent, treeId, node) { |
| | | o.bind(c.CHECK, function(event, srcEvent, treeId, node) { |
| | | event.srcEvent = srcEvent; |
| | | tools.apply(setting.callback.onCheck, [event, treeId, node]); |
| | | }); |
| | | }, |
| | | _unbindEvent = function (setting) { |
| | | _unbindEvent = function(setting) { |
| | | var o = setting.treeObj, |
| | | c = consts.event; |
| | | o.unbind(c.CHECK); |
| | | }, |
| | | //default event proxy of excheck |
| | | _eventProxy = function (e) { |
| | | _eventProxy = function(e) { |
| | | var target = e.target, |
| | | setting = data.getSetting(e.data.treeId), |
| | | tId = "", node = null, |
| | | nodeEventType = "", treeEventType = "", |
| | | nodeEventCallback = null, treeEventCallback = null; |
| | | tId = "", |
| | | node = null, |
| | | nodeEventType = "", |
| | | treeEventType = "", |
| | | nodeEventCallback = null, |
| | | treeEventCallback = null; |
| | | |
| | | if (tools.eqs(e.type, "mouseover")) { |
| | | if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { |
| | | if ( |
| | | setting.check.enable && |
| | | tools.eqs(target.tagName, "span") && |
| | | target.getAttribute("treeNode" + consts.id.CHECK) !== null |
| | | ) { |
| | | tId = tools.getNodeMainDom(target).id; |
| | | nodeEventType = "mouseoverCheck"; |
| | | } |
| | | } else if (tools.eqs(e.type, "mouseout")) { |
| | | if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { |
| | | if ( |
| | | setting.check.enable && |
| | | tools.eqs(target.tagName, "span") && |
| | | target.getAttribute("treeNode" + consts.id.CHECK) !== null |
| | | ) { |
| | | tId = tools.getNodeMainDom(target).id; |
| | | nodeEventType = "mouseoutCheck"; |
| | | } |
| | | } else if (tools.eqs(e.type, "click")) { |
| | | if (setting.check.enable && tools.eqs(target.tagName, "span") && target.getAttribute("treeNode" + consts.id.CHECK) !== null) { |
| | | if ( |
| | | setting.check.enable && |
| | | tools.eqs(target.tagName, "span") && |
| | | target.getAttribute("treeNode" + consts.id.CHECK) !== null |
| | | ) { |
| | | tId = tools.getNodeMainDom(target).id; |
| | | nodeEventType = "checkNode"; |
| | | } |
| | |
| | | nodeEventType: nodeEventType, |
| | | nodeEventCallback: nodeEventCallback, |
| | | treeEventType: treeEventType, |
| | | treeEventCallback: treeEventCallback |
| | | treeEventCallback: treeEventCallback, |
| | | }; |
| | | return proxyResult |
| | | return proxyResult; |
| | | }, |
| | | //default init node of excheck |
| | | _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { |
| | | _initNode = function( |
| | | setting, |
| | | level, |
| | | n, |
| | | parentNode, |
| | | isFirstNode, |
| | | isLastNode, |
| | | openFlag |
| | | ) { |
| | | if (!n) return; |
| | | var checked = data.nodeChecked(setting, n); |
| | | n.checkedOld = checked; |
| | | if (typeof n.nocheck == "string") n.nocheck = tools.eqs(n.nocheck, "true"); |
| | | n.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck); |
| | | if (typeof n.chkDisabled == "string") n.chkDisabled = tools.eqs(n.chkDisabled, "true"); |
| | | n.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled); |
| | | if (typeof n.halfCheck == "string") n.halfCheck = tools.eqs(n.halfCheck, "true"); |
| | | if (typeof n.nocheck == "string") |
| | | n.nocheck = tools.eqs(n.nocheck, "true"); |
| | | n.nocheck = |
| | | !!n.nocheck || |
| | | (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck); |
| | | if (typeof n.chkDisabled == "string") |
| | | n.chkDisabled = tools.eqs(n.chkDisabled, "true"); |
| | | n.chkDisabled = |
| | | !!n.chkDisabled || |
| | | (setting.check.chkDisabledInherit && |
| | | parentNode && |
| | | !!parentNode.chkDisabled); |
| | | if (typeof n.halfCheck == "string") |
| | | n.halfCheck = tools.eqs(n.halfCheck, "true"); |
| | | n.halfCheck = !!n.halfCheck; |
| | | n.check_Child_State = -1; |
| | | n.check_Focus = false; |
| | | n.getCheckStatus = function () { |
| | | n.getCheckStatus = function() { |
| | | return data.getCheckStatus(setting, n); |
| | | }; |
| | | |
| | | if (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && checked) { |
| | | if ( |
| | | setting.check.chkStyle == consts.radio.STYLE && |
| | | setting.check.radioType == consts.radio.TYPE_ALL && |
| | | checked |
| | | ) { |
| | | var r = data.getRoot(setting); |
| | | r.radioCheckedList.push(n); |
| | | } |
| | | }, |
| | | //add dom for check |
| | | _beforeA = function (setting, node, html) { |
| | | _beforeA = function(setting, node, html) { |
| | | if (setting.check.enable) { |
| | | data.makeChkFlag(setting, node); |
| | | html.push("<span ID='", node.tId, consts.id.CHECK, "' class='", view.makeChkClass(setting, node), "' treeNode", consts.id.CHECK, (node.nocheck === true ? " style='display:none;'" : ""), "></span>"); |
| | | html.push( |
| | | "<span ID='", |
| | | node.tId, |
| | | consts.id.CHECK, |
| | | "' class='", |
| | | view.makeChkClass(setting, node), |
| | | "' treeNode", |
| | | consts.id.CHECK, |
| | | node.nocheck === true ? " style='display:none;'" : "", |
| | | "></span>" |
| | | ); |
| | | } |
| | | }, |
| | | //update zTreeObj, add method of check |
| | | _zTreeTools = function (setting, zTreeTools) { |
| | | zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) { |
| | | _zTreeTools = function(setting, zTreeTools) { |
| | | zTreeTools.checkNode = function( |
| | | node, |
| | | checked, |
| | | checkTypeFlag, |
| | | callbackFlag |
| | | ) { |
| | | var nodeChecked = data.nodeChecked(setting, node); |
| | | if (node.chkDisabled === true) return; |
| | | if (checked !== true && checked !== false) { |
| | |
| | | |
| | | if (nodeChecked === checked && !checkTypeFlag) { |
| | | return; |
| | | } else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) { |
| | | } else if ( |
| | | callbackFlag && |
| | | tools.apply( |
| | | this.setting.callback.beforeCheck, |
| | | [this.setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) { |
| | | return; |
| | | } |
| | | if (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) { |
| | | if ( |
| | | tools.uCanDo(this.setting) && |
| | | this.setting.check.enable && |
| | | node.nocheck !== true |
| | | ) { |
| | | data.nodeChecked(setting, node, checked); |
| | | var checkObj = $$(node, consts.id.CHECK, this.setting); |
| | | if (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); |
| | | if ( |
| | | checkTypeFlag || |
| | | this.setting.check.chkStyle === consts.radio.STYLE |
| | | ) |
| | | view.checkNodeRelation(this.setting, node); |
| | | view.setChkClass(this.setting, checkObj, node); |
| | | view.repairParentChkClassWithSelf(this.setting, node); |
| | | if (callbackFlag) { |
| | | this.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]); |
| | | this.setting.treeObj.trigger(consts.event.CHECK, [ |
| | | null, |
| | | this.setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | } |
| | | } |
| | | }; |
| | | |
| | | zTreeTools.checkAllNodes = function (checked) { |
| | | zTreeTools.checkAllNodes = function(checked) { |
| | | view.repairAllChk(this.setting, !!checked); |
| | | } |
| | | }; |
| | | |
| | | zTreeTools.getCheckedNodes = function (checked) { |
| | | checked = (checked !== false); |
| | | zTreeTools.getCheckedNodes = function(checked) { |
| | | checked = checked !== false; |
| | | var children = data.nodeChildren(setting, data.getRoot(this.setting)); |
| | | return data.getTreeCheckedNodes(this.setting, children, checked); |
| | | } |
| | | }; |
| | | |
| | | zTreeTools.getChangeCheckedNodes = function () { |
| | | zTreeTools.getChangeCheckedNodes = function() { |
| | | var children = data.nodeChildren(setting, data.getRoot(this.setting)); |
| | | return data.getTreeChangeCheckedNodes(this.setting, children); |
| | | } |
| | | }; |
| | | |
| | | zTreeTools.setChkDisabled = function (node, disabled, inheritParent, inheritChildren) { |
| | | zTreeTools.setChkDisabled = function( |
| | | node, |
| | | disabled, |
| | | inheritParent, |
| | | inheritChildren |
| | | ) { |
| | | disabled = !!disabled; |
| | | inheritParent = !!inheritParent; |
| | | inheritChildren = !!inheritChildren; |
| | | view.repairSonChkDisabled(this.setting, node, disabled, inheritChildren); |
| | | view.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent); |
| | | } |
| | | view.repairSonChkDisabled( |
| | | this.setting, |
| | | node, |
| | | disabled, |
| | | inheritChildren |
| | | ); |
| | | view.repairParentChkDisabled( |
| | | this.setting, |
| | | node.getParentNode(), |
| | | disabled, |
| | | inheritParent |
| | | ); |
| | | }; |
| | | |
| | | var _updateNode = zTreeTools.updateNode; |
| | | zTreeTools.updateNode = function (node, checkTypeFlag) { |
| | | zTreeTools.updateNode = function(node, checkTypeFlag) { |
| | | if (_updateNode) _updateNode.apply(zTreeTools, arguments); |
| | | if (!node || !this.setting.check.enable) return; |
| | | var nObj = $$(node, this.setting); |
| | | if (nObj.get(0) && tools.uCanDo(this.setting)) { |
| | | var checkObj = $$(node, consts.id.CHECK, this.setting); |
| | | if (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node); |
| | | if ( |
| | | checkTypeFlag == true || |
| | | this.setting.check.chkStyle === consts.radio.STYLE |
| | | ) |
| | | view.checkNodeRelation(this.setting, node); |
| | | view.setChkClass(this.setting, checkObj, node); |
| | | view.repairParentChkClassWithSelf(this.setting, node); |
| | | } |
| | | } |
| | | }; |
| | | }, |
| | | //method of operate data |
| | | _data = { |
| | | getRadioCheckedList: function (setting) { |
| | | getRadioCheckedList: function(setting) { |
| | | var checkedList = data.getRoot(setting).radioCheckedList; |
| | | for (var i = 0, j = checkedList.length; i < j; i++) { |
| | | if (!data.getNodeCache(setting, checkedList[i].tId)) { |
| | |
| | | } |
| | | return checkedList; |
| | | }, |
| | | getCheckStatus: function (setting, node) { |
| | | if (!setting.check.enable || node.nocheck || node.chkDisabled) return null; |
| | | getCheckStatus: function(setting, node) { |
| | | if (!setting.check.enable || node.nocheck || node.chkDisabled) |
| | | return null; |
| | | var checked = data.nodeChecked(setting, node), |
| | | r = { |
| | | checked: checked, |
| | | half: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (checked ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0))) |
| | | half: node.halfCheck |
| | | ? node.halfCheck |
| | | : setting.check.chkStyle == consts.radio.STYLE |
| | | ? node.check_Child_State === 2 |
| | | : checked |
| | | ? node.check_Child_State > -1 && node.check_Child_State < 2 |
| | | : node.check_Child_State > 0, |
| | | }; |
| | | return r; |
| | | }, |
| | | getTreeCheckedNodes: function (setting, nodes, checked, results) { |
| | | getTreeCheckedNodes: function(setting, nodes, checked, results) { |
| | | if (!nodes) return []; |
| | | var onlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL); |
| | | var onlyOne = |
| | | checked && |
| | | setting.check.chkStyle == consts.radio.STYLE && |
| | | setting.check.radioType == consts.radio.TYPE_ALL; |
| | | results = !results ? [] : results; |
| | | for (var i = 0, l = nodes.length; i < l; i++) { |
| | | var node = nodes[i]; |
| | | var children = data.nodeChildren(setting, node); |
| | | var nodeChecked = data.nodeChecked(setting, node); |
| | | if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked == checked) { |
| | | if ( |
| | | node.nocheck !== true && |
| | | node.chkDisabled !== true && |
| | | nodeChecked == checked |
| | | ) { |
| | | results.push(node); |
| | | if (onlyOne) { |
| | | break; |
| | |
| | | } |
| | | return results; |
| | | }, |
| | | getTreeChangeCheckedNodes: function (setting, nodes, results) { |
| | | getTreeChangeCheckedNodes: function(setting, nodes, results) { |
| | | if (!nodes) return []; |
| | | results = !results ? [] : results; |
| | | for (var i = 0, l = nodes.length; i < l; i++) { |
| | | var node = nodes[i]; |
| | | var children = data.nodeChildren(setting, node); |
| | | var nodeChecked = data.nodeChecked(setting, node); |
| | | if (node.nocheck !== true && node.chkDisabled !== true && nodeChecked != node.checkedOld) { |
| | | if ( |
| | | node.nocheck !== true && |
| | | node.chkDisabled !== true && |
| | | nodeChecked != node.checkedOld |
| | | ) { |
| | | results.push(node); |
| | | } |
| | | data.getTreeChangeCheckedNodes(setting, children, results); |
| | | } |
| | | return results; |
| | | }, |
| | | makeChkFlag: function (setting, node) { |
| | | makeChkFlag: function(setting, node) { |
| | | if (!node) return; |
| | | var chkFlag = -1; |
| | | var children = data.nodeChildren(setting, node); |
| | |
| | | } else if (cNode.halfCheck === true) { |
| | | tmp = 1; |
| | | } else if (nodeChecked) { |
| | | tmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1; |
| | | tmp = |
| | | cNode.check_Child_State === -1 || |
| | | cNode.check_Child_State === 2 |
| | | ? 2 |
| | | : 1; |
| | | } else { |
| | | tmp = (cNode.check_Child_State > 0) ? 1 : 0; |
| | | tmp = cNode.check_Child_State > 0 ? 1 : 0; |
| | | } |
| | | if (tmp === 1) { |
| | | chkFlag = 1; |
| | | break; |
| | | } else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) { |
| | | } else if ( |
| | | tmp === 2 && |
| | | chkFlag > -1 && |
| | | i > 0 && |
| | | tmp !== chkFlag |
| | | ) { |
| | | chkFlag = 1; |
| | | break; |
| | | } else if (chkFlag === 2 && tmp > -1 && tmp < 2) { |
| | |
| | | } |
| | | } |
| | | node.check_Child_State = chkFlag; |
| | | } |
| | | }, |
| | | }, |
| | | //method of event proxy |
| | | _event = {}, |
| | | //method of event handler |
| | | _handler = { |
| | | onCheckNode: function (event, node) { |
| | | onCheckNode: function(event, node) { |
| | | if (node.chkDisabled === true) return false; |
| | | var setting = data.getSetting(event.data.treeId); |
| | | if (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true; |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeCheck, |
| | | [setting.treeId, node], |
| | | true |
| | | ) == false |
| | | ) |
| | | return true; |
| | | var nodeChecked = data.nodeChecked(setting, node); |
| | | data.nodeChecked(setting, node, !nodeChecked); |
| | | view.checkNodeRelation(setting, node); |
| | | var checkObj = $$(node, consts.id.CHECK, setting); |
| | | view.setChkClass(setting, checkObj, node); |
| | | view.repairParentChkClassWithSelf(setting, node); |
| | | setting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]); |
| | | setting.treeObj.trigger(consts.event.CHECK, [ |
| | | event, |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | return true; |
| | | }, |
| | | onMouseoverCheck: function (event, node) { |
| | | onMouseoverCheck: function(event, node) { |
| | | if (node.chkDisabled === true) return false; |
| | | var setting = data.getSetting(event.data.treeId), |
| | | checkObj = $$(node, consts.id.CHECK, setting); |
| | |
| | | view.setChkClass(setting, checkObj, node); |
| | | return true; |
| | | }, |
| | | onMouseoutCheck: function (event, node) { |
| | | onMouseoutCheck: function(event, node) { |
| | | if (node.chkDisabled === true) return false; |
| | | var setting = data.getSetting(event.data.treeId), |
| | | checkObj = $$(node, consts.id.CHECK, setting); |
| | | node.check_Focus = false; |
| | | view.setChkClass(setting, checkObj, node); |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | //method of tools for zTree |
| | | _tools = {}, |
| | | //method of operate ztree dom |
| | | _view = { |
| | | checkNodeRelation: function (setting, node) { |
| | | var pNode, i, l, |
| | | checkNodeRelation: function(setting, node) { |
| | | var pNode, |
| | | i, |
| | | l, |
| | | r = consts.radio; |
| | | var nodeChecked = data.nodeChecked(setting, node); |
| | | if (setting.check.chkStyle == r.STYLE) { |
| | |
| | | data.nodeChecked(setting, pNode, false); |
| | | checkedList.splice(i, 1); |
| | | |
| | | view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); |
| | | view.setChkClass( |
| | | setting, |
| | | $$(pNode, consts.id.CHECK, setting), |
| | | pNode |
| | | ); |
| | | if (pNode.parentTId != node.parentTId) { |
| | | view.repairParentChkClassWithSelf(setting, pNode); |
| | | } |
| | |
| | | } |
| | | checkedList.push(node); |
| | | } else { |
| | | var parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting); |
| | | var parentNode = node.parentTId |
| | | ? node.getParentNode() |
| | | : data.getRoot(setting); |
| | | var children = data.nodeChildren(setting, parentNode); |
| | | for (i = 0, l = children.length; i < l; i++) { |
| | | pNode = children[i]; |
| | | var pNodeChecked = data.nodeChecked(setting, pNode); |
| | | if (pNodeChecked && pNode != node) { |
| | | data.nodeChecked(setting, pNode, false); |
| | | view.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode); |
| | | view.setChkClass( |
| | | setting, |
| | | $$(pNode, consts.id.CHECK, setting), |
| | | pNode |
| | | ); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | } else { |
| | | var children = data.nodeChildren(setting, node); |
| | | if (nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.Y.indexOf("s") > -1)) { |
| | | if ( |
| | | nodeChecked && |
| | | (!children || |
| | | children.length == 0 || |
| | | setting.check.chkboxType.Y.indexOf("s") > -1) |
| | | ) { |
| | | view.setSonNodeCheckBox(setting, node, true); |
| | | } |
| | | if (!nodeChecked && (!children || children.length == 0 || setting.check.chkboxType.N.indexOf("s") > -1)) { |
| | | if ( |
| | | !nodeChecked && |
| | | (!children || |
| | | children.length == 0 || |
| | | setting.check.chkboxType.N.indexOf("s") > -1) |
| | | ) { |
| | | view.setSonNodeCheckBox(setting, node, false); |
| | | } |
| | | if (nodeChecked && setting.check.chkboxType.Y.indexOf("p") > -1) { |
| | |
| | | } |
| | | } |
| | | }, |
| | | makeChkClass: function (setting, node) { |
| | | var c = consts.checkbox, r = consts.radio, |
| | | makeChkClass: function(setting, node) { |
| | | var c = consts.checkbox, |
| | | r = consts.radio, |
| | | fullStyle = ""; |
| | | var nodeChecked = data.nodeChecked(setting, node); |
| | | if (node.chkDisabled === true) { |
| | |
| | | } else if (node.halfCheck) { |
| | | fullStyle = c.PART; |
| | | } else if (setting.check.chkStyle == r.STYLE) { |
| | | fullStyle = (node.check_Child_State < 1) ? c.FULL : c.PART; |
| | | fullStyle = node.check_Child_State < 1 ? c.FULL : c.PART; |
| | | } else { |
| | | fullStyle = nodeChecked ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL : c.PART) : ((node.check_Child_State < 1) ? c.FULL : c.PART); |
| | | fullStyle = nodeChecked |
| | | ? node.check_Child_State === 2 || node.check_Child_State === -1 |
| | | ? c.FULL |
| | | : c.PART |
| | | : node.check_Child_State < 1 |
| | | ? c.FULL |
| | | : c.PART; |
| | | } |
| | | var chkName = setting.check.chkStyle + "_" + (nodeChecked ? c.TRUE : c.FALSE) + "_" + fullStyle; |
| | | chkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + "_" + c.FOCUS : chkName; |
| | | var chkName = |
| | | setting.check.chkStyle + |
| | | "_" + |
| | | (nodeChecked ? c.TRUE : c.FALSE) + |
| | | "_" + |
| | | fullStyle; |
| | | chkName = |
| | | node.check_Focus && node.chkDisabled !== true |
| | | ? chkName + "_" + c.FOCUS |
| | | : chkName; |
| | | return consts.className.BUTTON + " " + c.DEFAULT + " " + chkName; |
| | | }, |
| | | repairAllChk: function (setting, checked) { |
| | | if (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) { |
| | | repairAllChk: function(setting, checked) { |
| | | if ( |
| | | setting.check.enable && |
| | | setting.check.chkStyle === consts.checkbox.STYLE |
| | | ) { |
| | | var root = data.getRoot(setting); |
| | | var children = data.nodeChildren(setting, root); |
| | | for (var i = 0, l = children.length; i < l; i++) { |
| | |
| | | } |
| | | } |
| | | }, |
| | | repairChkClass: function (setting, node) { |
| | | repairChkClass: function(setting, node) { |
| | | if (!node) return; |
| | | data.makeChkFlag(setting, node); |
| | | if (node.nocheck !== true) { |
| | |
| | | view.setChkClass(setting, checkObj, node); |
| | | } |
| | | }, |
| | | repairParentChkClass: function (setting, node) { |
| | | repairParentChkClass: function(setting, node) { |
| | | if (!node || !node.parentTId) return; |
| | | var pNode = node.getParentNode(); |
| | | view.repairChkClass(setting, pNode); |
| | | view.repairParentChkClass(setting, pNode); |
| | | }, |
| | | repairParentChkClassWithSelf: function (setting, node) { |
| | | repairParentChkClassWithSelf: function(setting, node) { |
| | | if (!node) return; |
| | | var children = data.nodeChildren(setting, node); |
| | | if (children && children.length > 0) { |
| | |
| | | view.repairParentChkClass(setting, node); |
| | | } |
| | | }, |
| | | repairSonChkDisabled: function (setting, node, chkDisabled, inherit) { |
| | | repairSonChkDisabled: function(setting, node, chkDisabled, inherit) { |
| | | if (!node) return; |
| | | if (node.chkDisabled != chkDisabled) { |
| | | node.chkDisabled = chkDisabled; |
| | |
| | | } |
| | | } |
| | | }, |
| | | repairParentChkDisabled: function (setting, node, chkDisabled, inherit) { |
| | | repairParentChkDisabled: function(setting, node, chkDisabled, inherit) { |
| | | if (!node) return; |
| | | if (node.chkDisabled != chkDisabled && inherit) { |
| | | node.chkDisabled = chkDisabled; |
| | | } |
| | | view.repairChkClass(setting, node); |
| | | view.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit); |
| | | view.repairParentChkDisabled( |
| | | setting, |
| | | node.getParentNode(), |
| | | chkDisabled, |
| | | inherit |
| | | ); |
| | | }, |
| | | setChkClass: function (setting, obj, node) { |
| | | setChkClass: function(setting, obj, node) { |
| | | if (!obj) return; |
| | | if (node.nocheck === true) { |
| | | obj.hide(); |
| | | } else { |
| | | obj.show(); |
| | | } |
| | | obj.attr('class', view.makeChkClass(setting, node)); |
| | | obj.attr("class", view.makeChkClass(setting, node)); |
| | | }, |
| | | setParentNodeCheckBox: function (setting, node, value, srcNode) { |
| | | setParentNodeCheckBox: function(setting, node, value, srcNode) { |
| | | var checkObj = $$(node, consts.id.CHECK, setting); |
| | | if (!srcNode) srcNode = node; |
| | | data.makeChkFlag(setting, node); |
| | |
| | | data.nodeChecked(setting, node, value); |
| | | view.setChkClass(setting, checkObj, node); |
| | | if (setting.check.autoCheckTrigger && node != srcNode) { |
| | | setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); |
| | | setting.treeObj.trigger(consts.event.CHECK, [ |
| | | null, |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | } |
| | | if (node.parentTId) { |
| | |
| | | for (var i = 0, l = pNodes.length; i < l; i++) { |
| | | var pNode = pNodes[i]; |
| | | var nodeChecked = data.nodeChecked(setting, pNode); |
| | | if ((pNode.nocheck !== true && pNode.chkDisabled !== true && nodeChecked) |
| | | || ((pNode.nocheck === true || pNode.chkDisabled === true) && pNode.check_Child_State > 0)) { |
| | | if ( |
| | | (pNode.nocheck !== true && |
| | | pNode.chkDisabled !== true && |
| | | nodeChecked) || |
| | | ((pNode.nocheck === true || pNode.chkDisabled === true) && |
| | | pNode.check_Child_State > 0) |
| | | ) { |
| | | pSign = false; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (pSign) { |
| | | view.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode); |
| | | view.setParentNodeCheckBox( |
| | | setting, |
| | | node.getParentNode(), |
| | | value, |
| | | srcNode |
| | | ); |
| | | } |
| | | } |
| | | }, |
| | | setSonNodeCheckBox: function (setting, node, value, srcNode) { |
| | | setSonNodeCheckBox: function(setting, node, value, srcNode) { |
| | | if (!node) return; |
| | | var checkObj = $$(node, consts.id.CHECK, setting); |
| | | if (!srcNode) srcNode = node; |
| | |
| | | } |
| | | if (node.nocheck !== true && node.chkDisabled !== true) { |
| | | data.nodeChecked(setting, node, value); |
| | | if (!hasDisable) node.check_Child_State = (children && children.length > 0) ? (value ? 2 : 0) : -1; |
| | | if (!hasDisable) |
| | | node.check_Child_State = |
| | | children && children.length > 0 ? (value ? 2 : 0) : -1; |
| | | } else { |
| | | node.check_Child_State = -1; |
| | | } |
| | | view.setChkClass(setting, checkObj, node); |
| | | if (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) { |
| | | setting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]); |
| | | if ( |
| | | setting.check.autoCheckTrigger && |
| | | node != srcNode && |
| | | node.nocheck !== true && |
| | | node.chkDisabled !== true |
| | | ) { |
| | | setting.treeObj.trigger(consts.event.CHECK, [ |
| | | null, |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | } |
| | | } |
| | | |
| | | } |
| | | }, |
| | | }, |
| | | |
| | | _z = { |
| | | tools: _tools, |
| | | view: _view, |
| | | event: _event, |
| | | data: _data |
| | | data: _data, |
| | | }; |
| | | $.extend(true, $.fn.zTree.consts, _consts); |
| | | $.extend(true, $.fn.zTree._z, _z); |
| | |
| | | event = zt._z.event, |
| | | $$ = tools.$; |
| | | |
| | | data.nodeChecked = function (setting, node, newChecked) { |
| | | data.nodeChecked = function(setting, node, newChecked) { |
| | | if (!node) { |
| | | return false; |
| | | } |
| | | var key = setting.data.key.checked; |
| | | if (typeof newChecked !== 'undefined') { |
| | | if (typeof newChecked !== "undefined") { |
| | | if (typeof newChecked === "string") { |
| | | newChecked = tools.eqs(newChecked, "true"); |
| | | } |
| | |
| | | data.addZTreeTools(_zTreeTools); |
| | | |
| | | var _createNodes = view.createNodes; |
| | | view.createNodes = function (setting, level, nodes, parentNode, index) { |
| | | view.createNodes = function(setting, level, nodes, parentNode, index) { |
| | | if (_createNodes) _createNodes.apply(view, arguments); |
| | | if (!nodes) return; |
| | | view.repairParentChkClassWithSelf(setting, parentNode); |
| | | } |
| | | }; |
| | | var _removeNode = view.removeNode; |
| | | view.removeNode = function (setting, node) { |
| | | view.removeNode = function(setting, node) { |
| | | var parentNode = node.getParentNode(); |
| | | if (_removeNode) _removeNode.apply(view, arguments); |
| | | if (!node || !parentNode) return; |
| | | view.repairChkClass(setting, parentNode); |
| | | view.repairParentChkClass(setting, parentNode); |
| | | } |
| | | }; |
| | | |
| | | var _appendNodes = view.appendNodes; |
| | | view.appendNodes = function (setting, level, nodes, parentNode, index, initFlag, openFlag) { |
| | | view.appendNodes = function( |
| | | setting, |
| | | level, |
| | | nodes, |
| | | parentNode, |
| | | index, |
| | | initFlag, |
| | | openFlag |
| | | ) { |
| | | var html = ""; |
| | | if (_appendNodes) { |
| | | html = _appendNodes.apply(view, arguments); |
| | |
| | | data.makeChkFlag(setting, parentNode); |
| | | } |
| | | return html; |
| | | } |
| | | }; |
| | | })(jQuery); |
| | | /* |
| | | * JQuery zTree exedit |
| | |
| | | * Date: 2020-11-21 |
| | | */ |
| | | |
| | | (function ($) { |
| | | (function($) { |
| | | //default consts of exedit |
| | | var _consts = { |
| | | event: { |
| | | DRAG: "ztree_drag", |
| | | DROP: "ztree_drop", |
| | | RENAME: "ztree_rename", |
| | | DRAGMOVE: "ztree_dragmove" |
| | | 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", |
| | | }, |
| | | }, |
| | | 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: { |
| | |
| | | borderMax: 10, |
| | | borderMin: -5, |
| | | maxShowNodeNum: 5, |
| | | autoOpenTime: 500 |
| | | } |
| | | autoOpenTime: 500, |
| | | }, |
| | | }, |
| | | view: { |
| | | addHoverDom: null, |
| | | removeHoverDom: null |
| | | removeHoverDom: null, |
| | | }, |
| | | callback: { |
| | | beforeDrag: null, |
| | |
| | | onDrag: null, |
| | | onDragMove: null, |
| | | onDrop: null, |
| | | onRename: null |
| | | } |
| | | onRename: null, |
| | | }, |
| | | }, |
| | | //default root of exedit |
| | | _initRoot = function (setting) { |
| | | var r = data.getRoot(setting), rs = data.getRoots(); |
| | | _initRoot = function(setting) { |
| | | var r = data.getRoot(setting), |
| | | rs = data.getRoots(); |
| | | r.curEditNode = null; |
| | | r.curEditInput = null; |
| | | r.curHoverNode = null; |
| | |
| | | rs.showHoverDom = true; |
| | | }, |
| | | //default cache of exedit |
| | | _initCache = function (treeId) { |
| | | }, |
| | | _initCache = function(treeId) {}, |
| | | //default bind event of exedit |
| | | _bindEvent = function (setting) { |
| | | _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.RENAME, function(event, treeId, treeNode, isCancel) { |
| | | tools.apply(setting.callback.onRename, [ |
| | | event, |
| | | treeId, |
| | | treeNode, |
| | | isCancel, |
| | | ]); |
| | | }); |
| | | |
| | | o.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) { |
| | | 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) { |
| | | 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]); |
| | | 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) { |
| | | _unbindEvent = function(setting) { |
| | | var o = setting.treeObj; |
| | | var c = consts.event; |
| | | o.unbind(c.RENAME); |
| | |
| | | o.unbind(c.DROP); |
| | | }, |
| | | //default event proxy of exedit |
| | | _eventProxy = function (e) { |
| | | _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, |
| | | 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 }]); |
| | | 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 }]); |
| | | 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 }]); |
| | | tmp = tools.getMDom(setting, target, [ |
| | | { tagName: "a", attrName: "treeNode" + consts.id.A }, |
| | | ]); |
| | | if (tmp) { |
| | | tId = tools.getNodeMainDom(tmp).id; |
| | | nodeEventType = "mousedownNode"; |
| | |
| | | nodeEventType: nodeEventType, |
| | | nodeEventCallback: nodeEventCallback, |
| | | treeEventType: treeEventType, |
| | | treeEventCallback: treeEventCallback |
| | | treeEventCallback: treeEventCallback, |
| | | }; |
| | | return proxyResult |
| | | return proxyResult; |
| | | }, |
| | | //default init node of exedit |
| | | _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) { |
| | | _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) { |
| | | _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) { |
| | | }; |
| | | 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; |
| | | if ( |
| | | targetNode && |
| | | !isParent && |
| | | this.setting.data.keep.leaf && |
| | | moveType === consts.move.TYPE_INNER |
| | | ) |
| | | return null; |
| | | var _this = this, |
| | | newNode = tools.clone(node); |
| | | if (!targetNode) { |
| | |
| | | copyCallback(); |
| | | } |
| | | } else { |
| | | view.addNodes(this.setting, targetNode.parentNode, -1, [newNode], isSilent); |
| | | view.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent); |
| | | 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) { |
| | | }; |
| | | 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) { |
| | | 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)) { |
| | | } 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); |
| | | view.moveNode( |
| | | _this.setting, |
| | | targetNode, |
| | | node, |
| | | moveType, |
| | | false, |
| | | isSilent |
| | | ); |
| | | } |
| | | |
| | | if (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) { |
| | | 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) { |
| | | }; |
| | | zTreeTools.setEditable = function(editable) { |
| | | this.setting.edit.enable = editable; |
| | | return this.refresh(); |
| | | } |
| | | }; |
| | | }, |
| | | //method of operate data |
| | | _data = { |
| | | setSonNodeLevel: function (setting, parentNode, node) { |
| | | setSonNodeLevel: function(setting, parentNode, node) { |
| | | if (!node) return; |
| | | var children = data.nodeChildren(setting, node); |
| | | node.level = (parentNode) ? parentNode.level + 1 : 0; |
| | | 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) { |
| | | onHoverOverNode: function(event, node) { |
| | | var setting = data.getSetting(event.data.treeId), |
| | | root = data.getRoot(setting); |
| | | if (root.curHoverNode != node) { |
| | |
| | | root.curHoverNode = node; |
| | | view.addHoverDom(setting, node); |
| | | }, |
| | | onHoverOutNode: function (event, node) { |
| | | onHoverOutNode: function(event, node) { |
| | | var setting = data.getSetting(event.data.treeId), |
| | | root = data.getRoot(setting); |
| | | if (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) { |
| | | if ( |
| | | root.curHoverNode && |
| | | !data.isSelectedNode(setting, root.curHoverNode) |
| | | ) { |
| | | view.removeTreeDom(setting, root.curHoverNode); |
| | | root.curHoverNode = null; |
| | | } |
| | | }, |
| | | onMousedownNode: function (eventMouseDown, _node) { |
| | | var i, l, |
| | | onMousedownNode: function(eventMouseDown, _node) { |
| | | var i, |
| | | l, |
| | | setting = data.getSetting(eventMouseDown.data.treeId), |
| | | root = data.getRoot(setting), roots = data.getRoots(); |
| | | 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; |
| | | 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 = [_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) { |
| | | if ( |
| | | _nodes[i].editNameFlag && |
| | | tools.eqs(target.tagName, "input") && |
| | | target.getAttribute("treeNode" + consts.id.INPUT) !== null |
| | | ) { |
| | | return true; |
| | | } |
| | | nodes.push(_nodes[i]); |
| | |
| | | view.cancelCurEditNode(setting); |
| | | |
| | | var doc = $(setting.treeObj.get(0).ownerDocument), |
| | | body = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget, |
| | | body = $(setting.treeObj.get(0).ownerDocument.body), |
| | | curNode, |
| | | tmpArrow, |
| | | tmpTarget, |
| | | isOtherTree = false, |
| | | targetSetting = setting, |
| | | sourceSetting = setting, |
| | | preNode, nextNode, |
| | | preNode, |
| | | nextNode, |
| | | preTmpTargetNodeId = null, |
| | | preTmpMoveType = null, |
| | | tmpTargetNodeId = null, |
| | | moveType = consts.move.TYPE_INNER, |
| | | mouseDownX = eventMouseDown.clientX, |
| | | mouseDownY = eventMouseDown.clientY, |
| | | startTime = (new Date()).getTime(); |
| | | 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) { |
| | | 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) { |
| | | if ( |
| | | tools.apply( |
| | | setting.callback.beforeDrag, |
| | | [setting.treeId, nodes], |
| | | true |
| | | ) == false |
| | | ) { |
| | | _docMouseUp(event); |
| | | return true; |
| | | } |
| | |
| | | tools.showIfameMask(setting, true); |
| | | |
| | | //sort |
| | | var isOrder = true, lastIndex = -1; |
| | | var isOrder = true, |
| | | lastIndex = -1; |
| | | if (nodes.length > 1) { |
| | | var pNodes = nodes[0].parentTId ? data.nodeChildren(setting, nodes[0].getParentNode()) : data.getNodes(setting); |
| | | 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) { |
| | | if (isOrder && lastIndex > -1 && lastIndex + 1 !== i) { |
| | | isOrder = false; |
| | | } |
| | | tmpNodes.push(pNodes[i]); |
| | |
| | | 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); |
| | | 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); |
| | | tmpDom = $$( |
| | | "<li id='" + tmpNode.tId + "_moretmp'><a> ... </a></li>", |
| | | setting |
| | | ); |
| | | curNode.append(tmpDom); |
| | | } |
| | | } |
| | |
| | | tmpArrow.attr("id", "zTreeMove_arrow_tmp"); |
| | | tmpArrow.appendTo(body); |
| | | |
| | | setting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]); |
| | | 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)) { |
| | | 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; |
| | | 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); |
| | | 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; |
| | |
| | | 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)) { |
| | | 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]; |
| | | } |
| | |
| | | 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); |
| | | 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)) { |
| | | 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) { |
| | | while ( |
| | | targetObj && |
| | | targetObj.tagName && |
| | | !tools.eqs(targetObj.tagName, "li") && |
| | | targetObj.id != targetSetting.treeId |
| | | ) { |
| | | targetObj = targetObj.parentNode; |
| | | } |
| | | |
| | |
| | | if (targetObj.id === tmpNode.tId) { |
| | | canMove = false; |
| | | break; |
| | | } else if ($$(tmpNode, setting).find("#" + targetObj.id).length > 0) { |
| | | } 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)) { |
| | | 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)) { |
| | | 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))) { |
| | | 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); |
| | | targetSetting.treeObj.scrollTop( |
| | | targetSetting.treeObj.scrollTop() - 10 |
| | | ); |
| | | } else if (isBottom) { |
| | | targetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop() + 10); |
| | | targetSetting.treeObj.scrollTop( |
| | | targetSetting.treeObj.scrollTop() + 10 |
| | | ); |
| | | } |
| | | if (isLeft) { |
| | | targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() - 10); |
| | | targetSetting.treeObj.scrollLeft( |
| | | targetSetting.treeObj.scrollLeft() - 10 |
| | | ); |
| | | } else if (isRight) { |
| | | targetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft() + 10); |
| | | 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); |
| | | 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" |
| | | 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), |
| | | 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); |
| | | 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" |
| | | display: "none", |
| | | }); |
| | | if (window.zTreeMoveTimer) { |
| | | clearTimeout(window.zTreeMoveTimer); |
| | | window.zTreeMoveTargetNodeTId = null |
| | | 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()), |
| | | 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(); |
| | | 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) { |
| | | if ( |
| | | (prevPercent == 1 || |
| | | (dY_percent <= prevPercent && dY_percent >= -0.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) { |
| | | } 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); |
| | | 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(); |
| | |
| | | |
| | | if (tmpTarget) { |
| | | tmpArrow.css({ |
| | | "display": "block", |
| | | "top": dY + "px", |
| | | "left": (tmpLeft + dX) + "px" |
| | | display: "block", |
| | | top: dY + "px", |
| | | left: tmpLeft + dX + "px", |
| | | }); |
| | | tmpTargetA.addClass(consts.node.TMPTARGET_NODE + "_" + moveType); |
| | | tmpTargetA.addClass( |
| | | consts.node.TMPTARGET_NODE + "_" + moveType |
| | | ); |
| | | |
| | | if (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) { |
| | | startTime = (new Date()).getTime(); |
| | | if ( |
| | | preTmpTargetNodeId != tmpTargetNodeId || |
| | | preTmpMoveType != moveType |
| | | ) { |
| | | startTime = new Date().getTime(); |
| | | } |
| | | if (tmpTargetNode && data.nodeIsParent(setting, tmpTargetNode) && moveType == consts.move.TYPE_INNER) { |
| | | if ( |
| | | tmpTargetNode && |
| | | data.nodeIsParent(setting, tmpTargetNode) && |
| | | moveType == consts.move.TYPE_INNER |
| | | ) { |
| | | var startTimer = true; |
| | | if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) { |
| | | if ( |
| | | window.zTreeMoveTimer && |
| | | window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId |
| | | ) { |
| | | clearTimeout(window.zTreeMoveTimer); |
| | | window.zTreeMoveTargetNodeTId = null; |
| | | } else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) { |
| | | } else if ( |
| | | window.zTreeMoveTimer && |
| | | window.zTreeMoveTargetNodeTId === tmpTargetNode.tId |
| | | ) { |
| | | startTimer = false; |
| | | } |
| | | if (startTimer) { |
| | | window.zTreeMoveTimer = setTimeout(function () { |
| | | 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)) { |
| | | 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.treeObj.trigger(consts.event.EXPAND, [ |
| | | targetSetting.treeId, |
| | | tmpTargetNode, |
| | | ]); |
| | | } |
| | | } |
| | | }, targetSetting.edit.drag.autoOpenTime + 50); |
| | |
| | | } |
| | | } else { |
| | | moveType = consts.move.TYPE_INNER; |
| | | if (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.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" |
| | | display: "none", |
| | | }); |
| | | if (window.zTreeMoveTimer) { |
| | | clearTimeout(window.zTreeMoveTimer); |
| | |
| | | preTmpTargetNodeId = tmpTargetNodeId; |
| | | preTmpMoveType = moveType; |
| | | |
| | | setting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]); |
| | | setting.treeObj.trigger(consts.event.DRAGMOVE, [ |
| | | event, |
| | | setting.treeId, |
| | | nodes, |
| | | ]); |
| | | } |
| | | return false; |
| | | } |
| | |
| | | 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); |
| | | 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); |
| | | |
| | |
| | | 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) { |
| | | 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) { |
| | | 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) { |
| | | 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; |
| | | } |
| | |
| | | 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); |
| | | 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); |
| | | 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); |
| | | 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.moveNode( |
| | | targetSetting, |
| | | dragTargetNode, |
| | | newNodes[l], |
| | | moveType, |
| | | false |
| | | ); |
| | | } |
| | | } |
| | | } |
| | |
| | | var a = $$(newNodes[0], setting).get(0); |
| | | view.scrollIntoView(setting, a); |
| | | |
| | | setting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]); |
| | | 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); |
| | | 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]); |
| | | setting.treeObj.trigger(consts.event.DROP, [ |
| | | event, |
| | | setting.treeId, |
| | | nodes, |
| | | null, |
| | | null, |
| | | null, |
| | | ]); |
| | | } |
| | | } |
| | | |
| | |
| | | // eventMouseDown.preventDefault(); |
| | | // } |
| | | return true; |
| | | } |
| | | }, |
| | | }, |
| | | //method of tools for zTree |
| | | _tools = { |
| | | getAbs: function (obj) { |
| | | getAbs: function(obj) { |
| | | var oRect = obj.getBoundingClientRect(), |
| | | scrollTop = document.body.scrollTop + document.documentElement.scrollTop, |
| | | scrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft; |
| | | scrollTop = |
| | | document.body.scrollTop + document.documentElement.scrollTop, |
| | | scrollLeft = |
| | | document.body.scrollLeft + document.documentElement.scrollLeft; |
| | | return [oRect.left + scrollLeft, oRect.top + scrollTop]; |
| | | }, |
| | | inputFocus: function (inputObj) { |
| | | inputFocus: function(inputObj) { |
| | | if (inputObj.get(0)) { |
| | | inputObj.focus(); |
| | | tools.setCursorPosition(inputObj.get(0), inputObj.val().length); |
| | | } |
| | | }, |
| | | inputSelect: function (inputObj) { |
| | | inputSelect: function(inputObj) { |
| | | if (inputObj.get(0)) { |
| | | inputObj.focus(); |
| | | inputObj.select(); |
| | | } |
| | | }, |
| | | setCursorPosition: function (obj, pos) { |
| | | 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.moveEnd("character", pos); |
| | | range.moveStart("character", pos); |
| | | range.select(); |
| | | } |
| | | }, |
| | | showIfameMask: function (setting, showSign) { |
| | | showIfameMask: function(setting, showSign) { |
| | | var root = data.getRoot(setting); |
| | | //clear full mask |
| | | while (root.dragMaskList.length > 0) { |
| | |
| | | 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 = $$( |
| | | "<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) { |
| | | 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)) { |
| | | 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>"; |
| | | 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; |
| | | $$(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(); |
| | | }) |
| | | .show(); |
| | | }, |
| | | addRemoveBtn: function (setting, node) { |
| | | if (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) { |
| | | 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)) { |
| | | 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>"; |
| | | 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; |
| | | $$(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]); |
| | | setting.treeObj.trigger(consts.event.REMOVE, [ |
| | | setting.treeId, |
| | | node, |
| | | ]); |
| | | return false; |
| | | } |
| | | ).bind('mousedown', |
| | | function (eventMouseDown) { |
| | | }) |
| | | .bind("mousedown", function(eventMouseDown) { |
| | | return true; |
| | | } |
| | | ).show(); |
| | | }) |
| | | .show(); |
| | | }, |
| | | addHoverDom: function (setting, node) { |
| | | addHoverDom: function(setting, node) { |
| | | if (data.getRoots().showHoverDom) { |
| | | node.isHover = true; |
| | | if (setting.edit.enable) { |
| | |
| | | tools.apply(setting.view.addHoverDom, [setting.treeId, node]); |
| | | } |
| | | }, |
| | | cancelCurEditNode: function (setting, forceName, isCancel) { |
| | | 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) { |
| | | 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); |
| | |
| | | root.curEditNode = null; |
| | | root.curEditInput = null; |
| | | view.selectNode(setting, node, false); |
| | | setting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]); |
| | | setting.treeObj.trigger(consts.event.RENAME, [ |
| | | setting.treeId, |
| | | node, |
| | | isCancel, |
| | | ]); |
| | | } |
| | | root.noSelection = true; |
| | | return true; |
| | | }, |
| | | editNode: function (setting, node) { |
| | | editNode: function(setting, node) { |
| | | var root = data.getRoot(setting); |
| | | view.editNodeBlur = false; |
| | | if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { |
| | | setTimeout(function () { |
| | | if ( |
| | | data.isSelectedNode(setting, node) && |
| | | root.curEditNode == node && |
| | | node.editNameFlag |
| | | ) { |
| | | setTimeout(function() { |
| | | tools.inputFocus(root.curEditInput); |
| | | }, 0); |
| | | return; |
| | |
| | | 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 + " >"); |
| | | $$(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.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; |
| | | }); |
| | | 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) { |
| | | 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 ( |
| | | 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); |
| | | var targetParentNode = targetNode.parentTId |
| | | ? targetNode.getParentNode() |
| | | : root; |
| | | |
| | | if (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) { |
| | | if ( |
| | | moveType != consts.move.TYPE_PREV && |
| | | moveType != consts.move.TYPE_NEXT |
| | | ) { |
| | | moveType = consts.move.TYPE_INNER; |
| | | } |
| | | |
| | |
| | | if (!isSilent && moveType == consts.move.TYPE_INNER) { |
| | | view.expandCollapseNode(setting, targetNode, true, false); |
| | | } else if (!isSilent) { |
| | | view.expandCollapseNode(setting, targetNode.getParentNode(), true, false); |
| | | 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('')); |
| | | 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(''); |
| | | nodeDom = view |
| | | .appendNodes(setting, node.level, [node], null, -1, false, true) |
| | | .join(""); |
| | | } else if (!targetObj.get(0)) { |
| | | nodeDom.remove(); |
| | | } |
| | |
| | | } |
| | | |
| | | //repair the data after move |
| | | var i, l, |
| | | var i, |
| | | l, |
| | | tmpSrcIndex = -1, |
| | | tmpTargetIndex = 0, |
| | | oldNeighbor = null, |
| | |
| | | } |
| | | if (moveType != consts.move.TYPE_INNER) { |
| | | for (i = 0, l = targetParentChildren.length; i < l; i++) { |
| | | if (targetParentChildren[i].tId == targetNode.tId) tmpTargetIndex = i; |
| | | if (targetParentChildren[i].tId == targetNode.tId) |
| | | tmpTargetIndex = i; |
| | | } |
| | | } |
| | | if (moveType == consts.move.TYPE_INNER) { |
| | |
| | | } |
| | | targetChildren.splice(targetChildren.length, 0, node); |
| | | node.isLastNode = true; |
| | | node.isFirstNode = (targetChildren.length == 1); |
| | | } else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) { |
| | | 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; |
| | |
| | | node.parentTId = targetNode.parentTId; |
| | | node.isFirstNode = false; |
| | | node.isLastNode = true; |
| | | |
| | | } else { |
| | | if (moveType == consts.move.TYPE_PREV) { |
| | | targetParentChildren.splice(tmpTargetIndex, 0, node); |
| | |
| | | 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.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); |
| | |
| | | |
| | | //expand parents after move |
| | | if (!isSilent) { |
| | | view.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag); |
| | | view.expandCollapseParentNode( |
| | | setting, |
| | | node.getParentNode(), |
| | | true, |
| | | animateFlag |
| | | ); |
| | | } |
| | | }, |
| | | removeEditBtn: function (setting, node) { |
| | | $$(node, consts.id.EDIT, setting).unbind().remove(); |
| | | removeEditBtn: function(setting, node) { |
| | | $$(node, consts.id.EDIT, setting) |
| | | .unbind() |
| | | .remove(); |
| | | }, |
| | | removeRemoveBtn: function (setting, node) { |
| | | $$(node, consts.id.REMOVE, setting).unbind().remove(); |
| | | removeRemoveBtn: function(setting, node) { |
| | | $$(node, consts.id.REMOVE, setting) |
| | | .unbind() |
| | | .remove(); |
| | | }, |
| | | removeTreeDom: function (setting, node) { |
| | | 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) { |
| | | repairNodeLevelClass: function(setting, node, oldLevel) { |
| | | if (oldLevel === node.level) return; |
| | | var liObj = $$(node, setting), |
| | | aObj = $$(node, consts.id.A, setting), |
| | |
| | | ulObj.removeClass(oldClass); |
| | | ulObj.addClass(newClass); |
| | | }, |
| | | selectNodes: function (setting, nodes) { |
| | | 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 |
| | | data: _data, |
| | | }; |
| | | $.extend(true, $.fn.zTree.consts, _consts); |
| | | $.extend(true, $.fn.zTree._z, _z); |
| | |
| | | data.addZTreeTools(_zTreeTools); |
| | | |
| | | var _cancelPreSelectedNode = view.cancelPreSelectedNode; |
| | | view.cancelPreSelectedNode = function (setting, node) { |
| | | 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]) { |
| | |
| | | } |
| | | } |
| | | if (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments); |
| | | } |
| | | }; |
| | | |
| | | var _createNodes = view.createNodes; |
| | | view.createNodes = function (setting, level, nodes, parentNode, index) { |
| | | view.createNodes = function(setting, level, nodes, parentNode, index) { |
| | | if (_createNodes) { |
| | | _createNodes.apply(view, arguments); |
| | | } |
| | |
| | | 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)); |
| | | } |
| | | view.makeNodeUrl = function(setting, node) { |
| | | return setting.edit.enable ? null : _makeNodeUrl.apply(view, arguments); |
| | | }; |
| | | |
| | | var _removeNode = view.removeNode; |
| | | view.removeNode = function (setting, node) { |
| | | 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) { |
| | | view.selectNode = function(setting, node, addFlag) { |
| | | var root = data.getRoot(setting); |
| | | if (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) { |
| | | 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) { |
| | | 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"))) { |
| | | 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); |
| | | return ( |
| | | !root.curEditNode && (_uCanDo ? _uCanDo.apply(view, arguments) : true) |
| | | ); |
| | | }; |
| | | })(jQuery); |