summaryrefslogtreecommitdiff
path: root/js/dojo/dojox/mobile/Opener.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo/dojox/mobile/Opener.js')
-rw-r--r--js/dojo/dojox/mobile/Opener.js74
1 files changed, 74 insertions, 0 deletions
diff --git a/js/dojo/dojox/mobile/Opener.js b/js/dojo/dojox/mobile/Opener.js
new file mode 100644
index 0000000..7c9c354
--- /dev/null
+++ b/js/dojo/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;
+});