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 | } |