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 } }); }