⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treebasiccontrollerv3.js

📁 初学者
💻 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 + -