From 073a0cb3fc5c35c8238fedcbe0017b82d49af898 Mon Sep 17 00:00:00 2001 From: miker Date: Fri, 2 Jan 2009 21:34:45 +0000 Subject: [PATCH] (untested) generic filtering, tree-indenting combobox git-svn-id: svn://svn.open-ils.org/ILS/trunk@11735 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../js/dojo/openils/widget/FilteringTreeSelect.js | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Open-ILS/web/js/dojo/openils/widget/FilteringTreeSelect.js diff --git a/Open-ILS/web/js/dojo/openils/widget/FilteringTreeSelect.js b/Open-ILS/web/js/dojo/openils/widget/FilteringTreeSelect.js new file mode 100644 index 0000000000..2e474ebec9 --- /dev/null +++ b/Open-ILS/web/js/dojo/openils/widget/FilteringTreeSelect.js @@ -0,0 +1,67 @@ +/* EXAMPLES: + +
+
+ +The tree attribute is expected to be a tree-shaped pile of OpenSRF objects. + +*/ + +if(!dojo._hasResource["openils.widget.FilteringTreeSelect"]){ + dojo.provide("openils.widget.FilteringTreeSelect"); + dojo.require("dijit.form.FilteringSelect"); + dojo.require('dojo.data.ItemFileReadStore'); + dojo.require('openils.Util'); + dojo.require("dojox.jsonPath"); + + dojo.declare( + "openils.widget.FilteringTreeSelect", [dijit.form.ComboBox], + { + + defaultPad : 6, + childField : 'children', + parentField : 'parent', + nameField : 'name', + valueField : '', + tree : "", + options : [], + values : [], + + startup : function () { + this._tree = dojox.jsonPath.query(window, '$.' + this.tree, {evalType:"RESULT"}); + this._datalist = []; + if (!this.valueField) this.valueField = this._tree.Identifier; + + this._add_items( this._tree, 0 ); + + var construct = {data : {identifier : this.valueField, items: this.datalist}}; + this.store = new dojo.data.ItemFileReadStore(construct); + + this.inherited(arguments); + }, + + _add_items : function ( node, depth ) { + var lpad = this.defaultPad * depth++; + + var data = node.toStoreData(); + data._label = '
' + node[this.nameField]() + '
'; + + this._datalist.push( data ); + + var kids = node[this.childField](); + for (var j in kids) { + this._add_items( kids[j], depth ); + } + + return null; + }, + + _getMenuLabelFromItem : function(item) { + return { + html: true, + label: item._label + }; + } + } + ); +} -- 2.11.0