75 lines
2.6 KiB
JavaScript
75 lines
2.6 KiB
JavaScript
//>>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;
|
|
});
|