Lightbox.js 7.4 KB

12345678
  1. /*
  2. Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. 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,modal:false,_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);},hide:function(){this._attachedDialog.hide();},disable:function(){this._allowPassthru=true;},enable:function(){this._allowPassthru=false;},onClick:function(){}});dojo.declare("dojox.image.LightboxDialog",dijit.Dialog,{title:"",inGroup:null,imgUrl:dijit._Widget.prototype._blankGif,errorMessage:"Image not found.",adjust:true,modal:false,_groups:{XnoGroupX:[]},errorImg:dojo.moduleUrl("dojox.image","resources/images/warning.png"),templateString:dojo.cache("dojox.image","resources/Lightbox.html","<div class=\"dojoxLightbox\" dojoAttachPoint=\"containerNode\">\n\t<div style=\"position:relative\">\n\t\t<div dojoAttachPoint=\"imageContainer\" class=\"dojoxLightboxContainer\" dojoAttachEvent=\"onclick: _onImageClick\">\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\" dojoAttachPoint=\"titleTextNode\"><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.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(_2){var _3=this;this._lastGroup=_2;if(!_3.open){_3.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(!_2.modal){this._modalconnects.push(dojo.connect(dijit._underlay.domNode,"onclick",this,"onCancel"));}}if(this._wasStyled){dojo.destroy(_3.imgNode);_3.imgNode=dojo.create("img",null,_3.imageContainer,"first");_3._makeAnims();_3._wasStyled=false;}dojo.style(_3.imgNode,"opacity","0");dojo.style(_3.titleNode,"opacity","0");var _4=_2.href;if((_2.group&&_2!=="XnoGroupX")||_3.inGroup){if(!_3.inGroup){_3.inGroup=_3._groups[(_2.group)];dojo.forEach(_3.inGroup,function(g,i){if(g.href==_2.href){_3._index=i;}},_3);}if(!_3._index){_3._index=0;_4=_3.inGroup[_3._index].href;}_3.groupCount.innerHTML=" ("+(_3._index+1)+" of "+_3.inGroup.length+")";_3.prevNode.style.visibility="visible";_3.nextNode.style.visibility="visible";}else{_3.groupCount.innerHTML="";_3.prevNode.style.visibility="hidden";_3.nextNode.style.visibility="hidden";}if(!_2.leaveTitle){_3.textNode.innerHTML=_2.title;}_3._ready(_4);},_ready:function(_5){var _6=this;_6._imgError=dojo.connect(_6.imgNode,"error",_6,function(){dojo.disconnect(_6._imgError);_6.imgNode.src=_6.errorImg;_6.textNode.innerHTML=_6.errorMessage;});_6._imgConnect=dojo.connect(_6.imgNode,"load",_6,function(e){_6.resizeTo({w:_6.imgNode.width,h:_6.imgNode.height,duration:_6.duration});dojo.disconnect(_6._imgConnect);if(_6._imgError){dojo.disconnect(_6._imgError);}});_6.imgNode.src=_5;},_nextImage:function(){if(!this.inGroup){return;}if(this._index+1<this.inGroup.length){this._index++;}else{this._index=0;}this._loadImage();},_prevImage:function(){if(this.inGroup){if(this._index==0){this._index=this.inGroup.length-1;}else{this._index--;}this._loadImage();}},_loadImage:function(){this._loadingAnim.play(1);},_prepNodes:function(){this._imageReady=false;this.show({href:this.inGroup[this._index].href,title:this.inGroup[this._index].title});},resizeTo:function(_7,_8){var _9=dojo.boxModel=="border-box"?dojo._getBorderExtents(this.domNode).w:0,_a=_8||{h:30};this._lastTitleSize=_a;if(this.adjust&&(_7.h+_a.h+_9+80>this._vp.h||_7.w+_9+60>this._vp.w)){this._lastSize=_7;_7=this._scaleToFit(_7);}this._currentSize=_7;var _b=dojox.fx.sizeTo({node:this.containerNode,duration:_7.duration||this.duration,width:_7.w+_9,height:_7.h+_a.h+_9});this.connect(_b,"onEnd","_showImage");_b.play(15);},_scaleToFit:function(_c){var ns={};if(this._vp.h>this._vp.w){ns.w=this._vp.w-80;ns.h=ns.w*(_c.h/_c.w);}else{ns.h=this._vp.h-60-this._lastTitleSize.h;ns.w=ns.h*(_c.w/_c.h);}this._wasStyled=true;this._setImageSize(ns);ns.duration=_c.duration;return ns;},_setImageSize:function(_d){var s=this.imgNode;s.height=_d.h;s.width=_d.w;},_size:function(){},_position:function(e){this._vp=dijit.getViewport();this.inherited(arguments);if(e&&e.type=="resize"){if(this._wasStyled){this._setImageSize(this._lastSize);this.resizeTo(this._lastSize);}else{if(this.imgNode.height+80>this._vp.h||this.imgNode.width+60>this._vp.h){this.resizeTo({w:this.imgNode.width,h:this.imgNode.height});}}}},_showImage:function(){this._showImageAnim.play(1);},_showNav:function(){var _e=dojo.marginBox(this.titleNode);if(_e.h>this._lastTitleSize.h){this.resizeTo(this._wasStyled?this._lastSize:this._currentSize,_e);}else{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._index=null;},addImage:function(_f,_10){var g=_10;if(!_f.href){return;}if(g){if(!this._groups[g]){this._groups[g]=[];}this._groups[g].push(_f);}else{this._groups["XnoGroupX"].push(_f);}},_handleKey:function(e){if(!this.open){return;}var dk=dojo.keys;switch(e.charOrCode){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;}},_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});},onClick:function(_11){},_onImageClick:function(e){if(e&&e.target==this.imgNode){this.onClick(this._lastGroup);if(this._lastGroup.declaredClass){this._lastGroup.onClick(this._lastGroup);}}}});}