|
Struts example source code file (TreeNodeV3.js)
The Struts TreeNodeV3.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.TreeNodeV3"); dojo.require("dojo.html.*"); dojo.require("dojo.event.*"); dojo.require("dojo.io.*"); dojo.require("dojo.widget.TreeWithNode"); dojo.widget.defineWidget("dojo.widget.TreeNodeV3", [dojo.widget.HtmlWidget, dojo.widget.TreeWithNode], function () { this.actionsDisabled = []; this.object = {}; }, {tryLazyInit:true, actions:{MOVE:"MOVE", DETACH:"DETACH", EDIT:"EDIT", ADDCHILD:"ADDCHILD", SELECT:"SELECT"}, labelClass:"", contentClass:"", expandNode:null, labelNode:null, nodeDocType:"", selected:false, getnodeDocType:function () { return this.nodeDocType; }, cloneProperties:["actionsDisabled", "tryLazyInit", "nodeDocType", "objectId", "object", "title", "isFolder", "isExpanded", "state"], clone:function (deep) { var ret = new this.constructor(); for (var i = 0; i < this.cloneProperties.length; i++) { var prop = this.cloneProperties[i]; ret[prop] = dojo.lang.shallowCopy(this[prop], true); } if (this.tree.unsetFolderOnEmpty && !deep && this.isFolder) { ret.isFolder = false; } ret.toggleObj = this.toggleObj; dojo.widget.manager.add(ret); ret.tree = this.tree; ret.buildRendering({}, {}); ret.initialize({}, {}); if (deep && this.children.length) { for (var i = 0; i < this.children.length; i++) { var child = this.children[i]; if (child.clone) { ret.children.push(child.clone(deep)); } else { ret.children.push(dojo.lang.shallowCopy(child, deep)); } } ret.setChildren(); } return ret; }, markProcessing:function () { this.markProcessingSavedClass = dojo.html.getClass(this.expandNode); dojo.html.setClass(this.expandNode, this.tree.classPrefix + "ExpandLoading"); }, unmarkProcessing:function () { dojo.html.setClass(this.expandNode, this.markProcessingSavedClass); }, buildRendering:function (args, fragment, parent) { if (args.tree) { this.tree = dojo.lang.isString(args.tree) ? dojo.widget.manager.getWidgetById(args.tree) : args.tree; } else { if (parent && parent.tree) { this.tree = parent.tree; } } if (!this.tree) { dojo.raise("Can't evaluate tree from arguments or parent"); } this.domNode = this.tree.nodeTemplate.cloneNode(true); this.expandNode = this.domNode.firstChild; this.contentNode = this.domNode.childNodes[1]; this.labelNode = this.contentNode.firstChild; if (this.labelClass) { dojo.html.addClass(this.labelNode, this.labelClass); } if (this.contentClass) { dojo.html.addClass(this.contentNode, this.contentClass); } this.domNode.widgetId = this.widgetId; this.labelNode.innerHTML = this.title; }, isTreeNode:true, object:{}, title:"", isFolder:null, contentNode:null, expandClass:"", isExpanded:false, containerNode:null, getInfo:function () { var info = {widgetId:this.widgetId, objectId:this.objectId, index:this.getParentIndex()}; return info; }, setFolder:function () { this.isFolder = true; this.viewSetExpand(); if (!this.containerNode) { this.viewAddContainer(); } dojo.event.topic.publish(this.tree.eventNames.afterSetFolder, {source:this}); }, initialize:function (args, frag, parent) { if (args.isFolder) { this.isFolder = true; } if (this.children.length || this.isFolder) { this.setFolder(); } else { this.viewSetExpand(); } for (var i = 0; i < this.actionsDisabled.length; i++) { this.actionsDisabled[i] = this.actionsDisabled[i].toUpperCase(); } dojo.event.topic.publish(this.tree.eventNames.afterChangeTree, {oldTree:null, newTree:this.tree, node:this}); }, unsetFolder:function () { this.isFolder = false; this.viewSetExpand(); dojo.event.topic.publish(this.tree.eventNames.afterUnsetFolder, {source:this}); }, insertNode:function (parent, index) { if (!index) { index = 0; } if (index == 0) { dojo.html.prependChild(this.domNode, parent.containerNode); } else { dojo.html.insertAfter(this.domNode, parent.children[index - 1].domNode); } }, updateTree:function (newTree) { if (this.tree === newTree) { return; } var oldTree = this.tree; dojo.lang.forEach(this.getDescendants(), function (elem) { elem.tree = newTree; }); if (oldTree.classPrefix != newTree.classPrefix) { var stack = [this.domNode]; var elem; var reg = new RegExp("(^|\\s)" + oldTree.classPrefix, "g"); while (elem = stack.pop()) { for (var i = 0; i < elem.childNodes.length; i++) { var childNode = elem.childNodes[i]; if (childNode.nodeDocType != 1) { continue; } dojo.html.setClass(childNode, dojo.html.getClass(childNode).replace(reg, "$1" + newTree.classPrefix)); stack.push(childNode); } } } var message = {oldTree:oldTree, newTree:newTree, node:this}; dojo.event.topic.publish(this.tree.eventNames.afterChangeTree, message); dojo.event.topic.publish(newTree.eventNames.afterChangeTree, message); }, addedTo:function (parent, index, dontPublishEvent) { if (this.tree !== parent.tree) { this.updateTree(parent.tree); } if (parent.isTreeNode) { if (!parent.isFolder) { parent.setFolder(); parent.state = parent.loadStates.LOADED; } } var siblingsCount = parent.children.length; this.insertNode(parent, index); this.viewAddLayout(); if (siblingsCount > 1) { if (index == 0 && parent.children[1] instanceof dojo.widget.Widget) { parent.children[1].viewUpdateLayout(); } if (index == siblingsCount - 1 && parent.children[siblingsCount - 2] instanceof dojo.widget.Widget) { parent.children[siblingsCount - 2].viewUpdateLayout(); } } else { if (parent.isTreeNode) { parent.viewSetHasChildren(); } } if (!dontPublishEvent) { var message = {child:this, index:index, parent:parent}; dojo.event.topic.publish(this.tree.eventNames.afterAddChild, message); } }, createSimple:function (args, parent) { if (args.tree) { var tree = args.tree; } else { if (parent) { var tree = parent.tree; } else { dojo.raise("createSimple: can't evaluate tree"); } } tree = dojo.widget.byId(tree); var treeNode = new tree.defaultChildWidget(); for (var x in args) { treeNode[x] = args[x]; } treeNode.toggleObj = dojo.lfx.toggle[treeNode.toggle.toLowerCase()] || dojo.lfx.toggle.plain; dojo.widget.manager.add(treeNode); treeNode.buildRendering(args, {}, parent); treeNode.initialize(args, {}, parent); if (treeNode.parent) { delete dojo.widget.manager.topWidgets[treeNode.widgetId]; } return treeNode; }, viewUpdateLayout:function () { this.viewRemoveLayout(); this.viewAddLayout(); }, viewAddContainer:function () { this.containerNode = this.tree.containerNodeTemplate.cloneNode(true); this.domNode.appendChild(this.containerNode); }, viewAddLayout:function () { if (this.parent["isTree"]) { dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode) + " " + this.tree.classPrefix + "IsRoot"); } if (this.isLastChild()) { dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode) + " " + this.tree.classPrefix + "IsLast"); } }, viewRemoveLayout:function () { dojo.html.removeClass(this.domNode, this.tree.classPrefix + "IsRoot"); dojo.html.removeClass(this.domNode, this.tree.classPrefix + "IsLast"); }, viewGetExpandClass:function () { if (this.isFolder) { return this.isExpanded ? "ExpandOpen" : "ExpandClosed"; } else { return "ExpandLeaf"; } }, viewSetExpand:function () { var expand = this.tree.classPrefix + this.viewGetExpandClass(); var reg = new RegExp("(^|\\s)" + this.tree.classPrefix + "Expand\\w+", "g"); dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg, "") + " " + expand); this.viewSetHasChildrenAndExpand(); }, viewGetChildrenClass:function () { return "Children" + (this.children.length ? "Yes" : "No"); }, viewSetHasChildren:function () { var clazz = this.tree.classPrefix + this.viewGetChildrenClass(); var reg = new RegExp("(^|\\s)" + this.tree.classPrefix + "Children\\w+", "g"); dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg, "") + " " + clazz); this.viewSetHasChildrenAndExpand(); }, viewSetHasChildrenAndExpand:function () { var clazz = this.tree.classPrefix + "State" + this.viewGetChildrenClass() + "-" + this.viewGetExpandClass(); var reg = new RegExp("(^|\\s)" + this.tree.classPrefix + "State[\\w-]+", "g"); dojo.html.setClass(this.domNode, dojo.html.getClass(this.domNode).replace(reg, "") + " " + clazz); }, viewUnfocus:function () { dojo.html.removeClass(this.labelNode, this.tree.classPrefix + "LabelFocused"); }, viewFocus:function () { dojo.html.addClass(this.labelNode, this.tree.classPrefix + "LabelFocused"); }, viewEmphasize:function () { dojo.html.clearSelection(this.labelNode); dojo.html.addClass(this.labelNode, this.tree.classPrefix + "NodeEmphasized"); }, viewUnemphasize:function () { dojo.html.removeClass(this.labelNode, this.tree.classPrefix + "NodeEmphasized"); }, detach:function () { if (!this.parent) { return; } var parent = this.parent; var index = this.getParentIndex(); this.doDetach.apply(this, arguments); dojo.event.topic.publish(this.tree.eventNames.afterDetach, {child:this, parent:parent, index:index}); }, doDetach:function () { var parent = this.parent; if (!parent) { return; } var index = this.getParentIndex(); this.viewRemoveLayout(); dojo.widget.DomWidget.prototype.removeChild.call(parent, this); var siblingsCount = parent.children.length; if (siblingsCount > 0) { if (index == 0) { parent.children[0].viewUpdateLayout(); } if (index == siblingsCount) { parent.children[siblingsCount - 1].viewUpdateLayout(); } } else { if (parent.isTreeNode) { parent.viewSetHasChildren(); } } if (this.tree.unsetFolderOnEmpty && !parent.children.length && parent.isTreeNode) { parent.unsetFolder(); } this.parent = null; }, destroy:function () { dojo.event.topic.publish(this.tree.eventNames.beforeNodeDestroy, {source:this}); this.detach(); return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments); }, expand:function () { if (this.isExpanded) { return; } if (this.tryLazyInit) { this.setChildren(); this.tryLazyInit = false; } this.isExpanded = true; this.viewSetExpand(); this.showChildren(); }, collapse:function () { if (!this.isExpanded) { return; } this.isExpanded = false; this.hideChildren(); }, hideChildren:function () { this.tree.toggleObj.hide(this.containerNode, this.tree.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onHideChildren")); }, showChildren:function () { this.tree.toggleObj.show(this.containerNode, this.tree.toggleDuration, this.explodeSrc, dojo.lang.hitch(this, "onShowChildren")); }, onShowChildren:function () { this.onShow(); dojo.event.topic.publish(this.tree.eventNames.afterExpand, {source:this}); }, onHideChildren:function () { this.viewSetExpand(); this.onHide(); dojo.event.topic.publish(this.tree.eventNames.afterCollapse, {source:this}); }, setTitle:function (title) { var oldTitle = this.title; this.labelNode.innerHTML = this.title = title; dojo.event.topic.publish(this.tree.eventNames.afterSetTitle, {source:this, oldTitle:oldTitle}); }, toString:function () { return "[" + this.widgetType + ", " + this.title + "]"; }}); Other Struts examples (source code examples)Here is a short list of links related to this Struts TreeNodeV3.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.