diff options
Diffstat (limited to 'lib/dijit/DialogUnderlay.js')
-rw-r--r-- | lib/dijit/DialogUnderlay.js | 132 |
1 files changed, 101 insertions, 31 deletions
diff --git a/lib/dijit/DialogUnderlay.js b/lib/dijit/DialogUnderlay.js index 0056462a5..72557800d 100644 --- a/lib/dijit/DialogUnderlay.js +++ b/lib/dijit/DialogUnderlay.js @@ -1,42 +1,112 @@ /* - Copyright (c) 2004-2010, The Dojo Foundation All Rights Reserved. + Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved. Available via Academic Free License >= 2.1 OR the modified BSD license. see: http://dojotoolkit.org/license for details */ -if(!dojo._hasResource["dijit.DialogUnderlay"]){ -dojo._hasResource["dijit.DialogUnderlay"]=true; +if(!dojo._hasResource["dijit.DialogUnderlay"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dijit.DialogUnderlay"] = true; dojo.provide("dijit.DialogUnderlay"); dojo.require("dojo.window"); dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); -dojo.declare("dijit.DialogUnderlay",[dijit._Widget,dijit._Templated],{templateString:"<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>",dialogId:"","class":"",attributeMap:{id:"domNode"},_setDialogIdAttr:function(id){ -dojo.attr(this.node,"id",id+"_underlay"); -},_setClassAttr:function(_1){ -this.node.className="dijitDialogUnderlay "+_1; -},postCreate:function(){ -dojo.body().appendChild(this.domNode); -},layout:function(){ -var is=this.node.style,os=this.domNode.style; -os.display="none"; -var _2=dojo.window.getBox(); -os.top=_2.t+"px"; -os.left=_2.l+"px"; -is.width=_2.w+"px"; -is.height=_2.h+"px"; -os.display="block"; -},show:function(){ -this.domNode.style.display="block"; -this.layout(); -this.bgIframe=new dijit.BackgroundIframe(this.domNode); -},hide:function(){ -this.bgIframe.destroy(); -this.domNode.style.display="none"; -},uninitialize:function(){ -if(this.bgIframe){ -this.bgIframe.destroy(); -} -this.inherited(arguments); -}}); + + +dojo.declare( + "dijit.DialogUnderlay", + [dijit._Widget, dijit._Templated], + { + // summary: + // The component that blocks the screen behind a `dijit.Dialog` + // + // description: + // A component used to block input behind a `dijit.Dialog`. Only a single + // instance of this widget is created by `dijit.Dialog`, and saved as + // a reference to be shared between all Dialogs as `dijit._underlay` + // + // The underlay itself can be styled based on and id: + // | #myDialog_underlay { background-color:red; } + // + // In the case of `dijit.Dialog`, this id is based on the id of the Dialog, + // suffixed with _underlay. + + // Template has two divs; outer div is used for fade-in/fade-out, and also to hold background iframe. + // Inner div has opacity specified in CSS file. + templateString: "<div class='dijitDialogUnderlayWrapper'><div class='dijitDialogUnderlay' dojoAttachPoint='node'></div></div>", + + // Parameters on creation or updatable later + + // dialogId: String + // Id of the dialog.... DialogUnderlay's id is based on this id + dialogId: "", + + // class: String + // This class name is used on the DialogUnderlay node, in addition to dijitDialogUnderlay + "class": "", + + attributeMap: { id: "domNode" }, + + _setDialogIdAttr: function(id){ + dojo.attr(this.node, "id", id + "_underlay"); + this._set("dialogId", id); + }, + + _setClassAttr: function(clazz){ + this.node.className = "dijitDialogUnderlay " + clazz; + this._set("class", clazz); + }, + + postCreate: function(){ + // summary: + // Append the underlay to the body + dojo.body().appendChild(this.domNode); + }, + + layout: function(){ + // summary: + // Sets the background to the size of the viewport + // + // description: + // Sets the background to the size of the viewport (rather than the size + // of the document) since we need to cover the whole browser window, even + // if the document is only a few lines long. + // tags: + // private + + var is = this.node.style, + os = this.domNode.style; + + // hide the background temporarily, so that the background itself isn't + // causing scrollbars to appear (might happen when user shrinks browser + // window and then we are called to resize) + os.display = "none"; + + // then resize and show + var viewport = dojo.window.getBox(); + os.top = viewport.t + "px"; + os.left = viewport.l + "px"; + is.width = viewport.w + "px"; + is.height = viewport.h + "px"; + os.display = "block"; + }, + + show: function(){ + // summary: + // Show the dialog underlay + this.domNode.style.display = "block"; + this.layout(); + this.bgIframe = new dijit.BackgroundIframe(this.domNode); + }, + + hide: function(){ + // summary: + // Hides the dialog underlay + this.bgIframe.destroy(); + delete this.bgIframe; + this.domNode.style.display = "none"; + } + } +); + } |