|
Struts example source code file (TreeBasicControllerV3.js)
The Struts TreeBasicControllerV3.js source code/* 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); }}); Other Struts examples (source code examples)Here is a short list of links related to this Struts TreeBasicControllerV3.js source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.