Blame | Last modification | View Log | RSS feed
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 valuesthis._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 valuesif(!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 supportedthrow 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 Wiresif(!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}});}