| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 | define("dojox/mobile/Overlay", [	"dojo/_base/declare",	"dojo/_base/lang",	"dojo/_base/sniff",	"dojo/_base/window",	"dojo/dom-class",	"dojo/dom-geometry",	"dojo/dom-style",	"dojo/window",	"dijit/_WidgetBase",	"dojo/_base/array",	"dijit/registry"], function(declare, lang, has, win, domClass, domGeometry, domStyle, windowUtils, WidgetBase, array, registry){	/*=====		WidgetBase = dijit._WidgetBase;	=====*/	return declare("dojox.mobile.Overlay", WidgetBase, {		// summary:		//		A non-templated widget that animates up from the bottom, overlaying the current content		//		baseClass: "mblOverlay mblOverlayHidden",		show: function(/*DomNode?*/aroundNode){			// summary:			//		Scroll the overlay up into view			array.forEach(registry.findWidgets(this.domNode), function(w){				if(w && w.height == "auto" && typeof w.resize == "function"){					w.resize();				}			});			var vp, popupPos;			var reposition = lang.hitch(this, function(){				domStyle.set(this.domNode, { position: "", top: "auto", bottom: "0px" });				popupPos = domGeometry.position(this.domNode);				vp = windowUtils.getBox();				if((popupPos.y+popupPos.h) != vp.h // TODO: should be a has() test for position:fixed not scrolling					|| has("android") < 3){ // android 2.x supports position:fixed but child transforms don't persist					popupPos.y = vp.t + vp.h - popupPos.h;					domStyle.set(this.domNode, { position: "absolute", top: popupPos.y + "px", bottom: "auto" });				}			});			reposition();			if(aroundNode){				var aroundPos = domGeometry.position(aroundNode);				if(popupPos.y < aroundPos.y){ // if the aroundNode is under the popup, try to scroll it up					win.global.scrollBy(0, aroundPos.y + aroundPos.h - popupPos.y);					reposition();				}			}			domClass.replace(this.domNode, ["mblCoverv", "mblIn"], ["mblOverlayHidden", "mblRevealv", "mblOut", "mblReverse"]);			var _domNode = this.domNode;			setTimeout(function(){				domClass.add(_domNode, "mblTransition");			}, 100);			var timeoutHandler = null;			this._moveHandle = this.connect(win.doc.documentElement, "ontouchmove", function(){				if(timeoutHandler){					clearTimeout(timeoutHandler);				}				timeoutHandler = setTimeout(function(){					reposition();					timeoutHandler = null;				}, 0);			});		},		hide: function(){			// summary:			//		Scroll the overlay down and then make it invisible			if(this._moveHandle){				this.disconnect(this._moveHandle);				this._moveHandle = null;			}			if(has("webkit")){				var handler = this.connect(this.domNode, "webkitTransitionEnd", function(){					this.disconnect(handler);					domClass.replace(this.domNode, ["mblOverlayHidden"], ["mblRevealv", "mblOut", "mblReverse", "mblTransition"]);				});				domClass.replace(this.domNode, ["mblRevealv", "mblOut", "mblReverse"], ["mblCoverv", "mblIn", "mblTransition"]);				var _domNode = this.domNode;				setTimeout(function(){					domClass.add(_domNode, "mblTransition");				}, 100);			}else{				domClass.replace(this.domNode, ["mblOverlayHidden"], ["mblCoverv", "mblIn", "mblRevealv", "mblOut", "mblReverse"]);			}		},		onBlur: function(/*Event*/e){			return false; // touching outside the overlay area does not call hide()		}	});});
 |