12345678 |
- /*
- Copyright (c) 2004-2009, 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._FormSelectWidget"]){dojo._hasResource["dijit.form._FormSelectWidget"]=true;dojo.provide("dijit.form._FormSelectWidget");dojo.require("dijit.form._FormWidget");dojo.require("dojo.data.util.sorter");dojo.declare("dijit.form._FormSelectWidget",dijit.form._FormValueWidget,{multiple:false,options:null,store:null,query:null,queryOptions:null,onFetch:null,sortByLabel:true,loadChildrenOnOpen:false,getOptions:function(_1){var _2=_1,_3=this.options||[],l=_3.length;if(_2===undefined){return _3;}if(dojo.isArray(_2)){return dojo.map(_2,"return this.getOptions(item);",this);}if(dojo.isObject(_1)){if(!dojo.some(this.options,function(o,_4){if(o===_2||(o.value&&o.value===_2.value)){_2=_4;return true;}return false;})){_2=-1;}}if(typeof _2=="string"){for(var i=0;i<l;i++){if(_3[i].value===_2){_2=i;break;}}}if(typeof _2=="number"&&_2>=0&&_2<l){return this.options[_2];}return null;},addOption:function(_5){if(!dojo.isArray(_5)){_5=[_5];}dojo.forEach(_5,function(i){if(i&&dojo.isObject(i)){this.options.push(i);}},this);this._loadChildren();},removeOption:function(_6){if(!dojo.isArray(_6)){_6=[_6];}var _7=this.getOptions(_6);dojo.forEach(_7,function(i){if(i){this.options=dojo.filter(this.options,function(_8,_9){return (_8.value!==i.value);});this._removeOptionItem(i);}},this);this._loadChildren();},updateOption:function(_a){if(!dojo.isArray(_a)){_a=[_a];}dojo.forEach(_a,function(i){var _b=this.getOptions(i),k;if(_b){for(k in i){_b[k]=i[k];}}},this);this._loadChildren();},setStore:function(_c,_d,_e){var _f=this.store;_e=_e||{};if(_f!==_c){dojo.forEach(this._notifyConnections||[],dojo.disconnect);delete this._notifyConnections;if(_c&&_c.getFeatures()["dojo.data.api.Notification"]){this._notifyConnections=[dojo.connect(_c,"onNew",this,"_onNewItem"),dojo.connect(_c,"onDelete",this,"_onDeleteItem"),dojo.connect(_c,"onSet",this,"_onSetItem")];}this.store=_c;}this._onChangeActive=false;if(this.options&&this.options.length){this.removeOption(this.options);}if(_c){var cb=function(_10){if(this.sortByLabel&&!_e.sort&&_10.length){_10.sort(dojo.data.util.sorter.createSortFunction([{attribute:_c.getLabelAttributes(_10[0])[0]}],_c));}if(_e.onFetch){_10=_e.onFetch(_10);}dojo.forEach(_10,function(i){this._addOptionForItem(i);},this);this._loadingStore=false;this.attr("value",(("_pendingValue" in this)?this._pendingValue:_d));delete this._pendingValue;if(!this.loadChildrenOnOpen){this._loadChildren();}else{this._pseudoLoadChildren(_10);}this._fetchedWith=_11;this._lastValueReported=this.multiple?[]:null;this._onChangeActive=true;this.onSetStore();this._handleOnChange(this.value);};var _11=dojo.mixin({onComplete:cb,scope:this},_e);this._loadingStore=true;_c.fetch(_11);}else{delete this._fetchedWith;}return _f;},_setValueAttr:function(_12,_13){if(this._loadingStore){this._pendingValue=_12;return;}var _14=this.getOptions()||[];if(!dojo.isArray(_12)){_12=[_12];}dojo.forEach(_12,function(i,idx){if(!dojo.isObject(i)){i=i+"";}if(typeof i==="string"){_12[idx]=dojo.filter(_14,function(_15){return _15.value===i;})[0]||{value:"",label:""};}},this);_12=dojo.filter(_12,function(i){return i&&i.value;});if(!this.multiple&&(!_12[0]||!_12[0].value)&&_14.length){_12[0]=_14[0];}dojo.forEach(_14,function(i){i.selected=dojo.some(_12,function(v){return v.value===i.value;});});var val=dojo.map(_12,function(i){return i.value;}),_16=dojo.map(_12,function(i){return i.label;});this.value=this.multiple?val:val[0];this._setDisplay(this.multiple?_16:_16[0]);this._updateSelection();this._handleOnChange(this.value,_13);},_getDisplayedValueAttr:function(){var val=this.attr("value");if(!dojo.isArray(val)){val=[val];}var ret=dojo.map(this.getOptions(val),function(v){if(v&&"label" in v){return v.label;}else{if(v){return v.value;}}return null;},this);return this.multiple?ret:ret[0];},_getValueDeprecated:false,getValue:function(){return this._lastValue;},undo:function(){this._setValueAttr(this._lastValueReported,false);},_loadChildren:function(){if(this._loadingStore){return;}dojo.forEach(this._getChildren(),function(_17){_17.destroyRecursive();});dojo.forEach(this.options,this._addOptionItem,this);this._updateSelection();},_updateSelection:function(){this.value=this._getValueFromOpts();var val=this.value;if(!dojo.isArray(val)){val=[val];}if(val&&val[0]){dojo.forEach(this._getChildren(),function(_18){var _19=dojo.some(val,function(v){return _18.option&&(v===_18.option.value);});dojo.toggleClass(_18.domNode,this.baseClass+"SelectedOption",_19);dijit.setWaiState(_18.domNode,"selected",_19);},this);}this._handleOnChange(this.value);},_getValueFromOpts:function(){var _1a=this.getOptions()||[];if(!this.multiple&&_1a.length){var opt=dojo.filter(_1a,function(i){return i.selected;})[0];if(opt&&opt.value){return opt.value;}else{_1a[0].selected=true;return _1a[0].value;}}else{if(this.multiple){return dojo.map(dojo.filter(_1a,function(i){return i.selected;}),function(i){return i.value;})||[];}}return "";},_onNewItem:function(_1b,_1c){if(!_1c||!_1c.parent){this._addOptionForItem(_1b);}},_onDeleteItem:function(_1d){var _1e=this.store;this.removeOption(_1e.getIdentity(_1d));},_onSetItem:function(_1f){this.updateOption(this._getOptionObjForItem(_1f));},_getOptionObjForItem:function(_20){var _21=this.store,_22=_21.getLabel(_20),_23=(_22?_21.getIdentity(_20):null);return {value:_23,label:_22,item:_20};},_addOptionForItem:function(_24){var _25=this.store;if(!_25.isItemLoaded(_24)){_25.loadItem({item:_24,onComplete:function(i){this._addOptionForItem(_24);},scope:this});return;}var _26=this._getOptionObjForItem(_24);this.addOption(_26);},constructor:function(_27){this._oValue=(_27||{}).value||null;},_fillContent:function(){var _28=this.options;if(!_28){_28=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(_29){if(_29.getAttribute("type")==="separator"){return {value:"",label:"",selected:false,disabled:false};}return {value:_29.getAttribute("value"),label:String(_29.innerHTML),selected:_29.getAttribute("selected")||false,disabled:_29.getAttribute("disabled")||false};},this):[];}if(!this.value){this.value=this._getValueFromOpts();}else{if(this.multiple&&typeof this.value=="string"){this.value=this.value.split(",");}}},postCreate:function(){dojo.setSelectable(this.focusNode,false);this.inherited(arguments);this.connect(this,"onChange","_updateSelection");this.connect(this,"startup","_loadChildren");this._setValueAttr(this.value,null);},startup:function(){this.inherited(arguments);var _2a=this.store,_2b={};dojo.forEach(["query","queryOptions","onFetch"],function(i){if(this[i]){_2b[i]=this[i];}delete this[i];},this);if(_2a&&_2a.getFeatures()["dojo.data.api.Identity"]){this.store=null;this.setStore(_2a,this._oValue,_2b);}},destroy:function(){dojo.forEach(this._notifyConnections||[],dojo.disconnect);this.inherited(arguments);},_addOptionItem:function(_2c){},_removeOptionItem:function(_2d){},_setDisplay:function(_2e){},_getChildren:function(){return [];},_getSelectedOptionsAttr:function(){return this.getOptions(this.attr("value"));},_pseudoLoadChildren:function(_2f){},onSetStore:function(){}});}
|