TreeBasicControllerV3.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:14k
源码类别:
OA系统
开发平台:
Java
- /*
- 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);
- }});