diff options
Diffstat (limited to 'js/dojo-1.7.2/dojox/mobile/Opener.js')
| -rw-r--r-- | js/dojo-1.7.2/dojox/mobile/Opener.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/mobile/Opener.js b/js/dojo-1.7.2/dojox/mobile/Opener.js new file mode 100644 index 0000000..7c9c354 --- /dev/null +++ b/js/dojo-1.7.2/dojox/mobile/Opener.js @@ -0,0 +1,74 @@ +//>>built +define("dojox/mobile/Opener", [ + "dojo/_base/declare", + "dojo/_base/lang", + "dojo/_base/window", + "dojo/dom-class", + "dojo/dom-construct", + "dojo/dom-style", + "dojo/dom-geometry", + "./Tooltip", + "./Overlay" +], function(declare, lang, win, domClass, domConstruct, domStyle, domGeometry, Tooltip, Overlay){ + + /*===== + Tooltip = dojox.mobile.Tooltip; + Overlay = dojox.mobile.Overlay; + =====*/ + var isOverlay = domClass.contains(win.doc.documentElement, "dj_phone"); + var cls = declare("dojox.mobile.Opener", isOverlay ? Overlay : Tooltip, { + // summary: + // A non-templated popup widget that will use either Tooltip or Overlay depending on screen size + // + buildRendering: function(){ + this.inherited(arguments); + this.cover = domConstruct.create('div', { onclick: lang.hitch(this, '_onBlur'), 'class': 'mblOpenerUnderlay', style: { top:'0px', left:'0px', width:'0px', height:'0px', position: isOverlay ? 'absolute' : 'fixed', backgroundColor:'transparent', overflow:'hidden', zIndex:'-1' }}, this.domNode, 'first'); + this.connect(null, win.global.onorientationchange !== undefined ? "onorientationchange" : "onresize", lang.hitch(this, function(){ + if(domStyle.get(this.cover, "height") !== '0px'){ // resize cover when shown + this._resizeCover(); + } + })); + }, + + onShow: function(/*DomNode*/node){}, + onHide: function(/*DomNode*/node, /*Anything*/v){}, + + show: function(node, positions){ + this.node = node; + this.onShow(node); + this._resizeCover(); + return this.inherited(arguments); + }, + + hide: function(/*Anything*/ val){ + this.inherited(arguments); + domStyle.set(this.cover, { height:'0px' }); + this.onHide(this.node, val); + }, + + _resizeCover: function(){ + if(isOverlay){ + domStyle.set(this.cover, { height:'0px' }); // hide cover temporarily to calculate domNode size + setTimeout(lang.hitch(this, function(){ // show cover after positioning popup + var pos = domGeometry.position(this.domNode, false); + domStyle.set(this.cover, { top:-pos.y+'px', left:-pos.x+'px', width:(pos.w+pos.x)+'px', height:(pos.h+pos.y)+'px' }); + }), 0); + }else{ + domStyle.set(this.cover, { + width:Math.max(win.doc.documentElement.scrollWidth || win.body().scrollWidth || win.doc.documentElement.clientWidth)+'px', + height:Math.max(win.doc.documentElement.scrollHeight || win.body().scrollHeight || win.doc.documentElement.clientHeight)+'px' + }); + } + }, + + _onBlur: function(e){ + var ret = this.onBlur(e); + if(ret !== false){ // only exactly false prevents hide() + this.hide(e); + } + return ret; + } + }); + cls.prototype.baseClass += " mblOpener"; // add to either mblOverlay or mblTooltip + return cls; +}); |
