blob: 90df7fcd81ff09394d35d581764feb452502d52c [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.image.LightboxNano"]){
dojo._hasResource["dojox.image.LightboxNano"]=true;
dojo.provide("dojox.image.LightboxNano");
dojo.require("dojo.fx");
(function(d){
var _2=function(){
var _3=d.global,_4=d.doc,w=0,h=0,de=_4.documentElement,_8=de.clientWidth,_9=de.clientHeight,_a=d._docScroll();
if(d.isMozilla){
var _b=_c,_d=_e,_f=_8,_10=_9,_c=_4.body.clientWidth,_e=_4.body.clientHeight;
if(_c>_8){
_b=_8;
_f=_c;
}
if(_e>_9){
_d=_9;
_10=_e;
}
w=(_f>_3.innerWidth)?_b:_f;
h=(_10>_3.innerHeight)?_d:_10;
}else{
if(_3.innerWidth){
w=_3.innerWidth;
h=_3.innerHeight;
}else{
if(d.isIE&&de&&_9){
w=_8;
h=_9;
}else{
if(d.body().clientWidth){
w=d.body().clientWidth;
h=d.body().clientHeight;
}
}
}
}
return {w:w,h:h,l:_a.x,t:_a.y};
};
d.declare("dojox.image.LightboxNano",null,{href:"",duration:500,preloadDelay:5000,_node:null,_start:null,_end:null,_img:null,_bg:null,_onClickEvt:null,_connects:null,_loading:false,_loadingNode:null,constructor:function(p,n){
var _13=this;
d.mixin(_13,p);
n=dojo.byId(n);
if(!/a/i.test(n.tagName)){
var a=d.doc.createElement("a");
a.href=_13.href;
a.className=n.className;
n.className="";
d.place(a,n,"after");
a.appendChild(n);
n=a;
}
d.style(n,{display:"block",position:"relative"});
d.place(_13._createDiv("dojoxEnlarge"),n);
_13._node=n;
d.setSelectable(n,false);
_13._onClickEvt=d.connect(n,"onclick",_13,"_load");
setTimeout(function(){
(new Image()).src=_13.href;
_13._hideLoading();
},_13.preloadDelay);
},destroy:function(){
var a=this._connects||[];
a.push(this._onClickEvt);
d.forEach(a,function(e){
d.disconnect(e);
});
d.destroy(this._node);
},_createDiv:function(_17,_18){
var e=d.doc.createElement("div");
e.className=_17;
d.style(e,{position:"absolute",display:_18?"":"none"});
return e;
},_load:function(e){
var _1b=this;
d.stopEvent(e);
if(!_1b._loading){
_1b._loading=true;
_1b._reset();
var n=d.query("img",_1b._node)[0],a=d._abs(n,true),c=d.contentBox(n),b=d._getBorderExtents(n),i=d.doc.createElement("img"),ln=_1b._loadingNode;
if(ln==null){
_1b._loadingNode=ln=_1b._createDiv("dojoxLoading",true);
d.place(ln,_1b._node);
var l=d.marginBox(ln);
d.style(ln,{left:parseInt((c.w-l.w)/2)+"px",top:parseInt((c.h-l.h)/2)+"px"});
}
c.x=a.x-10+b.l;
c.y=a.y-10+b.t;
_1b._start=c;
_1b._img=i;
_1b._connects=[d.connect(i,"onload",_1b,"_show")];
d.style(i,{visibility:"hidden",cursor:"pointer",position:"absolute",top:0,left:0,zIndex:9999999});
d.body().appendChild(i);
i.src=_1b.href;
}
},_hideLoading:function(){
if(this._loadingNode){
d.style(this._loadingNode,"display","none");
}
this._loadingNode=false;
},_show:function(){
var _23=this,vp=_2(),w=_23._img.width,h=_23._img.height,vpw=parseInt((vp.w-20)*0.9),vph=parseInt((vp.h-20)*0.9),dd=d.doc,bg=dd.createElement("div"),ln=_23._loadingNode;
if(_23._loadingNode){
_23._hideLoading();
}
d.style(_23._img,{border:"10px solid #fff",visibility:"visible"});
d.style(_23._node,"visibility","hidden");
_23._loading=false;
_23._connects=_23._connects.concat([d.connect(dd,"onmousedown",_23,"_hide"),d.connect(dd,"onkeypress",_23,"_key"),d.connect(window,"onresize",_23,"_sizeBg")]);
if(w>vpw){
h=h*vpw/w;
w=vpw;
}
if(h>vph){
w=w*vph/h;
h=vph;
}
_23._end={x:(vp.w-20-w)/2+vp.l,y:(vp.h-20-h)/2+vp.t,w:w,h:h};
d.style(bg,{backgroundColor:"#000",opacity:0,position:"absolute",zIndex:9999998});
d.body().appendChild(bg);
_23._bg=bg;
_23._sizeBg();
d.fx.combine([_23._anim(_23._img,_23._coords(_23._start,_23._end)),_23._anim(bg,{opacity:0.5})]).play();
},_sizeBg:function(){
var dd=d.doc.documentElement;
d.style(this._bg,{top:0,left:0,width:dd.scrollWidth+"px",height:dd.scrollHeight+"px"});
},_key:function(e){
d.stopEvent(e);
this._hide();
},_coords:function(s,e){
return {left:{start:s.x,end:e.x},top:{start:s.y,end:e.y},width:{start:s.w,end:e.w},height:{start:s.h,end:e.h}};
},_hide:function(){
var _30=this;
d.forEach(_30._connects,function(e){
d.disconnect(e);
});
_30._connects=[];
d.fx.combine([_30._anim(_30._img,_30._coords(_30._end,_30._start),"_reset"),_30._anim(_30._bg,{opacity:0})]).play();
},_reset:function(){
d.style(this._node,"visibility","visible");
d.forEach([this._img,this._bg],function(n){
d.destroy(n);
n=null;
});
this._node.focus();
},_anim:function(_33,_34,_35){
return d.animateProperty({node:_33,duration:this.duration,properties:_34,onEnd:_35?d.hitch(this,_35):null});
}});
})(dojo);
}