Author: musachy Date: Tue Apr 17 16:03:44 2007 New Revision: 529800 URL: http://svn.apache.org/viewvc?view=rev&rev=529800 Log: WW-1883 Deprecate topic attributes in Tree tag
Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TreeTag.java struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/StrutsTreeSelector.js struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js.uncompressed.js struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/tree.ftl Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java?view=diff&rev=529800&r1=529799&r2=529800 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/components/Tree.java Tue Apr 17 16:03:44 2007 @@ -77,9 +77,9 @@ private static final String OPEN_TEMPLATE = "tree"; private String toggle = "fade"; - private String treeSelectedTopic; - private String treeExpandedTopic; - private String treeCollapsedTopic; + private String selectedNotifyTopics; + private String expandedNotifyTopics; + private String collapsedNotifyTopics; protected String rootNodeAttr; protected String childCollectionProperty; protected String nodeTitleProperty; @@ -127,16 +127,16 @@ addParameter("toggle", findString(toggle)); } - if (treeSelectedTopic != null) { - addParameter("treeSelectedTopic", findString(treeSelectedTopic)); + if (selectedNotifyTopics != null) { + addParameter("selectedNotifyTopics", findString(selectedNotifyTopics)); } - if (treeExpandedTopic != null) { - addParameter("treeExpandedTopic", findString(treeExpandedTopic)); + if (expandedNotifyTopics != null) { + addParameter("expandedNotifyTopics", findString(expandedNotifyTopics)); } - if (treeCollapsedTopic != null) { - addParameter("treeCollapsedTopic", findString(treeCollapsedTopic)); + if (collapsedNotifyTopics != null) { + addParameter("collapsedNotifyTopics", findString(collapsedNotifyTopics)); } if (rootNodeAttr != null) { @@ -242,31 +242,19 @@ this.toggle = toggle; } - public String getTreeSelectedTopic() { - return treeSelectedTopic; + @StrutsTagAttribute(description="Deprecated. Use 'selectedNotifyTopics' instead.") + public void setTreeSelectedTopic(String selectedNotifyTopic) { + this.selectedNotifyTopics = selectedNotifyTopic; } - @StrutsTagAttribute(description="The treeSelectedTopic property") - public void setTreeSelectedTopic(String treeSelectedTopic) { - this.treeSelectedTopic = treeSelectedTopic; + @StrutsTagAttribute(description="Deprecated. Use 'expandedNotifyTopics' instead.") + public void setTreeExpandedTopics(String expandedNotifyTopic) { + this.expandedNotifyTopics = expandedNotifyTopic; } - public String getTreeExpandedTopic() { - return treeExpandedTopic; - } - - @StrutsTagAttribute(description="The treeExpandedTopic property.") - public void setTreeExpandedTopic(String treeExpandedTopic) { - this.treeExpandedTopic = treeExpandedTopic; - } - - public String getTreeCollapsedTopic() { - return treeCollapsedTopic; - } - - @StrutsTagAttribute(description="The treeCollapsedTopic property.") - public void setTreeCollapsedTopic(String treeCollapsedTopic) { - this.treeCollapsedTopic = treeCollapsedTopic; + @StrutsTagAttribute(description="Deprecated. Use 'collapsedNotifyTopics' instead.") + public void setTreeCollapsedTopics(String collapsedNotifyTopic) { + this.collapsedNotifyTopics = collapsedNotifyTopic; } public String getRootNode() { @@ -462,6 +450,24 @@ @StrutsTagAttribute(description="The name to set for element") public void setName(String name) { super.setName(name); + } + + @StrutsTagAttribute(description="Comma separated lis of topics to be published when a node" + + " is collapsed. An object with a 'node' property will be passed as parameter to the topics.") + public void setCollapsedNotifyTopics(String collapsedNotifyTopics) { + this.collapsedNotifyTopics = collapsedNotifyTopics; + } + + @StrutsTagAttribute(description="Comma separated lis of topics to be published when a node" + + " is expanded. An object with a 'node' property will be passed as parameter to the topics.") + public void setExpandedNotifyTopics(String expandedNotifyTopics) { + this.expandedNotifyTopics= expandedNotifyTopics; + } + + @StrutsTagAttribute(description="Comma separated lis of topics to be published when a node" + + " is selected. An object with a 'node' property will be passed as parameter to the topics.") + public void setSelectedNotifyTopics(String selectedNotifyTopics) { + this.selectedNotifyTopics = selectedNotifyTopics; } } Modified: struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TreeTag.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TreeTag.java?view=diff&rev=529800&r1=529799&r2=529800 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TreeTag.java (original) +++ struts/struts2/trunk/plugins/dojo/src/main/java/org/apache/struts2/dojo/views/jsp/ui/TreeTag.java Tue Apr 17 16:03:44 2007 @@ -37,9 +37,9 @@ private static final long serialVersionUID = 2735218501058548013L; private String toggle; - private String treeSelectedTopic; - private String treeExpandedTopic; - private String treeCollapsedTopic; + private String selectedNotifyTopics; + private String expandedNotifyTopics; + private String collapsedNotifyTopics; private String rootNode; private String childCollectionProperty; private String nodeTitleProperty; @@ -80,12 +80,12 @@ tree.setRootNode(rootNode); if (toggle != null) tree.setToggle(toggle); - if (treeCollapsedTopic != null) - tree.setTreeCollapsedTopic(treeCollapsedTopic); - if (treeExpandedTopic != null) - tree.setTreeExpandedTopic(treeExpandedTopic); - if (treeSelectedTopic != null) - tree.setTreeSelectedTopic(treeSelectedTopic); + if (selectedNotifyTopics != null) + tree.setSelectedNotifyTopics(selectedNotifyTopics); + if (expandedNotifyTopics != null) + tree.setExpandedNotifyTopics(expandedNotifyTopics); + if (collapsedNotifyTopics != null) + tree.setCollapsedNotifyTopics(collapsedNotifyTopics); if (showRootGrid != null) tree.setShowRootGrid(showRootGrid); @@ -127,28 +127,19 @@ this.toggle = toggle; } - public String getTreeSelectedTopic() { - return treeSelectedTopic; - } - + @Deprecated public void setTreeSelectedTopic(String treeSelectedTopic) { - this.treeSelectedTopic = treeSelectedTopic; - } - - public String getTreeExpandedTopic() { - return treeExpandedTopic; + this.selectedNotifyTopics = treeSelectedTopic; } + @Deprecated public void setTreeExpandedTopic(String treeExpandedTopic) { - this.treeExpandedTopic = treeExpandedTopic; - } - - public String getTreeCollapsedTopic() { - return treeCollapsedTopic; + this.expandedNotifyTopics = treeExpandedTopic; } + @Deprecated public void setTreeCollapsedTopic(String treeCollapsedTopic) { - this.treeCollapsedTopic = treeCollapsedTopic; + this.collapsedNotifyTopics = treeCollapsedTopic; } public String getRootNode() { @@ -301,6 +292,18 @@ public void setShowGrid(String showGrid) { this.showGrid = showGrid; + } + + public void setCollapsedNotifyTopics(String collapsedNotifyTopics) { + this.collapsedNotifyTopics = collapsedNotifyTopics; + } + + public void setExpandedNotifyTopics(String expandedNotifyTopics) { + this.expandedNotifyTopics = expandedNotifyTopics; + } + + public void setSelectedNotifyTopics(String selectedNotifyTopics) { + this.selectedNotifyTopics = selectedNotifyTopics; } } Modified: struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/StrutsTreeSelector.js URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/StrutsTreeSelector.js?view=diff&rev=529800&r1=529799&r2=529800 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/StrutsTreeSelector.js (original) +++ struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts/widget/StrutsTreeSelector.js Tue Apr 17 16:03:44 2007 @@ -6,7 +6,15 @@ "struts.widget.StrutsTreeSelector", dojo.widget.TreeSelector, { widgetType : "StrutsTreeSelector", - + + selectedNotifyTopics : "", + collapsedNotifyTopics : "", + expandedNotifyTopics : "", + + selectedNotifyTopicsArray : null, + collapsedNotifyTopicsArray : null, + expandedNotifyTopicsArray : null, + eventNamesDefault: { select : "select", destroy : "destroy", @@ -16,10 +24,26 @@ collapse: "collapse" }, + initialize: function () { + struts.widget.StrutsTreeSelector.superclass.initialize.apply(this); + + if(!dojo.string.isBlank(this.selectedNotifyTopics)) { + this.selectedNotifyTopicsArray = this.selectedNotifyTopics.split(","); + } + + if(!dojo.string.isBlank(this.selectedNotifyTopics)) { + this.collapsedNotifyTopicsArray = this.collapsedNotifyTopics.split(","); + } + + if(!dojo.string.isBlank(this.selectedNotifyTopics)) { + this.expandedNotifyTopicsArray = this.expandedNotifyTopics.split(","); + } + }, + listenTree: function(tree) { dojo.event.topic.subscribe(tree.eventNames.collapse, this, "collapse"); dojo.event.topic.subscribe(tree.eventNames.expand, this, "expand"); - struts.widget.StrutsTreeSelector.superclass.unlistenTree.apply(this, [tree]); + struts.widget.StrutsTreeSelector.superclass.listenTree.apply(this, [tree]); }, unlistenTree: function(tree) { @@ -28,14 +52,48 @@ struts.widget.StrutsTreeSelector.superclass.unlistenTree.apply(this, [tree]); }, + publishTopics : function(topics, node) { + if(topics != null) { + for(var i = 0; i < topics.length; i++) { + var topic = topics[i]; + if(!dojo.string.isBlank(topic)) { + try { + dojo.event.topic.publish(topic, node); + } catch(ex) { + dojo.debug(ex); + } + } + } + } + }, + + select:function (message) { + var node = message.source; + var e = message.event; + if (this.selectedNode === node) { + if (e.ctrlKey || e.shiftKey || e.metaKey) { + this.deselect(); + return; + } + dojo.event.topic.publish(this.eventNames.dblselect, {node:node}); + return; + } + if (this.selectedNode) { + this.deselect(); + } + this.doSelect(node); + + this.publishTopics(this.selectedNotifyTopicsArray, {node: node}); + }, + expand: function(message) { var node = message.source; - dojo.event.topic.publish(this.eventNames.expand, {node: node} ); + this.publishTopics(this.expandedNotifyTopicsArray, {node: node}); }, collapse: function(message) { var node = message.source; - dojo.event.topic.publish(this.eventNames.collapse, {node: node} ); + this.publishTopics(this.collapsedNotifyTopicsArray, {node: node}); }, }); Modified: struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js?view=diff&rev=529800&r1=529799&r2=529800 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js (original) +++ struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js Tue Apr 17 16:03:44 2007 @@ -17151,6 +17151,151 @@ } } }}); -dojo.kwCompoundRequire({common:["struts.widget.Bind","struts.widget.BindDiv","struts.widget.BindAnchor","struts.widget.ComboBox","struts.widget.StrutsTimePicker","struts.widget.StrutsDatePicker","struts.widget.BindEvent"]}); +dojo.provide("dojo.widget.TreeSelector"); +dojo.widget.defineWidget("dojo.widget.TreeSelector",dojo.widget.HtmlWidget,function(){ +this.eventNames={}; +this.listenedTrees=[]; +},{widgetType:"TreeSelector",selectedNode:null,dieWithTree:false,eventNamesDefault:{select:"select",destroy:"destroy",deselect:"deselect",dblselect:"dblselect"},initialize:function(){ +for(name in this.eventNamesDefault){ +if(dojo.lang.isUndefined(this.eventNames[name])){ +this.eventNames[name]=this.widgetId+"/"+this.eventNamesDefault[name]; +} +} +},destroy:function(){ +dojo.event.topic.publish(this.eventNames.destroy,{source:this}); +return dojo.widget.HtmlWidget.prototype.destroy.apply(this,arguments); +},listenTree:function(tree){ +dojo.event.topic.subscribe(tree.eventNames.titleClick,this,"select"); +dojo.event.topic.subscribe(tree.eventNames.iconClick,this,"select"); +dojo.event.topic.subscribe(tree.eventNames.collapse,this,"onCollapse"); +dojo.event.topic.subscribe(tree.eventNames.moveFrom,this,"onMoveFrom"); +dojo.event.topic.subscribe(tree.eventNames.removeNode,this,"onRemoveNode"); +dojo.event.topic.subscribe(tree.eventNames.treeDestroy,this,"onTreeDestroy"); +this.listenedTrees.push(tree); +},unlistenTree:function(tree){ +dojo.event.topic.unsubscribe(tree.eventNames.titleClick,this,"select"); +dojo.event.topic.unsubscribe(tree.eventNames.iconClick,this,"select"); +dojo.event.topic.unsubscribe(tree.eventNames.collapse,this,"onCollapse"); +dojo.event.topic.unsubscribe(tree.eventNames.moveFrom,this,"onMoveFrom"); +dojo.event.topic.unsubscribe(tree.eventNames.removeNode,this,"onRemoveNode"); +dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy,this,"onTreeDestroy"); +for(var i=0;i<this.listenedTrees.length;i++){ +if(this.listenedTrees[i]===tree){ +this.listenedTrees.splice(i,1); +break; +} +} +},onTreeDestroy:function(_e4d){ +this.unlistenTree(_e4d.source); +if(this.dieWithTree){ +this.destroy(); +} +},onCollapse:function(_e4e){ +if(!this.selectedNode){ +return; +} +var node=_e4e.source; +var _e50=this.selectedNode.parent; +while(_e50!==node&&_e50.isTreeNode){ +_e50=_e50.parent; +} +if(_e50.isTreeNode){ +this.deselect(); +} +},select:function(_e51){ +var node=_e51.source; +var e=_e51.event; +if(this.selectedNode===node){ +if(e.ctrlKey||e.shiftKey||e.metaKey){ +this.deselect(); +return; +} +dojo.event.topic.publish(this.eventNames.dblselect,{node:node}); +return; +} +if(this.selectedNode){ +this.deselect(); +} +this.doSelect(node); +dojo.event.topic.publish(this.eventNames.select,{node:node}); +},onMoveFrom:function(_e54){ +if(_e54.child!==this.selectedNode){ +return; +} +if(!dojo.lang.inArray(this.listenedTrees,_e54.newTree)){ +this.deselect(); +} +},onRemoveNode:function(_e55){ +if(_e55.child!==this.selectedNode){ +return; +} +this.deselect(); +},doSelect:function(node){ +node.markSelected(); +this.selectedNode=node; +},deselect:function(){ +var node=this.selectedNode; +this.selectedNode=null; +node.unMarkSelected(); +dojo.event.topic.publish(this.eventNames.deselect,{node:node}); +}}); +dojo.provide("struts.widget.StrutsTreeSelector"); +dojo.widget.defineWidget("struts.widget.StrutsTreeSelector",dojo.widget.TreeSelector,{widgetType:"StrutsTreeSelector",selectedNotifyTopics:"",collapsedNotifyTopics:"",expandedNotifyTopics:"",selectedNotifyTopicsArray:null,collapsedNotifyTopicsArray:null,expandedNotifyTopicsArray:null,eventNamesDefault:{select:"select",destroy:"destroy",deselect:"deselect",dblselect:"dblselect",expand:"expand",collapse:"collapse"},initialize:function(){ +struts.widget.StrutsTreeSelector.superclass.initialize.apply(this); +if(!dojo.string.isBlank(this.selectedNotifyTopics)){ +this.selectedNotifyTopicsArray=this.selectedNotifyTopics.split(","); +} +if(!dojo.string.isBlank(this.selectedNotifyTopics)){ +this.collapsedNotifyTopicsArray=this.collapsedNotifyTopics.split(","); +} +if(!dojo.string.isBlank(this.selectedNotifyTopics)){ +this.expandedNotifyTopicsArray=this.expandedNotifyTopics.split(","); +} +},listenTree:function(tree){ +dojo.event.topic.subscribe(tree.eventNames.collapse,this,"collapse"); +dojo.event.topic.subscribe(tree.eventNames.expand,this,"expand"); +struts.widget.StrutsTreeSelector.superclass.listenTree.apply(this,[tree]); +},unlistenTree:function(tree){ +dojo.event.topic.unsubscribe(tree.eventNames.collapse,this,"collapse"); +dojo.event.topic.unsubscribe(tree.eventNames.expand,this,"expand"); +struts.widget.StrutsTreeSelector.superclass.unlistenTree.apply(this,[tree]); +},publishTopics:function(_e5a,node){ +if(_e5a!=null){ +for(var i=0;i<_e5a.length;i++){ +var _e5d=_e5a[i]; +if(!dojo.string.isBlank(_e5d)){ +try{ +dojo.event.topic.publish(_e5d,node); +} +catch(ex){ +dojo.debug(ex); +} +} +} +} +},select:function(_e5e){ +var node=_e5e.source; +var e=_e5e.event; +if(this.selectedNode===node){ +if(e.ctrlKey||e.shiftKey||e.metaKey){ +this.deselect(); +return; +} +dojo.event.topic.publish(this.eventNames.dblselect,{node:node}); +return; +} +if(this.selectedNode){ +this.deselect(); +} +this.doSelect(node); +this.publishTopics(this.selectedNotifyTopicsArray,{node:node}); +},expand:function(_e61){ +var node=_e61.source; +this.publishTopics(this.expandedNotifyTopicsArray,{node:node}); +},collapse:function(_e63){ +var node=_e63.source; +this.publishTopics(this.collapsedNotifyTopicsArray,{node:node}); +},}); +dojo.kwCompoundRequire({common:["struts.widget.Bind","struts.widget.BindDiv","struts.widget.BindAnchor","struts.widget.ComboBox","struts.widget.StrutsTimePicker","struts.widget.StrutsDatePicker","struts.widget.BindEvent","struts.widget.StrutsTreeSelector"]}); dojo.provide("struts.widget.*"); Modified: struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js.uncompressed.js URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js.uncompressed.js?view=diff&rev=529800&r1=529799&r2=529800 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js.uncompressed.js (original) +++ struts/struts2/trunk/plugins/dojo/src/main/resources/org/apache/struts2/static/dojo/struts_dojo.js.uncompressed.js Tue Apr 17 16:03:44 2007 @@ -27711,6 +27711,276 @@ } }); + +dojo.provide("dojo.widget.TreeSelector"); + + + + +dojo.widget.defineWidget("dojo.widget.TreeSelector", dojo.widget.HtmlWidget, function() { + this.eventNames = {}; + + this.listenedTrees = []; + +}, +{ + widgetType: "TreeSelector", + selectedNode: null, + + dieWithTree: false, + + eventNamesDefault: { + select : "select", + destroy : "destroy", + deselect : "deselect", + dblselect: "dblselect" // select already selected node.. Edit or whatever + }, + + initialize: function() { + + for(name in this.eventNamesDefault) { + if (dojo.lang.isUndefined(this.eventNames[name])) { + this.eventNames[name] = this.widgetId+"/"+this.eventNamesDefault[name]; + } + } + + }, + + + destroy: function() { + dojo.event.topic.publish(this.eventNames.destroy, { source: this } ); + + return dojo.widget.HtmlWidget.prototype.destroy.apply(this, arguments); + }, + + + listenTree: function(tree) { + dojo.event.topic.subscribe(tree.eventNames.titleClick, this, "select"); + dojo.event.topic.subscribe(tree.eventNames.iconClick, this, "select"); + dojo.event.topic.subscribe(tree.eventNames.collapse, this, "onCollapse"); + dojo.event.topic.subscribe(tree.eventNames.moveFrom, this, "onMoveFrom"); + dojo.event.topic.subscribe(tree.eventNames.removeNode, this, "onRemoveNode"); + dojo.event.topic.subscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy"); + + /* remember all my trees to deselect when element is movedFrom them */ + this.listenedTrees.push(tree); + }, + + + unlistenTree: function(tree) { + + dojo.event.topic.unsubscribe(tree.eventNames.titleClick, this, "select"); + dojo.event.topic.unsubscribe(tree.eventNames.iconClick, this, "select"); + dojo.event.topic.unsubscribe(tree.eventNames.collapse, this, "onCollapse"); + dojo.event.topic.unsubscribe(tree.eventNames.moveFrom, this, "onMoveFrom"); + dojo.event.topic.unsubscribe(tree.eventNames.removeNode, this, "onRemoveNode"); + dojo.event.topic.unsubscribe(tree.eventNames.treeDestroy, this, "onTreeDestroy"); + + + for(var i=0; i<this.listenedTrees.length; i++){ + if(this.listenedTrees[i] === tree){ + this.listenedTrees.splice(i, 1); + break; + } + } + }, + + + onTreeDestroy: function(message) { + + this.unlistenTree(message.source); + + if (this.dieWithTree) { + //dojo.debug("Killing myself "+this.widgetId); + this.destroy(); + //dojo.debug("done"); + } + }, + + + // deselect node if parent is collapsed + onCollapse: function(message) { + if (!this.selectedNode) return; + + var node = message.source; + var parent = this.selectedNode.parent; + while (parent !== node && parent.isTreeNode) { + parent = parent.parent; + } + if (parent.isTreeNode) { + this.deselect(); + } + }, + + + + select: function(message) { + var node = message.source; + var e = message.event; + + if (this.selectedNode === node) { + if(e.ctrlKey || e.shiftKey || e.metaKey){ + // If the node is currently selected, and they select it again while holding + // down a meta key, it deselects it + this.deselect(); + return; + } + dojo.event.topic.publish(this.eventNames.dblselect, { node: node }); + return; + } + + if (this.selectedNode) { + this.deselect(); + } + + this.doSelect(node); + + dojo.event.topic.publish(this.eventNames.select, {node: node} ); + }, + + /** + * Deselect node if target tree is out of our concern + */ + onMoveFrom: function(message) { + if (message.child !== this.selectedNode) { + return; + } + + if (!dojo.lang.inArray(this.listenedTrees, message.newTree)) { + this.deselect(); + } + }, + + onRemoveNode: function(message) { + if (message.child !== this.selectedNode) { + return; + } + + this.deselect(); + }, + + doSelect: function(node){ + + node.markSelected(); + + this.selectedNode = node; + }, + + deselect: function(){ + + var node = this.selectedNode; + + this.selectedNode = null; + node.unMarkSelected(); + dojo.event.topic.publish(this.eventNames.deselect, {node: node} ); + + } + +}); + + + + +dojo.provide("struts.widget.StrutsTreeSelector"); + + + +dojo.widget.defineWidget( + "struts.widget.StrutsTreeSelector", + dojo.widget.TreeSelector, { + widgetType : "StrutsTreeSelector", + + selectedNotifyTopics : "", + collapsedNotifyTopics : "", + expandedNotifyTopics : "", + + selectedNotifyTopicsArray : null, + collapsedNotifyTopicsArray : null, + expandedNotifyTopicsArray : null, + + eventNamesDefault: { + select : "select", + destroy : "destroy", + deselect : "deselect", + dblselect: "dblselect", // select already selected node.. Edit or whatever + expand: "expand", + collapse: "collapse" + }, + + initialize: function () { + struts.widget.StrutsTreeSelector.superclass.initialize.apply(this); + + if(!dojo.string.isBlank(this.selectedNotifyTopics)) { + this.selectedNotifyTopicsArray = this.selectedNotifyTopics.split(","); + } + + if(!dojo.string.isBlank(this.selectedNotifyTopics)) { + this.collapsedNotifyTopicsArray = this.collapsedNotifyTopics.split(","); + } + + if(!dojo.string.isBlank(this.selectedNotifyTopics)) { + this.expandedNotifyTopicsArray = this.expandedNotifyTopics.split(","); + } + }, + + listenTree: function(tree) { + dojo.event.topic.subscribe(tree.eventNames.collapse, this, "collapse"); + dojo.event.topic.subscribe(tree.eventNames.expand, this, "expand"); + struts.widget.StrutsTreeSelector.superclass.listenTree.apply(this, [tree]); + }, + + unlistenTree: function(tree) { + dojo.event.topic.unsubscribe(tree.eventNames.collapse, this, "collapse"); + dojo.event.topic.unsubscribe(tree.eventNames.expand, this, "expand"); + struts.widget.StrutsTreeSelector.superclass.unlistenTree.apply(this, [tree]); + }, + + publishTopics : function(topics, node) { + if(topics != null) { + for(var i = 0; i < topics.length; i++) { + var topic = topics[i]; + if(!dojo.string.isBlank(topic)) { + try { + dojo.event.topic.publish(topic, node); + } catch(ex) { + dojo.debug(ex); + } + } + } + } + }, + + select:function (message) { + var node = message.source; + var e = message.event; + if (this.selectedNode === node) { + if (e.ctrlKey || e.shiftKey || e.metaKey) { + this.deselect(); + return; + } + dojo.event.topic.publish(this.eventNames.dblselect, {node:node}); + return; + } + if (this.selectedNode) { + this.deselect(); + } + this.doSelect(node); + + this.publishTopics(this.selectedNotifyTopicsArray, {node: node}); + }, + + expand: function(message) { + var node = message.source; + this.publishTopics(this.expandedNotifyTopicsArray, {node: node}); + }, + + collapse: function(message) { + var node = message.source; + this.publishTopics(this.collapsedNotifyTopicsArray, {node: node}); + }, + +}); + dojo.kwCompoundRequire({ common: ["struts.widget.Bind", "struts.widget.BindDiv", @@ -27718,7 +27988,8 @@ "struts.widget.ComboBox", "struts.widget.StrutsTimePicker", "struts.widget.StrutsDatePicker", - "struts.widget.BindEvent"] + "struts.widget.BindEvent", + "struts.widget.StrutsTreeSelector"] }); dojo.provide("struts.widget.*"); Modified: struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/tree.ftl URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/tree.ftl?view=diff&rev=529800&r1=529799&r2=529800 ============================================================================== --- struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/tree.ftl (original) +++ struts/struts2/trunk/plugins/dojo/src/main/resources/template/ajax/tree.ftl Tue Apr 17 16:03:44 2007 @@ -6,19 +6,19 @@ // dojo.hostenv.writeIncludes(); --> </script> - <#if parameters.treeSelectedTopic?exists || parameters.treeExpandedTopic?exists - || parameters.treeCollapsedTopic?exists> - <#assign eventNames = "" > - <#if parameters.treeSelectedTopic?exists> - <#assign eventNames = "select:" + parameters.treeSelectedTopic?html + ";"> - </#if> - <#if parameters.treeExpandedTopic?exists> - <#assign eventNames = eventNames + "expand:" + parameters.treeExpandedTopic?html + ";"> + <#if parameters.selectedNotifyTopics?exists || parameters.expandedNotifyTopics?exists + || parameters.collapsedNotifyTopics?exists> + <struts:StrutsTreeSelector widgetId="treeSelector_${parameters.id?default("")}" + <#if parameters.selectedNotifyTopics?exists> + selectedNotifyTopics="${parameters.selectedNotifyTopics?html}" </#if> - <#if parameters.treeCollapsedTopic?exists> - <#assign eventNames = eventNames + "collapse:" + parameters.treeCollapsedTopic?html> + <#if parameters.expandedNotifyTopics?exists> + expandedNotifyTopics="${parameters.expandedNotifyTopics?html}" </#if> - <struts:StrutsTreeSelector widgetId="treeSelector_${parameters.id?default("")}" eventNames="${eventNames}"> + <#if parameters.collapsedNotifyTopics?exists> + collapsedNotifyTopics="${parameters.collapsedNotifyTopics?html}" + </#if> + > </struts:StrutsTreeSelector> </#if> <div dojoType="Tree" @@ -73,7 +73,8 @@ <#if parameters.id?exists> id="${parameters.id?html}" </#if> - <#if parameters.treeSelectedTopic?exists> + <#if parameters.selectedNotifyTopics?exists || parameters.expandedNotifyTopics?exists + || parameters.collapsedNotifyTopics?exists> selector="treeSelector_${parameters.id?default("")}" </#if> <#if parameters.treeCollapsedTopic?exists>