| dojo.provide("dojo.widget.PopupContainer"); |
| dojo.require("dojo.html.style"); |
| dojo.require("dojo.html.layout"); |
| dojo.require("dojo.html.selection"); |
| dojo.require("dojo.html.iframe"); |
| dojo.require("dojo.event.*"); |
| dojo.require("dojo.widget.*"); |
| dojo.require("dojo.widget.HtmlWidget"); |
| dojo.declare("dojo.widget.PopupContainerBase",null,function(){ |
| this.queueOnAnimationFinish=[]; |
| },{isShowingNow:false,currentSubpopup:null,beginZIndex:1000,parentPopup:null,parent:null,popupIndex:0,aroundBox:dojo.html.boxSizing.BORDER_BOX,openedForWindow:null,processKey:function(_1){ |
| return false; |
| },applyPopupBasicStyle:function(){ |
| with(this.domNode.style){ |
| display="none"; |
| position="absolute"; |
| } |
| },aboutToShow:function(){ |
| },open:function(x,y,_4,_5,_6,_7){ |
| if(this.isShowingNow){ |
| return; |
| } |
| if(this.animationInProgress){ |
| this.queueOnAnimationFinish.push(this.open,arguments); |
| return; |
| } |
| this.aboutToShow(); |
| var _8=false,_9,_a; |
| if(typeof x=="object"){ |
| _9=x; |
| _a=_5; |
| _5=_4; |
| _4=y; |
| _8=true; |
| } |
| this.parent=_4; |
| dojo.body().appendChild(this.domNode); |
| _5=_5||_4["domNode"]||[]; |
| var _b=null; |
| this.isTopLevel=true; |
| while(_4){ |
| if(_4!==this&&(_4.setOpenedSubpopup!=undefined&&_4.applyPopupBasicStyle!=undefined)){ |
| _b=_4; |
| this.isTopLevel=false; |
| _b.setOpenedSubpopup(this); |
| break; |
| } |
| _4=_4.parent; |
| } |
| this.parentPopup=_b; |
| this.popupIndex=_b?_b.popupIndex+1:1; |
| if(this.isTopLevel){ |
| var _c=dojo.html.isNode(_5)?_5:null; |
| dojo.widget.PopupManager.opened(this,_c); |
| } |
| if(this.isTopLevel&&!dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){ |
| this._bookmark=dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.getBookmark); |
| }else{ |
| this._bookmark=null; |
| } |
| if(_5 instanceof Array){ |
| _5={left:_5[0],top:_5[1],width:0,height:0}; |
| } |
| with(this.domNode.style){ |
| display=""; |
| zIndex=this.beginZIndex+this.popupIndex; |
| } |
| if(_8){ |
| this.move(_9,_7,_a); |
| }else{ |
| this.move(x,y,_7,_6); |
| } |
| this.domNode.style.display="none"; |
| this.explodeSrc=_5; |
| this.show(); |
| this.isShowingNow=true; |
| },move:function(x,y,_f,_10){ |
| var _11=(typeof x=="object"); |
| if(_11){ |
| var _12=_f; |
| var _13=x; |
| _f=y; |
| if(!_12){ |
| _12={"BL":"TL","TL":"BL"}; |
| } |
| dojo.html.placeOnScreenAroundElement(this.domNode,_13,_f,this.aroundBox,_12); |
| }else{ |
| if(!_10){ |
| _10="TL,TR,BL,BR"; |
| } |
| dojo.html.placeOnScreen(this.domNode,x,y,_f,true,_10); |
| } |
| },close:function(_14){ |
| if(_14){ |
| this.domNode.style.display="none"; |
| } |
| if(this.animationInProgress){ |
| this.queueOnAnimationFinish.push(this.close,[]); |
| return; |
| } |
| this.closeSubpopup(_14); |
| this.hide(); |
| if(this.bgIframe){ |
| this.bgIframe.hide(); |
| this.bgIframe.size({left:0,top:0,width:0,height:0}); |
| } |
| if(this.isTopLevel){ |
| dojo.widget.PopupManager.closed(this); |
| } |
| this.isShowingNow=false; |
| if(this.parent){ |
| setTimeout(dojo.lang.hitch(this,function(){ |
| try{ |
| if(this.parent["focus"]){ |
| this.parent.focus(); |
| }else{ |
| this.parent.domNode.focus(); |
| } |
| } |
| catch(e){ |
| dojo.debug("No idea how to focus to parent",e); |
| } |
| }),10); |
| } |
| if(this._bookmark&&dojo.withGlobal(this.openedForWindow||dojo.global(),dojo.html.selection.isCollapsed)){ |
| if(this.openedForWindow){ |
| this.openedForWindow.focus(); |
| } |
| try{ |
| dojo.withGlobal(this.openedForWindow||dojo.global(),"moveToBookmark",dojo.html.selection,[this._bookmark]); |
| } |
| catch(e){ |
| } |
| } |
| this._bookmark=null; |
| },closeAll:function(_15){ |
| if(this.parentPopup){ |
| this.parentPopup.closeAll(_15); |
| }else{ |
| this.close(_15); |
| } |
| },setOpenedSubpopup:function(_16){ |
| this.currentSubpopup=_16; |
| },closeSubpopup:function(_17){ |
| if(this.currentSubpopup==null){ |
| return; |
| } |
| this.currentSubpopup.close(_17); |
| this.currentSubpopup=null; |
| },onShow:function(){ |
| dojo.widget.PopupContainer.superclass.onShow.apply(this,arguments); |
| this.openedSize={w:this.domNode.style.width,h:this.domNode.style.height}; |
| if(dojo.render.html.ie){ |
| if(!this.bgIframe){ |
| this.bgIframe=new dojo.html.BackgroundIframe(); |
| this.bgIframe.setZIndex(this.domNode); |
| } |
| this.bgIframe.size(this.domNode); |
| this.bgIframe.show(); |
| } |
| this.processQueue(); |
| },processQueue:function(){ |
| if(!this.queueOnAnimationFinish.length){ |
| return; |
| } |
| var _18=this.queueOnAnimationFinish.shift(); |
| var _19=this.queueOnAnimationFinish.shift(); |
| _18.apply(this,_19); |
| },onHide:function(){ |
| dojo.widget.HtmlWidget.prototype.onHide.call(this); |
| if(this.openedSize){ |
| with(this.domNode.style){ |
| width=this.openedSize.w; |
| height=this.openedSize.h; |
| } |
| } |
| this.processQueue(); |
| }}); |
| dojo.widget.defineWidget("dojo.widget.PopupContainer",[dojo.widget.HtmlWidget,dojo.widget.PopupContainerBase],{isContainer:true,fillInTemplate:function(){ |
| this.applyPopupBasicStyle(); |
| dojo.widget.PopupContainer.superclass.fillInTemplate.apply(this,arguments); |
| }}); |
| dojo.widget.PopupManager=new function(){ |
| this.currentMenu=null; |
| this.currentButton=null; |
| this.currentFocusMenu=null; |
| this.focusNode=null; |
| this.registeredWindows=[]; |
| this.registerWin=function(win){ |
| if(!win.__PopupManagerRegistered){ |
| dojo.event.connect(win.document,"onmousedown",this,"onClick"); |
| dojo.event.connect(win,"onscroll",this,"onClick"); |
| dojo.event.connect(win.document,"onkey",this,"onKey"); |
| win.__PopupManagerRegistered=true; |
| this.registeredWindows.push(win); |
| } |
| }; |
| this.registerAllWindows=function(_1b){ |
| if(!_1b){ |
| _1b=dojo.html.getDocumentWindow(window.top&&window.top.document||window.document); |
| } |
| this.registerWin(_1b); |
| for(var i=0;i<_1b.frames.length;i++){ |
| try{ |
| var win=dojo.html.getDocumentWindow(_1b.frames[i].document); |
| if(win){ |
| this.registerAllWindows(win); |
| } |
| } |
| catch(e){ |
| } |
| } |
| }; |
| this.unRegisterWin=function(win){ |
| if(win.__PopupManagerRegistered){ |
| dojo.event.disconnect(win.document,"onmousedown",this,"onClick"); |
| dojo.event.disconnect(win,"onscroll",this,"onClick"); |
| dojo.event.disconnect(win.document,"onkey",this,"onKey"); |
| win.__PopupManagerRegistered=false; |
| } |
| }; |
| this.unRegisterAllWindows=function(){ |
| for(var i=0;i<this.registeredWindows.length;++i){ |
| this.unRegisterWin(this.registeredWindows[i]); |
| } |
| this.registeredWindows=[]; |
| }; |
| dojo.addOnLoad(this,"registerAllWindows"); |
| dojo.addOnUnload(this,"unRegisterAllWindows"); |
| this.closed=function(_20){ |
| if(this.currentMenu==_20){ |
| this.currentMenu=null; |
| this.currentButton=null; |
| this.currentFocusMenu=null; |
| } |
| }; |
| this.opened=function(_21,_22){ |
| if(_21==this.currentMenu){ |
| return; |
| } |
| if(this.currentMenu){ |
| this.currentMenu.close(); |
| } |
| this.currentMenu=_21; |
| this.currentFocusMenu=_21; |
| this.currentButton=_22; |
| }; |
| this.setFocusedMenu=function(_23){ |
| this.currentFocusMenu=_23; |
| }; |
| this.onKey=function(e){ |
| if(!e.key){ |
| return; |
| } |
| if(!this.currentMenu||!this.currentMenu.isShowingNow){ |
| return; |
| } |
| var m=this.currentFocusMenu; |
| while(m){ |
| if(m.processKey(e)){ |
| e.preventDefault(); |
| e.stopPropagation(); |
| break; |
| } |
| m=m.parentPopup||m.parentMenu; |
| } |
| },this.onClick=function(e){ |
| if(!this.currentMenu){ |
| return; |
| } |
| var _27=dojo.html.getScroll().offset; |
| var m=this.currentMenu; |
| while(m){ |
| if(dojo.html.overElement(m.domNode,e)||dojo.html.isDescendantOf(e.target,m.domNode)){ |
| return; |
| } |
| m=m.currentSubpopup; |
| } |
| if(this.currentButton&&dojo.html.overElement(this.currentButton,e)){ |
| return; |
| } |
| this.currentMenu.closeAll(true); |
| }; |
| }; |