webui-aria2/js/libs/dojox/mobile/Opener.js.uncompressed.js
2012-05-01 19:52:07 +08:00

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;
});