define("dojox/mobile/SimpleDialog", [ "dojo/_base/declare", "dojo/_base/window", "dojo/dom-class", "dojo/dom-construct", "./Pane", "./iconUtils" ], function(declare, win, domClass, domConstruct, Pane, iconUtils){ // module: // dojox/mobile/SimpleDialog return declare("dojox.mobile.SimpleDialog", Pane, { // summary: // A dialog box for mobile. // description: // SimpleDialog is a dialog box for mobile. // When a SimpleDialog is created, it is initially hidden and not // displayed (display="none"). To show the dialog box, you need to // get a reference to the widget and to call its show() method. // // The contents can be arbitrary HTML, text, or widgets. Note, // however, that the widget is initially hidden. You need to be // careful when you place something that cannot be initialized // under the hidden state into a SimpleDialog. // // This widget has much less functionalities than dijit/Dialog, // but it has the advantage of a much smaller code size. // top: String // The top edge position of the widget. If "auto", the widget is // placed at the middle of the screen. Otherwise, the value // (ex. "20px") is used as the top style of widget's domNode. top: "auto", // left: String // The left edge position of the widget. If "auto", the widget is // placed at the center of the screen. Otherwise, the value // (ex. "20px") is used as the left style of widget's domNode. left: "auto", // modal: Boolean // If true, a translucent cover is added over the entire page to // prevent the user from interacting with elements on the page. modal: true, // closeButton: Boolean // If true, a button to close the dialog box is displayed at the // top-right corner. closeButton: false, // closeButtonClass: String // A class name of a DOM button to be used as a close button. closeButtonClass: "mblDomButtonSilverCircleRedCross", // tabIndex: String // Tabindex setting for the item so users can hit the tab key to // focus on it. tabIndex: "0", // _setTabIndexAttr: [private] String // Sets tabIndex to domNode. _setTabIndexAttr: "", /* internal properties */ // baseClass: String // The name of the CSS class of this widget. baseClass: "mblSimpleDialog", // _cover: [private] Array // Array for sharing the cover instances. _cover: [], buildRendering: function(){ this.containerNode = domConstruct.create("div", {className:"mblSimpleDialogContainer"}); if(this.srcNodeRef){ // reparent for(var i = 0, len = this.srcNodeRef.childNodes.length; i < len; i++){ this.containerNode.appendChild(this.srcNodeRef.removeChild(this.srcNodeRef.firstChild)); } } this.inherited(arguments); domClass.add(this.domNode, "mblSimpleDialogDecoration"); this.domNode.style.display = "none"; this.domNode.appendChild(this.containerNode); if(this.closeButton){ this.closeButtonNode = domConstruct.create("div", { className: "mblSimpleDialogCloseBtn "+this.closeButtonClass }, this.domNode); iconUtils.createDomButton(this.closeButtonNode); this._clickHandle = this.connect(this.closeButtonNode, "onclick", "_onCloseButtonClick"); } this._keydownHandle = this.connect(this.domNode, "onkeydown", "_onKeyDown"); // for desktop browsers }, startup: function(){ if(this._started){ return; } this.inherited(arguments); win.body().appendChild(this.domNode); }, addCover: function(){ // summary: // Adds the transparent DIV cover. if(!this._cover[0]){ this._cover[0] = domConstruct.create("div", { className: "mblSimpleDialogCover" }, win.body()); }else{ this._cover[0].style.display = ""; } }, removeCover: function(){ // summary: // Removes the transparent DIV cover. this._cover[0].style.display = "none"; }, _onCloseButtonClick: function(e){ // tags: // private if(this.onCloseButtonClick(e) === false){ return; } // user's click action this.hide(); }, onCloseButtonClick: function(/*Event*/ /*===== e =====*/){ // summary: // User-defined function to handle clicks. // tags: // callback }, _onKeyDown: function(e){ // tags: // private if(e.keyCode == 27){ // ESC this.hide(); } }, refresh: function(){ // TODO: should we call refresh on resize? // summary: // Refreshes the layout of the dialog. var n = this.domNode; if(this.closeButton){ var b = this.closeButtonNode; var s = Math.round(b.offsetHeight / 2); b.style.top = -s + "px"; b.style.left = n.offsetWidth - s + "px"; } if(this.top === "auto"){ var h = win.global.innerHeight || win.doc.documentElement.clientHeight; n.style.top = Math.round((h - n.offsetHeight) / 2) + "px"; }else{ n.style.top = this.top; } if(this.left === "auto"){ var h = win.global.innerWidth || win.doc.documentElement.clientWidth; n.style.left = Math.round((h - n.offsetWidth) / 2) + "px"; }else{ n.style.left = this.left; } }, show: function(){ // summary: // Shows the dialog. if(this.domNode.style.display === ""){ return; } if(this.modal){ this.addCover(); } this.domNode.style.display = ""; this.refresh(); this.domNode.focus(); }, hide: function(){ // summary: // Hides the dialog. if(this.domNode.style.display === "none"){ return; } this.domNode.style.display = "none"; if(this.modal){ this.removeCover(); } } }); });