This repository has been archived by the owner on Jul 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 85
/
jquery.lightbox.pack.js
1 lines (1 loc) · 9.85 KB
/
jquery.lightbox.pack.js
1
(function($){var opts;$.fn.lightbox=function(options){opts=$.extend({},$.fn.lightbox.defaults,options);$.fn.lightbox.initialize();return this.each(function(){$(this).click(function(){$(this).lightbox.start(this);return false})})};$.fn.lightbox.initialize=function(){$('#overlay').remove();$('#lightbox').remove();opts.inprogress=false;var outerImage='<div id="outerImageContainer"><div id="imageContainer"><img id="lightboxImage"><div id="hoverNav"><a href="javascript://" title="'+opts.strings.prevLinkTitle+'" id="prevLink"></a><a href="javascript://" id="nextLink" title="'+opts.strings.nextLinkTitle+'"></a></div><div id="loading"><a href="javascript://" id="loadingLink"><img src="'+opts.fileLoadingImage+'"></a></div></div></div>';var imageData='<div id="imageDataContainer" class="clearfix"><div id="imageData"><div id="imageDetails"><span id="caption"></span><span id="numberDisplay"></span></div><div id="bottomNav">';if(opts.displayHelp)imageData+='<span id="helpDisplay">'+opts.strings.help+'</span>';imageData+='<a href="javascript://" id="bottomNavClose" title="'+opts.strings.closeTitle+'"><img src="'+opts.fileBottomNavCloseImage+'"></a></div></div></div>';var string;if(opts.navbarOnTop){string='<div id="overlay"></div><div id="lightbox">'+imageData+outerImage+'</div>';$("body").append(string);$("#imageDataContainer").addClass('ontop')}else{string='<div id="overlay"></div><div id="lightbox">'+outerImage+imageData+'</div>';$("body").append(string)}$("#overlay").click(function(){$.fn.lightbox.end()}).hide();$("#lightbox").click(function(){$.fn.lightbox.end()}).hide();$("#loadingLink").click(function(){$.fn.lightbox.end();return false});$("#bottomNavClose").click(function(){$.fn.lightbox.end();return false});$('#outerImageContainer').width(opts.widthCurrent).height(opts.heightCurrent);$('#imageDataContainer').width(opts.widthCurrent)};$.fn.lightbox.getPageSize=function(){var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=window.innerWidth+window.scrollMaxX;yScroll=window.innerHeight+window.scrollMaxY}else if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight}var windowWidth,windowHeight;if(self.innerHeight){if(document.documentElement.clientWidth){windowWidth=document.documentElement.clientWidth}else{windowWidth=self.innerWidth}windowHeight=self.innerHeight}else if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight}else if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight}if(yScroll<windowHeight){pageHeight=windowHeight}else{pageHeight=yScroll}if(xScroll<windowWidth){pageWidth=xScroll}else{pageWidth=windowWidth}var arrayPageSize=new Array(pageWidth,pageHeight,windowWidth,windowHeight);return arrayPageSize};$.fn.lightbox.getPageScroll=function(){var xScroll,yScroll;if(self.pageYOffset){yScroll=self.pageYOffset;xScroll=self.pageXOffset}else if(document.documentElement&&document.documentElement.scrollTop){yScroll=document.documentElement.scrollTop;xScroll=document.documentElement.scrollLeft}else if(document.body){yScroll=document.body.scrollTop;xScroll=document.body.scrollLeft}var arrayPageScroll=new Array(xScroll,yScroll);return arrayPageScroll};$.fn.lightbox.pause=function(ms){var date=new Date();var curDate=null;do{curDate=new Date()}while(curDate-date<ms)};$.fn.lightbox.start=function(imageLink){$("select, embed, object").hide();var arrayPageSize=$.fn.lightbox.getPageSize();$("#overlay").hide().css({width:'100%',height:arrayPageSize[1]+'px',opacity:opts.overlayOpacity}).fadeIn();opts.imageArray=[];imageNum=0;var anchors=document.getElementsByTagName(imageLink.tagName);if(!imageLink.rel||(imageLink.rel=='')){opts.imageArray.push(new Array(imageLink.href,opts.displayTitle?imageLink.title:''))}else{$("a").each(function(){if(this.href&&(this.rel==imageLink.rel)){opts.imageArray.push(new Array(this.href,opts.displayTitle?this.title:''))}});for(i=0;i<opts.imageArray.length;i++){for(j=opts.imageArray.length-1;j>i;j--){if(opts.imageArray[i][0]==opts.imageArray[j][0]){opts.imageArray.splice(j,1)}}}while(opts.imageArray[imageNum][0]!=imageLink.href){imageNum++}}var arrayPageScroll=$.fn.lightbox.getPageScroll();var lightboxTop=arrayPageScroll[1]+(arrayPageSize[3]/10);var lightboxLeft=arrayPageScroll[0];$('#lightbox').css({top:lightboxTop+'px',left:lightboxLeft+'px'}).show();if(!opts.slideNavBar)$('#imageData').hide();$.fn.lightbox.changeImage(imageNum)};$.fn.lightbox.changeImage=function(imageNum){if(opts.inprogress==false){opts.inprogress=true;opts.activeImage=imageNum;$('#loading').show();$('#lightboxImage').hide();$('#hoverNav').hide();$('#prevLink').hide();$('#nextLink').hide();if(opts.slideNavBar){$('#imageDataContainer').hide();$('#imageData').hide();$.fn.doChangeImage()}else{$.fn.doChangeImage()}}};$.fn.doChangeImage=function(){imgPreloader=new Image();imgPreloader.onload=function(){var newWidth=imgPreloader.width;var newHeight=imgPreloader.height;if(opts.fitToScreen){var arrayPageSize=$.fn.lightbox.getPageSize();var ratio;var initialPageWidth=arrayPageSize[2]-2*opts.borderSize;var initialPageHeight=arrayPageSize[3]-200;if(imgPreloader.height>initialPageHeight){newWidth=parseInt((initialPageHeight/imgPreloader.height)*imgPreloader.width);newHeight=initialPageHeight}else if(imgPreloader.width>initialPageWidth){newHeight=parseInt((initialPageWidth/imgPreloader.width)*imgPreloader.height);newWidth=initialPageWidth}}$('#lightboxImage').attr('src',opts.imageArray[opts.activeImage][0]).width(newWidth).height(newHeight);$.fn.lightbox.resizeImageContainer(newWidth,newHeight)};imgPreloader.src=opts.imageArray[opts.activeImage][0]};$.fn.lightbox.end=function(){$.fn.lightbox.disableKeyboardNav();$('#lightbox').hide();$('#overlay').fadeOut();$('select, object, embed').show()};$.fn.lightbox.preloadNeighborImages=function(){if((opts.imageArray.length-1)>opts.activeImage){preloadNextImage=new Image();preloadNextImage.src=opts.imageArray[opts.activeImage+1][0]}if(opts.activeImage>0){preloadPrevImage=new Image();preloadPrevImage.src=opts.imageArray[opts.activeImage-1][0]}};$.fn.lightbox.keyboardAction=function(e){if(e==null){var keycode=event.keyCode;var escapeKey=27}else{var keycode=e.keyCode;var escapeKey=e.DOM_VK_ESCAPE}var key=String.fromCharCode(keycode).toLowerCase();if((key=='x')||(key=='o')||(key=='c')||(keycode==escapeKey)){$.fn.lightbox.end()}else if((key=='p')||(keycode==37)){if(opts.activeImage!=0){$.fn.lightbox.disableKeyboardNav();$.fn.lightbox.changeImage(opts.activeImage-1)}}else if((key=='n')||(keycode==39)){if(opts.activeImage!=(opts.imageArray.length-1)){$.fn.lightbox.disableKeyboardNav();$.fn.lightbox.changeImage(opts.activeImage+1)}}};$.fn.lightbox.resizeImageContainer=function(imgWidth,imgHeight){opts.widthCurrent=document.getElementById('outerImageContainer').offsetWidth;opts.heightCurrent=document.getElementById('outerImageContainer').offsetHeight;var widthNew=(imgWidth+(opts.borderSize*2));var heightNew=(imgHeight+(opts.borderSize*2));opts.xScale=(widthNew/opts.widthCurrent)*100;opts.yScale=(heightNew/opts.heightCurrent)*100;wDiff=opts.widthCurrent-widthNew;hDiff=opts.heightCurrent-heightNew;$('#imageDataContainer').animate({width:widthNew},opts.resizeSpeed,'linear');$('#outerImageContainer').animate({width:widthNew},opts.resizeSpeed,'linear',function(){$('#outerImageContainer').animate({height:heightNew},opts.resizeSpeed,'linear',function(){$.fn.lightbox.showImage()})});if((hDiff==0)&&(wDiff==0)){if(jQuery.browser.msie){$.fn.lightbox.pause(250)}else{$.fn.lightbox.pause(100)}}$('#prevLink').height(imgHeight);$('#nextLink').height(imgHeight)};$.fn.lightbox.showImage=function(){$('#loading').hide();$('#lightboxImage').fadeIn("fast");$.fn.lightbox.updateDetails();$.fn.lightbox.preloadNeighborImages();opts.inprogress=false};$.fn.lightbox.updateDetails=function(){if(opts.imageArray[opts.activeImage][1]){$('#caption').html(opts.imageArray[opts.activeImage][1]).show()}if(opts.imageArray.length>1){var nav_html;nav_html=opts.strings.image+(opts.activeImage+1)+opts.strings.of+opts.imageArray.length;if((opts.activeImage)>0){nav_html='<a title="'+opts.strings.prevLinkTitle+'" href="#" id="prevLinkText">'+opts.strings.prevLinkText+"</a>"+nav_html}if((opts.activeImage+1)<opts.imageArray.length){nav_html+='<a title="'+opts.strings.nextLinkTitle+'" href="#" id="nextLinkText">'+opts.strings.nextLinkText+"</a>"}$('#numberDisplay').html(nav_html).show()}if(opts.slideNavBar){$("#imageData").slideDown(opts.navBarSlideSpeed)}else{$("#imageData").show()}var arrayPageSize=$.fn.lightbox.getPageSize();$('#overlay').height(arrayPageSize[1]);$.fn.lightbox.updateNav()};$.fn.lightbox.updateNav=function(){$('#hoverNav').show();if(opts.activeImage!=0){$('#prevLink,#prevLinkText').show().click(function(){$.fn.lightbox.changeImage(opts.activeImage-1);return false})}if(opts.activeImage!=(opts.imageArray.length-1)){$('#nextLink,#nextLinkText').show().click(function(){$.fn.lightbox.changeImage(opts.activeImage+1);return false})}$.fn.lightbox.enableKeyboardNav()};$.fn.lightbox.enableKeyboardNav=function(){document.onkeydown=$.fn.lightbox.keyboardAction};$.fn.lightbox.disableKeyboardNav=function(){document.onkeydown=''};$.fn.lightbox.defaults={fileLoadingImage:'images/loading.gif',fileBottomNavCloseImage:'images/closelabel.gif',overlayOpacity:0.8,borderSize:10,imageArray:new Array,activeImage:null,inprogress:false,resizeSpeed:350,widthCurrent:250,heightCurrent:250,xScale:1,yScale:1,displayTitle:true,navbarOnTop:false,slideNavBar:false,navBarSlideSpeed:350,displayHelp:false,strings:{help:' \u2190 / P - previous image\u00a0\u00a0\u00a0\u00a0\u2192 / N - next image\u00a0\u00a0\u00a0\u00a0ESC / X - close image gallery',prevLinkTitle:'previous image',nextLinkTitle:'next image',prevLinkText:'« Previous',nextLinkText:'Next »',closeTitle:'close image gallery',image:'Image ',of:' of '},fitToScreen:false}})(jQuery);