root / trunk / web / dojo / dijit / form / Select.js @ 12
History | View | Annotate | Download (5.46 KB)
| 1 | 9 | andrej.cim | /*
|
|---|---|---|---|
| 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.Select"]){ |
||
| 9 | dojo._hasResource["dijit.form.Select"]=true; |
||
| 10 | dojo.provide("dijit.form.Select");
|
||
| 11 | dojo.require("dijit.form._FormSelectWidget");
|
||
| 12 | dojo.require("dijit._HasDropDown");
|
||
| 13 | dojo.require("dijit.Menu");
|
||
| 14 | dojo.require("dijit.Tooltip");
|
||
| 15 | dojo.requireLocalization("dijit.form","validate",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"); |
||
| 16 | dojo.declare("dijit.form._SelectMenu",dijit.Menu,{buildRendering:function(){ |
||
| 17 | this.inherited(arguments); |
||
| 18 | var o=(this.menuTableNode=this.domNode); |
||
| 19 | var n=(this.domNode=dojo.create("div",{style:{overflowX:"hidden",overflowY:"scroll"}})); |
||
| 20 | if(o.parentNode){
|
||
| 21 | o.parentNode.replaceChild(n,o); |
||
| 22 | } |
||
| 23 | dojo.removeClass(o,"dijitMenuTable");
|
||
| 24 | n.className=o.className+" dijitSelectMenu";
|
||
| 25 | o.className="dijitReset dijitMenuTable";
|
||
| 26 | dijit.setWaiRole(o,"listbox");
|
||
| 27 | dijit.setWaiRole(n,"presentation");
|
||
| 28 | n.appendChild(o); |
||
| 29 | },resize:function(mb){ |
||
| 30 | if(mb){
|
||
| 31 | dojo.marginBox(this.domNode,mb);
|
||
| 32 | if("w" in mb){ |
||
| 33 | this.menuTableNode.style.width="100%"; |
||
| 34 | } |
||
| 35 | } |
||
| 36 | }}); |
||
| 37 | dojo.declare("dijit.form.Select",[dijit.form._FormSelectWidget,dijit._HasDropDown],{baseClass:"dijitSelect",templateString:dojo.cache("dijit.form","templates/Select.html","<table class=\"dijit dijitReset dijitInline dijitLeft\"\n\tdojoAttachPoint=\"_buttonNode,tableNode,focusNode\" cellspacing='0' cellpadding='0'\n\twaiRole=\"combobox\" waiState=\"haspopup-true\"\n\t><tbody waiRole=\"presentation\"><tr waiRole=\"presentation\"\n\t\t><td class=\"dijitReset dijitStretch dijitButtonContents dijitButtonNode\" waiRole=\"presentation\"\n\t\t\t><span class=\"dijitReset dijitInline dijitButtonText\" dojoAttachPoint=\"containerNode,_popupStateNode\"></span\n\t\t\t><input type=\"hidden\" ${!nameAttrSetting} dojoAttachPoint=\"valueNode\" value=\"${value}\" waiState=\"hidden-true\"\n\t\t/></td><td class=\"dijitReset dijitRight dijitButtonNode dijitArrowButton dijitDownArrowButton\"\n\t\t\t\tdojoAttachPoint=\"titleNode\" waiRole=\"presentation\"\n\t\t\t><div class=\"dijitReset dijitArrowButtonInner\" waiRole=\"presentation\"></div\n\t\t\t><div class=\"dijitReset dijitArrowButtonChar\" waiRole=\"presentation\">▼</div\n\t\t></td\n\t></tr></tbody\n></table>\n"),attributeMap:dojo.mixin(dojo.clone(dijit.form._FormSelectWidget.prototype.attributeMap),{style:"tableNode"}),required:false,state:"",tooltipPosition:[],emptyLabel:"",_isLoaded:false,_childrenLoaded:false,_fillContent:function(){ |
||
| 38 | this.inherited(arguments); |
||
| 39 | if(this.options.length&&!this.value&&this.srcNodeRef){ |
||
| 40 | var si=this.srcNodeRef.selectedIndex; |
||
| 41 | this.value=this.options[si!=-1?si:0].value; |
||
| 42 | } |
||
| 43 | this.dropDown=new dijit.form._SelectMenu({id:this.id+"_menu"}); |
||
| 44 | dojo.addClass(this.dropDown.domNode,this.baseClass+"Menu"); |
||
| 45 | },_getMenuItemForOption:function(_1){ |
||
| 46 | if(!_1.value){
|
||
| 47 | return new dijit.MenuSeparator(); |
||
| 48 | }else{
|
||
| 49 | var _2=dojo.hitch(this,"_setValueAttr",_1); |
||
| 50 | var _3=new dijit.MenuItem({option:_1,label:_1.label,onClick:_2,disabled:_1.disabled||false}); |
||
| 51 | dijit.setWaiRole(_3.focusNode,"listitem");
|
||
| 52 | return _3;
|
||
| 53 | } |
||
| 54 | },_addOptionItem:function(_4){ |
||
| 55 | if(this.dropDown){ |
||
| 56 | this.dropDown.addChild(this._getMenuItemForOption(_4)); |
||
| 57 | } |
||
| 58 | },_getChildren:function(){ |
||
| 59 | if(!this.dropDown){ |
||
| 60 | return [];
|
||
| 61 | } |
||
| 62 | return this.dropDown.getChildren(); |
||
| 63 | },_loadChildren:function(_5){ |
||
| 64 | if(_5===true){ |
||
| 65 | if(this.dropDown){ |
||
| 66 | delete this.dropDown.focusedChild; |
||
| 67 | } |
||
| 68 | if(this.options.length){ |
||
| 69 | this.inherited(arguments); |
||
| 70 | }else{
|
||
| 71 | dojo.forEach(this._getChildren(),function(_6){ |
||
| 72 | _6.destroyRecursive(); |
||
| 73 | }); |
||
| 74 | var _7=new dijit.MenuItem({label:" "}); |
||
| 75 | this.dropDown.addChild(_7);
|
||
| 76 | } |
||
| 77 | }else{
|
||
| 78 | this._updateSelection();
|
||
| 79 | } |
||
| 80 | var _8=this.options.length; |
||
| 81 | this._isLoaded=false; |
||
| 82 | this._childrenLoaded=true; |
||
| 83 | if(!this._loadingStore){ |
||
| 84 | this._setValueAttr(this.value); |
||
| 85 | } |
||
| 86 | },_setValueAttr:function(_9){ |
||
| 87 | this.inherited(arguments); |
||
| 88 | dojo.attr(this.valueNode,"value",this.get("value")); |
||
| 89 | },_setDisplay:function(_a){ |
||
| 90 | this.containerNode.innerHTML="<span class=\"dijitReset dijitInline "+this.baseClass+"Label\">"+(_a||this.emptyLabel||" ")+"</span>"; |
||
| 91 | dijit.setWaiState(this.focusNode,"valuetext",(_a||this.emptyLabel||" ")); |
||
| 92 | },validate:function(_b){ |
||
| 93 | var _c=this.isValid(_b); |
||
| 94 | this.state=_c?"":"Error"; |
||
| 95 | this._setStateClass();
|
||
| 96 | dijit.setWaiState(this.focusNode,"invalid",_c?"false":"true"); |
||
| 97 | var _d=_c?"":this._missingMsg; |
||
| 98 | if(this._message!==_d){ |
||
| 99 | this._message=_d;
|
||
| 100 | dijit.hideTooltip(this.domNode);
|
||
| 101 | if(_d){
|
||
| 102 | dijit.showTooltip(_d,this.domNode,this.tooltipPosition,!this.isLeftToRight()); |
||
| 103 | } |
||
| 104 | } |
||
| 105 | return _c;
|
||
| 106 | },isValid:function(_e){ |
||
| 107 | return (!this.required||!(/^\s*$/.test(this.value))); |
||
| 108 | },reset:function(){ |
||
| 109 | this.inherited(arguments); |
||
| 110 | dijit.hideTooltip(this.domNode);
|
||
| 111 | this.state=""; |
||
| 112 | this._setStateClass();
|
||
| 113 | delete this._message; |
||
| 114 | },postMixInProperties:function(){ |
||
| 115 | this.inherited(arguments); |
||
| 116 | this._missingMsg=dojo.i18n.getLocalization("dijit.form","validate",this.lang).missingMessage; |
||
| 117 | },postCreate:function(){ |
||
| 118 | this.inherited(arguments); |
||
| 119 | if(this.tableNode.style.width){ |
||
| 120 | dojo.addClass(this.domNode,this.baseClass+"FixedWidth"); |
||
| 121 | } |
||
| 122 | },isLoaded:function(){ |
||
| 123 | return this._isLoaded; |
||
| 124 | },loadDropDown:function(_f){ |
||
| 125 | this._loadChildren(true); |
||
| 126 | this._isLoaded=true; |
||
| 127 | _f(); |
||
| 128 | },closeDropDown:function(){ |
||
| 129 | this.inherited(arguments); |
||
| 130 | if(this.dropDown&&this.dropDown.menuTableNode){ |
||
| 131 | this.dropDown.menuTableNode.style.width=""; |
||
| 132 | } |
||
| 133 | },uninitialize:function(_10){ |
||
| 134 | if(this.dropDown&&!this.dropDown._destroyed){ |
||
| 135 | this.dropDown.destroyRecursive(_10);
|
||
| 136 | delete this.dropDown; |
||
| 137 | } |
||
| 138 | this.inherited(arguments); |
||
| 139 | }}); |
||
| 140 | } |