summaryrefslogtreecommitdiff
path: root/includes/js/dojox/wire/TreeAdapter.js
diff options
context:
space:
mode:
Diffstat (limited to 'includes/js/dojox/wire/TreeAdapter.js')
-rw-r--r--includes/js/dojox/wire/TreeAdapter.js188
1 files changed, 188 insertions, 0 deletions
diff --git a/includes/js/dojox/wire/TreeAdapter.js b/includes/js/dojox/wire/TreeAdapter.js
new file mode 100644
index 0000000..b9b16bf
--- /dev/null
+++ b/includes/js/dojox/wire/TreeAdapter.js
@@ -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
+ }
+});
+
+}