📄 treebasiccontrollerv3.js
字号:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.widget.TreeBasicControllerV3");dojo.require("dojo.event.*");dojo.require("dojo.json");dojo.require("dojo.io.*");dojo.require("dojo.widget.TreeCommon");dojo.require("dojo.widget.TreeNodeV3");dojo.require("dojo.widget.TreeV3");dojo.widget.defineWidget("dojo.widget.TreeBasicControllerV3", [dojo.widget.HtmlWidget, dojo.widget.TreeCommon], function () { this.listenedTrees = {};}, {listenTreeEvents:["afterSetFolder", "afterTreeCreate", "beforeTreeDestroy"], listenNodeFilter:function (elem) { return elem instanceof dojo.widget.Widget;}, editor:null, initialize:function (args) { if (args.editor) { this.editor = dojo.widget.byId(args.editor); this.editor.controller = this; }}, getInfo:function (elem) { return elem.getInfo();}, onBeforeTreeDestroy:function (message) { this.unlistenTree(message.source);}, onAfterSetFolder:function (message) { if (message.source.expandLevel > 0) { this.expandToLevel(message.source, message.source.expandLevel); } if (message.source.loadLevel > 0) { this.loadToLevel(message.source, message.source.loadLevel); }}, _focusNextVisible:function (nodeWidget) { if (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) { returnWidget = nodeWidget.children[0]; } else { while (nodeWidget.isTreeNode && nodeWidget.isLastChild()) { nodeWidget = nodeWidget.parent; } if (nodeWidget.isTreeNode) { var returnWidget = nodeWidget.parent.children[nodeWidget.getParentIndex() + 1]; } } if (returnWidget && returnWidget.isTreeNode) { this._focusLabel(returnWidget); return returnWidget; }}, _focusPreviousVisible:function (nodeWidget) { var returnWidget = nodeWidget; if (!nodeWidget.isFirstChild()) { var previousSibling = nodeWidget.parent.children[nodeWidget.getParentIndex() - 1]; nodeWidget = previousSibling; while (nodeWidget.isFolder && nodeWidget.isExpanded && nodeWidget.children.length > 0) { returnWidget = nodeWidget; nodeWidget = nodeWidget.children[nodeWidget.children.length - 1]; } } else { nodeWidget = nodeWidget.parent; } if (nodeWidget && nodeWidget.isTreeNode) { returnWidget = nodeWidget; } if (returnWidget && returnWidget.isTreeNode) { this._focusLabel(returnWidget); return returnWidget; }}, _focusZoomIn:function (nodeWidget) { var returnWidget = nodeWidget; if (nodeWidget.isFolder && !nodeWidget.isExpanded) { this.expand(nodeWidget); } else { if (nodeWidget.children.length > 0) { nodeWidget = nodeWidget.children[0]; } } if (nodeWidget && nodeWidget.isTreeNode) { returnWidget = nodeWidget; } if (returnWidget && returnWidget.isTreeNode) { this._focusLabel(returnWidget); return returnWidget; }}, _focusZoomOut:function (node) { var returnWidget = node; if (node.isFolder && node.isExpanded) { this.collapse(node); } else { node = node.parent; } if (node && node.isTreeNode) { returnWidget = node; } if (returnWidget && returnWidget.isTreeNode) { this._focusLabel(returnWidget); return returnWidget; }}, onFocusNode:function (e) { var node = this.domElement2TreeNode(e.target); if (node) { node.viewFocus(); dojo.event.browser.stopEvent(e); }}, onBlurNode:function (e) { var node = this.domElement2TreeNode(e.target); if (!node) { return; } var labelNode = node.labelNode; labelNode.setAttribute("tabIndex", "-1"); node.viewUnfocus(); dojo.event.browser.stopEvent(e); node.tree.domNode.setAttribute("tabIndex", "0");}, _focusLabel:function (node) { var lastFocused = node.tree.lastFocused; var labelNode; if (lastFocused && lastFocused.labelNode) { labelNode = lastFocused.labelNode; dojo.event.disconnect(labelNode, "onblur", this, "onBlurNode"); labelNode.setAttribute("tabIndex", "-1"); dojo.html.removeClass(labelNode, "TreeLabelFocused"); } labelNode = node.labelNode; labelNode.setAttribute("tabIndex", "0"); node.tree.lastFocused = node; dojo.html.addClass(labelNode, "TreeLabelFocused"); dojo.event.connectOnce(labelNode, "onblur", this, "onBlurNode"); dojo.event.connectOnce(labelNode, "onfocus", this, "onFocusNode"); labelNode.focus();}, onKey:function (e) { if (!e.key || e.ctrkKey || e.altKey) { return; } var nodeWidget = this.domElement2TreeNode(e.target); if (!nodeWidget) { return; } var treeWidget = nodeWidget.tree; if (treeWidget.lastFocused && treeWidget.lastFocused.labelNode) { nodeWidget = treeWidget.lastFocused; } switch (e.key) { case e.KEY_TAB: if (e.shiftKey) { treeWidget.domNode.setAttribute("tabIndex", "-1"); } break; case e.KEY_RIGHT_ARROW: this._focusZoomIn(nodeWidget); dojo.event.browser.stopEvent(e); break; case e.KEY_LEFT_ARROW: this._focusZoomOut(nodeWidget); dojo.event.browser.stopEvent(e); break; case e.KEY_UP_ARROW: this._focusPreviousVisible(nodeWidget); dojo.event.browser.stopEvent(e); break; case e.KEY_DOWN_ARROW: this._focusNextVisible(nodeWidget); dojo.event.browser.stopEvent(e); break; }}, onFocusTree:function (e) { if (!e.currentTarget) { return; } try { var treeWidget = this.getWidgetByNode(e.currentTarget); if (!treeWidget || !treeWidget.isTree) { return; } var nodeWidget = this.getWidgetByNode(treeWidget.domNode.firstChild); if (nodeWidget && nodeWidget.isTreeNode) { if (treeWidget.lastFocused && treeWidget.lastFocused.isTreeNode) { nodeWidget = treeWidget.lastFocused; } this._focusLabel(nodeWidget); } } catch (e) { }}, onAfterTreeCreate:function (message) { var tree = message.source; dojo.event.browser.addListener(tree.domNode, "onKey", dojo.lang.hitch(this, this.onKey)); dojo.event.browser.addListener(tree.domNode, "onmousedown", dojo.lang.hitch(this, this.onTreeMouseDown)); dojo.event.browser.addListener(tree.domNode, "onclick", dojo.lang.hitch(this, this.onTreeClick)); dojo.event.browser.addListener(tree.domNode, "onfocus", dojo.lang.hitch(this, this.onFocusTree)); tree.domNode.setAttribute("tabIndex", "0"); if (tree.expandLevel) { this.expandToLevel(tree, tree.expandLevel); } if (tree.loadLevel) { this.loadToLevel(tree, tree.loadLevel); }}, onTreeMouseDown:function (e) {}, onTreeClick:function (e) { var domElement = e.target; var node = this.domElement2TreeNode(domElement); if (!node || !node.isTreeNode) { return; } var checkExpandClick = function (el) { return el === node.expandNode; }; if (this.checkPathCondition(domElement, checkExpandClick)) { this.processExpandClick(node); } this._focusLabel(node);}, processExpandClick:function (node) { if (node.isExpanded) { this.collapse(node); } else { this.expand(node); }}, batchExpandTimeout:20, expandAll:function (nodeOrTree) { return this.expandToLevel(nodeOrTree, Number.POSITIVE_INFINITY);}, collapseAll:function (nodeOrTree) { var _this = this; var filter = function (elem) { return (elem instanceof dojo.widget.Widget) && elem.isFolder && elem.isExpanded; }; if (nodeOrTree.isTreeNode) { this.processDescendants(nodeOrTree, filter, this.collapse); } else { if (nodeOrTree.isTree) { dojo.lang.forEach(nodeOrTree.children, function (c) { _this.processDescendants(c, filter, _this.collapse); }); } }}, expandToNode:function (node, withSelected) { n = withSelected ? node : node.parent; s = []; while (!n.isExpanded) { s.push(n); n = n.parent; } dojo.lang.forEach(s, function (n) { n.expand(); });}, expandToLevel:function (nodeOrTree, level) { dojo.require("dojo.widget.TreeTimeoutIterator"); var _this = this; var filterFunc = function (elem) { var res = elem.isFolder || elem.children && elem.children.length; return res; }; var callFunc = function (node, iterator) { _this.expand(node, true); iterator.forward(); }; var iterator = new dojo.widget.TreeTimeoutIterator(nodeOrTree, callFunc, this); iterator.setFilter(filterFunc); iterator.timeout = this.batchExpandTimeout; iterator.setMaxLevel(nodeOrTree.isTreeNode ? level - 1 : level); return iterator.start(nodeOrTree.isTreeNode);}, getWidgetByNode:function (node) { var widgetId; var newNode = node; while (!(widgetId = newNode.widgetId)) { newNode = newNode.parentNode; if (newNode == null) { break; } } if (widgetId) { return dojo.widget.byId(widgetId); } else { if (node == null) { return null; } else { return dojo.widget.manager.byNode(node); } }}, expand:function (node) { if (node.isFolder) { node.expand(); }}, collapse:function (node) { if (node.isFolder) { node.collapse(); }}, canEditLabel:function (node) { if (node.actionIsDisabledNow(node.actions.EDIT)) { return false; } return true;}, editLabelStart:function (node) { if (!this.canEditLabel(node)) { return false; } if (!this.editor.isClosed()) { this.editLabelFinish(this.editor.saveOnBlur); } this.doEditLabelStart(node);}, editLabelFinish:function (save) { this.doEditLabelFinish(save);}, doEditLabelStart:function (node) { if (!this.editor) { dojo.raise(this.widgetType + ": no editor specified"); } this.editor.open(node);}, doEditLabelFinish:function (save, server_data) { if (!this.editor) { dojo.raise(this.widgetType + ": no editor specified"); } var node = this.editor.node; var editorTitle = this.editor.getContents(); this.editor.close(save); if (save) { var data = {title:editorTitle}; if (server_data) { dojo.lang.mixin(data, server_data); } if (node.isPhantom) { var parent = node.parent; var index = node.getParentIndex(); node.destroy(); dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data); } else { var title = server_data && server_data.title ? server_data.title : editorTitle; node.setTitle(title); } } else { if (node.isPhantom) { node.destroy(); } }}, makeDefaultNode:function (parent, index) { var data = {title:parent.tree.defaultChildTitle}; return dojo.widget.TreeBasicControllerV3.prototype.doCreateChild.call(this, parent, index, data);}, runStages:function (check, prepare, make, finalize, expose, args) { if (check && !check.apply(this, args)) { return false; } if (prepare && !prepare.apply(this, args)) { return false; } var result = make.apply(this, args); if (finalize) { finalize.apply(this, args); } if (!result) { return result; } if (expose) { expose.apply(this, args); } return result;}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {createAndEdit:function (parent, index) { var data = {title:parent.tree.defaultChildTitle}; if (!this.canCreateChild(parent, index, data)) { return false; } var child = this.doCreateChild(parent, index, data); if (!child) { return false; } this.exposeCreateChild(parent, index, data); child.isPhantom = true; if (!this.editor.isClosed()) { this.editLabelFinish(this.editor.saveOnBlur); } this.doEditLabelStart(child);}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canClone:function (child, newParent, index, deep) { return true;}, clone:function (child, newParent, index, deep) { return this.runStages(this.canClone, this.prepareClone, this.doClone, this.finalizeClone, this.exposeClone, arguments);}, exposeClone:function (child, newParent) { if (newParent.isTreeNode) { this.expand(newParent); }}, doClone:function (child, newParent, index, deep) { var cloned = child.clone(deep); newParent.addChild(cloned, index); return cloned;}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDetach:function (child) { if (child.actionIsDisabledNow(child.actions.DETACH)) { return false; } return true;}, detach:function (node) { return this.runStages(this.canDetach, this.prepareDetach, this.doDetach, this.finalizeDetach, this.exposeDetach, arguments);}, doDetach:function (node, callObj, callFunc) { node.detach();}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canDestroyChild:function (child) { if (child.parent && !this.canDetach(child)) { return false; } return true;}, destroyChild:function (node) { return this.runStages(this.canDestroyChild, this.prepareDestroyChild, this.doDestroyChild, this.finalizeDestroyChild, this.exposeDestroyChild, arguments);}, doDestroyChild:function (node) { node.destroy();}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canMoveNotANode:function (child, parent) { if (child.treeCanMove) { return child.treeCanMove(parent); } return true;}, canMove:function (child, newParent) { if (!child.isTreeNode) { return this.canMoveNotANode(child, newParent); } if (child.actionIsDisabledNow(child.actions.MOVE)) { return false; } if (child.parent !== newParent && newParent.actionIsDisabledNow(newParent.actions.ADDCHILD)) { return false; } var node = newParent; while (node.isTreeNode) { if (node === child) { return false; } node = node.parent; } return true;}, move:function (child, newParent, index) { return this.runStages(this.canMove, this.prepareMove, this.doMove, this.finalizeMove, this.exposeMove, arguments);}, doMove:function (child, newParent, index) { child.tree.move(child, newParent, index); return true;}, exposeMove:function (child, newParent) { if (newParent.isTreeNode) { this.expand(newParent); }}});dojo.lang.extend(dojo.widget.TreeBasicControllerV3, {canCreateChild:function (parent, index, data) { if (parent.actionIsDisabledNow(parent.actions.ADDCHILD)) { return false; } return true;}, createChild:function (parent, index, data) { if (!data) { data = {title:parent.tree.defaultChildTitle}; } return this.runStages(this.canCreateChild, this.prepareCreateChild, this.doCreateChild, this.finalizeCreateChild, this.exposeCreateChild, [parent, index, data]);}, prepareCreateChild:function () { return true;}, finalizeCreateChild:function () {}, doCreateChild:function (parent, index, data) { var newChild = parent.tree.createNode(data); parent.addChild(newChild, index); return newChild;}, exposeCreateChild:function (parent) { return this.expand(parent);}});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -