root / trunk / web / dojo / dijit / form / ComboBox.js @ 10
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=\"▼ \" 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=\"Χ \" 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,"&").replace(/</gm,"<").replace(/>/gm,">").replace(/"/gm,"""); |
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=" ";
|
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 |
} |