blob: ab0f2effd4f4c7b6660ac72a2ad673f08398f676 [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.Lightbox"]){
dojo._hasResource["dojox.image.Lightbox"]=true;
dojo.provide("dojox.image.Lightbox");
dojo.experimental("dojox.image.Lightbox");
dojo.require("dijit.Dialog");
dojo.require("dojox.fx._base");
dojo.declare("dojox.image.Lightbox",dijit._Widget,{group:"",title:"",href:"",duration:500,_allowPassthru:false,_attachedDialog:null,startup:function(){
this.inherited(arguments);
var _1=dijit.byId("dojoxLightboxDialog");
if(_1){
this._attachedDialog=_1;
}else{
this._attachedDialog=new dojox.image.LightboxDialog({id:"dojoxLightboxDialog"});
this._attachedDialog.startup();
}
if(!this.store){
this._addSelf();
this.connect(this.domNode,"onclick","_handleClick");
}
},_addSelf:function(){
this._attachedDialog.addImage({href:this.href,title:this.title},this.group||null);
},_handleClick:function(e){
if(!this._allowPassthru){
e.preventDefault();
}else{
return;
}
this.show();
},show:function(){
this._attachedDialog.show(this);
},disable:function(){
this._allowPassthru=true;
},enable:function(){
this._allowPassthru=false;
}});
dojo.declare("dojox.image.LightboxDialog",dijit.Dialog,{title:"",inGroup:null,imgUrl:dijit._Widget.prototype._blankGif,errorMessage:"Image not found.",adjust:true,_groups:{XnoGroupX:[]},errorImg:dojo.moduleUrl("dojox.image","resources/images/warning.png"),templateString:"<div class=\"dojoxLightbox\" dojoAttachPoint=\"containerNode\">\n\t<div style=\"position:relative\">\n\t\t<div dojoAttachPoint=\"imageContainer\" class=\"dojoxLightboxContainer\">\n\t\t\t<img dojoAttachPoint=\"imgNode\" src=\"${imgUrl}\" class=\"dojoxLightboxImage\" alt=\"${title}\">\n\t\t\t<div class=\"dojoxLightboxFooter\" dojoAttachPoint=\"titleNode\">\n\t\t\t\t<div class=\"dijitInline LightboxClose\" dojoAttachPoint=\"closeNode\"></div>\n\t\t\t\t<div class=\"dijitInline LightboxNext\" dojoAttachPoint=\"nextNode\"></div>\t\n\t\t\t\t<div class=\"dijitInline LightboxPrev\" dojoAttachPoint=\"prevNode\"></div>\n\t\t\t\t<div class=\"dojoxLightboxText\"><span dojoAttachPoint=\"textNode\">${title}</span><span dojoAttachPoint=\"groupCount\" class=\"dojoxLightboxGroupText\"></span></div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n",startup:function(){
this.inherited(arguments);
this._animConnects=[];
this._clone=dojo.clone(this.imgNode);
this.connect(this.nextNode,"onclick","_nextImage");
this.connect(this.prevNode,"onclick","_prevImage");
this.connect(this.closeNode,"onclick","hide");
this._makeAnims();
this._vp=dijit.getViewport();
return this;
},show:function(_3){
var _t=this;
if(!_t.open){
_t.inherited(arguments);
this._modalconnects.push(dojo.connect(dojo.global,"onscroll",this,"_position"),dojo.connect(dojo.global,"onresize",this,"_position"),dojo.connect(dojo.body(),"onkeypress",this,"_handleKey"));
}
if(this._wasStyled){
dojo.destroy(_t.imgNode);
_t.imgNode=dojo.clone(_t._clone);
dojo.place(_t.imgNode,_t.imageContainer,"first");
_t._makeAnims();
_t._wasStyled=false;
}
dojo.style(_t.imgNode,"opacity","0");
dojo.style(_t.titleNode,"opacity","0");
_t._imageReady=false;
_t.imgNode.src=_3.href;
if((_3.group&&_3!=="XnoGroupX")||_t.inGroup){
if(!_t.inGroup){
_t.inGroup=_t._groups[(_3.group)];
dojo.forEach(_t.inGroup,function(g,i){
if(g.href==_3.href){
_t._positionIndex=i;
}
},_t);
}
if(!_t._positionIndex){
_t._positionIndex=0;
_t.imgNode.src=_t.inGroup[_t._positionIndex].href;
}
_t.groupCount.innerHTML=" ("+(_t._positionIndex+1)+" of "+_t.inGroup.length+")";
_t.prevNode.style.visibility="visible";
_t.nextNode.style.visibility="visible";
}else{
_t.groupCount.innerHTML="";
_t.prevNode.style.visibility="hidden";
_t.nextNode.style.visibility="hidden";
}
_t.textNode.innerHTML=_3.title;
if(!_t._imageReady||_t.imgNode.complete===true){
_t._imgConnect=dojo.connect(_t.imgNode,"onload",_t,function(){
_t._imageReady=true;
_t.resizeTo({w:_t.imgNode.width,h:_t.imgNode.height,duration:_t.duration});
dojo.disconnect(_t._imgConnect);
if(_t._imgError){
dojo.disconnect(_t._imgError);
}
});
_t._imgError=dojo.connect(_t.imgNode,"onerror",_t,function(){
dojo.disconnect(_t._imgError);
_t.imgNode.src=_t.errorImg;
_t._imageReady=true;
_t.textNode.innerHTML=_t.errorMessage;
});
if(dojo.isIE){
_t.imgNode.src=_t.imgNode.src;
}
}else{
_t.resizeTo({w:_t.imgNode.width,h:_t.imgNode.height,duration:1});
}
},_nextImage:function(){
if(!this.inGroup){
return;
}
if(this._positionIndex+1<this.inGroup.length){
this._positionIndex++;
}else{
this._positionIndex=0;
}
this._loadImage();
},_prevImage:function(){
if(this.inGroup){
if(this._positionIndex==0){
this._positionIndex=this.inGroup.length-1;
}else{
this._positionIndex--;
}
this._loadImage();
}
},_loadImage:function(){
this._loadingAnim.play(1);
},_prepNodes:function(){
this._imageReady=false;
this.show({href:this.inGroup[this._positionIndex].href,title:this.inGroup[this._positionIndex].title});
},resizeTo:function(_7){
var _8=((dojo.boxModel=="border-box"))?22:0;
if(this.adjust&&(_7.h+_8+80>this._vp.h||_7.w+_8+50>this._vp.w)){
_7=this._scaleToFit(_7);
}
var _9=dojox.fx.sizeTo({node:this.containerNode,duration:_7.duration||this.duration,width:_7.w+_8,height:_7.h+30+_8});
this.connect(_9,"onEnd","_showImage");
_9.play(15);
},_showImage:function(){
this._showImageAnim.play(1);
},_showNav:function(){
this._showNavAnim.play(1);
},hide:function(){
dojo.fadeOut({node:this.titleNode,duration:200,onEnd:dojo.hitch(this,function(){
this.imgNode.src=this._blankGif;
})}).play(5);
this.inherited(arguments);
this.inGroup=null;
this._positionIndex=null;
},addImage:function(_a,_b){
var g=_b;
if(!_a.href){
return;
}
if(g){
if(!this._groups[g]){
this._groups[g]=[];
}
this._groups[g].push(_a);
}else{
this._groups["XnoGroupX"].push(_a);
}
},_handleKey:function(e){
if(!this.open){
return;
}
var dk=dojo.keys;
var _f=(e.charCode==dk.SPACE?dk.SPACE:e.keyCode);
switch(_f){
case dk.ESCAPE:
this.hide();
break;
case dk.DOWN_ARROW:
case dk.RIGHT_ARROW:
case 78:
this._nextImage();
break;
case dk.UP_ARROW:
case dk.LEFT_ARROW:
case 80:
this._prevImage();
break;
}
},_scaleToFit:function(_10){
var ns={};
if(this._vp.h>this._vp.w){
ns.w=this._vp.w-70;
ns.h=ns.w*(_10.h/_10.w);
}else{
ns.h=this._vp.h-80;
ns.w=ns.h*(_10.w/_10.h);
}
this._wasStyled=true;
var s=this.imgNode.style;
s.height=ns.h+"px";
s.width=ns.w+"px";
ns.duration=_10.duration;
return ns;
},_position:function(e){
this.inherited(arguments);
this._vp=dijit.getViewport();
},_makeAnims:function(){
dojo.forEach(this._animConnects,dojo.disconnect);
this._animConnects=[];
this._showImageAnim=dojo.fadeIn({node:this.imgNode,duration:this.duration});
this._animConnects.push(dojo.connect(this._showImageAnim,"onEnd",this,"_showNav"));
this._loadingAnim=dojo.fx.combine([dojo.fadeOut({node:this.imgNode,duration:175}),dojo.fadeOut({node:this.titleNode,duration:175})]);
this._animConnects.push(dojo.connect(this._loadingAnim,"onEnd",this,"_prepNodes"));
this._showNavAnim=dojo.fadeIn({node:this.titleNode,duration:225});
}});
}