diff --git a/spring-faces/src/main/java/META-INF/dijit/ColorPalette.js b/spring-faces/src/main/java/META-INF/dijit/ColorPalette.js index ef061f61..44b30c6b 100644 --- a/spring-faces/src/main/java/META-INF/dijit/ColorPalette.js +++ b/spring-faces/src/main/java/META-INF/dijit/ColorPalette.js @@ -6,7 +6,7 @@ dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); dojo.require("dojo.colors"); dojo.require("dojo.i18n"); -dojo.requireLocalization("dojo", "colors", null, "ROOT"); +dojo.requireLocalization("dojo", "colors", null, "ko,zh,ja,zh-tw,ru,it,hu,ROOT,fr,pt,pl,es,de,cs"); dojo.declare( "dijit.ColorPalette", @@ -16,13 +16,13 @@ dojo.declare( // Grid showing various colors, so the user can pick a certain color // defaultTimeout: Number - // number of milliseconds before a held key or button becomes typematic + // number of milliseconds before a held key or button becomes typematic defaultTimeout: 500, // timeoutChangeRate: Number - // fraction of time used to change the typematic timer between events - // 1.0 means that each typematic event fires at defaultTimeout intervals - // < 1.0 means that each typematic event fires at an increasing faster rate + // fraction of time used to change the typematic timer between events + // 1.0 means that each typematic event fires at defaultTimeout intervals + // < 1.0 means that each typematic event fires at an increasing faster rate timeoutChangeRate: 0.90, // palette: String @@ -50,7 +50,7 @@ dojo.declare( // The first level is a hashmap of the different arrays available // The next two dimensions represent the columns and rows of colors. _palettes: { - + "7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan", "lavender", "plum"], ["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"], ["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", "skyblue", "mediumslateblue","orchid"], @@ -58,11 +58,11 @@ dojo.declare( ["dimgray", "crimson", "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"], ["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ], ["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"]], - + "3x4": [["white", "lime", "green", "blue"], ["silver", "yellow", "fuchsia", "navy"], ["gray", "red", "purple", "black"]] - + }, // _imagePaths: Map @@ -76,18 +76,20 @@ dojo.declare( // This is a map that is used to calculate the coordinates of the // images that make up the palette. _paletteCoords: { - "leftOffset": 3, "topOffset": 3, - "cWidth": 18, "cHeight": 16 + "leftOffset": 4, "topOffset": 4, + "cWidth": 20, "cHeight": 20 + }, // templatePath: String // Path to the template of this widget. - templateString:"
\n\t
\n\t\t\n\t
\t\n
\n", - + templateString:"
\n\t
\n\t\t\n\t
\t\n
\n", + // _paletteDims: Object + // Size of the supported palettes for alignment purposes. _paletteDims: { - "7x10": {"width": "185px", "height": "117px"}, - "3x4": {"width": "77px", "height": "53px"} + "7x10": {"width": "206px", "height": "145px"}, + "3x4": {"width": "86px", "height": "64px"} }, @@ -120,7 +122,7 @@ dojo.declare( highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px"; highlightNode.setAttribute("tabIndex","-1"); highlightNode.title = this.colorNames[color]; - dijit.wai.setAttr(highlightNode, "waiRole", "role", "gridcell"); + dijit.setWaiRole(highlightNode, "gridcell"); highlightNode.index = this._highlightNodes.length; this._highlightNodes.push(highlightNode); } @@ -166,7 +168,7 @@ dojo.declare( // Callback when a color is selected. // color: String // Hex value corresponding to color. - console.debug("Color selected is: "+color); +// console.debug("Color selected is: "+color); }, _onColorDijitclick: function(/*Event*/ evt){ @@ -231,8 +233,7 @@ dojo.declare( // This selects a color. It triggers the onChange event // area: // The area node that covers the color being selected. - this.value = selectNode.color; - this.onChange(selectNode.color); + this.onChange(this.value = selectNode.color); }, _navigateByKey: function(increment, typeCount){ @@ -241,7 +242,7 @@ dojo.declare( // It changes the focus and the highlighed color. // increment: // How much the key is navigated. - // typeCount: + // typeCount: // How many times typematic has fired. // typecount == -1 means the key is released. diff --git a/spring-faces/src/main/java/META-INF/dijit/Declaration.js b/spring-faces/src/main/java/META-INF/dijit/Declaration.js index aeb2ec01..395d67c3 100644 --- a/spring-faces/src/main/java/META-INF/dijit/Declaration.js +++ b/spring-faces/src/main/java/META-INF/dijit/Declaration.js @@ -25,8 +25,11 @@ dojo.declare( var propList = this.defaults||{}; - this.mixins = this.mixins.length ? - dojo.map(this.mixins, dojo.getObject) : + // map array of strings like [ "dijit.form.Button" ] to array of mixin objects + // (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes + // a bogus third argument to getObject(), confusing it) + this.mixins = this.mixins.length ? + dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) : [ dijit._Widget, dijit._Templated ]; if(preambles.length){ @@ -34,17 +37,14 @@ dojo.declare( propList.preamble = dojo.parser._functionFromScript(preambles[0]); } propList.widgetsInTemplate = true; - propList.templateString = "<"+srcType+" class='"+src.className+"'>"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+""; + propList._skipNodeCache = true; + propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||'')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||'')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+""; + // console.debug(propList.templateString); // strip things so we don't create stuff under us in the initial setup phase dojo.query("[dojoType]", src).forEach(function(node){ node.removeAttribute("dojoType"); }); - scripts.forEach(function(s){ - if(!s.getAttribute("event")){ - this.mixins.push(dojo.parser._functionFromScript(s)); - } - }, this); // create the new widget class dojo.declare( @@ -53,11 +53,12 @@ dojo.declare( propList ); + // do the connects for each \""+" dojoAttachPoint=\"iframe,styleNode\" dojoAttachEvent=\"onblur:_onIframeBlur\" class=\"dijitInline dijitInputField dijitTextArea\">")+""+((dojo.isIE||dojo.isSafari)?"":""):"",focus:function(){if(!this.disabled){this._changing();}if(dojo.isMozilla){dijit.focus(this.iframe);}else{dijit.focus(this.focusNode);}},setValue:function(_5f0,_5f1){var _5f2=this.editNode;if(typeof _5f0=="string"){_5f2.innerHTML="";if(_5f0.split){var _5f3=this;var _5f4=true;dojo.forEach(_5f0.split("\n"),function(line){if(_5f4){_5f4=false;}else{_5f2.appendChild(document.createElement("BR"));}_5f2.appendChild(document.createTextNode(line));});}else{_5f2.appendChild(document.createTextNode(_5f0));}}else{_5f0=_5f2.innerHTML;if(this.iframe){_5f0=_5f0.replace(/
<\/div>\r?\n?$/i,"");}_5f0=_5f0.replace(/\s*\r?\n|^\s+|\s+$| /g,"").replace(/>\s+<").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])
/g,"$1\n").replace(/<\/p>\s*]*>|]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&/gi,"&").replace(/</gi,"<").replace(/>/gi,">");}this.value=this.formValueNode.value=_5f0;if(this.iframe){var _5f6=document.createElement("div");_5f2.appendChild(_5f6);var _5f7=_5f6.offsetTop;if(_5f2.scrollWidth>_5f2.clientWidth){_5f7+=16;}if(this.lastHeight!=_5f7){if(_5f7==0){_5f7=16;}dojo.contentBox(this.iframe,{h:_5f7});this.lastHeight=_5f7;}_5f2.removeChild(_5f6);}dijit.form.Textarea.superclass.setValue.call(this,this.getValue(),_5f1);},getValue:function(){return this.formValueNode.value.replace(/\r/g,"");},postMixInProperties:function(){dijit.form.Textarea.superclass.postMixInProperties.apply(this,arguments);if(this.srcNodeRef&&this.srcNodeRef.innerHTML!=""){this.value=this.srcNodeRef.innerHTML;this.srcNodeRef.innerHTML="";}if((!this.value||this.value=="")&&this.srcNodeRef&&this.srcNodeRef.value){this.value=this.srcNodeRef.value;}if(!this.value){this.value="";}this.value=this.value.replace(/\r\n/g,"\n").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&");if(dojo.isMozilla){var _5f8=dojo.i18n.getLocalization("dijit","Textarea");this._iframeEditTitle=_5f8.iframeEditTitle;this._iframeFocusTitle=_5f8.iframeFocusTitle;var body=this.focusNode=this.editNode=document.createElement("BODY");body.style.margin="0px";body.style.padding="0px";body.style.border="0px";}},postCreate:function(){if(dojo.isIE||dojo.isSafari){this.domNode.style.overflowY="hidden";}else{if(dojo.isMozilla){var w=this.iframe.contentWindow;try{var _5fb=this.iframe.contentDocument.title;}catch(e){var _5fb="";}if(!w||!_5fb){this.iframe.postCreate=dojo.hitch(this,this.postCreate);return;}var d=w.document;d.getElementsByTagName("HTML")[0].replaceChild(this.editNode,d.getElementsByTagName("BODY")[0]);if(!this.isLeftToRight()){d.getElementsByTagName("HTML")[0].dir="rtl";}this.iframe.style.overflowY="hidden";this.eventNode=d;w.addEventListener("resize",dojo.hitch(this,this._changed),false);}else{this.focusNode=this.domNode;}}if(this.eventNode){this.connect(this.eventNode,"keypress",this._onKeyPress);this.connect(this.eventNode,"mousemove",this._changed);this.connect(this.eventNode,"focus",this._focused);this.connect(this.eventNode,"blur",this._blurred);}if(this.editNode){this.connect(this.editNode,"change",this._changed);}this.inherited("postCreate",arguments);},_focused:function(e){dojo.addClass(this.iframe||this.domNode,"dijitInputFieldFocused");this._changed(e);},_blurred:function(e){dojo.removeClass(this.iframe||this.domNode,"dijitInputFieldFocused");this._changed(e,true);},_onIframeBlur:function(){this.iframe.contentDocument.title=this._iframeEditTitle;},_onKeyPress:function(e){if(e.keyCode==dojo.keys.TAB&&!e.shiftKey&&!e.ctrlKey&&!e.altKey&&this.iframe){this.iframe.contentDocument.title=this._iframeFocusTitle;this.iframe.focus();dojo.stopEvent(e);}else{if(e.keyCode==dojo.keys.ENTER){e.stopPropagation();}else{if(this.inherited("_onKeyPress",arguments)&&this.iframe){var te=document.createEvent("KeyEvents");te.initKeyEvent("keypress",true,true,null,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.keyCode,e.charCode);this.iframe.dispatchEvent(te);}}}this._changing();},_changing:function(e){setTimeout(dojo.hitch(this,"_changed",e,false),1);},_changed:function(e,_603){if(this.iframe&&this.iframe.contentDocument.designMode!="on"){this.iframe.contentDocument.designMode="on";}this.setValue(null,_603);}});}if(!dojo._hasResource["dijit.layout.StackContainer"]){dojo._hasResource["dijit.layout.StackContainer"]=true;dojo.provide("dijit.layout.StackContainer");dojo.declare("dijit.layout.StackContainer",dijit.layout._LayoutWidget,{doLayout:true,_started:false,postCreate:function(){dijit.setWaiRole((this.containerNode||this.domNode),"tabpanel");this.connect(this.domNode,"onkeypress",this._onKeyPress);},startup:function(){if(this._started){return;}var _604=this.getChildren();dojo.forEach(_604,this._setupChild,this);dojo.some(_604,function(_605){if(_605.selected){this.selectedChildWidget=_605;}return _605.selected;},this);var _606=this.selectedChildWidget;if(!_606&&_604[0]){_606=this.selectedChildWidget=_604[0];_606.selected=true;}if(_606){this._showChild(_606);}dojo.publish(this.id+"-startup",[{children:_604,selected:_606}]);this.inherited("startup",arguments);this._started=true;},_setupChild:function(page){page.domNode.style.display="none";page.domNode.style.position="relative";return page;},addChild:function(_608,_609){dijit._Container.prototype.addChild.apply(this,arguments);_608=this._setupChild(_608);if(this._started){this.layout();dojo.publish(this.id+"-addChild",[_608,_609]);if(!this.selectedChildWidget){this.selectChild(_608);}}},removeChild:function(page){dijit._Container.prototype.removeChild.apply(this,arguments);if(this._beingDestroyed){return;}if(this._started){dojo.publish(this.id+"-removeChild",[page]);this.layout();}if(this.selectedChildWidget===page){this.selectedChildWidget=undefined;if(this._started){var _60b=this.getChildren();if(_60b.length){this.selectChild(_60b[0]);}}}},selectChild:function(page){page=dijit.byId(page);if(this.selectedChildWidget!=page){this._transition(page,this.selectedChildWidget);this.selectedChildWidget=page;dojo.publish(this.id+"-selectChild",[page]);}},_transition:function(_60d,_60e){if(_60e){this._hideChild(_60e);}this._showChild(_60d);if(this.doLayout&&_60d.resize){_60d.resize(this._containerContentBox||this._contentBox);}},_adjacent:function(_60f){var _610=this.getChildren();var _611=dojo.indexOf(_610,this.selectedChildWidget);_611+=_60f?1:_610.length-1;return _610[_611%_610.length];},forward:function(){this.selectChild(this._adjacent(true));},back:function(){this.selectChild(this._adjacent(false));},_onKeyPress:function(e){dojo.publish(this.id+"-containerKeyPress",[{e:e,page:this}]);},layout:function(){if(this.doLayout&&this.selectedChildWidget&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._contentBox);}},_showChild:function(page){var _614=this.getChildren();page.isFirstChild=(page==_614[0]);page.isLastChild=(page==_614[_614.length-1]);page.selected=true;page.domNode.style.display="";if(page._loadCheck){page._loadCheck();}if(page.onShow){page.onShow();}},_hideChild:function(page){page.selected=false;page.domNode.style.display="none";if(page.onHide){page.onHide();}},closeChild:function(page){var _617=page.onClose(this,page);if(_617){this.removeChild(page);page.destroy();}},destroy:function(){this._beingDestroyed=true;this.inherited("destroy",arguments);}});dojo.declare("dijit.layout.StackController",[dijit._Widget,dijit._Templated,dijit._Container],{templateString:"",containerId:"",buttonWidget:"dijit.layout._StackButton",postCreate:function(){dijit.setWaiRole(this.domNode,"tablist");this.pane2button={};this._subscriptions=[dojo.subscribe(this.containerId+"-startup",this,"onStartup"),dojo.subscribe(this.containerId+"-addChild",this,"onAddChild"),dojo.subscribe(this.containerId+"-removeChild",this,"onRemoveChild"),dojo.subscribe(this.containerId+"-selectChild",this,"onSelectChild"),dojo.subscribe(this.containerId+"-containerKeyPress",this,"onContainerKeyPress")];},onStartup:function(info){dojo.forEach(info.children,this.onAddChild,this);this.onSelectChild(info.selected);},destroy:function(){dojo.forEach(this._subscriptions,dojo.unsubscribe);this.inherited("destroy",arguments);},onAddChild:function(page,_61a){var _61b=document.createElement("span");this.domNode.appendChild(_61b);var cls=dojo.getObject(this.buttonWidget);var _61d=new cls({label:page.title,closeButton:page.closable},_61b);this.addChild(_61d,_61a);this.pane2button[page]=_61d;page.controlButton=_61d;dojo.connect(_61d,"onClick",dojo.hitch(this,"onButtonClick",page));dojo.connect(_61d,"onClickCloseButton",dojo.hitch(this,"onCloseButtonClick",page));if(!this._currentChild){_61d.focusNode.setAttribute("tabIndex","0");this._currentChild=page;}},onRemoveChild:function(page){if(this._currentChild===page){this._currentChild=null;}var _61f=this.pane2button[page];if(_61f){_61f.destroy();}this.pane2button[page]=null;},onSelectChild:function(page){if(!page){return;}if(this._currentChild){var _621=this.pane2button[this._currentChild];_621.setChecked(false);_621.focusNode.setAttribute("tabIndex","-1");}var _622=this.pane2button[page];_622.setChecked(true);this._currentChild=page;_622.focusNode.setAttribute("tabIndex","0");},onButtonClick:function(page){var _624=dijit.byId(this.containerId);_624.selectChild(page);},onCloseButtonClick:function(page){var _626=dijit.byId(this.containerId);_626.closeChild(page);var b=this.pane2button[this._currentChild];if(b){dijit.focus(b.focusNode||b.domNode);}},adjacent:function(_628){var _629=this.getChildren();var _62a=dojo.indexOf(_629,this.pane2button[this._currentChild]);var _62b=_628?1:_629.length-1;return _629[(_62a+_62b)%_629.length];},onkeypress:function(e){if(this.disabled||e.altKey){return;}var _62d=true;if(e.ctrlKey||!e._djpage){var k=dojo.keys;switch(e.keyCode){case k.LEFT_ARROW:case k.UP_ARROW:case k.PAGE_UP:_62d=false;case k.RIGHT_ARROW:case k.DOWN_ARROW:case k.PAGE_DOWN:this.adjacent(_62d).onClick();dojo.stopEvent(e);break;case k.DELETE:if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);break;default:if(e.ctrlKey){if(e.keyCode==k.TAB){this.adjacent(!e.shiftKey).onClick();dojo.stopEvent(e);}else{if(e.keyChar=="w"){if(this._currentChild.closable){this.onCloseButtonClick(this._currentChild);}dojo.stopEvent(e);}}}}}},onContainerKeyPress:function(info){info.e._djpage=info.page;this.onkeypress(info.e);}});dojo.declare("dijit.layout._StackButton",dijit.form.ToggleButton,{tabIndex:"-1",postCreate:function(evt){dijit.setWaiRole((this.focusNode||this.domNode),"tab");this.inherited("postCreate",arguments);},onClick:function(evt){dijit.focus(this.focusNode);},onClickCloseButton:function(evt){evt.stopPropagation();}});dojo.extend(dijit._Widget,{title:"",selected:false,closable:false,onClose:function(){return true;}});}if(!dojo._hasResource["dijit.layout.AccordionContainer"]){dojo._hasResource["dijit.layout.AccordionContainer"]=true;dojo.provide("dijit.layout.AccordionContainer");dojo.declare("dijit.layout.AccordionContainer",dijit.layout.StackContainer,{duration:250,_verticalSpace:0,postCreate:function(){this.domNode.style.overflow="hidden";this.inherited("postCreate",arguments);dijit.setWaiRole(this.domNode,"tablist");dojo.addClass(this.domNode,"dijitAccordionContainer");},startup:function(){if(this._started){return;}this.inherited("startup",arguments);if(this.selectedChildWidget){var _633=this.selectedChildWidget.containerNode.style;_633.display="";_633.overflow="auto";this.selectedChildWidget._setSelectedState(true);}},layout:function(){var _634=0;var _635=this.selectedChildWidget;dojo.forEach(this.getChildren(),function(_636){_634+=_636.getTitleHeight();});var _637=this._contentBox;this._verticalSpace=(_637.h-_634);if(_635){_635.containerNode.style.height=this._verticalSpace+"px";}},_setupChild:function(page){return page;},_transition:function(_639,_63a){if(this._inTransition){return;}this._inTransition=true;var _63b=[];var _63c=this._verticalSpace;if(_639){_639.setSelected(true);var _63d=_639.containerNode;_63d.style.display="";_63b.push(dojo.animateProperty({node:_63d,duration:this.duration,properties:{height:{start:"1",end:_63c}},onEnd:function(){_63d.style.overflow="auto";}}));}if(_63a){_63a.setSelected(false);var _63e=_63a.containerNode;_63e.style.overflow="hidden";_63b.push(dojo.animateProperty({node:_63e,duration:this.duration,properties:{height:{start:_63c,end:"1"}},onEnd:function(){_63e.style.display="none";}}));}this._inTransition=false;dojo.fx.combine(_63b).play();},_onKeyPress:function(e){if(this.disabled||e.altKey){return;}var k=dojo.keys;switch(e.keyCode){case k.LEFT_ARROW:case k.UP_ARROW:case k.PAGE_UP:this._adjacent(false)._onTitleClick();dojo.stopEvent(e);break;case k.RIGHT_ARROW:case k.DOWN_ARROW:case k.PAGE_DOWN:this._adjacent(true)._onTitleClick();dojo.stopEvent(e);break;default:if(e.ctrlKey&&e.keyCode==k.TAB){this._adjacent(e._dijitWidget,!e.shiftKey)._onTitleClick();dojo.stopEvent(e);}}}});dojo.declare("dijit.layout.AccordionPane",[dijit.layout.ContentPane,dijit._Templated,dijit._Contained],{templateString:"
${title}
\n
\n",postCreate:function(){this.inherited("postCreate",arguments);dojo.setSelectable(this.titleNode,false);this.setSelected(this.selected);},getTitleHeight:function(){return dojo.marginBox(this.titleNode).h;},_onTitleClick:function(){var _641=this.getParent();if(!_641._inTransition){_641.selectChild(this);dijit.focus(this.focusNode);}},_onTitleKeyPress:function(evt){evt._dijitWidget=this;return this.getParent()._onKeyPress(evt);},_setSelectedState:function(_643){this.selected=_643;dojo[(_643?"addClass":"removeClass")](this.domNode,"dijitAccordionPane-selected");this.focusNode.setAttribute("tabIndex",_643?"0":"-1");},_handleFocus:function(e){dojo[(e.type=="focus"?"addClass":"removeClass")](this.focusNode,"dijitAccordionPaneFocused");},setSelected:function(_645){this._setSelectedState(_645);if(_645){this.onSelected();}},onSelected:function(){}});}if(!dojo._hasResource["dijit.layout.LayoutContainer"]){dojo._hasResource["dijit.layout.LayoutContainer"]=true;dojo.provide("dijit.layout.LayoutContainer");dojo.declare("dijit.layout.LayoutContainer",dijit.layout._LayoutWidget,{layout:function(){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());},addChild:function(_646,_647){dijit._Container.prototype.addChild.apply(this,arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}},removeChild:function(_648){dijit._Container.prototype.removeChild.apply(this,arguments);if(this._started){dijit.layout.layoutChildren(this.domNode,this._contentBox,this.getChildren());}}});dojo.extend(dijit._Widget,{layoutAlign:"none"});}if(!dojo._hasResource["dijit.layout.LinkPane"]){dojo._hasResource["dijit.layout.LinkPane"]=true;dojo.provide("dijit.layout.LinkPane");dojo.declare("dijit.layout.LinkPane",[dijit.layout.ContentPane,dijit._Templated],{templateString:"
",postCreate:function(){if(this.srcNodeRef){this.title+=this.srcNodeRef.innerHTML;}this.inherited("postCreate",arguments);}});}if(!dojo._hasResource["dijit.layout.SplitContainer"]){dojo._hasResource["dijit.layout.SplitContainer"]=true;dojo.provide("dijit.layout.SplitContainer");dojo.declare("dijit.layout.SplitContainer",dijit.layout._LayoutWidget,{activeSizing:false,sizerWidth:7,orientation:"horizontal",persist:true,postMixInProperties:function(){this.inherited("postMixInProperties",arguments);this.isHorizontal=(this.orientation=="horizontal");},postCreate:function(){this.inherited("postCreate",arguments);this.sizers=[];dojo.addClass(this.domNode,"dijitSplitContainer");if(dojo.isMozilla){this.domNode.style.overflow="-moz-scrollbars-none";}if(typeof this.sizerWidth=="object"){try{this.sizerWidth=parseInt(this.sizerWidth.toString());}catch(e){this.sizerWidth=7;}}var _649=this.virtualSizer=document.createElement("div");_649.style.position="relative";_649.style.zIndex=10;_649.className=this.isHorizontal?"dijitSplitContainerVirtualSizerH":"dijitSplitContainerVirtualSizerV";this.domNode.appendChild(_649);dojo.setSelectable(_649,false);},startup:function(){if(this._started){return;}dojo.forEach(this.getChildren(),function(_64a,i,_64c){this._injectChild(_64a);if(i<_64c.length-1){this._addSizer();}},this);if(this.persist){this._restoreState();}this.inherited("startup",arguments);this._started=true;},_injectChild:function(_64d){_64d.domNode.style.position="absolute";dojo.addClass(_64d.domNode,"dijitSplitPane");},_addSizer:function(){var i=this.sizers.length;var _64f=this.sizers[i]=document.createElement("div");_64f.className=this.isHorizontal?"dijitSplitContainerSizerH":"dijitSplitContainerSizerV";var _650=document.createElement("div");_650.className="thumb";_64f.appendChild(_650);var self=this;var _652=(function(){var _653=i;return function(e){self.beginSizing(e,_653);};})();dojo.connect(_64f,"onmousedown",_652);this.domNode.appendChild(_64f);dojo.setSelectable(_64f,false);},removeChild:function(_655){if(this.sizers.length&&dojo.indexOf(this.getChildren(),_655)!=-1){var i=this.sizers.length-1;dojo._destroyElement(this.sizers[i]);this.sizers.length--;}this.inherited("removeChild",arguments);if(this._started){this.layout();}},addChild:function(_657,_658){this.inherited("addChild",arguments);if(this._started){this._injectChild(_657);var _659=this.getChildren();if(_659.length>1){this._addSizer();}this.layout();}},layout:function(){this.paneWidth=this._contentBox.w;this.paneHeight=this._contentBox.h;var _65a=this.getChildren();if(!_65a.length){return;}var _65b=this.isHorizontal?this.paneWidth:this.paneHeight;if(_65a.length>1){_65b-=this.sizerWidth*(_65a.length-1);}var _65c=0;dojo.forEach(_65a,function(_65d){_65c+=_65d.sizeShare;});var _65e=_65b/_65c;var _65f=0;dojo.forEach(_65a.slice(0,_65a.length-1),function(_660){var size=Math.round(_65e*_660.sizeShare);_660.sizeActual=size;_65f+=size;});_65a[_65a.length-1].sizeActual=_65b-_65f;this._checkSizes();var pos=0;var size=_65a[0].sizeActual;this._movePanel(_65a[0],pos,size);_65a[0].position=pos;pos+=size;if(!this.sizers){return;}dojo.some(_65a.slice(1),function(_664,i){if(!this.sizers[i]){return true;}this._moveSlider(this.sizers[i],pos,this.sizerWidth);this.sizers[i].position=pos;pos+=this.sizerWidth;size=_664.sizeActual;this._movePanel(_664,pos,size);_664.position=pos;pos+=size;},this);},_movePanel:function(_666,pos,size){if(this.isHorizontal){_666.domNode.style.left=pos+"px";_666.domNode.style.top=0;var box={w:size,h:this.paneHeight};if(_666.resize){_666.resize(box);}else{dojo.marginBox(_666.domNode,box);}}else{_666.domNode.style.left=0;_666.domNode.style.top=pos+"px";var box={w:this.paneWidth,h:size};if(_666.resize){_666.resize(box);}else{dojo.marginBox(_666.domNode,box);}}},_moveSlider:function(_66a,pos,size){if(this.isHorizontal){_66a.style.left=pos+"px";_66a.style.top=0;dojo.marginBox(_66a,{w:size,h:this.paneHeight});}else{_66a.style.left=0;_66a.style.top=pos+"px";dojo.marginBox(_66a,{w:this.paneWidth,h:size});}},_growPane:function(_66d,pane){if(_66d>0){if(pane.sizeActual>pane.sizeMin){if((pane.sizeActual-pane.sizeMin)>_66d){pane.sizeActual=pane.sizeActual-_66d;_66d=0;}else{_66d-=pane.sizeActual-pane.sizeMin;pane.sizeActual=pane.sizeMin;}}}return _66d;},_checkSizes:function(){var _66f=0;var _670=0;var _671=this.getChildren();dojo.forEach(_671,function(_672){_670+=_672.sizeActual;_66f+=_672.sizeMin;});if(_66f<=_670){var _673=0;dojo.forEach(_671,function(_674){if(_674.sizeActual<_674.sizeMin){_673+=_674.sizeMin-_674.sizeActual;_674.sizeActual=_674.sizeMin;}});if(_673>0){var list=this.isDraggingLeft?_671.reverse():_671;dojo.forEach(list,function(_676){_673=this._growPane(_673,_676);},this);}}else{dojo.forEach(_671,function(_677){_677.sizeActual=Math.round(_670*(_677.sizeMin/_66f));});}},beginSizing:function(e,i){var _67a=this.getChildren();this.paneBefore=_67a[i];this.paneAfter=_67a[i+1];this.isSizing=true;this.sizingSplitter=this.sizers[i];if(!this.cover){this.cover=dojo.doc.createElement("div");this.domNode.appendChild(this.cover);var s=this.cover.style;s.position="absolute";s.zIndex=1;s.top=0;s.left=0;s.width="100%";s.height="100%";}else{this.cover.style.zIndex=1;}this.sizingSplitter.style.zIndex=2;this.originPos=dojo.coords(_67a[0].domNode,true);if(this.isHorizontal){var _67c=(e.layerX?e.layerX:e.offsetX);var _67d=e.pageX;this.originPos=this.originPos.x;}else{var _67c=(e.layerY?e.layerY:e.offsetY);var _67d=e.pageY;this.originPos=this.originPos.y;}this.startPoint=this.lastPoint=_67d;this.screenToClientOffset=_67d-_67c;this.dragOffset=this.lastPoint-this.paneBefore.sizeActual-this.originPos-this.paneBefore.position;if(!this.activeSizing){this._showSizingLine();}this._connects=[];this._connects.push(dojo.connect(document.documentElement,"onmousemove",this,"changeSizing"));this._connects.push(dojo.connect(document.documentElement,"onmouseup",this,"endSizing"));dojo.stopEvent(e);},changeSizing:function(e){if(!this.isSizing){return;}this.lastPoint=this.isHorizontal?e.pageX:e.pageY;this.movePoint();if(this.activeSizing){this._updateSize();}else{this._moveSizingLine();}dojo.stopEvent(e);},endSizing:function(e){if(!this.isSizing){return;}if(this.cover){this.cover.style.zIndex=-1;}if(!this.activeSizing){this._hideSizingLine();}this._updateSize();this.isSizing=false;if(this.persist){this._saveState(this);}dojo.forEach(this._connects,dojo.disconnect);},movePoint:function(){var p=this.lastPoint-this.screenToClientOffset;var a=p-this.dragOffset;a=this.legaliseSplitPoint(a);p=a+this.dragOffset;this.lastPoint=p+this.screenToClientOffset;},legaliseSplitPoint:function(a){a+=this.sizingSplitter.position;this.isDraggingLeft=!!(a>0);if(!this.activeSizing){var min=this.paneBefore.position+this.paneBefore.sizeMin;if(amax){a=max;}}a-=this.sizingSplitter.position;this._checkSizes();return a;},_updateSize:function(){var pos=this.lastPoint-this.dragOffset-this.originPos;var _686=this.paneBefore.position;var _687=this.paneAfter.position+this.paneAfter.sizeActual;this.paneBefore.sizeActual=pos-_686;this.paneAfter.position=pos+this.sizerWidth;this.paneAfter.sizeActual=_687-this.paneAfter.position;dojo.forEach(this.getChildren(),function(_688){_688.sizeShare=_688.sizeActual;});if(this._started){this.layout();}},_showSizingLine:function(){this._moveSizingLine();dojo.marginBox(this.virtualSizer,this.isHorizontal?{w:this.sizerWidth,h:this.paneHeight}:{w:this.paneWidth,h:this.sizerWidth});this.virtualSizer.style.display="block";},_hideSizingLine:function(){this.virtualSizer.style.display="none";},_moveSizingLine:function(){var pos=(this.lastPoint-this.startPoint)+this.sizingSplitter.position;dojo.style(this.virtualSizer,(this.isHorizontal?"left":"top"),pos+"px");},_getCookieName:function(i){return this.id+"_"+i;},_restoreState:function(){dojo.forEach(this.getChildren(),function(_68b,i){var _68d=this._getCookieName(i);var _68e=dojo.cookie(_68d);if(_68e){var pos=parseInt(_68e);if(typeof pos=="number"){_68b.sizeShare=pos;}}},this);},_saveState:function(){dojo.forEach(this.getChildren(),function(_690,i){dojo.cookie(this._getCookieName(i),_690.sizeShare);},this);}});dojo.extend(dijit._Widget,{sizeMin:10,sizeShare:10});}if(!dojo._hasResource["dijit.layout.TabContainer"]){dojo._hasResource["dijit.layout.TabContainer"]=true;dojo.provide("dijit.layout.TabContainer");dojo.declare("dijit.layout.TabContainer",[dijit.layout.StackContainer,dijit._Templated],{tabPosition:"top",templateString:null,templateString:"
\n\t
\n\t
\n
\n",postCreate:function(){dijit.layout.TabContainer.superclass.postCreate.apply(this,arguments);this.tablist=new dijit.layout.TabController({id:this.id+"_tablist",tabPosition:this.tabPosition,doLayout:this.doLayout,containerId:this.id},this.tablistNode);},_setupChild:function(tab){dojo.addClass(tab.domNode,"dijitTabPane");this.inherited("_setupChild",arguments);return tab;},startup:function(){if(this._started){return;}this.tablist.startup();this.inherited("startup",arguments);if(dojo.isSafari){setTimeout(dojo.hitch(this,"layout"),0);}},layout:function(){if(!this.doLayout){return;}var _693=this.tabPosition.replace(/-h/,"");var _694=[{domNode:this.tablist.domNode,layoutAlign:_693},{domNode:this.containerNode,layoutAlign:"client"}];dijit.layout.layoutChildren(this.domNode,this._contentBox,_694);this._containerContentBox=dijit.layout.marginBox2contentBox(this.containerNode,_694[1]);if(this.selectedChildWidget){this._showChild(this.selectedChildWidget);if(this.doLayout&&this.selectedChildWidget.resize){this.selectedChildWidget.resize(this._containerContentBox);}}},destroy:function(){this.tablist.destroy();this.inherited("destroy",arguments);}});dojo.declare("dijit.layout.TabController",dijit.layout.StackController,{templateString:"
",tabPosition:"top",doLayout:true,buttonWidget:"dijit.layout._TabButton",postMixInProperties:function(){this["class"]="dijitTabLabels-"+this.tabPosition+(this.doLayout?"":" dijitTabNoLayout");this.inherited("postMixInProperties",arguments);}});dojo.declare("dijit.layout._TabButton",dijit.layout._StackButton,{baseClass:"dijitTab",templateString:"
\n
\n ${!label}\n \n x\n \n
\n
\n",postCreate:function(){if(this.closeButton){dojo.addClass(this.innerDiv,"dijitClosable");}else{this.closeButtonNode.style.display="none";}this.inherited("postCreate",arguments);dojo.setSelectable(this.containerNode,false);}});}if(!dojo._hasResource["dijit.dijit-all"]){dojo._hasResource["dijit.dijit-all"]=true;console.warn("dijit-all may include much more code than your application actually requires. We strongly recommend that you investigate a custom build or the web build tool");dojo.provide("dijit.dijit-all");}dojo.i18n._preloadLocalizations("dijit.nls.dijit-all",["es-es","es","hu","it-it","de","pt-br","pl","fr-fr","zh-cn","pt","en-us","zh","ru","xx","fr","zh-tw","it","cs","en-gb","de-de","ja-jp","ko-kr","ko","en","ROOT","ja"]); diff --git a/spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js b/spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js index 936ddd9d..49af4c93 100644 --- a/spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js +++ b/spring-faces/src/main/java/META-INF/dijit/dijit-all.js.uncompressed.js @@ -5,7 +5,7 @@ Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: - http://dojotoolkit.org/community/licensing.shtml + http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing */ /* @@ -34,9 +34,11 @@ dojo.provide("dojo.colors"); }; dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){ - // summary: get rgb(a) array from css-style color declarations - // description: this function can handle all 4 CSS3 Color Module formats: - // rgb, rgba, hsl, hsla, including rgb(a) with percentage values. + // summary: + // get rgb(a) array from css-style color declarations + // description: + // this function can handle all 4 CSS3 Color Module formats: rgb, + // rgba, hsl, hsla, including rgb(a) with percentage values. var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/); if(m){ var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1]; @@ -98,138 +100,138 @@ dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){ // mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings dojo.Color.named = dojo.mixin({ -aliceblue: [240,248,255], -antiquewhite: [250,235,215], -aquamarine: [127,255,212], -azure: [240,255,255], -beige: [245,245,220], -bisque: [255,228,196], -blanchedalmond: [255,235,205], -blueviolet: [138,43,226], -brown: [165,42,42], -burlywood: [222,184,135], -cadetblue: [95,158,160], -chartreuse: [127,255,0], -chocolate: [210,105,30], -coral: [255,127,80], -cornflowerblue: [100,149,237], -cornsilk: [255,248,220], -crimson: [220,20,60], -cyan: [0,255,255], -darkblue: [0,0,139], -darkcyan: [0,139,139], -darkgoldenrod: [184,134,11], -darkgray: [169,169,169], -darkgreen: [0,100,0], -darkgrey: [169,169,169], -darkkhaki: [189,183,107], -darkmagenta: [139,0,139], -darkolivegreen: [85,107,47], -darkorange: [255,140,0], -darkorchid: [153,50,204], -darkred: [139,0,0], -darksalmon: [233,150,122], -darkseagreen: [143,188,143], -darkslateblue: [72,61,139], -darkslategray: [47,79,79], -darkslategrey: [47,79,79], -darkturquoise: [0,206,209], -darkviolet: [148,0,211], -deeppink: [255,20,147], -deepskyblue: [0,191,255], -dimgray: [105,105,105], -dimgrey: [105,105,105], -dodgerblue: [30,144,255], -firebrick: [178,34,34], -floralwhite: [255,250,240], -forestgreen: [34,139,34], -gainsboro: [220,220,220], -ghostwhite: [248,248,255], -gold: [255,215,0], -goldenrod: [218,165,32], -greenyellow: [173,255,47], -grey: [128,128,128], -honeydew: [240,255,240], -hotpink: [255,105,180], -indianred: [205,92,92], -indigo: [75,0,130], -ivory: [255,255,240], -khaki: [240,230,140], -lavender: [230,230,250], -lavenderblush: [255,240,245], -lawngreen: [124,252,0], -lemonchiffon: [255,250,205], -lightblue: [173,216,230], -lightcoral: [240,128,128], -lightcyan: [224,255,255], -lightgoldenrodyellow: [250,250,210], -lightgray: [211,211,211], -lightgreen: [144,238,144], -lightgrey: [211,211,211], -lightpink: [255,182,193], -lightsalmon: [255,160,122], -lightseagreen: [32,178,170], -lightskyblue: [135,206,250], -lightslategray: [119,136,153], -lightslategrey: [119,136,153], -lightsteelblue: [176,196,222], -lightyellow: [255,255,224], -limegreen: [50,205,50], -linen: [250,240,230], -magenta: [255,0,255], -mediumaquamarine: [102,205,170], -mediumblue: [0,0,205], -mediumorchid: [186,85,211], -mediumpurple: [147,112,219], -mediumseagreen: [60,179,113], -mediumslateblue: [123,104,238], -mediumspringgreen: [0,250,154], -mediumturquoise: [72,209,204], -mediumvioletred: [199,21,133], -midnightblue: [25,25,112], -mintcream: [245,255,250], -mistyrose: [255,228,225], -moccasin: [255,228,181], -navajowhite: [255,222,173], -oldlace: [253,245,230], -olivedrab: [107,142,35], -orange: [255,165,0], -orangered: [255,69,0], -orchid: [218,112,214], -palegoldenrod: [238,232,170], -palegreen: [152,251,152], -paleturquoise: [175,238,238], -palevioletred: [219,112,147], -papayawhip: [255,239,213], -peachpuff: [255,218,185], -peru: [205,133,63], -pink: [255,192,203], -plum: [221,160,221], -powderblue: [176,224,230], -rosybrown: [188,143,143], -royalblue: [65,105,225], -saddlebrown: [139,69,19], -salmon: [250,128,114], -sandybrown: [244,164,96], -seagreen: [46,139,87], -seashell: [255,245,238], -sienna: [160,82,45], -skyblue: [135,206,235], -slateblue: [106,90,205], -slategray: [112,128,144], -slategrey: [112,128,144], -snow: [255,250,250], -springgreen: [0,255,127], -steelblue: [70,130,180], -tan: [210,180,140], -thistle: [216,191,216], -tomato: [255,99,71], -transparent: [0, 0, 0, 0], -turquoise: [64,224,208], -violet: [238,130,238], -wheat: [245,222,179], -whitesmoke: [245,245,245], -yellowgreen: [154,205,50] + aliceblue: [240,248,255], + antiquewhite: [250,235,215], + aquamarine: [127,255,212], + azure: [240,255,255], + beige: [245,245,220], + bisque: [255,228,196], + blanchedalmond: [255,235,205], + blueviolet: [138,43,226], + brown: [165,42,42], + burlywood: [222,184,135], + cadetblue: [95,158,160], + chartreuse: [127,255,0], + chocolate: [210,105,30], + coral: [255,127,80], + cornflowerblue: [100,149,237], + cornsilk: [255,248,220], + crimson: [220,20,60], + cyan: [0,255,255], + darkblue: [0,0,139], + darkcyan: [0,139,139], + darkgoldenrod: [184,134,11], + darkgray: [169,169,169], + darkgreen: [0,100,0], + darkgrey: [169,169,169], + darkkhaki: [189,183,107], + darkmagenta: [139,0,139], + darkolivegreen: [85,107,47], + darkorange: [255,140,0], + darkorchid: [153,50,204], + darkred: [139,0,0], + darksalmon: [233,150,122], + darkseagreen: [143,188,143], + darkslateblue: [72,61,139], + darkslategray: [47,79,79], + darkslategrey: [47,79,79], + darkturquoise: [0,206,209], + darkviolet: [148,0,211], + deeppink: [255,20,147], + deepskyblue: [0,191,255], + dimgray: [105,105,105], + dimgrey: [105,105,105], + dodgerblue: [30,144,255], + firebrick: [178,34,34], + floralwhite: [255,250,240], + forestgreen: [34,139,34], + gainsboro: [220,220,220], + ghostwhite: [248,248,255], + gold: [255,215,0], + goldenrod: [218,165,32], + greenyellow: [173,255,47], + grey: [128,128,128], + honeydew: [240,255,240], + hotpink: [255,105,180], + indianred: [205,92,92], + indigo: [75,0,130], + ivory: [255,255,240], + khaki: [240,230,140], + lavender: [230,230,250], + lavenderblush: [255,240,245], + lawngreen: [124,252,0], + lemonchiffon: [255,250,205], + lightblue: [173,216,230], + lightcoral: [240,128,128], + lightcyan: [224,255,255], + lightgoldenrodyellow: [250,250,210], + lightgray: [211,211,211], + lightgreen: [144,238,144], + lightgrey: [211,211,211], + lightpink: [255,182,193], + lightsalmon: [255,160,122], + lightseagreen: [32,178,170], + lightskyblue: [135,206,250], + lightslategray: [119,136,153], + lightslategrey: [119,136,153], + lightsteelblue: [176,196,222], + lightyellow: [255,255,224], + limegreen: [50,205,50], + linen: [250,240,230], + magenta: [255,0,255], + mediumaquamarine: [102,205,170], + mediumblue: [0,0,205], + mediumorchid: [186,85,211], + mediumpurple: [147,112,219], + mediumseagreen: [60,179,113], + mediumslateblue: [123,104,238], + mediumspringgreen: [0,250,154], + mediumturquoise: [72,209,204], + mediumvioletred: [199,21,133], + midnightblue: [25,25,112], + mintcream: [245,255,250], + mistyrose: [255,228,225], + moccasin: [255,228,181], + navajowhite: [255,222,173], + oldlace: [253,245,230], + olivedrab: [107,142,35], + orange: [255,165,0], + orangered: [255,69,0], + orchid: [218,112,214], + palegoldenrod: [238,232,170], + palegreen: [152,251,152], + paleturquoise: [175,238,238], + palevioletred: [219,112,147], + papayawhip: [255,239,213], + peachpuff: [255,218,185], + peru: [205,133,63], + pink: [255,192,203], + plum: [221,160,221], + powderblue: [176,224,230], + rosybrown: [188,143,143], + royalblue: [65,105,225], + saddlebrown: [139,69,19], + salmon: [250,128,114], + sandybrown: [244,164,96], + seagreen: [46,139,87], + seashell: [255,245,238], + sienna: [160,82,45], + skyblue: [135,206,235], + slateblue: [106,90,205], + slategray: [112,128,144], + slategrey: [112,128,144], + snow: [255,250,250], + springgreen: [0,255,127], + steelblue: [70,130,180], + tan: [210,180,140], + thistle: [216,191,216], + tomato: [255,99,71], + transparent: [0, 0, 0, 0], + turquoise: [64,224,208], + violet: [238,130,238], + wheat: [245,222,179], + whitesmoke: [245,245,245], + yellowgreen: [154,205,50] }, dojo.Color.named); } @@ -239,19 +241,27 @@ dojo._hasResource["dojo.i18n"] = true; dojo.provide("dojo.i18n"); dojo.i18n.getLocalization = function(/*String*/packageName, /*String*/bundleName, /*String?*/locale){ -// summary: -// Returns an Object containing the localization for a given resource bundle -// in a package, matching the specified locale. -// -// description: -// Returns a hash containing name/value pairs in its prototypesuch that values can be easily overridden. -// Throws an exception if the bundle is not found. -// Bundle must have already been loaded by dojo.requireLocalization() or by a build optimization step. -// -// packageName: package which is associated with this resource -// bundleName: the base filename of the resource bundle (without the ".js" suffix) -// locale: the variant to load (optional). By default, the locale defined by the -// host environment: dojo.locale + // summary: + // Returns an Object containing the localization for a given resource + // bundle in a package, matching the specified locale. + // description: + // Returns a hash containing name/value pairs in its prototypesuch + // that values can be easily overridden. Throws an exception if the + // bundle is not found. Bundle must have already been loaded by + // dojo.requireLocalization() or by a build optimization step. NOTE: + // try not to call this method as part of an object property + // definition (var foo = { bar: dojo.i18n.getLocalization() }). In + // some loading situations, the bundle may not be available in time + // for the object definition. Instead, call this method inside a + // function that is run after all modules load or the page loads (like + // in dojo.adOnLoad()), or in a widget lifecycle method. + // packageName: + // package which is associated with this resource + // bundleName: + // the base filename of the resource bundle (without the ".js" suffix) + // locale: + // the variant to load (optional). By default, the locale defined by + // the host environment: dojo.locale locale = dojo.i18n.normalizeLocale(locale); @@ -300,11 +310,11 @@ dojo.i18n.normalizeLocale = function(/*String?*/locale){ }; dojo.i18n._requireLocalization = function(/*String*/moduleName, /*String*/bundleName, /*String?*/locale, /*String?*/availableFlatLocales){ - // summary: - // See dojo.requireLocalization() - // - // description: - // Called by the bootstrap, but factored out so that it is only included in the build when needed. + // summary: + // See dojo.requireLocalization() + // description: + // Called by the bootstrap, but factored out so that it is only + // included in the build when needed. var targetLocale = dojo.i18n.normalizeLocale(locale); var bundlePackage = [moduleName, "nls", bundleName].join("."); @@ -445,7 +455,7 @@ dojo.i18n._searchLocalePath = function(/*String*/locale, /*Boolean*/down, /*Func }; dojo.i18n._preloadLocalizations = function(/*String*/bundlePrefix, /*Array*/localesGenerated){ - // summary: + // summary: // Load built, flattened resource bundles, if available for all // locales used in the page. Only called by built layer files. @@ -488,13 +498,13 @@ dojo.declare( // Grid showing various colors, so the user can pick a certain color // defaultTimeout: Number - // number of milliseconds before a held key or button becomes typematic + // number of milliseconds before a held key or button becomes typematic defaultTimeout: 500, // timeoutChangeRate: Number - // fraction of time used to change the typematic timer between events - // 1.0 means that each typematic event fires at defaultTimeout intervals - // < 1.0 means that each typematic event fires at an increasing faster rate + // fraction of time used to change the typematic timer between events + // 1.0 means that each typematic event fires at defaultTimeout intervals + // < 1.0 means that each typematic event fires at an increasing faster rate timeoutChangeRate: 0.90, // palette: String @@ -522,7 +532,7 @@ dojo.declare( // The first level is a hashmap of the different arrays available // The next two dimensions represent the columns and rows of colors. _palettes: { - + "7x10": [["white", "seashell", "cornsilk", "lemonchiffon","lightyellow", "palegreen", "paleturquoise", "lightcyan", "lavender", "plum"], ["lightgray", "pink", "bisque", "moccasin", "khaki", "lightgreen", "lightseagreen", "lightskyblue", "cornflowerblue", "violet"], ["silver", "lightcoral", "sandybrown", "orange", "palegoldenrod", "chartreuse", "mediumturquoise", "skyblue", "mediumslateblue","orchid"], @@ -530,11 +540,11 @@ dojo.declare( ["dimgray", "crimson", "chocolate", "coral", "gold", "forestgreen", "seagreen", "blue", "blueviolet", "darkorchid"], ["darkslategray","firebrick","saddlebrown", "sienna", "olive", "green", "darkcyan", "mediumblue","darkslateblue", "darkmagenta" ], ["black", "darkred", "maroon", "brown", "darkolivegreen", "darkgreen", "midnightblue", "navy", "indigo", "purple"]], - + "3x4": [["white", "lime", "green", "blue"], ["silver", "yellow", "fuchsia", "navy"], ["gray", "red", "purple", "black"]] - + }, // _imagePaths: Map @@ -548,18 +558,20 @@ dojo.declare( // This is a map that is used to calculate the coordinates of the // images that make up the palette. _paletteCoords: { - "leftOffset": 3, "topOffset": 3, - "cWidth": 18, "cHeight": 16 + "leftOffset": 4, "topOffset": 4, + "cWidth": 20, "cHeight": 20 + }, // templatePath: String // Path to the template of this widget. - templateString:"
\n\t
\n\t\t\n\t
\t\n
\n", - + templateString:"
\n\t
\n\t\t\n\t
\t\n
\n", + // _paletteDims: Object + // Size of the supported palettes for alignment purposes. _paletteDims: { - "7x10": {"width": "185px", "height": "117px"}, - "3x4": {"width": "77px", "height": "53px"} + "7x10": {"width": "206px", "height": "145px"}, + "3x4": {"width": "86px", "height": "64px"} }, @@ -592,7 +604,7 @@ dojo.declare( highlightStyle.left = coords.leftOffset + (col * coords.cWidth) + "px"; highlightNode.setAttribute("tabIndex","-1"); highlightNode.title = this.colorNames[color]; - dijit.wai.setAttr(highlightNode, "waiRole", "role", "gridcell"); + dijit.setWaiRole(highlightNode, "gridcell"); highlightNode.index = this._highlightNodes.length; this._highlightNodes.push(highlightNode); } @@ -638,7 +650,7 @@ dojo.declare( // Callback when a color is selected. // color: String // Hex value corresponding to color. - console.debug("Color selected is: "+color); +// console.debug("Color selected is: "+color); }, _onColorDijitclick: function(/*Event*/ evt){ @@ -703,8 +715,7 @@ dojo.declare( // This selects a color. It triggers the onChange event // area: // The area node that covers the color being selected. - this.value = selectNode.color; - this.onChange(selectNode.color); + this.onChange(this.value = selectNode.color); }, _navigateByKey: function(increment, typeCount){ @@ -713,7 +724,7 @@ dojo.declare( // It changes the focus and the highlighed color. // increment: // How much the key is navigated. - // typeCount: + // typeCount: // How many times typematic has fired. // typecount == -1 means the key is released. @@ -758,8 +769,11 @@ dojo.declare( var propList = this.defaults||{}; - this.mixins = this.mixins.length ? - dojo.map(this.mixins, dojo.getObject) : + // map array of strings like [ "dijit.form.Button" ] to array of mixin objects + // (note that dojo.map(this.mixins, dojo.getObject) doesn't work because it passes + // a bogus third argument to getObject(), confusing it) + this.mixins = this.mixins.length ? + dojo.map(this.mixins, function(name){ return dojo.getObject(name); } ) : [ dijit._Widget, dijit._Templated ]; if(preambles.length){ @@ -767,17 +781,14 @@ dojo.declare( propList.preamble = dojo.parser._functionFromScript(preambles[0]); } propList.widgetsInTemplate = true; - propList.templateString = "<"+srcType+" class='"+src.className+"'>"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+""; + propList._skipNodeCache = true; + propList.templateString = "<"+srcType+" class='"+src.className+"' dojoAttachPoint='"+(src.getAttribute("dojoAttachPoint")||'')+"' dojoAttachEvent='"+(src.getAttribute("dojoAttachEvent")||'')+"' >"+src.innerHTML.replace(/\%7B/g,"{").replace(/\%7D/g,"}")+""; + // console.debug(propList.templateString); // strip things so we don't create stuff under us in the initial setup phase dojo.query("[dojoType]", src).forEach(function(node){ node.removeAttribute("dojoType"); }); - scripts.forEach(function(s){ - if(!s.getAttribute("event")){ - this.mixins.push(dojo.parser._functionFromScript(s)); - } - }, this); // create the new widget class dojo.declare( @@ -786,11 +797,12 @@ dojo.declare( propList ); + // do the connects for each "'+ + ' dojoAttachPoint="iframe,styleNode" dojoAttachEvent="onblur:_onIframeBlur" class="dijitInline dijitInputField dijitTextArea">') + '' + ((dojo.isIE || dojo.isSafari) ? '':'') - : '', - - _nlsResources: null, // Needed for screen readers on FF2 + : '', focus: function(){ // summary: Received focus, needed for the InlineEditBox widget @@ -12395,10 +13088,6 @@ dojo.declare( }else{ editNode.appendChild(document.createTextNode(value)); } - if(this.iframe){ - this.sizeNode = document.createElement('div'); - editNode.appendChild(this.sizeNode); - } }else{ // blah
blah --> blah\nblah //

blah

blah

--> blah\nblah @@ -12410,21 +13099,24 @@ dojo.declare( } value = value.replace(/\s*\r?\n|^\s+|\s+$| /g,"").replace(/>\s+<").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])
/g,"$1\n").replace(/<\/p>\s*]*>|]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&/gi,"\&").replace(/</gi,"<").replace(/>/gi,">"); } - this.formValueNode.value = value; + this.value = this.formValueNode.value = value; if(this.iframe){ - var newHeight = this.sizeNode.offsetTop; + var sizeNode = document.createElement('div'); + editNode.appendChild(sizeNode); + var newHeight = sizeNode.offsetTop; if(editNode.scrollWidth > editNode.clientWidth){ newHeight+=16; } // scrollbar space needed? if(this.lastHeight != newHeight){ // cache size so that we don't get a resize event because of a resize event if(newHeight == 0){ newHeight = 16; } // height = 0 causes the browser to not set scrollHeight dojo.contentBox(this.iframe, {h: newHeight}); this.lastHeight = newHeight; } + editNode.removeChild(sizeNode); } - dijit.form.Textarea.superclass.setValue.call(this, value, priorityChange); + dijit.form.Textarea.superclass.setValue.call(this, this.getValue(), priorityChange); }, getValue: function(){ - return this.formValueNode.value; + return this.formValueNode.value.replace(/\r/g,""); }, postMixInProperties: function(){ @@ -12439,17 +13131,7 @@ dojo.declare( } if(!this.value){ this.value = ""; } this.value = this.value.replace(/\r\n/g,"\n").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&"); - }, - - postCreate: function(){ - if(dojo.isIE || dojo.isSafari){ - this.domNode.style.overflowY = 'hidden'; - this.eventNode = this.focusNode = this.editNode; - this.connect(this.eventNode, "oncut", this._changing); - this.connect(this.eventNode, "onpaste", this._changing); - }else if(dojo.isMozilla){ - var w = this.iframe.contentWindow; - var d = w.document; + if(dojo.isMozilla){ // In the case of Firefox an iframe is used and when the text gets focus, // focus is fired from the document object. There isn't a way to put a // waiRole on the document object and as a result screen readers don't @@ -12457,7 +13139,7 @@ dojo.declare( // // An additional problem is that the browser gives the document object a // very cryptic accessible name, e.g. - // wyciwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html + // wysiwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html // When focus is fired from the document object, the screen reader speaks // the accessible name. The cyptic accessile name is confusing. // @@ -12466,19 +13148,38 @@ dojo.declare( // "edit area". This will be used as the accessible name which will replace // the cryptic name and will also convey the role information to the user. // Because it is read directly to the user, the string must be localized. - this._nlsResources = dojo.i18n.getLocalization("dijit.form", "Textarea"); - d.open(); - d.write('' + - this._nlsResources.iframeTitle1 + // "edit area" - ''); - // body > br style is to remove the
that gets added by FF - d.close(); - this.editNode = d.body; + var _nlsResources = dojo.i18n.getLocalization("dijit", "Textarea"); + this._iframeEditTitle = _nlsResources.iframeEditTitle; + this._iframeFocusTitle = _nlsResources.iframeFocusTitle; + var body = this.focusNode = this.editNode = document.createElement('BODY'); + body.style.margin="0px"; + body.style.padding="0px"; + body.style.border="0px"; + } + }, + + postCreate: function(){ + if(dojo.isIE || dojo.isSafari){ + this.domNode.style.overflowY = 'hidden'; + }else if(dojo.isMozilla){ + var w = this.iframe.contentWindow; + try { // #4715: peeking at the title can throw a security exception during iframe setup + var title = this.iframe.contentDocument.title; + } catch(e) { var title = ''; } + if(!w || !title){ + this.iframe.postCreate = dojo.hitch(this, this.postCreate); + return; + } + var d = w.document; + d.getElementsByTagName('HTML')[0].replaceChild(this.editNode, d.getElementsByTagName('BODY')[0]); + if(!this.isLeftToRight()){ + d.getElementsByTagName('HTML')[0].dir = "rtl"; + } this.iframe.style.overflowY = 'hidden'; - // resize is a method of window, not document this.eventNode = d; - this.focusNode = this.editNode; - this.connect(w, "resize", this._changed); // resize is only on the window object + // this.connect won't destroy this handler cleanly since its on the iframe's window object + // resize is a method of window, not document + w.addEventListener("resize", dojo.hitch(this, this._changed), false); // resize is only on the window object }else{ this.focusNode = this.domNode; } @@ -12507,7 +13208,7 @@ dojo.declare( _onIframeBlur: function(){ // Reset the title back to "edit area". - this.iframe.contentDocument.title = this._nlsResources.iframeTitle1; + this.iframe.contentDocument.title = this._iframeEditTitle; }, _onKeyPress: function(e){ @@ -12520,10 +13221,10 @@ dojo.declare( // announced twice which causes confusion. By setting the // contentDocument's title to "edit area frame" the confusion should be // eliminated. - this.iframe.contentDocument.title = this._nlsResources.iframeTitle2; + this.iframe.contentDocument.title = this._iframeFocusTitle; // Place focus on the iframe. A subsequent tab or shift tab will put focus // on the correct control. - // Note: Can't use this.focus() because that results in a call to + // Note: Can't use this.focus() because that results in a call to // dijit.focus and if that receives an iframe target it will set focus // on the iframe's contentWindow. this.iframe.focus(); // this.focus(); won't work @@ -12585,6 +13286,14 @@ dojo.declare( _started: false, + // selectedChildWidget: Widget + // References the currently selected child widget, if any + + postCreate: function(){ + dijit.setWaiRole((this.containerNode || this.domNode), "tabpanel"); + this.connect(this.domNode, "onkeypress", this._onKeyPress); + }, + startup: function(){ if(this._started){ return; } @@ -12601,19 +13310,20 @@ dojo.declare( return child.selected; }, this); + var selected = this.selectedChildWidget; + // Default to the first child - if(!this.selectedChildWidget && children[0]){ - this.selectedChildWidget = children[0]; - this.selectedChildWidget.selected = true; + if(!selected && children[0]){ + selected = this.selectedChildWidget = children[0]; + selected.selected = true; } - if(this.selectedChildWidget){ - this._showChild(this.selectedChildWidget); + if(selected){ + this._showChild(selected); } // Now publish information about myself so any StackControllers can initialize.. - dojo.publish(this.id+"-startup", [{children: children, selected: this.selectedChildWidget}]); - - dijit.layout._LayoutWidget.prototype.startup.apply(this, arguments); + dojo.publish(this.id+"-startup", [{children: children, selected: selected}]); + this.inherited("startup",arguments); this._started = true; }, @@ -12626,10 +13336,12 @@ dojo.declare( // to be position:relative, or IE has problems (See bug #2033) page.domNode.style.position = "relative"; - return page; + return page; // dijit._Widget }, addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ + // summary: Adds a widget to the stack + dijit._Container.prototype.addChild.apply(this, arguments); child = this._setupChild(child); @@ -12637,7 +13349,7 @@ dojo.declare( // in case the tab titles have overflowed from one line to two lines this.layout(); - dojo.publish(this.id+"-addChild", [child]); + dojo.publish(this.id+"-addChild", [child, insertIndex]); // if this is the first child, then select it if(!this.selectedChildWidget){ @@ -12647,6 +13359,7 @@ dojo.declare( }, removeChild: function(/*Widget*/ page){ + // summary: Removes the pane from the stack dijit._Container.prototype.removeChild.apply(this, arguments); @@ -12674,7 +13387,7 @@ dojo.declare( }, selectChild: function(/*Widget*/ page){ - // summary + // summary: // Show the given widget (which must be one of my children) page = dijit.byId(page); @@ -12701,52 +13414,29 @@ dojo.declare( } }, - forward: function(){ - // Summary: advance to next page + _adjacent: function(/*Boolean*/ forward){ + // summary: Gets the next/previous child widget in this container from the current selection var children = this.getChildren(); var index = dojo.indexOf(children, this.selectedChildWidget); - this.selectChild(children[ (index + 1) % children.length ]); + index += forward ? 1 : children.length - 1; + return children[ index % children.length ]; // dijit._Widget + }, + + forward: function(){ + // Summary: advance to next page + this.selectChild(this._adjacent(true)); }, back: function(){ // Summary: go back to previous page - var children = this.getChildren(); - var index = dojo.indexOf(children, this.selectedChildWidget); - this.selectChild(children[ (index + children.length - 1) % children.length ]); + this.selectChild(this._adjacent(false)); }, - // TODO: move this logic into controller? _onKeyPress: function(e){ - // summary - // Keystroke handling for keystrokes on the tab panel itself (that were bubbled up to me) - // Ctrl-w: close tab - if (e.ctrlKey){ - switch(e.keyCode){ - case dojo.keys.PAGE_DOWN: - case dojo.keys.PAGE_UP: - case dojo.keys.TAB: - if ((e.keyCode == dojo.keys.PAGE_DOWN) || - (e.keyCode == dojo.keys.TAB && !e.shiftKey)){ - this.forward(); - }else{ - this.back(); - } - dijit.focus(this.selectedChildWidget.domNode); - dojo.stopEvent(e); - return false; - break; - default: - if((e.keyChar == "w") && - (this.selectedChildWidget.closable)){ - this.closeChild(this.selectedChildWidget); - dojo.stopEvent(e); - } - } - } + dojo.publish(this.id+"-containerKeyPress", [{ e: e, page: this}]); }, layout: function(){ - // Summary: called when any page is shown, to make it fit the container correctly if(this.doLayout && this.selectedChildWidget && this.selectedChildWidget.resize){ this.selectedChildWidget.resize(this._contentBox); } @@ -12789,16 +13479,15 @@ dojo.declare( destroy: function(){ this._beingDestroyed = true; - dijit.layout.StackContainer.superclass.destroy.apply(this, arguments); + this.inherited("destroy",arguments); } }); - dojo.declare( "dijit.layout.StackController", [dijit._Widget, dijit._Templated, dijit._Container], { - // summary + // summary: // Set of buttons to select a page in a page list. // Monitors the specified StackContainer, and whenever a page is // added, deleted, or selected, updates itself accordingly. @@ -12814,14 +13503,15 @@ dojo.declare( buttonWidget: "dijit.layout._StackButton", postCreate: function(){ - dijit.wai.setAttr(this.domNode, "waiRole", "role", "tablist"); + dijit.setWaiRole(this.domNode, "tablist"); this.pane2button = {}; // mapping from panes to buttons this._subscriptions=[ dojo.subscribe(this.containerId+"-startup", this, "onStartup"), dojo.subscribe(this.containerId+"-addChild", this, "onAddChild"), dojo.subscribe(this.containerId+"-removeChild", this, "onRemoveChild"), - dojo.subscribe(this.containerId+"-selectChild", this, "onSelectChild") + dojo.subscribe(this.containerId+"-selectChild", this, "onSelectChild"), + dojo.subscribe(this.containerId+"-containerKeyPress", this, "onContainerKeyPress") ]; }, @@ -12833,11 +13523,11 @@ dojo.declare( destroy: function(){ dojo.forEach(this._subscriptions, dojo.unsubscribe); - dijit.layout.StackController.superclass.destroy.apply(this, arguments); + this.inherited("destroy",arguments); }, - onAddChild: function(/*Widget*/ page){ - // summary + onAddChild: function(/*Widget*/ page, /*Integer?*/ insertIndex){ + // summary: // Called whenever a page is added to the container. // Create button corresponding to the page. @@ -12847,13 +13537,13 @@ dojo.declare( // create an instance of the button widget var cls = dojo.getObject(this.buttonWidget); var button = new cls({label: page.title, closeButton: page.closable}, refNode); - this.addChild(button); + this.addChild(button, insertIndex); this.pane2button[page] = button; page.controlButton = button; // this value might be overwritten if two tabs point to same container - - var _this = this; - dojo.connect(button, "onClick", function(){ _this.onButtonClick(page); }); - dojo.connect(button, "onClickCloseButton", function(){ _this.onCloseButtonClick(page); }); + + dojo.connect(button, "onClick", dojo.hitch(this,"onButtonClick",page)); + dojo.connect(button, "onClickCloseButton", dojo.hitch(this,"onCloseButtonClick",page)); + if(!this._currentChild){ // put the first child into the tab order button.focusNode.setAttribute("tabIndex","0"); this._currentChild = page; @@ -12861,7 +13551,7 @@ dojo.declare( }, onRemoveChild: function(/*Widget*/ page){ - // summary + // summary: // Called whenever a page is removed from the container. // Remove the button corresponding to the page. if(this._currentChild === page){ this._currentChild = null; } @@ -12874,7 +13564,7 @@ dojo.declare( }, onSelectChild: function(/*Widget*/ page){ - // Summary + // summary: // Called when a page has been selected in the StackContainer, either by me or by another StackController if(!page){ return; } @@ -12892,14 +13582,14 @@ dojo.declare( }, onButtonClick: function(/*Widget*/ page){ - // summary + // summary: // Called whenever one of my child buttons is pressed in an attempt to select a page var container = dijit.byId(this.containerId); // TODO: do this via topics? - container.selectChild(page); + container.selectChild(page); }, onCloseButtonClick: function(/*Widget*/ page){ - // summary + // summary: // Called whenever one of my child buttons [X] is pressed in an attempt to close a page var container = dijit.byId(this.containerId); container.closeChild(page); @@ -12916,49 +13606,75 @@ dojo.declare( var current = dojo.indexOf(children, this.pane2button[this._currentChild]); // pick next button to focus on var offset = forward ? 1 : children.length - 1; - return children[ (current + offset) % children.length ]; + return children[ (current + offset) % children.length ]; // dijit._Widget }, - onkeypress: function(/*Event*/ evt){ + onkeypress: function(/*Event*/ e){ // summary: // Handle keystrokes on the page list, for advancing to next/previous button - // and closing the current page. + // and closing the current page if the page is closable. - if(this.disabled || evt.altKey || evt.shiftKey || evt.ctrlKey){ return; } + if(this.disabled || e.altKey ){ return; } var forward = true; - switch(evt.keyCode){ - case dojo.keys.LEFT_ARROW: - case dojo.keys.UP_ARROW: - forward=false; - // fall through - case dojo.keys.RIGHT_ARROW: - case dojo.keys.DOWN_ARROW: - this.adjacent(forward).onClick(); - dojo.stopEvent(evt); - break; - case dojo.keys.DELETE: - if (this._currentChild.closable){ - this.onCloseButtonClick(this._currentChild); - dojo.stopEvent(evt); // so we don't close a browser tab! - } - default: - return; + if(e.ctrlKey || !e._djpage){ + var k = dojo.keys; + switch(e.keyCode){ + case k.LEFT_ARROW: + case k.UP_ARROW: + case k.PAGE_UP: + forward = false; + // fall through + case k.RIGHT_ARROW: + case k.DOWN_ARROW: + case k.PAGE_DOWN: + this.adjacent(forward).onClick(); + dojo.stopEvent(e); + break; + case k.DELETE: + if(this._currentChild.closable){ + this.onCloseButtonClick(this._currentChild); + } + dojo.stopEvent(e); + break; + default: + if(e.ctrlKey){ + if(e.keyCode == k.TAB){ + this.adjacent(!e.shiftKey).onClick(); + dojo.stopEvent(e); + }else if(e.keyChar == "w"){ + if(this._currentChild.closable){ + this.onCloseButtonClick(this._currentChild); + } + dojo.stopEvent(e); // avoid browser tab closing. + } + } + } } - } - } -); + }, -dojo.declare( - "dijit.layout._StackButton", + onContainerKeyPress: function(/*Object*/ info){ + info.e._djpage = info.page; + this.onkeypress(info.e); + } +}); + +dojo.declare("dijit.layout._StackButton", dijit.form.ToggleButton, -{ + { // summary // Internal widget used by StackContainer. // The button-like or tab-like object you click to select or delete a page - - onClick: function(/*Event*/ evt) { - // this is for TabContainer where the tabs are rather than button, - // so need to set focus explicitly (on some browsers) + + tabIndex: "-1", // StackContainer buttons are not in the tab order by default + + postCreate: function(/*Event*/ evt){ + dijit.setWaiRole((this.focusNode || this.domNode), "tab"); + this.inherited("postCreate", arguments); + }, + + onClick: function(/*Event*/ evt){ + // summary: This is for TabContainer where the tabs are rather than button, + // so need to set focus explicitly (on some browsers) dijit.focus(this.focusNode); // ... now let StackController catch the event and tell me what to do @@ -13011,7 +13727,7 @@ dojo.declare( "dijit.layout.AccordionContainer", dijit.layout.StackContainer, { - // summary: + // summary: // Holds a set of panes where every pane's title is visible, but only one pane's content is visible at a time, // and switching between panes is visualized by sliding the other panes up/down. // usage: @@ -13032,12 +13748,14 @@ dojo.declare( postCreate: function(){ this.domNode.style.overflow="hidden"; - dijit.layout.AccordionContainer.superclass.postCreate.apply(this, arguments); + this.inherited("postCreate",arguments); + dijit.setWaiRole(this.domNode, "tablist"); + dojo.addClass(this.domNode,"dijitAccordionContainer"); }, startup: function(){ if(this._started){ return; } - dijit.layout.StackContainer.prototype.startup.apply(this, arguments); + this.inherited("startup",arguments); if(this.selectedChildWidget){ var style = this.selectedChildWidget.containerNode.style; style.display = ""; @@ -13076,6 +13794,8 @@ inside the AccordionPane?? _transition: function(/*Widget?*/newWidget, /*Widget?*/oldWidget){ //TODO: should be able to replace this with calls to slideIn/slideOut + if(this._inTransition){ return; } + this._inTransition = true; var animations = []; var paneHeight = this._verticalSpace; if(newWidget){ @@ -13083,8 +13803,8 @@ inside the AccordionPane?? var newContents = newWidget.containerNode; newContents.style.display = ""; - animations.push(dojo.animateProperty({ - node: newContents, + animations.push(dojo.animateProperty({ + node: newContents, duration: this.duration, properties: { height: { start: "1", end: paneHeight } @@ -13098,11 +13818,11 @@ inside the AccordionPane?? oldWidget.setSelected(false); var oldContents = oldWidget.containerNode; oldContents.style.overflow = "hidden"; - animations.push(dojo.animateProperty({ + animations.push(dojo.animateProperty({ node: oldContents, duration: this.duration, properties: { - height: { start: paneHeight, end: "1" } + height: { start: paneHeight, end: "1" } }, onEnd: function(){ oldContents.style.display = "none"; @@ -13110,30 +13830,34 @@ inside the AccordionPane?? })); } + this._inTransition = false; + dojo.fx.combine(animations).play(); }, // note: we are treating the container as controller here - processKey: function(/*Event*/ evt){ - if(this.disabled || evt.altKey || evt.shiftKey || evt.ctrlKey){ - return dijit.layout.AccordionContainer.superclass._onKeyPress.apply(this, arguments); - } - var forward = true; - switch(evt.keyCode){ - case dojo.keys.LEFT_ARROW: - case dojo.keys.UP_ARROW: - forward = false; - // fallthrough - case dojo.keys.RIGHT_ARROW: - case dojo.keys.DOWN_ARROW: - // find currently focused button in children array - var children = this.getChildren(); - var index = dojo.indexOf(children, evt._dijitWidget); - // pick next button to focus on - index += forward ? 1 : children.length - 1; - var next = children[ index % children.length ]; - dojo.stopEvent(evt); - next._onTitleClick(); + _onKeyPress: function(/*Event*/ e){ + if(this.disabled || e.altKey ){ return; } + var k = dojo.keys; + switch(e.keyCode){ + case k.LEFT_ARROW: + case k.UP_ARROW: + case k.PAGE_UP: + this._adjacent(false)._onTitleClick(); + dojo.stopEvent(e); + break; + case k.RIGHT_ARROW: + case k.DOWN_ARROW: + case k.PAGE_DOWN: + this._adjacent(true)._onTitleClick(); + dojo.stopEvent(e); + break; + default: + if(e.ctrlKey && e.keyCode == k.TAB){ + this._adjacent(e._dijitWidget, !e.shiftKey)._onTitleClick(); + dojo.stopEvent(e); + } + } } } @@ -13144,13 +13868,13 @@ dojo.declare( [dijit.layout.ContentPane, dijit._Templated, dijit._Contained], { // summary - // AccordionPane is a box with a title that contains another widget (often a ContentPane). - // It's a widget used internally by AccordionContainer. + // AccordionPane is a ContentPane with a title that may contain another widget. + // Nested layout widgets, such as SplitContainer, are not supported at this time. - templateString:"
${title}
\n
\n", + templateString:"
${title}
\n
\n", postCreate: function(){ - dijit.layout.AccordionPane.superclass.postCreate.apply(this, arguments); + this.inherited("postCreate",arguments) dojo.setSelectable(this.titleNode, false); this.setSelected(this.selected); }, @@ -13163,21 +13887,28 @@ dojo.declare( _onTitleClick: function(){ // summary: callback when someone clicks my title var parent = this.getParent(); - parent.selectChild(this); - dijit.focus(this.focusNode); + if(!parent._inTransition){ + parent.selectChild(this); + dijit.focus(this.focusNode); + } }, - _onKeyPress: function(/*Event*/ evt){ + _onTitleKeyPress: function(/*Event*/ evt){ evt._dijitWidget = this; - return this.getParent().processKey(evt); + return this.getParent()._onKeyPress(evt); }, - + _setSelectedState: function(/*Boolean*/ isSelected){ this.selected = isSelected; - (isSelected ? dojo.addClass : dojo.removeClass)(this.domNode, "dijitAccordionPane-selected"); - this.focusNode.setAttribute("tabIndex",(isSelected)? "0":"-1"); + dojo[(isSelected ? "addClass" : "removeClass")](this.domNode,"dijitAccordionPane-selected"); + this.focusNode.setAttribute("tabIndex", isSelected ? "0" : "-1"); }, + _handleFocus: function(/*Event*/e){ + // summary: handle the blur and focus state of this widget + dojo[(e.type=="focus" ? "addClass" : "removeClass")](this.focusNode,"dijitAccordionPaneFocused"); + }, + setSelected: function(/*Boolean*/ isSelected){ // summary: change the selected state on this pane this._setSelectedState(isSelected); @@ -13221,10 +13952,10 @@ dojo.declare( // - //
- //
header text
- //
table of contents
- //
client area
+ //
+ //
header text
+ //
table of contents
+ //
client area
//
// // Lays out each child in the natural order the children occur in. @@ -13244,8 +13975,8 @@ dojo.declare( }, removeChild: function(/*Widget*/ widget){ - dijit._Container.prototype.removeChild.apply(this, arguments); - if(this._started){ + dijit._Container.prototype.removeChild.apply(this, arguments); + if(this._started){ dijit.layout.layoutChildren(this.domNode, this._contentBox, this.getChildren()); } } @@ -13272,12 +14003,14 @@ dojo.provide("dijit.layout.LinkPane"); dojo.declare("dijit.layout.LinkPane", [dijit.layout.ContentPane, dijit._Templated], -{ - // summary + { + // summary: + // A ContentPane that loads data remotely + // description: // LinkPane is just a ContentPane that loads data remotely (via the href attribute), // and has markup similar to an anchor. The anchor's body (the words between and ) // become the title of the widget (used for TabContainer, AccordionContainer, etc.) - // usage + // example: // my title // I'm using a template because the user may specify the input as @@ -13292,102 +14025,44 @@ dojo.declare("dijit.layout.LinkPane", if(this.srcNodeRef){ this.title += this.srcNodeRef.innerHTML; } - - dijit.layout.LinkPane.superclass.postCreate.apply(this, arguments); - + this.inherited("postCreate",arguments); } }); } -if(!dojo._hasResource["dojo.cookie"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. -dojo._hasResource["dojo.cookie"] = true; -dojo.provide("dojo.cookie"); - -dojo.cookie = function(/*String*/name, /*String?*/value, /*Object?*/props){ - // summary: - // Get or set a cookie. - // - // If you pass in one argument, the the value of the cookie is returned - // - // If you pass in two arguments, the cookie value is set to the second - // argument. - // - // If you pass in three arguments, the cookie value is set to the - // second argument, and the options on the third argument are used for - // extended properties on the cookie - // - // name: The name of the cookie - // value: Optional. The value for the cookie. - // props: - // Optional additional properties for the cookie - // expires: Date or Number. Number is seen as days. - // If expires is in the past, the cookie will be deleted - // If expires is left out or is 0, the cookie will expire - // when the browser closes. - // path: String. The path to use for the cookie. - // domain: String. The domain to use for the cookie. - // secure: Boolean. Whether to only send the cookie on secure connections - var c = document.cookie; - if(arguments.length == 1){ - var idx = c.lastIndexOf(name+'='); - if(idx == -1){ return null; } - var start = idx+name.length+1; - var end = c.indexOf(';', idx+name.length+1); - if(end == -1){ end = c.length; } - return decodeURIComponent(c.substring(start, end)); - }else{ - props = props || {}; - value = encodeURIComponent(value); - if(typeof(props.expires) == "number"){ - var d = new Date(); - d.setTime(d.getTime()+(props.expires*24*60*60*1000)); - props.expires = d; - } - document.cookie = name + "=" + value - + (props.expires ? "; expires=" + props.expires.toUTCString() : "") - + (props.path ? "; path=" + props.path : "") - + (props.domain ? "; domain=" + props.domain : "") - + (props.secure ? "; secure" : ""); - return null; - } -}; - -} - if(!dojo._hasResource["dijit.layout.SplitContainer"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. dojo._hasResource["dijit.layout.SplitContainer"] = true; dojo.provide("dijit.layout.SplitContainer"); // -// TODO -// make it prettier -// active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case) +// FIXME: make it prettier +// FIXME: active dragging upwards doesn't always shift other bars (direction calculation is wrong in this case) // -dojo.declare( - "dijit.layout.SplitContainer", +dojo.declare("dijit.layout.SplitContainer", dijit.layout._LayoutWidget, -{ - // summary + { + // summary: + // A Container widget with sizing handles in-between each child + // description: // Contains multiple children widgets, all of which are displayed side by side // (either horizontally or vertically); there's a bar between each of the children, // and you can adjust the relative size of each child by dragging the bars. // // You must specify a size (width and height) for the SplitContainer. - + // // activeSizing: Boolean // If true, the children's size changes as you drag the bar; // otherwise, the sizes don't change until you drop the bar (by mouse-up) activeSizing: false, - // sizerWidget: Integer + // sizerWidth: Integer // Size in pixels of the bar between each child - // TODO: this should be a CSS attribute - sizerWidth: 15, + sizerWidth: 7, // FIXME: this should be a CSS attribute (at 7 because css wants it to be 7 until we fix to css) // orientation: String // either 'horizontal' or vertical; indicates whether the children are @@ -13399,12 +14074,12 @@ dojo.declare( persist: true, postMixInProperties: function(){ - dijit.layout.SplitContainer.superclass.postMixInProperties.apply(this, arguments); + this.inherited("postMixInProperties",arguments); this.isHorizontal = (this.orientation == 'horizontal'); }, postCreate: function(){ - dijit.layout.SplitContainer.superclass.postCreate.apply(this, arguments); + this.inherited("postCreate",arguments); this.sizers = []; dojo.addClass(this.domNode, "dijitSplitContainer"); // overflow has to be explicitly hidden for splitContainers using gekko (trac #1435) @@ -13417,7 +14092,7 @@ dojo.declare( if(typeof this.sizerWidth == "object"){ try{ //FIXME: do this without a try/catch this.sizerWidth = parseInt(this.sizerWidth.toString()); - }catch(e){ this.sizerWidth = 15; } + }catch(e){ this.sizerWidth = 7; } } var sizer = this.virtualSizer = document.createElement('div'); sizer.style.position = 'relative'; @@ -13450,7 +14125,7 @@ dojo.declare( if(this.persist){ this._restoreState(); } - dijit.layout._LayoutWidget.prototype.startup.apply(this, arguments); + this.inherited("startup",arguments); this._started = true; }, @@ -13471,6 +14146,7 @@ dojo.declare( thumb.className = 'thumb'; sizer.appendChild(thumb); + // FIXME: are you serious? why aren't we using mover start/stop combo? var self = this; var handler = (function(){ var sizer_i = i; return function(e){ self.beginSizing(e, sizer_i); } })(); dojo.connect(sizer, "onmousedown", handler); @@ -13480,7 +14156,7 @@ dojo.declare( }, removeChild: function(widget){ - // Remove sizer, but only if widget is really our child and + // summary: Remove sizer, but only if widget is really our child and // we have at least one sizer to throw away if(this.sizers.length && dojo.indexOf(this.getChildren(), widget) != -1){ var i = this.sizers.length - 1; @@ -13489,14 +14165,18 @@ dojo.declare( } // Remove widget and repaint - dijit._Container.prototype.removeChild.apply(this, arguments); + this.inherited("removeChild",arguments); if(this._started){ this.layout(); } - }, + }, addChild: function(/*Widget*/ child, /*Integer?*/ insertIndex){ - dijit._Container.prototype.addChild.apply(this, arguments); + // summary: Add a child widget to the container + // child: a widget to add + // insertIndex: postion in the "stack" to add the child widget + + this.inherited("addChild",arguments); if(this._started){ // Do the stuff that startup() does for each widget @@ -13505,7 +14185,7 @@ dojo.declare( if(children.length > 1){ this._addSizer(); } - + // and then reposition (ie, shrink) every pane to make room for the new guy this.layout(); } @@ -13708,7 +14388,7 @@ dojo.declare( } this.sizingSplitter.style.zIndex = 2; - // TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet + // TODO: REVISIT - we want MARGIN_BOX and core hasn't exposed that yet (but can't we use it anyway if we pay attention? we do elsewhere.) this.originPos = dojo.coords(children[0].domNode, true); if(this.isHorizontal){ var client = (e.layerX ? e.layerX : e.offsetX); @@ -13730,8 +14410,9 @@ dojo.declare( // // attach mouse events // - this.connect(document.documentElement, "onmousemove", "changeSizing"); - this.connect(document.documentElement, "onmouseup", "endSizing"); + this._connects = []; + this._connects.push(dojo.connect(document.documentElement, "onmousemove", this, "changeSizing")); + this._connects.push(dojo.connect(document.documentElement, "onmouseup", this, "endSizing")); dojo.stopEvent(e); }, @@ -13764,6 +14445,8 @@ dojo.declare( if(this.persist){ this._saveState(this); } + + dojo.forEach(this._connects,dojo.disconnect); }, movePoint: function(){ @@ -13839,7 +14522,8 @@ dojo.declare( _moveSizingLine: function(){ var pos = (this.lastPoint - this.startPoint) + this.sizingSplitter.position; - this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; + dojo.style(this.virtualSizer,(this.isHorizontal ? "left" : "top"),pos+"px"); + // this.virtualSizer.style[ this.isHorizontal ? "left" : "top" ] = pos + 'px'; // FIXME: remove this line if the previous is better }, _getCookieName: function(i){ @@ -13892,25 +14576,26 @@ dojo.provide("dijit.layout.TabContainer"); -dojo.declare( - "dijit.layout.TabContainer", +dojo.declare("dijit.layout.TabContainer", [dijit.layout.StackContainer, dijit._Templated], -{ - // summary + { + // summary: + // A Container with Title Tabs, each one pointing at a pane in the container. + // description: // A TabContainer is a container that has multiple panes, but shows only // one pane at a time. There are a set of tabs corresponding to each pane, // where each tab has the title (aka title) of the pane, and optionally a close button. // // Publishes topics -addChild, -removeChild, and -selectChild // (where is the id of the TabContainer itself. - + // // tabPosition: String // Defines where tabs go relative to tab content. // "top", "bottom", "left-h", "right-h" tabPosition: "top", templateString: null, // override setting in StackContainer - templateString:"
\n\t
\n\t
\n
\n", + templateString:"
\n\t
\n\t
\n
\n", postCreate: function(){ dijit.layout.TabContainer.superclass.postCreate.apply(this, arguments); @@ -13924,10 +14609,10 @@ dojo.declare( }, this.tablistNode); }, - _setupChild: function(tab){ + _setupChild: function(/* Widget */tab){ dojo.addClass(tab.domNode, "dijitTabPane"); - dijit.layout.TabContainer.superclass._setupChild.apply(this, arguments); - return tab; + this.inherited("_setupChild",arguments); + return tab; // Widget }, startup: function(){ @@ -13935,8 +14620,8 @@ dojo.declare( // wire up the tablist and its tabs this.tablist.startup(); - dijit.layout.TabContainer.superclass.startup.apply(this, arguments); - + this.inherited("startup",arguments); + if(dojo.isSafari){ // sometimes safari 3.0.3 miscalculates the height of the tab labels, see #4058 setTimeout(dojo.hitch(this, "layout"), 0); @@ -13969,61 +14654,54 @@ dojo.declare( destroy: function(){ this.tablist.destroy(); - dijit.layout.TabContainer.superclass.destroy.apply(this, arguments); + this.inherited("destroy",arguments); } }); //TODO: make private? -dojo.declare( - "dijit.layout.TabController", +dojo.declare("dijit.layout.TabController", dijit.layout.StackController, { - // summary - // Set of tabs (the things with titles and a close button, that you click to show a tab panel). - // Lets the user select the currently shown pane in a TabContainer or StackContainer. - // TabController also monitors the TabContainer, and whenever a pane is - // added or deleted updates itself accordingly. + // summary: + // Set of tabs (the things with titles and a close button, that you click to show a tab panel). + // description: + // Lets the user select the currently shown pane in a TabContainer or StackContainer. + // TabController also monitors the TabContainer, and whenever a pane is + // added or deleted updates itself accordingly. - templateString: "
", + templateString: "
", - // tabPosition: String - // Defines where tabs go relative to the content. - // "top", "bottom", "left-h", "right-h" - tabPosition: "top", + // tabPosition: String + // Defines where tabs go relative to the content. + // "top", "bottom", "left-h", "right-h" + tabPosition: "top", - doLayout: true, + // doLayout: Boolean + // TODOC: deprecate doLayout? not sure. + doLayout: true, - // buttonWidget: String - // the name of the tab widget to create to correspond to each page - buttonWidget: "dijit.layout._TabButton", + // buttonWidget: String + // the name of the tab widget to create to correspond to each page + buttonWidget: "dijit.layout._TabButton", - postMixInProperties: function(){ - this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout"); - dijit.layout.TabController.superclass.postMixInProperties.apply(this, arguments); - } + postMixInProperties: function(){ + this["class"] = "dijitTabLabels-" + this.tabPosition + (this.doLayout ? "" : " dijitTabNoLayout"); + this.inherited("postMixInProperties",arguments); } -); +}); -dojo.declare( - "dijit.layout._TabButton", dijit.layout._StackButton, -{ - // summary +dojo.declare("dijit.layout._TabButton", + dijit.layout._StackButton, + { + // summary: // A tab (the thing you click to select a pane). + // description: // Contains the title of the pane, and optionally a close-button to destroy the pane. // This is an internal widget and should not be instantiated directly. baseClass: "dijitTab", - templateString: "
" - +"
" - +"${!label}" - +"" - +"x" - +"" - +"
" - +"
", + templateString:"
\n
\n ${!label}\n \n x\n \n
\n
\n", postCreate: function(){ if(this.closeButton){ @@ -14031,7 +14709,7 @@ dojo.declare( } else { this.closeButtonNode.style.display="none"; } - dijit.layout._TabButton.superclass.postCreate.apply(this, arguments); + this.inherited("postCreate",arguments); dojo.setSelectable(this.containerNode, false); } }); @@ -14078,10 +14756,9 @@ dojo.provide("dijit.dijit-all"); - } -dojo.i18n._preloadLocalizations("dijit.nls.dijit-all", ["ROOT", "es-es", "es", "it-it", "pt-br", "de", "fr-fr", "zh-cn", "pt", "en-us", "zh", "fr", "zh-tw", "it", "en-gb", "xx", "de-de", "ko-kr", "ja-jp", "ko", "en", "ja"]); +dojo.i18n._preloadLocalizations("dijit.nls.dijit-all", ["es-es", "es", "hu", "it-it", "de", "pt-br", "pl", "fr-fr", "zh-cn", "pt", "en-us", "zh", "ru", "xx", "fr", "zh-tw", "it", "cs", "en-gb", "de-de", "ja-jp", "ko-kr", "ko", "en", "ROOT", "ja"]); diff --git a/spring-faces/src/main/java/META-INF/dijit/dijit.js b/spring-faces/src/main/java/META-INF/dijit/dijit.js index 5a18ff66..5c8cd5a5 100644 --- a/spring-faces/src/main/java/META-INF/dijit/dijit.js +++ b/spring-faces/src/main/java/META-INF/dijit/dijit.js @@ -5,7 +5,7 @@ Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: - http://dojotoolkit.org/community/licensing.shtml + http://dojotoolkit.org/book/dojo-book-0-9/introduction/licensing */ /* @@ -17,4 +17,4 @@ for documentation and information on getting the source. */ -if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){var _1=dojo.global;var _2=dojo.doc;if(_2.selection){return !_2.selection.createRange().text;}else{if(_1.getSelection){var _3=_1.getSelection();if(dojo.isString(_3)){return !_3;}else{return _3.isCollapsed||!_3.toString();}}}},getBookmark:function(){var _4,_5=dojo.doc.selection;if(_5){var _6=_5.createRange();if(_5.type.toUpperCase()=="CONTROL"){_4=_6.length?dojo._toArray(_6):null;}else{_4=_6.getBookmark();}}else{if(dojo.global.getSelection){_5=dojo.global.getSelection();if(_5){var _6=_5.getRangeAt(0);_4=_6.cloneRange();}}else{console.debug("No idea how to store the current selection for this browser!");}}return _4;},moveToBookmark:function(_7){var _8=dojo.doc;if(_8.selection){var _9;if(dojo.isArray(_7)){_9=_8.body.createControlRange();dojo.forEach(_7,_9.addElement);}else{_9=_8.selection.createRange();_9.moveToBookmark(_7);}_9.select();}else{var _a=dojo.global.getSelection&&dojo.global.getSelection();if(_a&&_a.removeAllRanges){_a.removeAllRanges();_a.addRange(_7);}else{console.debug("No idea how to restore selection for this browser!");}}},getFocus:function(_b,_c){return {node:_b&&dojo.isDescendant(dijit._curFocus,_b.domNode)?dijit._prevFocus:dijit._curFocus,bookmark:!dojo.withGlobal(_c||dojo.global,dijit.isCollapsed)?dojo.withGlobal(_c||dojo.global,dijit.getBookmark):null,openedForWindow:_c};},focus:function(_d){if(!_d){return;}var _e="node" in _d?_d.node:_d,_f=_d.bookmark,_10=_d.openedForWindow;if(_e){var _11=(_e.tagName.toLowerCase()=="iframe")?_e.contentWindow:_e;if(_11&&_11.focus){try{_11.focus();}catch(e){}}dijit._onFocusNode(_e);}if(_f&&dojo.withGlobal(_10||dojo.global,dijit.isCollapsed)){if(_10){_10.focus();}try{dojo.withGlobal(_10||dojo.global,moveToBookmark,null,[_f]);}catch(e){}}},_activeStack:[],registerWin:function(_12){if(!_12){_12=window;}dojo.connect(_12.document,"onmousedown",null,function(evt){dijit._ignoreNextBlurEvent=true;setTimeout(function(){dijit._ignoreNextBlurEvent=false;},0);dijit._onTouchNode(evt.target||evt.srcElement);});var _14=_12.document.body||_12.document.getElementsByTagName("body")[0];if(_14){if(dojo.isIE){_14.attachEvent("onactivate",function(evt){if(evt.srcElement.tagName.toLowerCase()!="body"){dijit._onFocusNode(evt.srcElement);}});_14.attachEvent("ondeactivate",function(evt){dijit._onBlurNode();});}else{_14.addEventListener("focus",function(evt){dijit._onFocusNode(evt.target);},true);_14.addEventListener("blur",function(evt){dijit._onBlurNode();},true);}}},_onBlurNode:function(){if(dijit._ignoreNextBlurEvent){dijit._ignoreNextBlurEvent=false;return;}dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;if(dijit._blurAllTimer){clearTimeout(dijit._blurAllTimer);}dijit._blurAllTimer=setTimeout(function(){delete dijit._blurAllTimer;dijit._setStack([]);},100);},_onTouchNode:function(_19){if(dijit._blurAllTimer){clearTimeout(dijit._blurAllTimer);delete dijit._blurAllTimer;}var _1a=[];try{while(_19){if(_19.dijitPopupParent){_19=dijit.byId(_19.dijitPopupParent).domNode;}else{if(_19.tagName&&_19.tagName.toLowerCase()=="body"){if(_19===dojo.body()){break;}_19=dojo.query("iframe").filter(function(_1b){return _1b.contentDocument.body===_19;})[0];}else{var id=_19.getAttribute&&_19.getAttribute("widgetId");if(id){_1a.unshift(id);}_19=_19.parentNode;}}}}catch(e){}dijit._setStack(_1a);},_onFocusNode:function(_1d){if(_1d&&_1d.tagName&&_1d.tagName.toLowerCase()=="body"){return;}dijit._onTouchNode(_1d);if(_1d==dijit._curFocus){return;}dijit._prevFocus=dijit._curFocus;dijit._curFocus=_1d;dojo.publish("focusNode",[_1d]);var w=dijit.byId(_1d.id);if(w&&w._setStateClass){w._focused=true;w._setStateClass();var _1f=dojo.connect(_1d,"onblur",function(){w._focused=false;w._setStateClass();dojo.disconnect(_1f);});}},_setStack:function(_20){var _21=dijit._activeStack;dijit._activeStack=_20;for(var _22=0;_22=_22;i--){var _24=dijit.byId(_21[i]);if(_24){dojo.publish("widgetBlur",[_24]);if(_24._onBlur){_24._onBlur();}}}for(var i=_22;i<_20.length;i++){var _24=dijit.byId(_20[i]);if(_24){dojo.publish("widgetFocus",[_24]);if(_24._onFocus){_24._onFocus();}}}}});dojo.addOnLoad(dijit.registerWin);}if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};},add:function(_25){this._hash[_25.id]=_25;},remove:function(id){delete this._hash[id];},forEach:function(_27){for(var id in this._hash){_27(this._hash[id]);}},filter:function(_29){var res=new dijit.WidgetSet();this.forEach(function(_2b){if(_29(_2b)){res.add(_2b);}});return res;},byId:function(id){return this._hash[id];},byClass:function(cls){return this.filter(function(_2e){return _2e.declaredClass==cls;});}});dijit.registry=new dijit.WidgetSet();dijit._widgetTypeCtr={};dijit.getUniqueId=function(_2f){var id;do{id=_2f+"_"+(dijit._widgetTypeCtr[_2f]!==undefined?++dijit._widgetTypeCtr[_2f]:dijit._widgetTypeCtr[_2f]=0);}while(dijit.byId(id));return id;};if(dojo.isIE){dojo.addOnUnload(function(){dijit.registry.forEach(function(_31){_31.destroy();});});}dijit.byId=function(id){return (dojo.isString(id))?dijit.registry.byId(id):id;};dijit.byNode=function(_33){return dijit.registry.byId(_33.getAttribute("widgetId"));};}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){var _34=dojo.global;var _35=dojo.doc;var w=0,h=0;if(dojo.isMozilla){w=_35.documentElement.clientWidth;h=_34.innerHeight;}else{if(!dojo.isOpera&&_34.innerWidth){w=_34.innerWidth;h=_34.innerHeight;}else{if(dojo.isIE&&_35.documentElement&&_35.documentElement.clientHeight){w=_35.documentElement.clientWidth;h=_35.documentElement.clientHeight;}else{if(dojo.body().clientWidth){w=dojo.body().clientWidth;h=dojo.body().clientHeight;}}}}var _38=dojo._docScroll();return {w:w,h:h,l:_38.x,t:_38.y};};dijit.placeOnScreen=function(_39,pos,_3b,_3c){var _3d=dojo.map(_3b,function(_3e){return {corner:_3e,pos:pos};});return dijit._place(_39,_3d);};dijit._place=function(_3f,_40,_41){var _42=dijit.getViewport();if(!_3f.parentNode||String(_3f.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_3f);}var _43=null;for(var i=0;i<_40.length;i++){var _45=_40[i].corner;var pos=_40[i].pos;if(_41){_41(_45);}var _47=_3f.style.display;var _48=_3f.style.visibility;_3f.style.visibility="hidden";_3f.style.display="";var mb=dojo.marginBox(_3f);_3f.style.display=_47;_3f.style.visibility=_48;var _4a=(_45.charAt(1)=="L"?pos.x:Math.max(_42.l,pos.x-mb.w)),_4b=(_45.charAt(0)=="T"?pos.y:Math.max(_42.t,pos.y-mb.h)),_4c=(_45.charAt(1)=="L"?Math.min(_42.l+_42.w,_4a+mb.w):pos.x),_4d=(_45.charAt(0)=="T"?Math.min(_42.t+_42.h,_4b+mb.h):pos.y),_4e=_4c-_4a,_4f=_4d-_4b,_50=(mb.w-_4e)+(mb.h-_4f);if(_43==null||_50<_43.overflow){_43={corner:_45,aroundCorner:_40[i].aroundCorner,x:_4a,y:_4b,w:_4e,h:_4f,overflow:_50};}if(_50==0){break;}}_3f.style.left=_43.x+"px";_3f.style.top=_43.y+"px";return _43;};dijit.placeOnScreenAroundElement=function(_51,_52,_53,_54){_52=dojo.byId(_52);var _55=_52.style.display;_52.style.display="";var _56=_52.offsetWidth;var _57=_52.offsetHeight;var _58=dojo.coords(_52,true);_52.style.display=_55;var _59=[];for(var _5a in _53){_59.push({aroundCorner:_5a,corner:_53[_5a],pos:{x:_58.x+(_5a.charAt(1)=="L"?0:_56),y:_58.y+(_5a.charAt(0)=="T"?0:_57)}});}return dijit._place(_51,_59,_54);};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){if(dojo.isSafari&&!doc._parentWindow){var fix=function(win){win.document._parentWindow=win;for(var i=0;i";_74=dojo.doc.createElement(_75);}else{var _74=dojo.doc.createElement("iframe");_74.src="javascript:\"\"";_74.className="dijitBackgroundIframe";}_74.tabIndex=-1;dojo.body().appendChild(_74);}return _74;};this.push=function(_76){_76.style.display="";if(dojo.isIE){_76.style.removeExpression("width");_76.style.removeExpression("height");}_73.push(_76);};}();if(dojo.isIE&&dojo.isIE<7){dojo.addOnLoad(function(){var f=dijit._frames;dojo.forEach([f.pop()],f.push);});}dijit.BackgroundIframe=function(_78){if(!_78.id){throw new Error("no id");}if((dojo.isIE&&dojo.isIE<7)||(dojo.isFF&&dojo.isFF<3&&dojo.hasClass(dojo.body(),"dijit_a11y"))){var _79=dijit._frames.pop();_78.appendChild(_79);if(dojo.isIE){_79.style.setExpression("width","document.getElementById('"+_78.id+"').offsetWidth");_79.style.setExpression("height","document.getElementById('"+_78.id+"').offsetHeight");}this.iframe=_79;}};dojo.extend(dijit.BackgroundIframe,{destroy:function(){if(this.iframe){dijit._frames.push(this.iframe);delete this.iframe;}}});}if(!dojo._hasResource["dijit._base.scroll"]){dojo._hasResource["dijit._base.scroll"]=true;dojo.provide("dijit._base.scroll");dijit.scrollIntoView=function(_7a){if(dojo.isIE){if(dojo.marginBox(_7a.parentNode).h<=_7a.parentNode.scrollHeight){_7a.scrollIntoView(false);}}else{if(dojo.isMozilla){_7a.scrollIntoView(false);}else{var _7b=_7a.parentNode;var _7c=_7b.scrollTop+dojo.marginBox(_7b).h;var _7d=_7a.offsetTop+dojo.marginBox(_7a).h;if(_7c<_7d){_7b.scrollTop+=(_7d-_7c);}else{if(_7b.scrollTop>_7a.offsetTop){_7b.scrollTop-=(_7b.scrollTop-_7a.offsetTop);}}}}};}if(!dojo._hasResource["dijit._base.sniff"]){dojo._hasResource["dijit._base.sniff"]=true;dojo.provide("dijit._base.sniff");(function(){var d=dojo;var ie=d.isIE;var _80=d.isOpera;var maj=Math.floor;var _82={dj_ie:ie,dj_ie6:maj(ie)==6,dj_ie7:maj(ie)==7,dj_iequirks:ie&&d.isQuirks,dj_opera:_80,dj_opera8:maj(_80)==8,dj_opera9:maj(_80)==9,dj_khtml:d.isKhtml,dj_safari:d.isSafari,dj_gecko:d.isMozilla};for(var p in _82){if(_82[p]){var _84=dojo.doc.documentElement;if(_84.className){_84.className+=" "+p;}else{_84.className=p;}}}})();}if(!dojo._hasResource["dijit._base.bidi"]){dojo._hasResource["dijit._base.bidi"]=true;dojo.provide("dijit._base.bidi");dojo.addOnLoad(function(){if(!dojo._isBodyLtr()){dojo.addClass(dojo.body(),"dijitRtl");}});}if(!dojo._hasResource["dijit._base.typematic"]){dojo._hasResource["dijit._base.typematic"]=true;dojo.provide("dijit._base.typematic");dijit.typematic={_fireEventAndReload:function(){this._timer=null;this._callback(++this._count,this._node,this._evt);this._currentTimeout=(this._currentTimeout<0)?this._initialDelay:((this._subsequentDelay>1)?this._subsequentDelay:Math.round(this._currentTimeout*this._subsequentDelay));this._timer=setTimeout(dojo.hitch(this,"_fireEventAndReload"),this._currentTimeout);},trigger:function(evt,_86,_87,_88,obj,_8a,_8b){if(obj!=this._obj){this.stop();this._initialDelay=_8b?_8b:500;this._subsequentDelay=_8a?_8a:0.9;this._obj=obj;this._evt=evt;this._node=_87;this._currentTimeout=-1;this._count=-1;this._callback=dojo.hitch(_86,_88);this._fireEventAndReload();}},stop:function(){if(this._timer){clearTimeout(this._timer);this._timer=null;}if(this._obj){this._callback(-1,this._node,this._evt);this._obj=null;}},addKeyListener:function(_8c,_8d,_8e,_8f,_90,_91){var ary=[];ary.push(dojo.connect(_8c,"onkeypress",this,function(evt){if(evt.keyCode==_8d.keyCode&&(!_8d.charCode||_8d.charCode==evt.charCode)&&((typeof _8d.ctrlKey=="undefined")||_8d.ctrlKey==evt.ctrlKey)&&((typeof _8d.altKey=="undefined")||_8d.altKey==evt.ctrlKey)&&((typeof _8d.shiftKey=="undefined")||_8d.shiftKey==evt.ctrlKey)){dojo.stopEvent(evt);dijit.typematic.trigger(_8d,_8e,_8c,_8f,_8d,_90,_91);}else{if(dijit.typematic._obj==_8d){dijit.typematic.stop();}}}));ary.push(dojo.connect(_8c,"onkeyup",this,function(evt){if(dijit.typematic._obj==_8d){dijit.typematic.stop();}}));return ary;},addMouseListener:function(_95,_96,_97,_98,_99){var ary=[];ary.push(dojo.connect(_95,"mousedown",this,function(evt){dojo.stopEvent(evt);dijit.typematic.trigger(evt,_96,_95,_97,_95,_98,_99);}));ary.push(dojo.connect(_95,"mouseup",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}));ary.push(dojo.connect(_95,"mouseout",this,function(evt){dojo.stopEvent(evt);dijit.typematic.stop();}));ary.push(dojo.connect(_95,"mousemove",this,function(evt){dojo.stopEvent(evt);}));ary.push(dojo.connect(_95,"dblclick",this,function(evt){dojo.stopEvent(evt);if(dojo.isIE){dijit.typematic.trigger(evt,_96,_95,_97,_95,_98,_99);setTimeout("dijit.typematic.stop()",50);}}));return ary;},addListener:function(_a0,_a1,_a2,_a3,_a4,_a5,_a6){return this.addKeyListener(_a1,_a2,_a3,_a4,_a5,_a6).concat(this.addMouseListener(_a0,_a3,_a4,_a5,_a6));}};}if(!dojo._hasResource["dijit._base.wai"]){dojo._hasResource["dijit._base.wai"]=true;dojo.provide("dijit._base.wai");dijit.waiNames=["waiRole","waiState"];dijit.wai={waiRole:{name:"waiRole","namespace":"http://www.w3.org/TR/xhtml2",alias:"x2",prefix:"wairole:"},waiState:{name:"waiState","namespace":"http://www.w3.org/2005/07/aaa",alias:"aaa",prefix:""},setAttr:function(_a7,ns,_a9,_aa){if(dojo.isIE){_a7.setAttribute(this[ns].alias+":"+_a9,this[ns].prefix+_aa);}else{_a7.setAttributeNS(this[ns]["namespace"],_a9,this[ns].prefix+_aa);}},getAttr:function(_ab,ns,_ad){if(dojo.isIE){return _ab.getAttribute(this[ns].alias+":"+_ad);}else{return _ab.getAttributeNS(this[ns]["namespace"],_ad);}},removeAttr:function(_ae,ns,_b0){var _b1=true;if(dojo.isIE){_b1=_ae.removeAttribute(this[ns].alias+":"+_b0);}else{_ae.removeAttributeNS(this[ns]["namespace"],_b0);}return _b1;},onload:function(){var div=document.createElement("div");div.id="a11yTestNode";div.style.cssText="border: 1px solid;"+"border-color:red green;"+"position: absolute;"+"left: -999px;"+"top: -999px;"+"background-image: url(\""+dojo.moduleUrl("dijit","form/templates/blank.gif")+"\");";dojo.body().appendChild(div);function check(){var cs=dojo.getComputedStyle(div);if(cs){var _b4=cs.backgroundImage;var _b5=(cs.borderTopColor==cs.borderRightColor)||(_b4!=null&&(_b4=="none"||_b4=="url(invalid-url:)"));dojo[_b5?"addClass":"removeClass"](dojo.body(),"dijit_a11y");}};check();if(dojo.isIE){setInterval(check,4000);}}};if(dojo.isIE||dojo.isMoz){dojo._loaders.unshift(dijit.wai.onload);}}if(!dojo._hasResource["dijit._base"]){dojo._hasResource["dijit._base"]=true;dojo.provide("dijit._base");}if(!dojo._hasResource["dojo.date.stamp"]){dojo._hasResource["dojo.date.stamp"]=true;dojo.provide("dojo.date.stamp");dojo.date.stamp.fromISOString=function(_b6,_b7){if(!dojo.date.stamp._isoRegExp){dojo.date.stamp._isoRegExp=/^(?:(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(.\d+)?)?((?:[+-](\d{2}):(\d{2}))|Z)?)?$/;}var _b8=dojo.date.stamp._isoRegExp.exec(_b6);var _b9=null;if(_b8){_b8.shift();_b8[1]&&_b8[1]--;_b8[6]&&(_b8[6]*=1000);if(_b7){_b7=new Date(_b7);dojo.map(["FullYear","Month","Date","Hours","Minutes","Seconds","Milliseconds"],function(_ba){return _b7["get"+_ba]();}).forEach(function(_bb,_bc){if(_b8[_bc]===undefined){_b8[_bc]=_bb;}});}_b9=new Date(_b8[0]||1970,_b8[1]||0,_b8[2]||0,_b8[3]||0,_b8[4]||0,_b8[5]||0,_b8[6]||0);var _bd=0;var _be=_b8[7]&&_b8[7].charAt(0);if(_be!="Z"){_bd=((_b8[8]||0)*60)+(Number(_b8[9])||0);if(_be!="-"){_bd*=-1;}}if(_be){_bd-=_b9.getTimezoneOffset();}if(_bd){_b9.setTime(_b9.getTime()+_bd*60000);}}return _b9;};dojo.date.stamp.toISOString=function(_bf,_c0){var _=function(n){return (n<10)?"0"+n:n;};_c0=_c0||{};var _c3=[];var _c4=_c0.zulu?"getUTC":"get";var _c5="";if(_c0.selector!="time"){_c5=[_bf[_c4+"FullYear"](),_(_bf[_c4+"Month"]()+1),_(_bf[_c4+"Date"]())].join("-");}_c3.push(_c5);if(_c0.selector!="date"){var _c6=[_(_bf[_c4+"Hours"]()),_(_bf[_c4+"Minutes"]()),_(_bf[_c4+"Seconds"]())].join(":");var _c7=_bf[_c4+"Milliseconds"]();if(_c0.milliseconds){_c6+="."+(_c7<100?"0":"")+_(_c7);}if(_c0.zulu){_c6+="Z";}else{var _c8=_bf.getTimezoneOffset();var _c9=Math.abs(_c8);_c6+=(_c8>0?"-":"+")+_(Math.floor(_c9/60))+":"+_(_c9%60);}_c3.push(_c6);}return _c3.join("T");};}if(!dojo._hasResource["dojo.parser"]){dojo._hasResource["dojo.parser"]=true;dojo.provide("dojo.parser");dojo.parser=new function(){var d=dojo;function val2type(_cb){if(d.isString(_cb)){return "string";}if(typeof _cb=="number"){return "number";}if(typeof _cb=="boolean"){return "boolean";}if(d.isFunction(_cb)){return "function";}if(d.isArray(_cb)){return "array";}if(_cb instanceof Date){return "date";}if(_cb instanceof d._Url){return "url";}return "object";};function str2obj(_cc,_cd){switch(_cd){case "string":return _cc;case "number":return _cc.length?Number(_cc):NaN;case "boolean":return typeof _cc=="boolean"?_cc:!(_cc.toLowerCase()=="false");case "function":if(d.isFunction(_cc)){_cc=_cc.toString();_cc=d.trim(_cc.substring(_cc.indexOf("{")+1,_cc.length-1));}try{if(_cc.search(/[^\w\.]+/i)!=-1){_cc=d.parser._nameAnonFunc(new Function(_cc),this);}return d.getObject(_cc,false);}catch(e){return new Function();}case "array":return _cc.split(/\s*,\s*/);case "date":switch(_cc){case "":return new Date("");case "now":return new Date();default:return d.date.stamp.fromISOString(_cc);}case "url":return d.baseUrl+_cc;default:return d.fromJson(_cc);}};var _ce={};function getClassInfo(_cf){if(!_ce[_cf]){var cls=d.getObject(_cf);if(!d.isFunction(cls)){throw new Error("Could not load class '"+_cf+"'. Did you spell the name correctly and use a full path, like 'dijit.form.Button'?");}var _d1=cls.prototype;var _d2={};for(var _d3 in _d1){if(_d3.charAt(0)=="_"){continue;}var _d4=_d1[_d3];_d2[_d3]=val2type(_d4);}_ce[_cf]={cls:cls,params:_d2};}return _ce[_cf];};this._functionFromScript=function(_d5){var _d6="";var _d7="";var _d8=_d5.getAttribute("args");if(_d8){d.forEach(_d8.split(/\s*,\s*/),function(_d9,idx){_d6+="var "+_d9+" = arguments["+idx+"]; ";});}var _db=_d5.getAttribute("with");if(_db&&_db.length){d.forEach(_db.split(/\s*,\s*/),function(_dc){_d6+="with("+_dc+"){";_d7+="}";});}return new Function(_d6+_d5.innerHTML+_d7);};this._wireUpMethod=function(_dd,_de){var nf=this._functionFromScript(_de);var _e0=_de.getAttribute("event");if(_e0){var _e1=_de.getAttribute("type");if(_e1&&(_e1=="dojo/connect")){d.connect(_dd,_e0,null,nf);}else{_dd[_e0]=nf;}}else{nf.call(_dd);}};this.instantiate=function(_e2){var _e3=[];d.forEach(_e2,function(_e4){if(!_e4){return;}var _e5=_e4.getAttribute("dojoType");if((!_e5)||(!_e5.length)){return;}var _e6=getClassInfo(_e5);var _e7=_e6.cls;var ps=_e7._noScript||_e7.prototype._noScript;var _e9={};var _ea=_e4.attributes;for(var _eb in _e6.params){var _ec=_ea.getNamedItem(_eb);if(!_ec||(!_ec.specified&&(!dojo.isIE||_eb.toLowerCase()!="value"))){continue;}var _ed=_e6.params[_eb];_e9[_eb]=str2obj(_ec.value,_ed);}if(!ps){var _ee=d.query("> script[type='dojo/method'][event='preamble']",_e4).orphan();if(_ee.length){_e9.preamble=d.parser._functionFromScript(_ee[0]);}var _ef=d.query("> script[type^='dojo/']",_e4).orphan();}var _f0=_e7["markupFactory"];if(!_f0&&_e7["prototype"]){_f0=_e7.prototype["markupFactory"];}var _f1=_f0?_f0(_e9,_e4,_e7):new _e7(_e9,_e4);_e3.push(_f1);var _f2=_e4.getAttribute("jsId");if(_f2){d.setObject(_f2,_f1);}if(!ps){_ef.forEach(function(_f3){d.parser._wireUpMethod(_f1,_f3);});}});d.forEach(_e3,function(_f4){if(_f4&&(_f4.startup)&&((!_f4.getParent)||(!_f4.getParent()))){_f4.startup();}});return _e3;};this.parse=function(_f5){var _f6=d.query("[dojoType]",_f5);var _f7=this.instantiate(_f6);return _f7;};}();(function(){var _f8=function(){if(djConfig["parseOnLoad"]==true){dojo.parser.parse();}};if(dojo.exists("dijit.wai.onload")&&(dijit.wai.onload===dojo._loaders[0])){dojo._loaders.splice(1,0,_f8);}else{dojo._loaders.unshift(_f8);}})();dojo.parser._anonCtr=0;dojo.parser._anon={};dojo.parser._nameAnonFunc=function(_f9,_fa){var jpn="$joinpoint";var nso=(_fa||dojo.parser._anon);if(dojo.isIE){var cn=_f9["__dojoNameCache"];if(cn&&nso[cn]===_f9){return _f9["__dojoNameCache"];}}var ret="__"+dojo.parser._anonCtr++;while(typeof nso[ret]!="undefined"){ret="__"+dojo.parser._anonCtr++;}nso[ret]=_f9;return ret;};}if(!dojo._hasResource["dijit._Widget"]){dojo._hasResource["dijit._Widget"]=true;dojo.provide("dijit._Widget");dojo.declare("dijit._Widget",null,{constructor:function(_ff,_100){this.create(_ff,_100);},id:"",lang:"",dir:"",srcNodeRef:null,domNode:null,create:function(_101,_102){this.srcNodeRef=dojo.byId(_102);this._connects=[];this._attaches=[];if(this.srcNodeRef&&(typeof this.srcNodeRef.id=="string")){this.id=this.srcNodeRef.id;}if(_101){dojo.mixin(this,_101);}this.postMixInProperties();if(!this.id){this.id=dijit.getUniqueId(this.declaredClass.replace(/\./g,"_"));}dijit.registry.add(this);this.buildRendering();if(this.domNode){this.domNode.setAttribute("widgetId",this.id);if(this.srcNodeRef&&this.srcNodeRef.dir){this.domNode.dir=this.srcNodeRef.dir;}}this.postCreate();if(this.srcNodeRef&&!this.srcNodeRef.parentNode){delete this.srcNodeRef;}},postMixInProperties:function(){},buildRendering:function(){this.domNode=this.srcNodeRef;},postCreate:function(){},startup:function(){},destroyRecursive:function(_103){this.destroyDescendants();this.destroy();},destroy:function(_104){this.uninitialize();dojo.forEach(this._connects,function(_105){dojo.forEach(_105,dojo.disconnect);});this.destroyRendering(_104);dijit.registry.remove(this.id);},destroyRendering:function(_106){if(this.bgIframe){this.bgIframe.destroy();delete this.bgIframe;}if(this.domNode){dojo._destroyElement(this.domNode);delete this.domNode;}if(this.srcNodeRef){dojo._destroyElement(this.srcNodeRef);delete this.srcNodeRef;}},destroyDescendants:function(){dojo.forEach(this.getDescendants(),function(_107){_107.destroy();});},uninitialize:function(){return false;},toString:function(){return "[Widget "+this.declaredClass+", "+(this.id||"NO ID")+"]";},getDescendants:function(){var list=dojo.query("[widgetId]",this.domNode);return list.map(dijit.byNode);},nodesWithKeyClick:["input","button"],connect:function(obj,_10a,_10b){var _10c=[];if(_10a=="ondijitclick"){var w=this;if(!this.nodesWithKeyClick[obj.nodeName]){_10c.push(dojo.connect(obj,"onkeydown",this,function(e){if(e.keyCode==dojo.keys.ENTER){return (dojo.isString(_10b))?w[_10b](e):_10b.call(w,e);}else{if(e.keyCode==dojo.keys.SPACE){dojo.stopEvent(e);}}}));_10c.push(dojo.connect(obj,"onkeyup",this,function(e){if(e.keyCode==dojo.keys.SPACE){return dojo.isString(_10b)?w[_10b](e):_10b.call(w,e);}}));}_10a="onclick";}_10c.push(dojo.connect(obj,_10a,this,_10b));this._connects.push(_10c);return _10c;},disconnect:function(_110){for(var i=0;i0;i--){if(/\S/.test(str.charAt(i))){str=str.substring(0,i+1);break;}}return str;};}if(!dojo._hasResource["dijit._Templated"]){dojo._hasResource["dijit._Templated"]=true;dojo.provide("dijit._Templated");dojo.declare("dijit._Templated",null,{templateNode:null,templateString:null,templatePath:null,widgetsInTemplate:false,containerNode:null,buildRendering:function(){var _121=dijit._Templated.getCachedTemplate(this.templatePath,this.templateString);var node;if(dojo.isString(_121)){var _123=this.declaredClass,_124=this;var tstr=dojo.string.substitute(_121,this,function(_126,key){if(key.charAt(0)=="!"){_126=_124[key.substr(1)];}if(typeof _126=="undefined"){throw new Error(_123+" template:"+key);}return key.charAt(0)=="!"?_126:_126.toString().replace(/"/g,""");},this);node=dijit._Templated._createNodesFromText(tstr)[0];}else{node=_121.cloneNode(true);}this._attachTemplateNodes(node);if(this.srcNodeRef){dojo.style(this.styleNode||node,"cssText",this.srcNodeRef.style.cssText);if(this.srcNodeRef.className){node.className+=" "+this.srcNodeRef.className;}}this.domNode=node;if(this.srcNodeRef&&this.srcNodeRef.parentNode){this.srcNodeRef.parentNode.replaceChild(this.domNode,this.srcNodeRef);}if(this.widgetsInTemplate){var _128=dojo.parser.parse(this.domNode);this._attachTemplateNodes(_128,function(n,p){return n[p];});}this._fillContent(this.srcNodeRef);},_fillContent:function(_12b){var dest=this.containerNode;if(_12b&&dest){while(_12b.hasChildNodes()){dest.appendChild(_12b.firstChild);}}},_attachTemplateNodes:function(_12d,_12e){_12e=_12e||function(n,p){return n.getAttribute(p);};var _131=dojo.isArray(_12d)?_12d:(_12d.all||_12d.getElementsByTagName("*"));var x=dojo.isArray(_12d)?0:-1;for(;x<_131.length;x++){var _133=(x==-1)?_12d:_131[x];if(this.widgetsInTemplate&&_12e(_133,"dojoType")){continue;}var _134=_12e(_133,"dojoAttachPoint");if(_134){var _135,_136=_134.split(/\s*,\s*/);while(_135=_136.shift()){if(dojo.isArray(this[_135])){this[_135].push(_133);}else{this[_135]=_133;}}}var _137=_12e(_133,"dojoAttachEvent");if(_137){var _138,_139=_137.split(/\s*,\s*/);var trim=dojo.trim;while(_138=_139.shift()){if(_138){var _13b=null;if(_138.indexOf(":")!=-1){var _13c=_138.split(":");_138=trim(_13c[0]);_13b=trim(_13c[1]);}else{_138=trim(_138);}if(!_13b){_13b=_138;}this.connect(_133,_138,_13b);}}}var name,_13e=["waiRole","waiState"];while(name=_13e.shift()){var wai=dijit.wai[name];var _140=_12e(_133,wai.name);if(_140){var role="role";var val;_140=_140.split(/\s*,\s*/);while(val=_140.shift()){if(val.indexOf("-")!=-1){var _143=val.split("-");role=_143[0];val=_143[1];}dijit.wai.setAttr(_133,wai.name,role,val);}}}}}});dijit._Templated._templateCache={};dijit._Templated.getCachedTemplate=function(_144,_145){var _146=dijit._Templated._templateCache;var key=_145||_144;var _148=_146[key];if(_148){return _148;}if(!_145){_145=dijit._Templated._sanitizeTemplateString(dojo._getText(_144));}_145=dojo.string.trim(_145);if(_145.match(/\$\{([^\}]+)\}/g)){return (_146[key]=_145);}else{return (_146[key]=dijit._Templated._createNodesFromText(_145)[0]);}};dijit._Templated._sanitizeTemplateString=function(_149){if(_149){_149=_149.replace(/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,"");var _14a=_149.match(/]*>\s*([\s\S]+)\s*<\/body>/im);if(_14a){_149=_14a[1];}}else{_149="";}return _149;};if(dojo.isIE){dojo.addOnUnload(function(){var _14b=dijit._Templated._templateCache;for(var key in _14b){var _14d=_14b[key];if(!isNaN(_14d.nodeType)){dojo._destroyElement(_14d);}_14b[key]=null;}});}(function(){var _14e={cell:{re:/^]/i,pre:"",post:"
"},row:{re:/^]/i,pre:"",post:"
"},section:{re:/^<(thead|tbody|tfoot)[\s\r\n>]/i,pre:"",post:"
"}};var tn;dijit._Templated._createNodesFromText=function(text){if(!tn){tn=dojo.doc.createElement("div");tn.style.display="none";}var _151="none";var _152=text.replace(/^\s+/,"");for(var type in _14e){var map=_14e[type];if(map.re.test(_152)){_151=type;text=map.pre+text+map.post;break;}}tn.innerHTML=text;dojo.body().appendChild(tn);if(tn.normalize){tn.normalize();}var tag={cell:"tr",row:"tbody",section:"table"}[_151];var _156=(typeof tag!="undefined")?tn.getElementsByTagName(tag)[0]:tn;var _157=[];while(_156.firstChild){_157.push(_156.removeChild(_156.firstChild));}tn.innerHTML="";return _157;};})();dojo.extend(dijit._Widget,{dojoAttachEvent:"",dojoAttachPoint:"",waiRole:"",waiState:""});}if(!dojo._hasResource["dijit._Container"]){dojo._hasResource["dijit._Container"]=true;dojo.provide("dijit._Container");dojo.declare("dijit._Contained",null,{getParent:function(){for(var p=this.domNode.parentNode;p;p=p.parentNode){var id=p.getAttribute&&p.getAttribute("widgetId");if(id){var _15a=dijit.byId(id);return _15a.isContainer?_15a:null;}}return null;},_getSibling:function(_15b){var node=this.domNode;do{node=node[_15b+"Sibling"];}while(node&&node.nodeType!=1);if(!node){return null;}var id=node.getAttribute("widgetId");return dijit.byId(id);},getPreviousSibling:function(){return this._getSibling("previous");},getNextSibling:function(){return this._getSibling("next");}});dojo.declare("dijit._Container",null,{isContainer:true,addChild:function(_15e,_15f){if(typeof _15f=="undefined"){_15f="last";}dojo.place(_15e.domNode,this.containerNode||this.domNode,_15f);if(this._started&&!_15e._started){_15e.startup();}},removeChild:function(_160){var node=_160.domNode;node.parentNode.removeChild(node);},_nextElement:function(node){do{node=node.nextSibling;}while(node&&node.nodeType!=1);return node;},_firstElement:function(node){node=node.firstChild;if(node&&node.nodeType!=1){node=this._nextElement(node);}return node;},getChildren:function(){return dojo.query("> [widgetId]",this.containerNode||this.domNode).map(dijit.byNode);},hasChildren:function(){var cn=this.containerNode||this.domNode;return !!this._firstElement(cn);}});}if(!dojo._hasResource["dijit.layout._LayoutWidget"]){dojo._hasResource["dijit.layout._LayoutWidget"]=true;dojo.provide("dijit.layout._LayoutWidget");dojo.declare("dijit.layout._LayoutWidget",[dijit._Widget,dijit._Container,dijit._Contained],{isLayoutContainer:true,postCreate:function(){dojo.addClass(this.domNode,"dijitContainer");},startup:function(){if(this._started){return;}this._started=true;if(this.getChildren){dojo.forEach(this.getChildren(),function(_165){_165.startup();});}if(!this.getParent||!this.getParent()){this.resize();this.connect(window,"onresize",function(){this.resize();});}},resize:function(args){var node=this.domNode;if(args){dojo.marginBox(node,args);if(args.t){node.style.top=args.t+"px";}if(args.l){node.style.left=args.l+"px";}}var mb=dojo.mixin(dojo.marginBox(node),args||{});this._contentBox=dijit.layout.marginBox2contentBox(node,mb);this.layout();},layout:function(){}});dijit.layout.marginBox2contentBox=function(node,mb){var cs=dojo.getComputedStyle(node);var me=dojo._getMarginExtents(node,cs);var pb=dojo._getPadBorderExtents(node,cs);return {l:dojo._toPixelValue(node,cs.paddingLeft),t:dojo._toPixelValue(node,cs.paddingTop),w:mb.w-(me.w+pb.w),h:mb.h-(me.h+pb.h)};};(function(){var _16e=function(word){return word.substring(0,1).toUpperCase()+word.substring(1);};var size=function(_171,dim){_171.resize?_171.resize(dim):dojo.marginBox(_171.domNode,dim);dojo.mixin(_171,dojo.marginBox(_171.domNode));dojo.mixin(_171,dim);};dijit.layout.layoutChildren=function(_173,dim,_175){dim=dojo.mixin({},dim);dojo.addClass(_173,"dijitLayoutContainer");dojo.forEach(_175,function(_176){var elm=_176.domNode,pos=_176.layoutAlign;var _179=elm.style;_179.left=dim.l+"px";_179.top=dim.t+"px";_179.bottom=_179.right="auto";dojo.addClass(elm,"dijitAlign"+_16e(pos));if(pos=="top"||pos=="bottom"){size(_176,{w:dim.w});dim.h-=_176.h;if(pos=="top"){dim.t+=_176.h;}else{_179.top=dim.t+dim.h+"px";}}else{if(pos=="left"||pos=="right"){size(_176,{h:dim.h});dim.w-=_176.w;if(pos=="left"){dim.l+=_176.w;}else{_179.left=dim.l+dim.w+"px";}}else{if(pos=="flood"||pos=="client"){size(_176,dim);}}}});};})();}if(!dojo._hasResource["dijit.form._FormWidget"]){dojo._hasResource["dijit.form._FormWidget"]=true;dojo.provide("dijit.form._FormWidget");dojo.declare("dijit.form._FormWidget",[dijit._Widget,dijit._Templated],{baseClass:"",value:"",name:"",id:"",alt:"",type:"text",tabIndex:"0",disabled:false,intermediateChanges:false,setDisabled:function(_17a){this.domNode.disabled=this.disabled=_17a;if(this.focusNode){this.focusNode.disabled=_17a;}if(_17a){this._hovering=false;this._active=false;}dijit.wai.setAttr(this.focusNode||this.domNode,"waiState","disabled",_17a);this._setStateClass();},_onMouse:function(_17b){var _17c=_17b.target;if(!this.disabled){switch(_17b.type){case "mouseover":this._hovering=true;var _17d,node=_17c;while(node.nodeType===1&&!(_17d=node.getAttribute("baseClass"))&&node!=this.domNode){node=node.parentNode;}this.baseClass=_17d||"dijit"+this.declaredClass.replace(/.*\./g,"");break;case "mouseout":this._hovering=false;this.baseClass=null;break;case "mousedown":this._active=true;var self=this;var _180=this.connect(dojo.body(),"onmouseup",function(){self._active=false;self._setStateClass();self.disconnect(_180);});break;}this._setStateClass();}},focus:function(){dijit.focus(this.focusNode);},_setStateClass:function(base){var _182=(this.styleNode||this.domNode).className;var base=this.baseClass||this.domNode.getAttribute("baseClass")||"dijitFormWidget";_182=_182.replace(new RegExp("\\b"+base+"(Checked)?(Selected)?(Disabled|Active|Focused|Hover)?\\b\\s*","g"),"");var _183=[base];function multiply(_184){_183=_183.concat(dojo.map(_183,function(c){return c+_184;}));};if(this.checked){multiply("Checked");}if(this.selected){multiply("Selected");}if(this.disabled){multiply("Disabled");}else{if(this._active){multiply("Active");}else{if(this._focused){multiply("Focused");}else{if(this._hovering){multiply("Hover");}}}}(this.styleNode||this.domNode).className=_182+" "+_183.join(" ");},onChange:function(_186){},postCreate:function(){this.setValue(this.value,true);this.setDisabled(this.disabled);this._setStateClass();},setValue:function(_187,_188){this._lastValue=_187;dijit.wai.setAttr(this.focusNode||this.domNode,"waiState","valuenow",this.forWaiValuenow());if((this.intermediateChanges||_188)&&_187!=this._lastValueReported){this._lastValueReported=_187;this.onChange(_187);}},getValue:function(){return this._lastValue;},undo:function(){this.setValue(this._lastValueReported,false);},_onKeyPress:function(e){if(e.keyCode==dojo.keys.ESCAPE&&!e.shiftKey&&!e.ctrlKey&&!e.altKey){var v=this.getValue();var lv=this._lastValueReported;if(lv!=undefined&&v.toString()!=lv.toString()){this.undo();dojo.stopEvent(e);return false;}}return true;},forWaiValuenow:function(){return this.getValue();}});}if(!dojo._hasResource["dijit.dijit"]){dojo._hasResource["dijit.dijit"]=true;dojo.provide("dijit.dijit");} +if(!dojo._hasResource["dijit._base.focus"]){dojo._hasResource["dijit._base.focus"]=true;dojo.provide("dijit._base.focus");dojo.mixin(dijit,{_curFocus:null,_prevFocus:null,isCollapsed:function(){var _1=dojo.global;var _2=dojo.doc;if(_2.selection){return !_2.selection.createRange().text;}else{if(_1.getSelection){var _3=_1.getSelection();if(dojo.isString(_3)){return !_3;}else{return _3.isCollapsed||!_3.toString();}}}},getBookmark:function(){var _4,_5=dojo.doc.selection;if(_5){var _6=_5.createRange();if(_5.type.toUpperCase()=="CONTROL"){_4=_6.length?dojo._toArray(_6):null;}else{_4=_6.getBookmark();}}else{if(dojo.global.getSelection){_5=dojo.global.getSelection();if(_5){var _6=_5.getRangeAt(0);_4=_6.cloneRange();}}else{console.debug("No idea how to store the current selection for this browser!");}}return _4;},moveToBookmark:function(_7){var _8=dojo.doc;if(_8.selection){var _9;if(dojo.isArray(_7)){_9=_8.body.createControlRange();dojo.forEach(_7,_9.addElement);}else{_9=_8.selection.createRange();_9.moveToBookmark(_7);}_9.select();}else{var _a=dojo.global.getSelection&&dojo.global.getSelection();if(_a&&_a.removeAllRanges){_a.removeAllRanges();_a.addRange(_7);}else{console.debug("No idea how to restore selection for this browser!");}}},getFocus:function(_b,_c){return {node:_b&&dojo.isDescendant(dijit._curFocus,_b.domNode)?dijit._prevFocus:dijit._curFocus,bookmark:!dojo.withGlobal(_c||dojo.global,dijit.isCollapsed)?dojo.withGlobal(_c||dojo.global,dijit.getBookmark):null,openedForWindow:_c};},focus:function(_d){if(!_d){return;}var _e="node" in _d?_d.node:_d,_f=_d.bookmark,_10=_d.openedForWindow;if(_e){var _11=(_e.tagName.toLowerCase()=="iframe")?_e.contentWindow:_e;if(_11&&_11.focus){try{_11.focus();}catch(e){}}dijit._onFocusNode(_e);}if(_f&&dojo.withGlobal(_10||dojo.global,dijit.isCollapsed)){if(_10){_10.focus();}try{dojo.withGlobal(_10||dojo.global,moveToBookmark,null,[_f]);}catch(e){}}},_activeStack:[],registerWin:function(_12){if(!_12){_12=window;}dojo.connect(_12.document,"onmousedown",null,function(evt){dijit._justMouseDowned=true;setTimeout(function(){dijit._justMouseDowned=false;},0);dijit._onTouchNode(evt.target||evt.srcElement);});var _14=_12.document.body||_12.document.getElementsByTagName("body")[0];if(_14){if(dojo.isIE){_14.attachEvent("onactivate",function(evt){if(evt.srcElement.tagName.toLowerCase()!="body"){dijit._onFocusNode(evt.srcElement);}});_14.attachEvent("ondeactivate",function(evt){dijit._onBlurNode(evt.srcElement);});}else{_14.addEventListener("focus",function(evt){dijit._onFocusNode(evt.target);},true);_14.addEventListener("blur",function(evt){dijit._onBlurNode(evt.target);},true);}}_14=null;},_onBlurNode:function(_19){dijit._prevFocus=dijit._curFocus;dijit._curFocus=null;var w=dijit.getEnclosingWidget(_19);if(w&&w._setStateClass){w._focused=false;w._setStateClass();}if(dijit._justMouseDowned){return;}if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);}dijit._clearActiveWidgetsTimer=setTimeout(function(){delete dijit._clearActiveWidgetsTimer;dijit._setStack([]);},100);},_onTouchNode:function(_1b){if(dijit._clearActiveWidgetsTimer){clearTimeout(dijit._clearActiveWidgetsTimer);delete dijit._clearActiveWidgetsTimer;}var _1c=[];try{while(_1b){if(_1b.dijitPopupParent){_1b=dijit.byId(_1b.dijitPopupParent).domNode;}else{if(_1b.tagName&&_1b.tagName.toLowerCase()=="body"){if(_1b===dojo.body()){break;}_1b=dojo.query("iframe").filter(function(_1d){return _1d.contentDocument.body===_1b;})[0];}else{var id=_1b.getAttribute&&_1b.getAttribute("widgetId");if(id){_1c.unshift(id);}_1b=_1b.parentNode;}}}}catch(e){}dijit._setStack(_1c);},_onFocusNode:function(_1f){if(_1f&&_1f.tagName&&_1f.tagName.toLowerCase()=="body"){return;}dijit._onTouchNode(_1f);if(_1f==dijit._curFocus){return;}dijit._prevFocus=dijit._curFocus;dijit._curFocus=_1f;dojo.publish("focusNode",[_1f]);var w=dijit.getEnclosingWidget(_1f);if(w&&w._setStateClass){w._focused=true;w._setStateClass();}},_setStack:function(_21){var _22=dijit._activeStack;dijit._activeStack=_21;for(var _23=0;_23=_23;i--){var _25=dijit.byId(_22[i]);if(_25){dojo.publish("widgetBlur",[_25]);if(_25._onBlur){_25._onBlur();}}}for(var i=_23;i<_21.length;i++){var _25=dijit.byId(_21[i]);if(_25){dojo.publish("widgetFocus",[_25]);if(_25._onFocus){_25._onFocus();}}}}});dojo.addOnLoad(dijit.registerWin);}if(!dojo._hasResource["dijit._base.manager"]){dojo._hasResource["dijit._base.manager"]=true;dojo.provide("dijit._base.manager");dojo.declare("dijit.WidgetSet",null,{constructor:function(){this._hash={};},add:function(_26){if(this._hash[_26.id]){throw new Error("Tried to register widget with id=="+_26.id+" but that id is already registered");}this._hash[_26.id]=_26;},remove:function(id){delete this._hash[id];},forEach:function(_28){for(var id in this._hash){_28(this._hash[id]);}},filter:function(_2a){var res=new dijit.WidgetSet();this.forEach(function(_2c){if(_2a(_2c)){res.add(_2c);}});return res;},byId:function(id){return this._hash[id];},byClass:function(cls){return this.filter(function(_2f){return _2f.declaredClass==cls;});}});dijit.registry=new dijit.WidgetSet();dijit._widgetTypeCtr={};dijit.getUniqueId=function(_30){var id;do{id=_30+"_"+(dijit._widgetTypeCtr[_30]!==undefined?++dijit._widgetTypeCtr[_30]:dijit._widgetTypeCtr[_30]=0);}while(dijit.byId(id));return id;};if(dojo.isIE){dojo.addOnUnload(function(){dijit.registry.forEach(function(_32){_32.destroy();});});}dijit.byId=function(id){return (dojo.isString(id))?dijit.registry.byId(id):id;};dijit.byNode=function(_34){return dijit.registry.byId(_34.getAttribute("widgetId"));};dijit.getEnclosingWidget=function(_35){while(_35){if(_35.getAttribute&&_35.getAttribute("widgetId")){return dijit.registry.byId(_35.getAttribute("widgetId"));}_35=_35.parentNode;}return null;};}if(!dojo._hasResource["dijit._base.place"]){dojo._hasResource["dijit._base.place"]=true;dojo.provide("dijit._base.place");dijit.getViewport=function(){var _36=dojo.global;var _37=dojo.doc;var w=0,h=0;if(dojo.isMozilla){var _3a,_3b,_3c,_3d;if(_37.body.clientWidth>_37.documentElement.clientWidth){_3a=_37.documentElement.clientWidth;_3c=_37.body.clientWidth;}else{_3c=_37.documentElement.clientWidth;_3a=_37.body.clientWidth;}if(_37.body.clientHeight>_37.documentElement.clientHeight){_3b=_37.documentElement.clientHeight;_3d=_37.body.clientHeight;}else{_3d=_37.documentElement.clientHeight;_3b=_37.body.clientHeight;}w=(_3c>_36.innerWidth)?_3a:_3c;h=(_3d>_36.innerHeight)?_3b:_3d;}else{if(!dojo.isOpera&&_36.innerWidth){w=_36.innerWidth;h=_36.innerHeight;}else{if(dojo.isIE&&_37.documentElement&&_37.documentElement.clientHeight){w=_37.documentElement.clientWidth;h=_37.documentElement.clientHeight;}else{if(dojo.body().clientWidth){w=dojo.body().clientWidth;h=dojo.body().clientHeight;}}}}var _3e=dojo._docScroll();return {w:w,h:h,l:_3e.x,t:_3e.y};};dijit.placeOnScreen=function(_3f,pos,_41,_42){var _43=dojo.map(_41,function(_44){return {corner:_44,pos:pos};});return dijit._place(_3f,_43);};dijit._place=function(_45,_46,_47){var _48=dijit.getViewport();if(!_45.parentNode||String(_45.parentNode.tagName).toLowerCase()!="body"){dojo.body().appendChild(_45);}var _49=null;for(var i=0;i<_46.length;i++){var _4b=_46[i].corner;var pos=_46[i].pos;if(_47){_47(_4b);}var _4d=_45.style.display;var _4e=_45.style.visibility;_45.style.visibility="hidden";_45.style.display="";var mb=dojo.marginBox(_45);_45.style.display=_4d;_45.style.visibility=_4e;var _50=(_4b.charAt(1)=="L"?pos.x:Math.max(_48.l,pos.x-mb.w)),_51=(_4b.charAt(0)=="T"?pos.y:Math.max(_48.t,pos.y-mb.h)),_52=(_4b.charAt(1)=="L"?Math.min(_48.l+_48.w,_50+mb.w):pos.x),_53=(_4b.charAt(0)=="T"?Math.min(_48.t+_48.h,_51+mb.h):pos.y),_54=_52-_50,_55=_53-_51,_56=(mb.w-_54)+(mb.h-_55);if(_49==null||_56<_49.overflow){_49={corner:_4b,aroundCorner:_46[i].aroundCorner,x:_50,y:_51,w:_54,h:_55,overflow:_56};}if(_56==0){break;}}_45.style.left=_49.x+"px";_45.style.top=_49.y+"px";return _49;};dijit.placeOnScreenAroundElement=function(_57,_58,_59,_5a){_58=dojo.byId(_58);var _5b=_58.style.display;_58.style.display="";var _5c=_58.offsetWidth;var _5d=_58.offsetHeight;var _5e=dojo.coords(_58,true);_58.style.display=_5b;var _5f=[];for(var _60 in _59){_5f.push({aroundCorner:_60,corner:_59[_60],pos:{x:_5e.x+(_60.charAt(1)=="L"?0:_5c),y:_5e.y+(_60.charAt(0)=="T"?0:_5d)}});}return dijit._place(_57,_5f,_5a);};}if(!dojo._hasResource["dijit._base.window"]){dojo._hasResource["dijit._base.window"]=true;dojo.provide("dijit._base.window");dijit.getDocumentWindow=function(doc){if(dojo.isSafari&&!doc._parentWindow){var fix=function(win){win.document._parentWindow=win;for(var i=0;i0&&_66[pi].parent===_66[pi-1].widget;pi--){}return _66[pi];};_71.push(dojo.connect(_6e,"onkeypress",this,function(evt){if(evt.keyCode==dojo.keys.ESCAPE&&_69.onCancel){_69.onCancel();}else{if(evt.keyCode==dojo.keys.TAB){dojo.stopEvent(evt);var _74=getTopPopup();if(_74&&_74.onCancel){_74.onCancel();}}}}));if(_6a.onCancel){_71.push(dojo.connect(_6a,"onCancel",null,_69.onCancel));}_71.push(dojo.connect(_6a,_6a.onExecute?"onExecute":"onChange",null,function(){var _75=getTopPopup();if(_75&&_75.onExecute){_75.onExecute();}}));_66.push({wrapper:_6e,iframe:_6f,widget:_6a,parent:_69.parent,onExecute:_69.onExecute,onCancel:_69.onCancel,onClose:_69.onClose,handlers:_71});if(_6a.onOpen){_6a.onOpen(_70);}return _70;};this.close=function(_76){while(dojo.some(_66,function(_77){return _77.widget==_76;})){var top=_66.pop(),_79=top.wrapper,_7a=top.iframe,_7b=top.widget,_7c=top.onClose;if(_7b.onClose){_7b.onClose();}dojo.forEach(top.handlers,dojo.disconnect);if(!_7b||!_7b.domNode){return;}dojo.style(_7b.domNode,"display","none");dojo.body().appendChild(_7b.domNode);_7a.destroy();dojo._destroyElement(_79);if(_7c){_7c();}}};}();dijit._frames=new function(){var _7d=[];this.pop=function(){var _7e;if(_7d.length){_7e=_7d.pop();_7e.style.display="";}else{if(dojo.isIE){var _7f="') + ((dojo.isIE || dojo.isSafari) ? '
' + : ''+ + '') + '' + ((dojo.isIE || dojo.isSafari) ? '
':'') - : '', - - _nlsResources: null, // Needed for screen readers on FF2 + : '', focus: function(){ // summary: Received focus, needed for the InlineEditBox widget @@ -55,10 +59,6 @@ dojo.declare( }else{ editNode.appendChild(document.createTextNode(value)); } - if(this.iframe){ - this.sizeNode = document.createElement('div'); - editNode.appendChild(this.sizeNode); - } }else{ // blah
blah --> blah\nblah //

blah

blah

--> blah\nblah @@ -70,21 +70,24 @@ dojo.declare( } value = value.replace(/\s*\r?\n|^\s+|\s+$| /g,"").replace(/>\s+<").replace(/<\/(p|div)>$|^<(p|div)[^>]*>/gi,"").replace(/([^>])
/g,"$1\n").replace(/<\/p>\s*]*>|]*>/gi,"\n").replace(/<[^>]*>/g,"").replace(/&/gi,"\&").replace(/</gi,"<").replace(/>/gi,">"); } - this.formValueNode.value = value; + this.value = this.formValueNode.value = value; if(this.iframe){ - var newHeight = this.sizeNode.offsetTop; + var sizeNode = document.createElement('div'); + editNode.appendChild(sizeNode); + var newHeight = sizeNode.offsetTop; if(editNode.scrollWidth > editNode.clientWidth){ newHeight+=16; } // scrollbar space needed? if(this.lastHeight != newHeight){ // cache size so that we don't get a resize event because of a resize event if(newHeight == 0){ newHeight = 16; } // height = 0 causes the browser to not set scrollHeight dojo.contentBox(this.iframe, {h: newHeight}); this.lastHeight = newHeight; } + editNode.removeChild(sizeNode); } - dijit.form.Textarea.superclass.setValue.call(this, value, priorityChange); + dijit.form.Textarea.superclass.setValue.call(this, this.getValue(), priorityChange); }, getValue: function(){ - return this.formValueNode.value; + return this.formValueNode.value.replace(/\r/g,""); }, postMixInProperties: function(){ @@ -99,17 +102,7 @@ dojo.declare( } if(!this.value){ this.value = ""; } this.value = this.value.replace(/\r\n/g,"\n").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&"); - }, - - postCreate: function(){ - if(dojo.isIE || dojo.isSafari){ - this.domNode.style.overflowY = 'hidden'; - this.eventNode = this.focusNode = this.editNode; - this.connect(this.eventNode, "oncut", this._changing); - this.connect(this.eventNode, "onpaste", this._changing); - }else if(dojo.isMozilla){ - var w = this.iframe.contentWindow; - var d = w.document; + if(dojo.isMozilla){ // In the case of Firefox an iframe is used and when the text gets focus, // focus is fired from the document object. There isn't a way to put a // waiRole on the document object and as a result screen readers don't @@ -117,7 +110,7 @@ dojo.declare( // // An additional problem is that the browser gives the document object a // very cryptic accessible name, e.g. - // wyciwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html + // wysiwyg://13/http://archive.dojotoolkit.org/nightly/dojotoolkit/dijit/tests/form/test_InlineEditBox.html // When focus is fired from the document object, the screen reader speaks // the accessible name. The cyptic accessile name is confusing. // @@ -126,19 +119,38 @@ dojo.declare( // "edit area". This will be used as the accessible name which will replace // the cryptic name and will also convey the role information to the user. // Because it is read directly to the user, the string must be localized. - this._nlsResources = dojo.i18n.getLocalization("dijit.form", "Textarea"); - d.open(); - d.write('' + - this._nlsResources.iframeTitle1 + // "edit area" - ''); - // body > br style is to remove the
that gets added by FF - d.close(); - this.editNode = d.body; + var _nlsResources = dojo.i18n.getLocalization("dijit", "Textarea"); + this._iframeEditTitle = _nlsResources.iframeEditTitle; + this._iframeFocusTitle = _nlsResources.iframeFocusTitle; + var body = this.focusNode = this.editNode = document.createElement('BODY'); + body.style.margin="0px"; + body.style.padding="0px"; + body.style.border="0px"; + } + }, + + postCreate: function(){ + if(dojo.isIE || dojo.isSafari){ + this.domNode.style.overflowY = 'hidden'; + }else if(dojo.isMozilla){ + var w = this.iframe.contentWindow; + try { // #4715: peeking at the title can throw a security exception during iframe setup + var title = this.iframe.contentDocument.title; + } catch(e) { var title = ''; } + if(!w || !title){ + this.iframe.postCreate = dojo.hitch(this, this.postCreate); + return; + } + var d = w.document; + d.getElementsByTagName('HTML')[0].replaceChild(this.editNode, d.getElementsByTagName('BODY')[0]); + if(!this.isLeftToRight()){ + d.getElementsByTagName('HTML')[0].dir = "rtl"; + } this.iframe.style.overflowY = 'hidden'; - // resize is a method of window, not document this.eventNode = d; - this.focusNode = this.editNode; - this.connect(w, "resize", this._changed); // resize is only on the window object + // this.connect won't destroy this handler cleanly since its on the iframe's window object + // resize is a method of window, not document + w.addEventListener("resize", dojo.hitch(this, this._changed), false); // resize is only on the window object }else{ this.focusNode = this.domNode; } @@ -167,7 +179,7 @@ dojo.declare( _onIframeBlur: function(){ // Reset the title back to "edit area". - this.iframe.contentDocument.title = this._nlsResources.iframeTitle1; + this.iframe.contentDocument.title = this._iframeEditTitle; }, _onKeyPress: function(e){ @@ -180,10 +192,10 @@ dojo.declare( // announced twice which causes confusion. By setting the // contentDocument's title to "edit area frame" the confusion should be // eliminated. - this.iframe.contentDocument.title = this._nlsResources.iframeTitle2; + this.iframe.contentDocument.title = this._iframeFocusTitle; // Place focus on the iframe. A subsequent tab or shift tab will put focus // on the correct control. - // Note: Can't use this.focus() because that results in a call to + // Note: Can't use this.focus() because that results in a call to // dijit.focus and if that receives an iframe target it will set focus // on the iframe's contentWindow. this.iframe.focus(); // this.focus(); won't work diff --git a/spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js b/spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js index 7e2b15f7..e906888f 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/TimeTextBox.js @@ -5,7 +5,7 @@ dojo.provide("dijit.form.TimeTextBox"); dojo.require("dojo.date"); dojo.require("dojo.date.locale"); dojo.require("dojo.date.stamp"); -dojo.require("dijit.form._TimePicker"); +dojo.require("dijit._TimePicker"); dojo.require("dijit.form.ValidationTextBox"); dojo.declare( @@ -28,11 +28,11 @@ dojo.declare( value: new Date(""), // NaN _invalid: (new Date("")).toString(), // NaN - _popupClass: "dijit.form._TimePicker", + _popupClass: "dijit._TimePicker", postMixInProperties: function(){ - dijit.form.RangeBoundTextBox.prototype.postMixInProperties.apply(this, arguments); - + //dijit.form.RangeBoundTextBox.prototype.postMixInProperties.apply(this, arguments); + this.inherited("postMixInProperties",arguments); var constraints = this.constraints; constraints.selector = 'time'; if(typeof constraints.min == "string"){ constraints.min = dojo.date.stamp.fromISOString(constraints.min); } @@ -40,7 +40,7 @@ dojo.declare( }, _onFocus: function(/*Event*/ evt){ - // open the calendar + // summary: open the TimePicker popup this._open(); }, @@ -57,7 +57,10 @@ dojo.declare( _open: function(){ // summary: - // opens the Calendar, and sets the onValueSelected for the Calendar + // opens the TimePicker, and sets the onValueSelected value + + if(this.disabled){return;} + var self = this; if(!this._picker){ @@ -66,7 +69,7 @@ dojo.declare( onValueSelected: function(value){ self.focus(); // focus the textbox before the popup closes to avoid reopening the popup - setTimeout(dijit.popup.close, 1); // allow focus time to take + setTimeout(dojo.hitch(self, "_close"), 1); // allow focus time to take // this will cause InlineEditBox and other handlers to do stuff so make sure it's last dijit.form.TimeTextBox.superclass.setValue.call(self, value, true); @@ -86,15 +89,25 @@ dojo.declare( parent: this, popup: this._picker, around: this.domNode, + onCancel: dojo.hitch(this, this._close), onClose: function(){ self._opened=false; } }); this._opened=true; } + + dojo.marginBox(this._picker.domNode,{ w:this.domNode.offsetWidth }); + }, + + _close: function(){ + if(this._opened){ + dijit.popup.close(this._picker); + this._opened=false; + } }, _onBlur: function(){ // summary: called magically when focus has shifted away from this widget and it's dropdown - dijit.popup.closeAll(); + this._close(); this.inherited('_onBlur', arguments); // don't focus on . the user has explicitly focused on something else. }, diff --git a/spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js b/spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js index fca9630b..37fffc74 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/ValidationTextBox.js @@ -7,7 +7,7 @@ dojo.require("dojo.i18n"); dojo.require("dijit.form.TextBox"); dojo.require("dijit.Tooltip"); -dojo.requireLocalization("dijit.form", "validate", null, "zh-cn,ja,it,ROOT,fr,de"); +dojo.requireLocalization("dijit.form", "validate", null, "ko,zh-cn,zh,ja,zh-tw,ru,it,hu,ROOT,fr,pt,pl,es,de,cs"); dojo.declare( "dijit.form.ValidationTextBox", @@ -17,6 +17,9 @@ dojo.declare( // A subclass of TextBox. // Over-ride isValid in subclasses to perform specific kinds of validation. + templateString:"
Χ
\n", + baseClass: "dijitTextBox", + // default values for new subclass properties // required: Boolean // Can be true or false, default is false. @@ -26,7 +29,7 @@ dojo.declare( promptMessage: "", // invalidMessage: String // The message to display if value is invalid. - invalidMessage: "", + invalidMessage: "\x00", // read from the message file if not overridden // constraints: Object // user-defined object needed to pass parameters to the validator functions constraints: {}, @@ -38,6 +41,10 @@ dojo.declare( // user replaceable function used to generate regExp when dependent on constraints // Do not specify both regExp and regExpGen regExpGen: function(constraints){ return this.regExp; }, + + // state: String + // Shows current state (ie, validation result) of input (Normal, Warning, or Error) + state: "", setValue: function(){ this.inherited('setValue', arguments); @@ -46,7 +53,9 @@ dojo.declare( validator: function(value,constraints){ // summary: user replaceable function used to validate the text input against the regular expression. - return (new RegExp("^(" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value)&&(!this.required||!this._isEmpty(value)); + return (new RegExp("^(" + this.regExpGen(constraints) + ")"+(this.required?"":"?")+"$")).test(value) && + (!this.required || !this._isEmpty(value)) && + (this._isEmpty(value) || this.parse(value, constraints) !== null); }, isValid: function(/* Boolean*/ isFocused){ @@ -76,14 +85,12 @@ dojo.declare( // Show missing or invalid messages if appropriate, and highlight textbox field. var message = ""; var isValid = this.isValid(isFocused); - var className = isValid ? "Normal" : "Error"; - if(!dojo.hasClass(this.nodeWithBorder, "dijitInputFieldValidation"+className)){ - dojo.removeClass(this.nodeWithBorder, "dijitInputFieldValidation"+((className=="Normal")?"Error":"Normal")); - dojo.addClass(this.nodeWithBorder, "dijitInputFieldValidation"+className); - } - dijit.wai.setAttr(this.focusNode, "waiState", "invalid", (isValid? "false" : "true")); + var isEmpty = this._isEmpty(this.textbox.value); + this.state = (isValid || (!this._hasBeenBlurred && isEmpty)) ? "" : "Error"; + this._setStateClass(); + dijit.setWaiState(this.focusNode, "invalid", (isValid? "false" : "true")); if(isFocused){ - if(this._isEmpty(this.textbox.value)){ + if(isEmpty){ message = this.getPromptMessage(true); } if(!message && !isValid){ @@ -101,42 +108,46 @@ dojo.declare( this._message = message; this.displayMessage(message); }, - + displayMessage: function(/*String*/ message){ // summary: // User overridable method to display validation errors/hints. // By default uses a tooltip. if(message){ - dijit.MasterTooltip.show(message, this.domNode); + dijit.showTooltip(message, this.domNode); }else{ - dijit.MasterTooltip.hide(); + dijit.hideTooltip(this.domNode); } }, + _hasBeenBlurred: false, + _onBlur: function(evt){ + this._hasBeenBlurred = true; this.validate(false); this.inherited('_onBlur', arguments); }, onfocus: function(evt){ - this.inherited('onfocus', arguments); + // TODO: change to _onFocus? this.validate(true); + this._onMouse(evt); // update CSS classes }, onkeyup: function(evt){ this.onfocus(evt); }, + //////////// INITIALIZATION METHODS /////////////////////////////////////// + constructor: function(){ + this.constraints = {}; + }, + postMixInProperties: function(){ - if(this.constraints == dijit.form.ValidationTextBox.prototype.constraints){ - this.constraints = {}; - } this.inherited('postMixInProperties', arguments); this.constraints.locale=this.lang; this.messages = dojo.i18n.getLocalization("dijit.form", "validate", this.lang); - dojo.forEach(["invalidMessage", "missingMessage"], function(prop){ - if(!this[prop]){ this[prop] = this.messages[prop]; } - }, this); + if(this.invalidMessage == "\x00"){ this.invalidMessage = this.messages.invalidMessage; } var p = this.regExpGen(this.constraints); this.regExp = p; // make value a string for all types so that form reset works well @@ -152,14 +163,14 @@ dojo.declare( // A subclass of ValidationTextBox. // Provides a hidden input field and a serialize method to override - serialize: function(val){ + serialize: function(val, /*Object?*/options){ // summary: user replaceable function used to convert the getValue() result to a String - return val.toString(); + return (val.toString ? val.toString() : ""); }, toString: function(){ // summary: display the widget as a printable string using the widget's value - var val = this.getValue(); + var val = this.filter(this.getValue()); return (val!=null) ? ((typeof val == "string") ? val : this.serialize(val, this.constraints)) : ""; }, @@ -175,8 +186,8 @@ dojo.declare( valueNode.setAttribute("value", this.toString()); dojo.style(valueNode, "display", "none"); valueNode.name = this.textbox.name; + this.textbox.name = "_" + this.textbox.name + "_displayed_"; this.textbox.removeAttribute("name"); - dojo.place(valueNode, textbox, "after"); this.inherited('postCreate', arguments); @@ -201,7 +212,7 @@ dojo.declare( =====*/ // rangeMessage: String - // The message to display if value is out-of-range + // The message to display if value is out-of-range rangeMessage: "", compare: function(val1, val2){ @@ -245,10 +256,10 @@ dojo.declare( postCreate: function(){ this.inherited('postCreate', arguments); if(typeof this.constraints.min != "undefined"){ - dijit.wai.setAttr(this.domNode, "waiState", "valuemin", this.constraints.min); + dijit.setWaiState(this.focusNode, "valuemin", this.constraints.min); } if(typeof this.constraints.max != "undefined"){ - dijit.wai.setAttr(this.domNode, "waiState", "valuemax", this.constraints.max); + dijit.setWaiState(this.focusNode, "valuemax", this.constraints.max); } } } diff --git a/spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js b/spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js index a6b65258..4c6f2839 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/_FormWidget.js @@ -21,8 +21,9 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], */ // baseClass: String - // Used to add CSS classes like FormElementDisabled - // TODO: remove this in favor of this.domNode.baseClass? + // Root CSS class of the widget (ex: dijitTextBox), used to add CSS classes of widget + // (ex: "dijitTextBox dijitTextBoxInvalid dijitTextBoxFocused dijitTextBoxInvalidFocused") + // See _setStateClass(). baseClass: "", // value: String @@ -56,9 +57,16 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], disabled: false, // intermediateChanges: Boolean - // Fires onChange for each value change or only on demand + // Fires onChange for each value change or only on demand intermediateChanges: false, + // These mixins assume that the focus node is an INPUT, as many but not all _FormWidgets are. + // Don't attempt to mixin the 'type', 'name' attributes here programatically -- they must be declared + // directly in the template as read by the parser in order to function. IE is known to specifically + // require the 'name' attribute at element creation time. + attributeMap: dojo.mixin(dojo.clone(dijit._Widget.prototype.attributeMap), + {id:"focusNode", tabIndex:"focusNode", alt:"focusNode"}), + setDisabled: function(/*Boolean*/ disabled){ // summary: // Set disabled state of widget. @@ -73,35 +81,34 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], this._hovering = false; this._active = false; } - dijit.wai.setAttr(this.focusNode || this.domNode, "waiState", "disabled", disabled); + dijit.setWaiState(this.focusNode || this.domNode, "disabled", disabled); this._setStateClass(); }, _onMouse : function(/*Event*/ event){ // summary: - // Sets _hovering, _active, and baseClass attributes depending on mouse state, - // then calls setStateClass() to set appropriate CSS class for this.domNode. + // Sets _hovering, _active, and stateModifier properties depending on mouse state, + // then calls setStateClass() to set appropriate CSS classes for this.domNode. // // To get a different CSS class for hover, send onmouseover and onmouseout events to this method. // To get a different CSS class while mouse button is depressed, send onmousedown to this method. var mouseNode = event.target; + if(mouseNode && mouseNode.getAttribute){ + this.stateModifier = mouseNode.getAttribute("stateModifier") || ""; + } if(!this.disabled){ switch(event.type){ + case "mouseenter" : case "mouseover" : this._hovering = true; - var baseClass, node=mouseNode; - while( node.nodeType===1 && !(baseClass=node.getAttribute("baseClass")) && node != this.domNode ){ - node=node.parentNode; - } - this.baseClass= baseClass || "dijit"+this.declaredClass.replace(/.*\./g,""); break; case "mouseout" : - this._hovering = false; - this.baseClass=null; + case "mouseleave" : + this._hovering = false; break; case "mousedown" : @@ -121,41 +128,53 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], } }, + isFocusable: function(){ + return !this.disabled && (dojo.style(this.domNode, "display") != "none"); + }, + focus: function(){ dijit.focus(this.focusNode); }, - _setStateClass: function(/*String*/ base){ - // summary: - // Update the visual state of the widget by changing the css class on the domnode - // according to widget state. + _setStateClass: function(){ + // summary + // Update the visual state of the widget by setting the css classes on this.domNode + // (or this.stateNode if defined) by combining this.baseClass with + // various suffixes that represent the current widget state(s). // - // State will be one of: - // - // + "Disabled" - if the widget is disabled - // + "Active" - if the mouse (or space/enter key?) is being pressed down - // + "Hover" - if the mouse is over the widget - // + "Focused" - if the widget has focus + // In the case where a widget has multiple + // states, it sets the class based on all possible + // combinations. For example, an invalid form widget that is being hovered + // will be "dijitInput dijitInputInvalid dijitInputHover dijitInputInvalidHover". // - // Note: if you don't want to change the way the widget looks on hover, then don't call - // this routine on hover. Similarly for mousedown --> active + // For complex widgets with multiple regions, there can be various hover/active states, + // such as "Hover" or "CloseButtonHover" (for tab buttons). + // This is controlled by a stateModifier="CloseButton" attribute on the close button node. // - // For widgets which can be in a checked state (like checkbox or radio), - // in addition to the above classes... - // + "Checked" - // + "CheckedDisabled" - if the widget is disabled - // + "CheckedActive" - if the mouse is being pressed down - // + "CheckedHover" - if the mouse is over the widget - // + "CheckedFocused" - if the widget has focus + // The widget may have one or more of the following states, determined + // by this.state, this.checked, this.valid, and this.selected: + // Error - ValidationTextBox sets this.state to "Error" if the current input value is invalid + // Checked - ex: a checkmark or a ToggleButton in a checked state, will have this.checked==true + // Selected - ex: currently selected tab will have this.selected==true + // + // In addition, it may have at most one of the following states, + // based on this.disabled and flags set in _onMouse (this._active, this._hovering, this._focused): + // Disabled - if the widget is disabled + // Active - if the mouse (or space/enter key?) is being pressed down + // Focused - if the widget has focus + // Hover - if the mouse is over the widget + // + // (even if multiple af the above conditions are true we only pick the first matching one) - // get original class (non state related) specified in template - var origClass = (this.styleNode||this.domNode).className; - // compute list of classname representing the states of the widget - var base = this.baseClass || this.domNode.getAttribute("baseClass") || "dijitFormWidget"; - origClass = origClass.replace(new RegExp("\\b"+base+"(Checked)?(Selected)?(Disabled|Active|Focused|Hover)?\\b\\s*", "g"), ""); - var classes = [ base ]; - + // Get original (non state related, non baseClass related) class specified in template + if(!("staticClass" in this)){ + this.staticClass = (this.stateNode||this.domNode).className; + } + + // Compute new set of classes + var classes = [ this.baseClass ]; + function multiply(modifier){ classes=classes.concat(dojo.map(classes, function(c){ return c+modifier; })); } @@ -163,23 +182,26 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], if(this.checked){ multiply("Checked"); } + if(this.state){ + multiply(this.state); + } if(this.selected){ multiply("Selected"); } - + // Only one of these four can be applied. // Active trumps Focused, Focused trumps Hover, and Disabled trumps all. if(this.disabled){ multiply("Disabled"); }else if(this._active){ - multiply("Active"); + multiply(this.stateModifier+"Active"); }else if(this._focused){ multiply("Focused"); }else if(this._hovering){ - multiply("Hover"); + multiply(this.stateModifier+"Hover"); } - (this.styleNode || this.domNode).className = origClass + " " + classes.join(" "); + (this.stateNode || this.domNode).className = this.staticClass + " " + classes.join(" "); }, onChange: function(newValue){ @@ -187,7 +209,7 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], }, postCreate: function(){ - this.setValue(this.value, true); + this.setValue(this.value, null); // null reserved for initial value this.setDisabled(this.disabled); this._setStateClass(); }, @@ -195,8 +217,11 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], setValue: function(/*anything*/ newValue, /*Boolean, optional*/ priorityChange){ // summary: set the value of the widget. this._lastValue = newValue; - dijit.wai.setAttr(this.focusNode || this.domNode, "waiState", "valuenow", this.forWaiValuenow()); - if((this.intermediateChanges || priorityChange) && newValue != this._lastValueReported){ + dijit.setWaiState(this.focusNode || this.domNode, "valuenow", this.forWaiValuenow()); + if(this._lastValueReported == undefined && priorityChange === null){ // don't report the initial value + this._lastValueReported = newValue; + } + if((this.intermediateChanges || priorityChange) && newValue !== this._lastValueReported){ this._lastValueReported = newValue; this.onChange(newValue); } @@ -216,10 +241,10 @@ dojo.declare("dijit.form._FormWidget", [dijit._Widget, dijit._Templated], if(e.keyCode == dojo.keys.ESCAPE && !e.shiftKey && !e.ctrlKey && !e.altKey){ var v = this.getValue(); var lv = this._lastValueReported; - // Equality comparison of objects such as dates are done by reference so - // two distinct objects are != even if they have the same data. So use + // Equality comparison of objects such as dates are done by reference so + // two distinct objects are != even if they have the same data. So use // toStrings in case the values are objects. - if(lv != undefined && v.toString() != lv.toString()){ + if((typeof lv != "undefined") && ((v!==null && v.toString)?v.toString():null) !== lv.toString()){ this.undo(); dojo.stopEvent(e); return false; diff --git a/spring-faces/src/main/java/META-INF/dijit/form/_Spinner.js b/spring-faces/src/main/java/META-INF/dijit/form/_Spinner.js index 0c5a1e1d..1a7b2abb 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/_Spinner.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/_Spinner.js @@ -14,23 +14,24 @@ dojo.declare( // It modifies the template to have up/down arrows, and provides related handling code. // defaultTimeout: Number - // number of milliseconds before a held key or button becomes typematic + // number of milliseconds before a held key or button becomes typematic defaultTimeout: 500, // timeoutChangeRate: Number - // fraction of time used to change the typematic timer between events - // 1.0 means that each typematic event fires at defaultTimeout intervals - // < 1.0 means that each typematic event fires at an increasing faster rate + // fraction of time used to change the typematic timer between events + // 1.0 means that each typematic event fires at defaultTimeout intervals + // < 1.0 means that each typematic event fires at an increasing faster rate timeoutChangeRate: 0.90, // smallDelta: Number - // adjust the value by this much when spinning using the arrow keys/buttons + // adjust the value by this much when spinning using the arrow keys/buttons smallDelta: 1, // largeDelta: Number - // adjust the value by this much when spinning using the PgUp/Dn keys + // adjust the value by this much when spinning using the PgUp/Dn keys largeDelta: 10, - templateString:"\n\t\n\t\t\n\t\t\n\t\n\t\t\n\t\n
\n\t\t\t
\n\n", + templateString:"
\n\n", + baseClass: "dijitSpinner", adjust: function(/* Object */ val, /*Number*/ delta){ // summary: user replaceable function used to adjust a primitive value(Number/Date/...) by the delta amount specified @@ -93,12 +94,6 @@ dojo.declare( postCreate: function(){ this.inherited('postCreate', arguments); - // textbox and domNode get the same style but the css separates the 2 using !important - if(this.srcNodeRef){ - dojo.style(this.textbox, "cssText", this.srcNodeRef.style.cssText); - this.textbox.className += " " + this.srcNodeRef.className; - } - // extra listeners this.connect(this.textbox, dojo.isIE ? "onmousewheel" : 'DOMMouseScroll', "_mouseWheeled"); dijit.typematic.addListener(this.upArrowNode, this.textbox, {keyCode:dojo.keys.UP_ARROW,ctrlKey:false,altKey:false,shiftKey:false}, this, "_typematicCallback", this.timeoutChangeRate, this.defaultTimeout); diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/ComboBox.js new file mode 100644 index 00000000..99f556a2 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Předchozí volby", "nextMessage": "Další volby"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/Textarea.js new file mode 100644 index 00000000..dd14f241 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "oblast úprav", "iframeTitle2": "rámec oblasti úprav"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/validate.js new file mode 100644 index 00000000..722f6353 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/cs/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* Tato hodnota je mimo rozsah.", "invalidMessage": "* Zadaná hodnota není platná.", "missingMessage": "* Tato hodnota je vyžadována."}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/de/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/de/ComboBox.js new file mode 100644 index 00000000..e73bcd5d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/de/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Vorherige Auswahl", "nextMessage": "Weitere Auswahlmöglichkeiten"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/de/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/de/Textarea.js new file mode 100644 index 00000000..e0a4daba --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/de/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "Editierbereich", "iframeTitle2": "Rahmen für Editierbereich"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/de/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/de/validate.js index 7a6e0530..5ac0504e 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/nls/de/validate.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/de/validate.js @@ -1 +1 @@ -({"rangeMessage": "* Der Wert liegt außerhalb des gültigen Bereichs.", "invalidMessage": "* Der eingegebene Wert ist ungültig.", "missingMessage": "* Der Wert wird benötigt."}) \ No newline at end of file +({"rangeMessage": "* Dieser Wert ist außerhalb des gültigen Bereichs. ", "invalidMessage": "* Der eingegebene Wert ist ungültig. ", "missingMessage": "* Dieser Wert ist erforderlich."}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/es/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/es/ComboBox.js new file mode 100644 index 00000000..18434c42 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/es/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Opciones anteriores", "nextMessage": "Más opciones"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/es/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/es/Textarea.js new file mode 100644 index 00000000..f9d20293 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/es/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "área de edición", "iframeTitle2": "marco del área de edición"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/es/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/es/validate.js new file mode 100644 index 00000000..4a78a8de --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/es/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* Este valor está fuera del intervalo.", "invalidMessage": "* El valor especificado no es válido.", "missingMessage": "* Este valor es necesario."}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/ComboBox.js new file mode 100644 index 00000000..1dce433e --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Choix précédents", "nextMessage": "Plus de choix"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/Textarea.js new file mode 100644 index 00000000..38d24aff --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "zone d'édition", "iframeTitle2": "cadre de la zone d'édition"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/validate.js index ee449bf3..ca98e33f 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/validate.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/fr/validate.js @@ -1 +1 @@ -({"rangeMessage": "* Cette valeur est hors limites.", "invalidMessage": "* La valeur saisie est incorrecte.", "missingMessage": "* Cette valeur est obligatoire."}) \ No newline at end of file +({"rangeMessage": "* Cette valeur n'est pas comprise dans la plage autorisée. ", "invalidMessage": "* La valeur indiquée n'est pas correcte. ", "missingMessage": "* Cette valeur est requise. "}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/ComboBox.js new file mode 100644 index 00000000..519eca97 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Előző menüpontok", "nextMessage": "További menüpontok"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/Textarea.js new file mode 100644 index 00000000..68cf2cbd --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "szerkesztési terület", "iframeTitle2": "szerkesztési terület keret"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/validate.js new file mode 100644 index 00000000..a17de98d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/hu/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* Az érték kívül van a megengedett tartományon. ", "invalidMessage": "* A megadott érték érvénytelen. ", "missingMessage": "* Meg kell adni egy értéket. "}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/it/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/it/ComboBox.js new file mode 100644 index 00000000..1e0b19e1 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/it/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Scelte precedenti", "nextMessage": "Altre scelte"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/it/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/it/Textarea.js new file mode 100644 index 00000000..5c0b3cba --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/it/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "modifica area", "iframeTitle2": "modifica frame area"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/it/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/it/validate.js index 1a54694e..e43e0e0f 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/nls/it/validate.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/it/validate.js @@ -1 +1 @@ -({"rangeMessage": "* Questo valore è al di fuori dell'intervallo consentito", "invalidMessage": "* Il valore inserito non è valido.", "missingMessage": "* Questo valore è obbligatorio."}) \ No newline at end of file +({"rangeMessage": "* Questo valore non è compreso nell'intervallo.", "invalidMessage": "* Il valore immesso non è valido.", "missingMessage": "* Questo valore è obbligatorio."}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/ComboBox.js new file mode 100644 index 00000000..da138f35 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "以前の選択項目", "nextMessage": "追加の選択項目"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/Textarea.js new file mode 100644 index 00000000..7ff372a1 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "編集域", "iframeTitle2": "編集域フレーム"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/validate.js index dcb7a460..87f5980a 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/validate.js +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ja/validate.js @@ -1 +1 @@ -({"rangeMessage": "* 入力した数値は選択範囲外です。", "invalidMessage": "* 入力したデータに該当するものがありません。", "missingMessage": "* 入力が必須です。"}) \ No newline at end of file +({"rangeMessage": "* この値は範囲外です。", "invalidMessage": "* 入力した値は無効です。", "missingMessage": "* この値は必須です。"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/ComboBox.js new file mode 100644 index 00000000..438a2508 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "이전 선택사항", "nextMessage": "기타 선택사항"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/Textarea.js new file mode 100644 index 00000000..44b174d8 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "편집 영역", "iframeTitle2": "편집 영역 프레임"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/validate.js new file mode 100644 index 00000000..2dbe8740 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ko/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* 이 값은 범위를 벗어납니다. ", "invalidMessage": "* 입력한 값이 유효하지 않습니다. ", "missingMessage": "* 이 값은 필수입니다. "}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/ComboBox.js new file mode 100644 index 00000000..332204b9 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Poprzednie wybory", "nextMessage": "Więcej wyborów"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/Textarea.js new file mode 100644 index 00000000..7da45b0e --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "edycja obszaru", "iframeTitle2": "edycja ramki obszaru"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/validate.js new file mode 100644 index 00000000..3a792fdb --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/pl/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* Ta wartość jest spoza zakresu.", "invalidMessage": "* Wprowadzona wartość nie jest poprawna.", "missingMessage": "* Ta wartość jest wymagana."}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/ComboBox.js new file mode 100644 index 00000000..372ab71e --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Opções anteriores", "nextMessage": "Mais opções"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/Textarea.js new file mode 100644 index 00000000..75b5abd9 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "área de edição", "iframeTitle2": "quadro da área de edição"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/validate.js new file mode 100644 index 00000000..cae4b5d4 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/pt/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* Esse valor está fora do intervalo.", "invalidMessage": "* O valor digitado não é válido.", "missingMessage": "* Esse valor é necessário."}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/ComboBox.js new file mode 100644 index 00000000..7864d777 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "Предыдущие варианты", "nextMessage": "Следующие варианты"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/Textarea.js new file mode 100644 index 00000000..9585231d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "область редактирования", "iframeTitle2": "фрейм области редактирования"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/validate.js new file mode 100644 index 00000000..dd46a65d --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/ru/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* Это значение вне диапазона.", "invalidMessage": "* Указано недопустимое значение.", "missingMessage": "* Это обязательное значение."}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/ComboBox.js new file mode 100644 index 00000000..0a59e610 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "前一個選擇項", "nextMessage": "其他選擇項"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/Textarea.js new file mode 100644 index 00000000..5506019b --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "編輯區", "iframeTitle2": "編輯區框"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/validate.js new file mode 100644 index 00000000..8cf29b4b --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh-tw/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* 此值超出範圍。", "invalidMessage": "* 輸入的值無效。", "missingMessage": "* 必須提供此值。"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/ComboBox.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/ComboBox.js new file mode 100644 index 00000000..1984f5de --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/ComboBox.js @@ -0,0 +1 @@ +({"previousMessage": "先前选项", "nextMessage": "更多选项"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/Textarea.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/Textarea.js new file mode 100644 index 00000000..4618b2d5 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/Textarea.js @@ -0,0 +1 @@ +({"iframeTitle1": "编辑区", "iframeTitle2": "编辑区框架"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/validate.js b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/validate.js new file mode 100644 index 00000000..195e75c6 --- /dev/null +++ b/spring-faces/src/main/java/META-INF/dijit/form/nls/zh/validate.js @@ -0,0 +1 @@ +({"rangeMessage": "* 此值超出范围。", "invalidMessage": "* 输入的值无效。", "missingMessage": "* 此值是必需值。"}) \ No newline at end of file diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/Button.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/Button.html index 38112464..1b976743 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/templates/Button.html +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/Button.html @@ -1,9 +1,12 @@ -
+ >
diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html index 506a639d..5228cc85 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/CheckBox.html @@ -1,7 +1,7 @@ - + dojoAttachEvent="onmouseover:_onMouse,onmouseout:_onMouse,onclick:_onClick" +/> diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html index fc531e98..8f3431a5 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboBox.html @@ -1,18 +1,20 @@ - -
Χ
-
-
-
+ dojoAttachEvent="ondijitclick:_onArrowClick,onmousedown:_onArrowMouseDown,onmouseup:_onMouse,onmouseenter:_onMouse,onmouseleave:_onMouse" + >
diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html index b0516a80..dad86633 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/ComboButton.html @@ -1,20 +1,19 @@ - +
diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html index 9e770008..ddcf5f12 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/DropDownButton.html @@ -1,9 +1,9 @@ -
-
-
+
${label}
diff --git a/spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html b/spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html index 059d075a..6db34964 100644 --- a/spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html +++ b/spring-faces/src/main/java/META-INF/dijit/form/templates/InlineEditBox.html @@ -1,11 +1,12 @@