diff options
Diffstat (limited to 'lib/dijit/form/FilteringSelect.js')
-rw-r--r-- | lib/dijit/form/FilteringSelect.js | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/dijit/form/FilteringSelect.js b/lib/dijit/form/FilteringSelect.js new file mode 100644 index 000000000..08703226c --- /dev/null +++ b/lib/dijit/form/FilteringSelect.js @@ -0,0 +1,92 @@ +/* + Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Available via Academic Free License >= 2.1 OR the modified BSD license. + see: http://dojotoolkit.org/license for details +*/ + + +if(!dojo._hasResource["dijit.form.FilteringSelect"]){ +dojo._hasResource["dijit.form.FilteringSelect"]=true; +dojo.provide("dijit.form.FilteringSelect"); +dojo.require("dijit.form.ComboBox"); +dojo.declare("dijit.form.FilteringSelect",[dijit.form.MappedTextBox,dijit.form.ComboBoxMixin],{_isvalid:true,required:true,_lastDisplayedValue:"",isValid:function(){ +return this._isvalid||(!this.required&&this.get("displayedValue")==""); +},_refreshState:function(){ +if(!this.searchTimer){ +this.inherited(arguments); +} +},_callbackSetLabel:function(_1,_2,_3){ +if((_2&&_2.query[this.searchAttr]!=this._lastQuery)||(!_2&&_1.length&&this.store.getIdentity(_1[0])!=this._lastQuery)){ +return; +} +if(!_1.length){ +this.valueNode.value=""; +dijit.form.TextBox.superclass._setValueAttr.call(this,"",_3||(_3===undefined&&!this._focused)); +this._isvalid=false; +this.validate(this._focused); +this.item=null; +}else{ +this.set("item",_1[0],_3); +} +},_openResultList:function(_4,_5){ +if(_5.query[this.searchAttr]!=this._lastQuery){ +return; +} +if(this.item===undefined){ +this._isvalid=_4.length!=0||this._maxOptions!=0; +this.validate(true); +} +dijit.form.ComboBoxMixin.prototype._openResultList.apply(this,arguments); +},_getValueAttr:function(){ +return this.valueNode.value; +},_getValueField:function(){ +return "value"; +},_setValueAttr:function(_6,_7){ +if(!this._onChangeActive){ +_7=null; +} +this._lastQuery=_6; +if(_6===null||_6===""){ +this._setDisplayedValueAttr("",_7); +return; +} +var _8=this; +this.store.fetchItemByIdentity({identity:_6,onItem:function(_9){ +_8._callbackSetLabel(_9?[_9]:[],undefined,_7); +}}); +},_setItemAttr:function(_a,_b,_c){ +this._isvalid=true; +this.inherited(arguments); +this.valueNode.value=this.value; +this._lastDisplayedValue=this.textbox.value; +},_getDisplayQueryString:function(_d){ +return _d.replace(/([\\\*\?])/g,"\\$1"); +},_setDisplayedValueAttr:function(_e,_f){ +if(!this._created){ +_f=false; +} +if(this.store){ +this._hideResultList(); +var _10=dojo.clone(this.query); +this._lastQuery=_10[this.searchAttr]=this._getDisplayQueryString(_e); +this.textbox.value=_e; +this._lastDisplayedValue=_e; +var _11=this; +var _12={query:_10,queryOptions:{ignoreCase:this.ignoreCase,deep:true},onComplete:function(_13,_14){ +_11._fetchHandle=null; +dojo.hitch(_11,"_callbackSetLabel")(_13,_14,_f); +},onError:function(_15){ +_11._fetchHandle=null; +console.error("dijit.form.FilteringSelect: "+_15); +dojo.hitch(_11,"_callbackSetLabel")([],undefined,false); +}}; +dojo.mixin(_12,this.fetchProperties); +this._fetchHandle=this.store.fetch(_12); +} +},postMixInProperties:function(){ +this.inherited(arguments); +this._isvalid=!this.required; +},undo:function(){ +this.set("displayedValue",this._lastDisplayedValue); +}}); +} |