3 <div dojoType="openils.widget.FilteringTreeSelect" tree="orgTree" parentField="parent_ou" searchAttr="shortname"/>
4 <div dojoType="openils.widget.FilteringTreeSelect" tree="grpTree"/>
6 The tree attribute is expected to be a tree-shaped pile of OpenSRF objects.
10 if(!dojo._hasResource["openils.widget.FilteringTreeSelect"]){
11 dojo.provide("openils.widget.FilteringTreeSelect");
12 dojo.require("dijit.form.FilteringSelect");
13 dojo.require('dojo.data.ItemFileReadStore');
14 dojo.require('openils.Util');
15 dojo.require("dojox.jsonPath");
18 "openils.widget.FilteringTreeSelect", [dijit.form.ComboBox],
22 childField : 'children',
23 parentField : 'parent',
29 startup : function () {
30 this.labelAttr = '_label'; // force it
31 this.labelType = 'html'; // force it
33 this._tree = (typeof this.tree == 'string') ?
34 dojox.jsonPath.query(window, '$.' + this.tree, {evalType:"RESULT"}) : this.tree;
35 if (!dojo.isArray(this._tree)) this._tree = [ this._tree ];
38 if (!this.valueField) this.valueField = this._tree[0].Identifier;
39 if (!this.searchAttr) this.searchAttr = this.valueField;
42 this._tree.forEach( function (node) { self._add_items( node, 0 ); } );
44 this.store = new dojo.data.ItemFileReadStore({
46 identifier : this.valueField,
47 label : this.labelAttr,
48 items : this._datalist
52 this.inherited(arguments);
55 _add_items : function ( node, depth ) {
56 var lpad = this.defaultPad * depth++;
58 var data = node.toStoreItem();
59 data._label = '<div style="padding-left:'+lpad+'px;">' + node[this.searchAttr]() + '</div>';
61 this._datalist.push( data );
63 var kids = node[this.childField]();
65 this._add_items( kids[j], depth );