]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojox/wire/TreeAdapter.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojox / wire / TreeAdapter.js
diff --git a/static/dojo-release-1.1.1/dojox/wire/TreeAdapter.js b/static/dojo-release-1.1.1/dojox/wire/TreeAdapter.js
new file mode 100644 (file)
index 0000000..b9b16bf
--- /dev/null
@@ -0,0 +1,188 @@
+if(!dojo._hasResource["dojox.wire.TreeAdapter"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.wire.TreeAdapter"] = true;
+dojo.provide("dojox.wire.TreeAdapter");
+
+dojo.require("dojox.wire.CompositeWire");
+
+dojo.declare("dojox.wire.TreeAdapter", dojox.wire.CompositeWire, {
+       //      summary:
+       //              A composite Wire for tree nodes
+       //      description:
+       //              This class has multiple child Wires for tree nodes, their title and
+       //              child nodes.
+       //              The root object for this class must be an array.
+       //              'node' Wires in 'nodes' property is used to identify an object
+       //              representing a node.
+       //              'title' Wires in 'nodes' property is used to get the title string
+       //              of a node.
+       //              'children' Wires in 'nodes' property is used to iterate over child
+       //              node objects.
+       //              The node values are returned in an array as follows:
+       //                      [
+       //                              {title: title1,
+       //                              children: [
+       //                                      {title: title2,
+       //                                       child: ...},
+       //                                      {title: title3,
+       //                                       child: ...},
+       //                                      ...
+       //                              ]},
+       //                              ...
+       //                      ]
+       //              This class only supports getValue(), but not setValue().
+       
+       _wireClass: "dojox.wire.TreeAdapter",
+       
+       constructor: function(/*Object*/args){
+               //      summary:
+               //              Initialize properties
+               //      description:
+               //              If object properties ('node', 'title' and 'children') of array
+               //              elements specified in 'nodes' property are not Wires, Wires are
+               //              created from them as arguments, with 'parent' property set to
+               //              this Wire instance.
+               //      args:
+               //              Arguments to initialize properties
+               //              nodes:
+               //                      An array containing objects for child Wires for node values
+               this._initializeChildren(this.nodes);
+       },
+       _getValue: function(/*Array*/object){
+               //      summary:
+               //              Return an array of tree node values
+               //      description:
+               //              This method iterates over an array specified to 'object'
+               //              argument and calls getValue() method of 'node' Wires with each
+               //              element of the array to get object(s) that represetns nodes.
+               //              (If 'node' Wires are omitted, the array element is used for
+               //              further processing.)
+               //              Then, getValue() method of 'title' Wires are called to get
+               //              title strings for nodes.
+               //              (If 'title' Wires are omitted, the objects representing nodes
+               //              are used as title strings.)
+               //              And if an array of objects with 'node' and 'title' Wires is
+               //              specified to 'children', it is used to gather child nodes and
+               //              their title strings in the same way recursively.
+               //              Finally, an array of the top-level node objects are retuned.
+               //      object:
+               //              A root array
+               //      returns:
+               //              An array of tree node values
+               if(!object || !this.nodes){
+                       return object; //Array
+               }
+
+               var array = object;
+               if(!dojo.isArray(array)){
+                       array = [array];
+               }
+
+               var nodes = [];
+               for(var i in array){
+                       for(var i2 in this.nodes){
+                               nodes = nodes.concat(this._getNodes(array[i], this.nodes[i2]));
+                       }
+               }
+               return nodes; //Array
+       },
+
+       _setValue: function(/*Array*/object, /*Array*/value){
+               //      summary:
+               //              Not supported
+               throw new Error("Unsupported API: " + this._wireClass + "._setValue");
+       },
+
+       _initializeChildren: function(/*Array*/children){
+               //      summary:
+               //              Initialize child Wires
+               //      description:
+               //              If 'node' or 'title' properties of array elements specified in
+               //              'children' argument are not Wires, Wires are created from them
+               //              as arguments, with 'parent' property set to this Wire instance.
+               //              If an array element has 'children' property, this method is
+               //              called recursively with it.
+               //      children:
+               //              An array of objects containing child Wires
+               if(!children){
+                       return; //undefined
+               }
+
+               for(var i in children){
+                       var child = children[i];
+                       if(child.node){
+                               child.node.parent = this;
+                               if(!dojox.wire.isWire(child.node)){
+                                       child.node = dojox.wire.create(child.node);
+                               }
+                       }
+                       if(child.title){
+                               child.title.parent = this;
+                               if(!dojox.wire.isWire(child.title)){
+                                       child.title = dojox.wire.create(child.title);
+                               }
+                       }
+                       if(child.children){
+                               this._initializeChildren(child.children);
+                       }
+               }
+       },
+
+       _getNodes: function(/*Object*/object, /*Object*/child){
+               //      summary:
+               //              Return an array of tree node values
+               //      description:
+               //              This method calls getValue() method of 'node' Wires with
+               //              'object' argument to get object(s) that represents nodes.
+               //              (If 'node' Wires are omitted, 'object' is used for further
+               //              processing.)
+               //              Then, getValue() method of 'title' Wires are called to get
+               //              title strings for nodes.
+               //              (If 'title' Wires are omitted, the objects representing nodes
+               //              are used as title strings.)
+               //              And if an array of objects with 'node' and 'title' Wires is
+               //              specified to 'children', it is used to gather child nodes and
+               //              their title strings in the same way recursively.
+               //              Finally, an array of node objects are returned.
+               //      object:
+               //              An object
+               //      child:
+               //              An object with child Wires
+               //      returns:
+               var array = null;
+               if(child.node){
+                       array = child.node.getValue(object);
+                       if(!array){
+                               return [];
+                       }
+                       if(!dojo.isArray(array)){
+                               array = [array];
+                       }
+               }else{
+                       array = [object];
+               }
+
+               var nodes = [];
+               for(var i in array){
+                       object = array[i];
+                       var node = {};
+                       if(child.title){
+                               node.title = child.title.getValue(object);
+                       }else{
+                               node.title = object;
+                       }
+                       if(child.children){
+                               var children = [];
+                               for(var i2 in child.children){
+                                       children = children.concat(this._getNodes(object, child.children[i2]));
+                               }
+                               if(children.length > 0){
+                                       node.children = children;
+                               }
+                       }
+                       nodes.push(node);
+               }
+               return nodes; //Array
+       }
+});
+
+}