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