| dojo.provide("dojo.widget.Dialog"); |
| dojo.require("dojo.widget.*"); |
| dojo.require("dojo.widget.ContentPane"); |
| dojo.require("dojo.event.*"); |
| dojo.require("dojo.gfx.color"); |
| dojo.require("dojo.html.layout"); |
| dojo.require("dojo.html.display"); |
| dojo.require("dojo.html.iframe"); |
| dojo.declare("dojo.widget.ModalDialogBase",null,{isContainer:true,focusElement:"",bgColor:"black",bgOpacity:0.4,followScroll:true,closeOnBackgroundClick:false,trapTabs:function(e){ |
| if(e.target==this.tabStartOuter){ |
| if(this._fromTrap){ |
| this.tabStart.focus(); |
| this._fromTrap=false; |
| }else{ |
| this._fromTrap=true; |
| this.tabEnd.focus(); |
| } |
| }else{ |
| if(e.target==this.tabStart){ |
| if(this._fromTrap){ |
| this._fromTrap=false; |
| }else{ |
| this._fromTrap=true; |
| this.tabEnd.focus(); |
| } |
| }else{ |
| if(e.target==this.tabEndOuter){ |
| if(this._fromTrap){ |
| this.tabEnd.focus(); |
| this._fromTrap=false; |
| }else{ |
| this._fromTrap=true; |
| this.tabStart.focus(); |
| } |
| }else{ |
| if(e.target==this.tabEnd){ |
| if(this._fromTrap){ |
| this._fromTrap=false; |
| }else{ |
| this._fromTrap=true; |
| this.tabStart.focus(); |
| } |
| } |
| } |
| } |
| } |
| },clearTrap:function(e){ |
| var _3=this; |
| setTimeout(function(){ |
| _3._fromTrap=false; |
| },100); |
| },postCreate:function(){ |
| with(this.domNode.style){ |
| position="absolute"; |
| zIndex=999; |
| display="none"; |
| overflow="visible"; |
| } |
| var b=dojo.body(); |
| b.appendChild(this.domNode); |
| this.bg=document.createElement("div"); |
| this.bg.className="dialogUnderlay"; |
| with(this.bg.style){ |
| position="absolute"; |
| left=top="0px"; |
| zIndex=998; |
| display="none"; |
| } |
| b.appendChild(this.bg); |
| this.setBackgroundColor(this.bgColor); |
| this.bgIframe=new dojo.html.BackgroundIframe(); |
| if(this.bgIframe.iframe){ |
| with(this.bgIframe.iframe.style){ |
| position="absolute"; |
| left=top="0px"; |
| zIndex=90; |
| display="none"; |
| } |
| } |
| if(this.closeOnBackgroundClick){ |
| dojo.event.kwConnect({srcObj:this.bg,srcFunc:"onclick",adviceObj:this,adviceFunc:"onBackgroundClick",once:true}); |
| } |
| },uninitialize:function(){ |
| this.bgIframe.remove(); |
| dojo.html.removeNode(this.bg,true); |
| },setBackgroundColor:function(_5){ |
| if(arguments.length>=3){ |
| _5=new dojo.gfx.color.Color(arguments[0],arguments[1],arguments[2]); |
| }else{ |
| _5=new dojo.gfx.color.Color(_5); |
| } |
| this.bg.style.backgroundColor=_5.toString(); |
| return this.bgColor=_5; |
| },setBackgroundOpacity:function(op){ |
| if(arguments.length==0){ |
| op=this.bgOpacity; |
| } |
| dojo.html.setOpacity(this.bg,op); |
| try{ |
| this.bgOpacity=dojo.html.getOpacity(this.bg); |
| } |
| catch(e){ |
| this.bgOpacity=op; |
| } |
| return this.bgOpacity; |
| },_sizeBackground:function(){ |
| if(this.bgOpacity>0){ |
| var _7=dojo.html.getViewport(); |
| var h=_7.height; |
| var w=_7.width; |
| with(this.bg.style){ |
| width=w+"px"; |
| height=h+"px"; |
| } |
| var _a=dojo.html.getScroll().offset; |
| this.bg.style.top=_a.y+"px"; |
| this.bg.style.left=_a.x+"px"; |
| var _7=dojo.html.getViewport(); |
| if(_7.width!=w){ |
| this.bg.style.width=_7.width+"px"; |
| } |
| if(_7.height!=h){ |
| this.bg.style.height=_7.height+"px"; |
| } |
| } |
| this.bgIframe.size(this.bg); |
| },_showBackground:function(){ |
| if(this.bgOpacity>0){ |
| this.bg.style.display="block"; |
| } |
| if(this.bgIframe.iframe){ |
| this.bgIframe.iframe.style.display="block"; |
| } |
| },placeModalDialog:function(){ |
| var _b=dojo.html.getScroll().offset; |
| var _c=dojo.html.getViewport(); |
| var mb; |
| if(this.isShowing()){ |
| mb=dojo.html.getMarginBox(this.domNode); |
| }else{ |
| dojo.html.setVisibility(this.domNode,false); |
| dojo.html.show(this.domNode); |
| mb=dojo.html.getMarginBox(this.domNode); |
| dojo.html.hide(this.domNode); |
| dojo.html.setVisibility(this.domNode,true); |
| } |
| var x=_b.x+(_c.width-mb.width)/2; |
| var y=_b.y+(_c.height-mb.height)/2; |
| with(this.domNode.style){ |
| left=x+"px"; |
| top=y+"px"; |
| } |
| },_onKey:function(evt){ |
| if(evt.key){ |
| var _11=evt.target; |
| while(_11!=null){ |
| if(_11==this.domNode){ |
| return; |
| } |
| _11=_11.parentNode; |
| } |
| if(evt.key!=evt.KEY_TAB){ |
| dojo.event.browser.stopEvent(evt); |
| }else{ |
| if(!dojo.render.html.opera){ |
| try{ |
| this.tabStart.focus(); |
| } |
| catch(e){ |
| } |
| } |
| } |
| } |
| },showModalDialog:function(){ |
| if(this.followScroll&&!this._scrollConnected){ |
| this._scrollConnected=true; |
| dojo.event.connect(window,"onscroll",this,"_onScroll"); |
| } |
| dojo.event.connect(document.documentElement,"onkey",this,"_onKey"); |
| this.placeModalDialog(); |
| this.setBackgroundOpacity(); |
| this._sizeBackground(); |
| this._showBackground(); |
| this._fromTrap=true; |
| setTimeout(dojo.lang.hitch(this,function(){ |
| try{ |
| this.tabStart.focus(); |
| } |
| catch(e){ |
| } |
| }),50); |
| },hideModalDialog:function(){ |
| if(this.focusElement){ |
| dojo.byId(this.focusElement).focus(); |
| dojo.byId(this.focusElement).blur(); |
| } |
| this.bg.style.display="none"; |
| this.bg.style.width=this.bg.style.height="1px"; |
| if(this.bgIframe.iframe){ |
| this.bgIframe.iframe.style.display="none"; |
| } |
| dojo.event.disconnect(document.documentElement,"onkey",this,"_onKey"); |
| if(this._scrollConnected){ |
| this._scrollConnected=false; |
| dojo.event.disconnect(window,"onscroll",this,"_onScroll"); |
| } |
| },_onScroll:function(){ |
| var _12=dojo.html.getScroll().offset; |
| this.bg.style.top=_12.y+"px"; |
| this.bg.style.left=_12.x+"px"; |
| this.placeModalDialog(); |
| },checkSize:function(){ |
| if(this.isShowing()){ |
| this._sizeBackground(); |
| this.placeModalDialog(); |
| this.onResized(); |
| } |
| },onBackgroundClick:function(){ |
| if(this.lifetime-this.timeRemaining>=this.blockDuration){ |
| return; |
| } |
| this.hide(); |
| }}); |
| dojo.widget.defineWidget("dojo.widget.Dialog",[dojo.widget.ContentPane,dojo.widget.ModalDialogBase],{templateString:"<div id=\"${this.widgetId}\" class=\"dojoDialog\" dojoattachpoint=\"wrapper\">\n\t<span dojoattachpoint=\"tabStartOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\"\ttabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabStart\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<div dojoattachpoint=\"containerNode\" style=\"position: relative; z-index: 2;\"></div>\n\t<span dojoattachpoint=\"tabEnd\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n\t<span dojoattachpoint=\"tabEndOuter\" dojoonfocus=\"trapTabs\" dojoonblur=\"clearTrap\" tabindex=\"0\"></span>\n</div>\n",blockDuration:0,lifetime:0,closeNode:"",postMixInProperties:function(){ |
| dojo.widget.Dialog.superclass.postMixInProperties.apply(this,arguments); |
| if(this.closeNode){ |
| this.setCloseControl(this.closeNode); |
| } |
| },postCreate:function(){ |
| dojo.widget.Dialog.superclass.postCreate.apply(this,arguments); |
| dojo.widget.ModalDialogBase.prototype.postCreate.apply(this,arguments); |
| },show:function(){ |
| if(this.lifetime){ |
| this.timeRemaining=this.lifetime; |
| if(this.timerNode){ |
| this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000); |
| } |
| if(this.blockDuration&&this.closeNode){ |
| if(this.lifetime>this.blockDuration){ |
| this.closeNode.style.visibility="hidden"; |
| }else{ |
| this.closeNode.style.display="none"; |
| } |
| } |
| if(this.timer){ |
| clearInterval(this.timer); |
| } |
| this.timer=setInterval(dojo.lang.hitch(this,"_onTick"),100); |
| } |
| this.showModalDialog(); |
| dojo.widget.Dialog.superclass.show.call(this); |
| },onLoad:function(){ |
| this.placeModalDialog(); |
| dojo.widget.Dialog.superclass.onLoad.call(this); |
| },fillInTemplate:function(){ |
| },hide:function(){ |
| this.hideModalDialog(); |
| dojo.widget.Dialog.superclass.hide.call(this); |
| if(this.timer){ |
| clearInterval(this.timer); |
| } |
| },setTimerNode:function(_13){ |
| this.timerNode=_13; |
| },setCloseControl:function(_14){ |
| this.closeNode=dojo.byId(_14); |
| dojo.event.connect(this.closeNode,"onclick",this,"hide"); |
| },setShowControl:function(_15){ |
| _15=dojo.byId(_15); |
| dojo.event.connect(_15,"onclick",this,"show"); |
| },_onTick:function(){ |
| if(this.timer){ |
| this.timeRemaining-=100; |
| if(this.lifetime-this.timeRemaining>=this.blockDuration){ |
| if(this.closeNode){ |
| this.closeNode.style.visibility="visible"; |
| } |
| } |
| if(!this.timeRemaining){ |
| clearInterval(this.timer); |
| this.hide(); |
| }else{ |
| if(this.timerNode){ |
| this.timerNode.innerHTML=Math.ceil(this.timeRemaining/1000); |
| } |
| } |
| } |
| }}); |