Project

General

Profile

Statistics
| Revision:

root / trunk / web / dojo / dijit / form / ComboBox.js @ 12

History | View | Annotate | Download (19 KB)

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.ComboBox"]){
9
dojo._hasResource["dijit.form.ComboBox"]=true;
10
dojo.provide("dijit.form.ComboBox");
11
dojo.require("dojo.window");
12
dojo.require("dojo.regexp");
13
dojo.require("dojo.data.util.simpleFetch");
14
dojo.require("dojo.data.util.filter");
15
dojo.require("dijit._CssStateMixin");
16
dojo.require("dijit.form._FormWidget");
17
dojo.require("dijit.form.ValidationTextBox");
18
dojo.requireLocalization("dijit.form","ComboBox",null,"ROOT,ar,ca,cs,da,de,el,es,fi,fr,he,hu,it,ja,ko,nb,nl,pl,pt,pt-pt,ro,ru,sk,sl,sv,th,tr,zh,zh-tw");
19
dojo.declare("dijit.form.ComboBoxMixin",null,{item:null,pageSize:Infinity,store:null,fetchProperties:{},query:{},autoComplete:true,highlightMatch:"first",searchDelay:100,searchAttr:"name",labelAttr:"",labelType:"text",queryExpr:"${0}*",ignoreCase:true,hasDownArrow:true,templateString:dojo.cache("dijit.form","templates/ComboBox.html","<div class=\"dijit dijitReset dijitInlineTable dijitLeft\"\n\tid=\"widget_${id}\"\n\tdojoAttachPoint=\"comboNode\" waiRole=\"combobox\"\n\t><div class='dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton dijitArrowButtonContainer'\n\t\tdojoAttachPoint=\"downArrowNode\" waiRole=\"presentation\"\n\t\tdojoAttachEvent=\"onmousedown:_onArrowMouseDown\"\n\t\t><input class=\"dijitReset dijitInputField dijitArrowButtonInner\" value=\"&#9660; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t\t\t${_buttonInputDisabled}\n\t/></div\n\t><div class='dijitReset dijitValidationContainer'\n\t\t><input class=\"dijitReset dijitInputField dijitValidationIcon dijitValidationInner\" value=\"&Chi; \" type=\"text\" tabIndex=\"-1\" readOnly waiRole=\"presentation\"\n\t/></div\n\t><div class=\"dijitReset dijitInputField dijitInputContainer\"\n\t\t><input class='dijitReset dijitInputInner' ${!nameAttrSetting} type=\"text\" autocomplete=\"off\"\n\t\t\tdojoAttachEvent=\"onkeypress:_onKeyPress,compositionend\"\n\t\t\tdojoAttachPoint=\"textbox,focusNode\" waiRole=\"textbox\" waiState=\"haspopup-true,autocomplete-list\"\n\t/></div\n></div>\n"),baseClass:"dijitTextBox dijitComboBox",cssStateNodes:{"downArrowNode":"dijitDownArrowButton"},_getCaretPos:function(_1){
20
var _2=0;
21
if(typeof (_1.selectionStart)=="number"){
22
_2=_1.selectionStart;
23
}else{
24
if(dojo.isIE){
25
var tr=dojo.doc.selection.createRange().duplicate();
26
var _3=_1.createTextRange();
27
tr.move("character",0);
28
_3.move("character",0);
29
try{
30
_3.setEndPoint("EndToEnd",tr);
31
_2=String(_3.text).replace(/\r/g,"").length;
32
}
33
catch(e){
34
}
35
}
36
}
37
return _2;
38
},_setCaretPos:function(_4,_5){
39
_5=parseInt(_5);
40
dijit.selectInputText(_4,_5,_5);
41
},_setDisabledAttr:function(_6){
42
this.inherited(arguments);
43
dijit.setWaiState(this.comboNode,"disabled",_6);
44
},_abortQuery:function(){
45
if(this.searchTimer){
46
clearTimeout(this.searchTimer);
47
this.searchTimer=null;
48
}
49
if(this._fetchHandle){
50
if(this._fetchHandle.abort){
51
this._fetchHandle.abort();
52
}
53
this._fetchHandle=null;
54
}
55
},_onInput:function(_7){
56
if(!this.searchTimer&&(_7.type=="paste"||_7.type=="input")&&this._lastInput!=this.textbox.value){
57
this.searchTimer=setTimeout(dojo.hitch(this,function(){
58
this._onKeyPress({charOrCode:229});
59
}),100);
60
}
61
this.inherited(arguments);
62
},_onKeyPress:function(_8){
63
var _9=_8.charOrCode;
64
if(_8.altKey||((_8.ctrlKey||_8.metaKey)&&(_9!="x"&&_9!="v"))||_9==dojo.keys.SHIFT){
65
return;
66
}
67
var _a=false;
68
var _b="_startSearchFromInput";
69
var pw=this._popupWidget;
70
var dk=dojo.keys;
71
var _c=null;
72
this._prev_key_backspace=false;
73
this._abortQuery();
74
if(this._isShowingNow){
75
pw.handleKey(_9);
76
_c=pw.getHighlightedOption();
77
}
78
switch(_9){
79
case dk.PAGE_DOWN:
80
case dk.DOWN_ARROW:
81
case dk.PAGE_UP:
82
case dk.UP_ARROW:
83
if(!this._isShowingNow){
84
_a=true;
85
_b="_startSearchAll";
86
}else{
87
this._announceOption(_c);
88
}
89
dojo.stopEvent(_8);
90
break;
91
case dk.ENTER:
92
if(_c){
93
if(_c==pw.nextButton){
94
this._nextSearch(1);
95
dojo.stopEvent(_8);
96
break;
97
}else{
98
if(_c==pw.previousButton){
99
this._nextSearch(-1);
100
dojo.stopEvent(_8);
101
break;
102
}
103
}
104
}else{
105
this._setBlurValue();
106
this._setCaretPos(this.focusNode,this.focusNode.value.length);
107
}
108
_8.preventDefault();
109
case dk.TAB:
110
var _d=this.get("displayedValue");
111
if(pw&&(_d==pw._messages["previousMessage"]||_d==pw._messages["nextMessage"])){
112
break;
113
}
114
if(_c){
115
this._selectOption();
116
}
117
if(this._isShowingNow){
118
this._lastQuery=null;
119
this._hideResultList();
120
}
121
break;
122
case " ":
123
if(_c){
124
dojo.stopEvent(_8);
125
this._selectOption();
126
this._hideResultList();
127
}else{
128
_a=true;
129
}
130
break;
131
case dk.ESCAPE:
132
if(this._isShowingNow){
133
dojo.stopEvent(_8);
134
this._hideResultList();
135
}
136
break;
137
case dk.DELETE:
138
case dk.BACKSPACE:
139
this._prev_key_backspace=true;
140
_a=true;
141
break;
142
default:
143
_a=typeof _9=="string"||_9==229;
144
}
145
if(_a){
146
this.item=undefined;
147
this.searchTimer=setTimeout(dojo.hitch(this,_b),1);
148
}
149
},_autoCompleteText:function(_e){
150
var fn=this.focusNode;
151
dijit.selectInputText(fn,fn.value.length);
152
var _f=this.ignoreCase?"toLowerCase":"substr";
153
if(_e[_f](0).indexOf(this.focusNode.value[_f](0))==0){
154
var _10=this._getCaretPos(fn);
155
if((_10+1)>fn.value.length){
156
fn.value=_e;
157
dijit.selectInputText(fn,_10);
158
}
159
}else{
160
fn.value=_e;
161
dijit.selectInputText(fn);
162
}
163
},_openResultList:function(_11,_12){
164
this._fetchHandle=null;
165
if(this.disabled||this.readOnly||(_12.query[this.searchAttr]!=this._lastQuery)){
166
return;
167
}
168
this._popupWidget.clearResultList();
169
if(!_11.length&&!this._maxOptions){
170
this._hideResultList();
171
return;
172
}
173
_12._maxOptions=this._maxOptions;
174
var _13=this._popupWidget.createOptions(_11,_12,dojo.hitch(this,"_getMenuLabelFromItem"));
175
this._showResultList();
176
if(_12.direction){
177
if(1==_12.direction){
178
this._popupWidget.highlightFirstOption();
179
}else{
180
if(-1==_12.direction){
181
this._popupWidget.highlightLastOption();
182
}
183
}
184
this._announceOption(this._popupWidget.getHighlightedOption());
185
}else{
186
if(this.autoComplete&&!this._prev_key_backspace&&!/^[*]+$/.test(_12.query[this.searchAttr])){
187
this._announceOption(_13[1]);
188
}
189
}
190
},_showResultList:function(){
191
this._hideResultList();
192
this.displayMessage("");
193
dojo.style(this._popupWidget.domNode,{width:"",height:""});
194
var _14=this.open();
195
var _15=dojo.marginBox(this._popupWidget.domNode);
196
this._popupWidget.domNode.style.overflow=((_14.h==_15.h)&&(_14.w==_15.w))?"hidden":"auto";
197
var _16=_14.w;
198
if(_14.h<this._popupWidget.domNode.scrollHeight){
199
_16+=16;
200
}
201
dojo.marginBox(this._popupWidget.domNode,{h:_14.h,w:Math.max(_16,this.domNode.offsetWidth)});
202
if(_16<this.domNode.offsetWidth){
203
this._popupWidget.domNode.parentNode.style.left=dojo.position(this.domNode,true).x+"px";
204
}
205
dijit.setWaiState(this.comboNode,"expanded","true");
206
},_hideResultList:function(){
207
this._abortQuery();
208
if(this._isShowingNow){
209
dijit.popup.close(this._popupWidget);
210
this._isShowingNow=false;
211
dijit.setWaiState(this.comboNode,"expanded","false");
212
dijit.removeWaiState(this.focusNode,"activedescendant");
213
}
214
},_setBlurValue:function(){
215
var _17=this.get("displayedValue");
216
var pw=this._popupWidget;
217
if(pw&&(_17==pw._messages["previousMessage"]||_17==pw._messages["nextMessage"])){
218
this._setValueAttr(this._lastValueReported,true);
219
}else{
220
if(typeof this.item=="undefined"){
221
this.item=null;
222
this.set("displayedValue",_17);
223
}else{
224
if(this.value!=this._lastValueReported){
225
dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);
226
}
227
this._refreshState();
228
}
229
}
230
},_onBlur:function(){
231
this._hideResultList();
232
this.inherited(arguments);
233
},_setItemAttr:function(_18,_19,_1a){
234
if(!_1a){
235
_1a=this.labelFunc(_18,this.store);
236
}
237
this.value=this._getValueField()!=this.searchAttr?this.store.getIdentity(_18):_1a;
238
this.item=_18;
239
dijit.form.ComboBox.superclass._setValueAttr.call(this,this.value,_19,_1a);
240
},_announceOption:function(_1b){
241
if(!_1b){
242
return;
243
}
244
var _1c;
245
if(_1b==this._popupWidget.nextButton||_1b==this._popupWidget.previousButton){
246
_1c=_1b.innerHTML;
247
this.item=undefined;
248
this.value="";
249
}else{
250
_1c=this.labelFunc(_1b.item,this.store);
251
this.set("item",_1b.item,false,_1c);
252
}
253
this.focusNode.value=this.focusNode.value.substring(0,this._lastInput.length);
254
dijit.setWaiState(this.focusNode,"activedescendant",dojo.attr(_1b,"id"));
255
this._autoCompleteText(_1c);
256
},_selectOption:function(evt){
257
if(evt){
258
this._announceOption(evt.target);
259
}
260
this._hideResultList();
261
this._setCaretPos(this.focusNode,this.focusNode.value.length);
262
dijit.form._FormValueWidget.prototype._setValueAttr.call(this,this.value,true);
263
},_onArrowMouseDown:function(evt){
264
if(this.disabled||this.readOnly){
265
return;
266
}
267
dojo.stopEvent(evt);
268
this.focus();
269
if(this._isShowingNow){
270
this._hideResultList();
271
}else{
272
this._startSearchAll();
273
}
274
},_startSearchAll:function(){
275
this._startSearch("");
276
},_startSearchFromInput:function(){
277
this._startSearch(this.focusNode.value.replace(/([\\\*\?])/g,"\\$1"));
278
},_getQueryString:function(_1d){
279
return dojo.string.substitute(this.queryExpr,[_1d]);
280
},_startSearch:function(key){
281
if(!this._popupWidget){
282
var _1e=this.id+"_popup";
283
this._popupWidget=new dijit.form._ComboBoxMenu({onChange:dojo.hitch(this,this._selectOption),id:_1e,dir:this.dir});
284
dijit.removeWaiState(this.focusNode,"activedescendant");
285
dijit.setWaiState(this.textbox,"owns",_1e);
286
}
287
var _1f=dojo.clone(this.query);
288
this._lastInput=key;
289
this._lastQuery=_1f[this.searchAttr]=this._getQueryString(key);
290
this.searchTimer=setTimeout(dojo.hitch(this,function(_20,_21){
291
this.searchTimer=null;
292
var _22={queryOptions:{ignoreCase:this.ignoreCase,deep:true},query:_20,onBegin:dojo.hitch(this,"_setMaxOptions"),onComplete:dojo.hitch(this,"_openResultList"),onError:function(_23){
293
_21._fetchHandle=null;
294
console.error("dijit.form.ComboBox: "+_23);
295
dojo.hitch(_21,"_hideResultList")();
296
},start:0,count:this.pageSize};
297
dojo.mixin(_22,_21.fetchProperties);
298
this._fetchHandle=_21.store.fetch(_22);
299
var _24=function(_25,_26){
300
_25.start+=_25.count*_26;
301
_25.direction=_26;
302
this._fetchHandle=this.store.fetch(_25);
303
};
304
this._nextSearch=this._popupWidget.onPage=dojo.hitch(this,_24,this._fetchHandle);
305
},_1f,this),this.searchDelay);
306
},_setMaxOptions:function(_27,_28){
307
this._maxOptions=_27;
308
},_getValueField:function(){
309
return this.searchAttr;
310
},compositionend:function(evt){
311
this._onKeyPress({charOrCode:229});
312
},constructor:function(){
313
this.query={};
314
this.fetchProperties={};
315
},postMixInProperties:function(){
316
if(!this.store){
317
var _29=this.srcNodeRef;
318
this.store=new dijit.form._ComboBoxDataStore(_29);
319
if(!("value" in this.params)){
320
var _2a=this.store.fetchSelectedItem();
321
if(_2a){
322
var _2b=this._getValueField();
323
this.value=_2b!=this.searchAttr?this.store.getValue(_2a,_2b):this.labelFunc(_2a,this.store);
324
}
325
}
326
}
327
this.inherited(arguments);
328
},postCreate:function(){
329
if(!this.hasDownArrow){
330
this.downArrowNode.style.display="none";
331
}
332
var _2c=dojo.query("label[for=\""+this.id+"\"]");
333
if(_2c.length){
334
_2c[0].id=(this.id+"_label");
335
var cn=this.comboNode;
336
dijit.setWaiState(cn,"labelledby",_2c[0].id);
337
}
338
this.inherited(arguments);
339
},uninitialize:function(){
340
if(this._popupWidget&&!this._popupWidget._destroyed){
341
this._hideResultList();
342
this._popupWidget.destroy();
343
}
344
this.inherited(arguments);
345
},_getMenuLabelFromItem:function(_2d){
346
var _2e=this.labelAttr?this.store.getValue(_2d,this.labelAttr):this.labelFunc(_2d,this.store);
347
var _2f=this.labelType;
348
if(this.highlightMatch!="none"&&this.labelType=="text"&&this._lastInput){
349
_2e=this.doHighlight(_2e,this._escapeHtml(this._lastInput));
350
_2f="html";
351
}
352
return {html:_2f=="html",label:_2e};
353
},doHighlight:function(_30,_31){
354
var _32="i"+(this.highlightMatch=="all"?"g":"");
355
var _33=this._escapeHtml(_30);
356
_31=dojo.regexp.escapeString(_31);
357
var ret=_33.replace(new RegExp("(^|\\s)("+_31+")",_32),"$1<span class=\"dijitComboBoxHighlightMatch\">$2</span>");
358
return ret;
359
},_escapeHtml:function(str){
360
str=String(str).replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;").replace(/"/gm,"&quot;");
361
return str;
362
},open:function(){
363
this._isShowingNow=true;
364
return dijit.popup.open({popup:this._popupWidget,around:this.domNode,parent:this});
365
},reset:function(){
366
this.item=null;
367
this.inherited(arguments);
368
},labelFunc:function(_34,_35){
369
return _35.getValue(_34,this.searchAttr).toString();
370
}});
371
dojo.declare("dijit.form._ComboBoxMenu",[dijit._Widget,dijit._Templated,dijit._CssStateMixin],{templateString:"<ul class='dijitReset dijitMenu' dojoAttachEvent='onmousedown:_onMouseDown,onmouseup:_onMouseUp,onmouseover:_onMouseOver,onmouseout:_onMouseOut' tabIndex='-1' style='overflow: \"auto\"; overflow-x: \"hidden\";'>"+"<li class='dijitMenuItem dijitMenuPreviousButton' dojoAttachPoint='previousButton' waiRole='option'></li>"+"<li class='dijitMenuItem dijitMenuNextButton' dojoAttachPoint='nextButton' waiRole='option'></li>"+"</ul>",_messages:null,baseClass:"dijitComboBoxMenu",postMixInProperties:function(){
372
this._messages=dojo.i18n.getLocalization("dijit.form","ComboBox",this.lang);
373
this.inherited(arguments);
374
},_setValueAttr:function(_36){
375
this.value=_36;
376
this.onChange(_36);
377
},onChange:function(_37){
378
},onPage:function(_38){
379
},postCreate:function(){
380
this.previousButton.innerHTML=this._messages["previousMessage"];
381
this.nextButton.innerHTML=this._messages["nextMessage"];
382
this.inherited(arguments);
383
},onClose:function(){
384
this._blurOptionNode();
385
},_createOption:function(_39,_3a){
386
var _3b=_3a(_39);
387
var _3c=dojo.doc.createElement("li");
388
dijit.setWaiRole(_3c,"option");
389
if(_3b.html){
390
_3c.innerHTML=_3b.label;
391
}else{
392
_3c.appendChild(dojo.doc.createTextNode(_3b.label));
393
}
394
if(_3c.innerHTML==""){
395
_3c.innerHTML="&nbsp;";
396
}
397
_3c.item=_39;
398
return _3c;
399
},createOptions:function(_3d,_3e,_3f){
400
this.previousButton.style.display=(_3e.start==0)?"none":"";
401
dojo.attr(this.previousButton,"id",this.id+"_prev");
402
dojo.forEach(_3d,function(_40,i){
403
var _41=this._createOption(_40,_3f);
404
_41.className="dijitReset dijitMenuItem"+(this.isLeftToRight()?"":" dijitMenuItemRtl");
405
dojo.attr(_41,"id",this.id+i);
406
this.domNode.insertBefore(_41,this.nextButton);
407
},this);
408
var _42=false;
409
if(_3e._maxOptions&&_3e._maxOptions!=-1){
410
if((_3e.start+_3e.count)<_3e._maxOptions){
411
_42=true;
412
}else{
413
if((_3e.start+_3e.count)>_3e._maxOptions&&_3e.count==_3d.length){
414
_42=true;
415
}
416
}
417
}else{
418
if(_3e.count==_3d.length){
419
_42=true;
420
}
421
}
422
this.nextButton.style.display=_42?"":"none";
423
dojo.attr(this.nextButton,"id",this.id+"_next");
424
return this.domNode.childNodes;
425
},clearResultList:function(){
426
while(this.domNode.childNodes.length>2){
427
this.domNode.removeChild(this.domNode.childNodes[this.domNode.childNodes.length-2]);
428
}
429
},_onMouseDown:function(evt){
430
dojo.stopEvent(evt);
431
},_onMouseUp:function(evt){
432
if(evt.target===this.domNode||!this._highlighted_option){
433
return;
434
}else{
435
if(evt.target==this.previousButton){
436
this.onPage(-1);
437
}else{
438
if(evt.target==this.nextButton){
439
this.onPage(1);
440
}else{
441
var tgt=evt.target;
442
while(!tgt.item){
443
tgt=tgt.parentNode;
444
}
445
this._setValueAttr({target:tgt},true);
446
}
447
}
448
}
449
},_onMouseOver:function(evt){
450
if(evt.target===this.domNode){
451
return;
452
}
453
var tgt=evt.target;
454
if(!(tgt==this.previousButton||tgt==this.nextButton)){
455
while(!tgt.item){
456
tgt=tgt.parentNode;
457
}
458
}
459
this._focusOptionNode(tgt);
460
},_onMouseOut:function(evt){
461
if(evt.target===this.domNode){
462
return;
463
}
464
this._blurOptionNode();
465
},_focusOptionNode:function(_43){
466
if(this._highlighted_option!=_43){
467
this._blurOptionNode();
468
this._highlighted_option=_43;
469
dojo.addClass(this._highlighted_option,"dijitMenuItemSelected");
470
}
471
},_blurOptionNode:function(){
472
if(this._highlighted_option){
473
dojo.removeClass(this._highlighted_option,"dijitMenuItemSelected");
474
this._highlighted_option=null;
475
}
476
},_highlightNextOption:function(){
477
if(!this.getHighlightedOption()){
478
var fc=this.domNode.firstChild;
479
this._focusOptionNode(fc.style.display=="none"?fc.nextSibling:fc);
480
}else{
481
var ns=this._highlighted_option.nextSibling;
482
if(ns&&ns.style.display!="none"){
483
this._focusOptionNode(ns);
484
}else{
485
this.highlightFirstOption();
486
}
487
}
488
dojo.window.scrollIntoView(this._highlighted_option);
489
},highlightFirstOption:function(){
490
var _44=this.domNode.firstChild;
491
var _45=_44.nextSibling;
492
this._focusOptionNode(_45.style.display=="none"?_44:_45);
493
dojo.window.scrollIntoView(this._highlighted_option);
494
},highlightLastOption:function(){
495
this._focusOptionNode(this.domNode.lastChild.previousSibling);
496
dojo.window.scrollIntoView(this._highlighted_option);
497
},_highlightPrevOption:function(){
498
if(!this.getHighlightedOption()){
499
var lc=this.domNode.lastChild;
500
this._focusOptionNode(lc.style.display=="none"?lc.previousSibling:lc);
501
}else{
502
var ps=this._highlighted_option.previousSibling;
503
if(ps&&ps.style.display!="none"){
504
this._focusOptionNode(ps);
505
}else{
506
this.highlightLastOption();
507
}
508
}
509
dojo.window.scrollIntoView(this._highlighted_option);
510
},_page:function(up){
511
var _46=0;
512
var _47=this.domNode.scrollTop;
513
var _48=dojo.style(this.domNode,"height");
514
if(!this.getHighlightedOption()){
515
this._highlightNextOption();
516
}
517
while(_46<_48){
518
if(up){
519
if(!this.getHighlightedOption().previousSibling||this._highlighted_option.previousSibling.style.display=="none"){
520
break;
521
}
522
this._highlightPrevOption();
523
}else{
524
if(!this.getHighlightedOption().nextSibling||this._highlighted_option.nextSibling.style.display=="none"){
525
break;
526
}
527
this._highlightNextOption();
528
}
529
var _49=this.domNode.scrollTop;
530
_46+=(_49-_47)*(up?-1:1);
531
_47=_49;
532
}
533
},pageUp:function(){
534
this._page(true);
535
},pageDown:function(){
536
this._page(false);
537
},getHighlightedOption:function(){
538
var ho=this._highlighted_option;
539
return (ho&&ho.parentNode)?ho:null;
540
},handleKey:function(key){
541
switch(key){
542
case dojo.keys.DOWN_ARROW:
543
this._highlightNextOption();
544
break;
545
case dojo.keys.PAGE_DOWN:
546
this.pageDown();
547
break;
548
case dojo.keys.UP_ARROW:
549
this._highlightPrevOption();
550
break;
551
case dojo.keys.PAGE_UP:
552
this.pageUp();
553
break;
554
}
555
}});
556
dojo.declare("dijit.form.ComboBox",[dijit.form.ValidationTextBox,dijit.form.ComboBoxMixin],{_setValueAttr:function(_4a,_4b,_4c){
557
this.item=null;
558
if(!_4a){
559
_4a="";
560
}
561
dijit.form.ValidationTextBox.prototype._setValueAttr.call(this,_4a,_4b,_4c);
562
}});
563
dojo.declare("dijit.form._ComboBoxDataStore",null,{constructor:function(_4d){
564
this.root=_4d;
565
if(_4d.tagName!="SELECT"&&_4d.firstChild){
566
_4d=dojo.query("select",_4d);
567
if(_4d.length>0){
568
_4d=_4d[0];
569
}else{
570
this.root.innerHTML="<SELECT>"+this.root.innerHTML+"</SELECT>";
571
_4d=this.root.firstChild;
572
}
573
this.root=_4d;
574
}
575
dojo.query("> option",_4d).forEach(function(_4e){
576
_4e.innerHTML=dojo.trim(_4e.innerHTML);
577
});
578
},getValue:function(_4f,_50,_51){
579
return (_50=="value")?_4f.value:(_4f.innerText||_4f.textContent||"");
580
},isItemLoaded:function(_52){
581
return true;
582
},getFeatures:function(){
583
return {"dojo.data.api.Read":true,"dojo.data.api.Identity":true};
584
},_fetchItems:function(_53,_54,_55){
585
if(!_53.query){
586
_53.query={};
587
}
588
if(!_53.query.name){
589
_53.query.name="";
590
}
591
if(!_53.queryOptions){
592
_53.queryOptions={};
593
}
594
var _56=dojo.data.util.filter.patternToRegExp(_53.query.name,_53.queryOptions.ignoreCase),_57=dojo.query("> option",this.root).filter(function(_58){
595
return (_58.innerText||_58.textContent||"").match(_56);
596
});
597
if(_53.sort){
598
_57.sort(dojo.data.util.sorter.createSortFunction(_53.sort,this));
599
}
600
_54(_57,_53);
601
},close:function(_59){
602
return;
603
},getLabel:function(_5a){
604
return _5a.innerHTML;
605
},getIdentity:function(_5b){
606
return dojo.attr(_5b,"value");
607
},fetchItemByIdentity:function(_5c){
608
var _5d=dojo.query("> option[value='"+_5c.identity+"']",this.root)[0];
609
_5c.onItem(_5d);
610
},fetchSelectedItem:function(){
611
var _5e=this.root,si=_5e.selectedIndex;
612
return typeof si=="number"?dojo.query("> option:nth-child("+(si!=-1?si+1:1)+")",_5e)[0]:null;
613
}});
614
dojo.extend(dijit.form._ComboBoxDataStore,dojo.data.util.simpleFetch);
615
}