]> git.wh0rd.org - tt-rss.git/blob - lib/dijit/form/_FormSelectWidget.js
add dijit/dojo stuff; initial ui mockup
[tt-rss.git] / lib / dijit / form / _FormSelectWidget.js
1 /*
2 Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved.
3 Available via Academic Free License >= 2.1 OR the modified BSD license.
4 see: http://dojotoolkit.org/license for details
5 */
6
7
8 if(!dojo._hasResource["dijit.form._FormSelectWidget"]){
9 dojo._hasResource["dijit.form._FormSelectWidget"]=true;
10 dojo.provide("dijit.form._FormSelectWidget");
11 dojo.require("dijit.form._FormWidget");
12 dojo.require("dojo.data.util.sorter");
13 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){
14 var _2=_1,_3=this.options||[],l=_3.length;
15 if(_2===undefined){
16 return _3;
17 }
18 if(dojo.isArray(_2)){
19 return dojo.map(_2,"return this.getOptions(item);",this);
20 }
21 if(dojo.isObject(_1)){
22 if(!dojo.some(this.options,function(o,_4){
23 if(o===_2||(o.value&&o.value===_2.value)){
24 _2=_4;
25 return true;
26 }
27 return false;
28 })){
29 _2=-1;
30 }
31 }
32 if(typeof _2=="string"){
33 for(var i=0;i<l;i++){
34 if(_3[i].value===_2){
35 _2=i;
36 break;
37 }
38 }
39 }
40 if(typeof _2=="number"&&_2>=0&&_2<l){
41 return this.options[_2];
42 }
43 return null;
44 },addOption:function(_5){
45 if(!dojo.isArray(_5)){
46 _5=[_5];
47 }
48 dojo.forEach(_5,function(i){
49 if(i&&dojo.isObject(i)){
50 this.options.push(i);
51 }
52 },this);
53 this._loadChildren();
54 },removeOption:function(_6){
55 if(!dojo.isArray(_6)){
56 _6=[_6];
57 }
58 var _7=this.getOptions(_6);
59 dojo.forEach(_7,function(i){
60 if(i){
61 this.options=dojo.filter(this.options,function(_8,_9){
62 return (_8.value!==i.value);
63 });
64 this._removeOptionItem(i);
65 }
66 },this);
67 this._loadChildren();
68 },updateOption:function(_a){
69 if(!dojo.isArray(_a)){
70 _a=[_a];
71 }
72 dojo.forEach(_a,function(i){
73 var _b=this.getOptions(i),k;
74 if(_b){
75 for(k in i){
76 _b[k]=i[k];
77 }
78 }
79 },this);
80 this._loadChildren();
81 },setStore:function(_c,_d,_e){
82 var _f=this.store;
83 _e=_e||{};
84 if(_f!==_c){
85 dojo.forEach(this._notifyConnections||[],dojo.disconnect);
86 delete this._notifyConnections;
87 if(_c&&_c.getFeatures()["dojo.data.api.Notification"]){
88 this._notifyConnections=[dojo.connect(_c,"onNew",this,"_onNewItem"),dojo.connect(_c,"onDelete",this,"_onDeleteItem"),dojo.connect(_c,"onSet",this,"_onSetItem")];
89 }
90 this.store=_c;
91 }
92 this._onChangeActive=false;
93 if(this.options&&this.options.length){
94 this.removeOption(this.options);
95 }
96 if(_c){
97 var cb=function(_10){
98 if(this.sortByLabel&&!_e.sort&&_10.length){
99 _10.sort(dojo.data.util.sorter.createSortFunction([{attribute:_c.getLabelAttributes(_10[0])[0]}],_c));
100 }
101 if(_e.onFetch){
102 _10=_e.onFetch(_10);
103 }
104 dojo.forEach(_10,function(i){
105 this._addOptionForItem(i);
106 },this);
107 this._loadingStore=false;
108 this.set("value",(("_pendingValue" in this)?this._pendingValue:_d));
109 delete this._pendingValue;
110 if(!this.loadChildrenOnOpen){
111 this._loadChildren();
112 }else{
113 this._pseudoLoadChildren(_10);
114 }
115 this._fetchedWith=_11;
116 this._lastValueReported=this.multiple?[]:null;
117 this._onChangeActive=true;
118 this.onSetStore();
119 this._handleOnChange(this.value);
120 };
121 var _11=dojo.mixin({onComplete:cb,scope:this},_e);
122 this._loadingStore=true;
123 _c.fetch(_11);
124 }else{
125 delete this._fetchedWith;
126 }
127 return _f;
128 },_setValueAttr:function(_12,_13){
129 if(this._loadingStore){
130 this._pendingValue=_12;
131 return;
132 }
133 var _14=this.getOptions()||[];
134 if(!dojo.isArray(_12)){
135 _12=[_12];
136 }
137 dojo.forEach(_12,function(i,idx){
138 if(!dojo.isObject(i)){
139 i=i+"";
140 }
141 if(typeof i==="string"){
142 _12[idx]=dojo.filter(_14,function(_15){
143 return _15.value===i;
144 })[0]||{value:"",label:""};
145 }
146 },this);
147 _12=dojo.filter(_12,function(i){
148 return i&&i.value;
149 });
150 if(!this.multiple&&(!_12[0]||!_12[0].value)&&_14.length){
151 _12[0]=_14[0];
152 }
153 dojo.forEach(_14,function(i){
154 i.selected=dojo.some(_12,function(v){
155 return v.value===i.value;
156 });
157 });
158 var val=dojo.map(_12,function(i){
159 return i.value;
160 }),_16=dojo.map(_12,function(i){
161 return i.label;
162 });
163 this.value=this.multiple?val:val[0];
164 this._setDisplay(this.multiple?_16:_16[0]);
165 this._updateSelection();
166 this._handleOnChange(this.value,_13);
167 },_getDisplayedValueAttr:function(){
168 var val=this.get("value");
169 if(!dojo.isArray(val)){
170 val=[val];
171 }
172 var ret=dojo.map(this.getOptions(val),function(v){
173 if(v&&"label" in v){
174 return v.label;
175 }else{
176 if(v){
177 return v.value;
178 }
179 }
180 return null;
181 },this);
182 return this.multiple?ret:ret[0];
183 },_getValueDeprecated:false,getValue:function(){
184 return this._lastValue;
185 },undo:function(){
186 this._setValueAttr(this._lastValueReported,false);
187 },_loadChildren:function(){
188 if(this._loadingStore){
189 return;
190 }
191 dojo.forEach(this._getChildren(),function(_17){
192 _17.destroyRecursive();
193 });
194 dojo.forEach(this.options,this._addOptionItem,this);
195 this._updateSelection();
196 },_updateSelection:function(){
197 this.value=this._getValueFromOpts();
198 var val=this.value;
199 if(!dojo.isArray(val)){
200 val=[val];
201 }
202 if(val&&val[0]){
203 dojo.forEach(this._getChildren(),function(_18){
204 var _19=dojo.some(val,function(v){
205 return _18.option&&(v===_18.option.value);
206 });
207 dojo.toggleClass(_18.domNode,this.baseClass+"SelectedOption",_19);
208 dijit.setWaiState(_18.domNode,"selected",_19);
209 },this);
210 }
211 this._handleOnChange(this.value);
212 },_getValueFromOpts:function(){
213 var _1a=this.getOptions()||[];
214 if(!this.multiple&&_1a.length){
215 var opt=dojo.filter(_1a,function(i){
216 return i.selected;
217 })[0];
218 if(opt&&opt.value){
219 return opt.value;
220 }else{
221 _1a[0].selected=true;
222 return _1a[0].value;
223 }
224 }else{
225 if(this.multiple){
226 return dojo.map(dojo.filter(_1a,function(i){
227 return i.selected;
228 }),function(i){
229 return i.value;
230 })||[];
231 }
232 }
233 return "";
234 },_onNewItem:function(_1b,_1c){
235 if(!_1c||!_1c.parent){
236 this._addOptionForItem(_1b);
237 }
238 },_onDeleteItem:function(_1d){
239 var _1e=this.store;
240 this.removeOption(_1e.getIdentity(_1d));
241 },_onSetItem:function(_1f){
242 this.updateOption(this._getOptionObjForItem(_1f));
243 },_getOptionObjForItem:function(_20){
244 var _21=this.store,_22=_21.getLabel(_20),_23=(_22?_21.getIdentity(_20):null);
245 return {value:_23,label:_22,item:_20};
246 },_addOptionForItem:function(_24){
247 var _25=this.store;
248 if(!_25.isItemLoaded(_24)){
249 _25.loadItem({item:_24,onComplete:function(i){
250 this._addOptionForItem(_24);
251 },scope:this});
252 return;
253 }
254 var _26=this._getOptionObjForItem(_24);
255 this.addOption(_26);
256 },constructor:function(_27){
257 this._oValue=(_27||{}).value||null;
258 },_fillContent:function(){
259 var _28=this.options;
260 if(!_28){
261 _28=this.options=this.srcNodeRef?dojo.query(">",this.srcNodeRef).map(function(_29){
262 if(_29.getAttribute("type")==="separator"){
263 return {value:"",label:"",selected:false,disabled:false};
264 }
265 return {value:_29.getAttribute("value"),label:String(_29.innerHTML),selected:_29.getAttribute("selected")||false,disabled:_29.getAttribute("disabled")||false};
266 },this):[];
267 }
268 if(!this.value){
269 this.value=this._getValueFromOpts();
270 }else{
271 if(this.multiple&&typeof this.value=="string"){
272 this.value=this.value.split(",");
273 }
274 }
275 },postCreate:function(){
276 dojo.setSelectable(this.focusNode,false);
277 this.inherited(arguments);
278 this.connect(this,"onChange","_updateSelection");
279 this.connect(this,"startup","_loadChildren");
280 this._setValueAttr(this.value,null);
281 },startup:function(){
282 this.inherited(arguments);
283 var _2a=this.store,_2b={};
284 dojo.forEach(["query","queryOptions","onFetch"],function(i){
285 if(this[i]){
286 _2b[i]=this[i];
287 }
288 delete this[i];
289 },this);
290 if(_2a&&_2a.getFeatures()["dojo.data.api.Identity"]){
291 this.store=null;
292 this.setStore(_2a,this._oValue,_2b);
293 }
294 },destroy:function(){
295 dojo.forEach(this._notifyConnections||[],dojo.disconnect);
296 this.inherited(arguments);
297 },_addOptionItem:function(_2c){
298 },_removeOptionItem:function(_2d){
299 },_setDisplay:function(_2e){
300 },_getChildren:function(){
301 return [];
302 },_getSelectedOptionsAttr:function(){
303 return this.getOptions(this.get("value"));
304 },_pseudoLoadChildren:function(_2f){
305 },onSetStore:function(){
306 }});
307 }