/* * LightMyBox v1 * http://pooyarm.github.io/LightMyBox/ * * Created by Pooya Rostam * http://1pooya.com/ * https://github.com/pooyarm */ !function(a){"use strict";a.fn.lightmybox=function(b){var c=this,d=!1,e=!1,f=0,g=!1,h=50;this.images=[],this.imageWidth=0,this.imageHeight=0,this.li={prev:!1,current:!1,next:!1},this.uniqueClass="lightmybox_"+Math.floor(26*Math.random())+Date.now(),this.options=a.extend({mode:"slideshow",bg:"image",color:"auto",theme:"dark",blur:5,bgOpacity:.9,frame:!0,duration:400,height:"fit",nextPrevLinks:!0,keyboard:!0,callbacks:{beforeShow:function(){},afterShow:function(){},beforeNext:function(){},afterNext:function(){},beforePrevious:function(){},afterPrevious:function(){},beforeClose:function(){},afterClose:function(){}}},b),this.initElements=function(){if(a("#lightmybox").length>0&&(d=a("#lightmybox")),d&&0!=d.length||(d=a("
"),c=this.options.duration/1e3+"s",f=this.options.duration/1e3*1.2+"s",h="";h+="#lightmybox."+this.uniqueClass+" ul.lightmybox-images li{ transition-duration: "+c+"; } ",h+="#lightmybox."+this.uniqueClass+" ul.lightmybox-images .lightmybox-image{ transition: opacity ease "+f+"; } ",b.html(h),b.appendTo(a("head"))}a("#lightmybox-loading").length>0&&(e=a("#lightmybox-loading")),e&&0!=e.length||(e=a("
"),a("body").append(e));var i=d.find("ul.lightmybox-images").html("").addClass("lightmybox-mode-"+this.options.mode);this.li.prev=this.li.next=this.li.current=!1;for(var j="single"==this.options.mode?1:3,k=0;k
");i.append(l),"single"==this.options.mode?this.li.current=l.addClass("lightmybox-item-current"):(0==k&&(this.li.prev=l.addClass("lightmybox-item-prev")),1==k&&(this.li.current=l.addClass("lightmybox-item-current")),2==k&&(this.li.next=l.addClass("lightmybox-item-next")))}g=!1},this.bindEvents=function(){d.on("click",".lightmybox-bg",function(){c.isOpen()&&c.close()}),d.on("click",".lightmybox-close",function(){c.isOpen()&&c.close()}),e.on("click",function(){c.close()}),d.on("click",".lightmybox-next",function(){c.isOpen()&&c.goNext()}),d.on("click",".lightmybox-prev",function(){c.isOpen()&&c.goPrev()}),d.on("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend","ul.lightmybox-images li",function(b){a(this).trigger("cssAnimated")}),this.options.keyboard?a(document).on("keydown.lightmybox",function(a){c.isOpen()&&c.keyboardHandler(a)}):a(document).off("keydown.lightmybox");var b=!1;a(window).on("resize.lightmybox",function(){clearTimeout(b),b=setTimeout(function(){c.isOpen()&&(c.setHeight(),c.setHeight(c.prevLi(),c.prevImage()),c.setHeight(c.nextLi(),c.nextImage()))},10)})},this.init=function(b){var d=b.data("lightmybox-index")/1;f=d;var e=this.getImage(d);this.initElements(),e.loaded?this.start():a.when(this.loadImage(e,!0)).done(function(){0==e.error&&c.start()})},this.initNextPrevs=function(){var b=this.nextImage(),e=this.nextLi();b?(a.when(this.loadImage(b,!1,1)).done(function(){c.beautify(e,b),c.setSrc(e,b)}),d.find(".lightmybox-next").show()):(this.resetLi(e),d.find(".lightmybox-next").hide());var f=this.prevImage(),g=this.prevLi();f?(a.when(this.loadImage(f,!1,-1)).done(function(){c.beautify(g,f),c.setSrc(g,f)}),this.options.nextPrevLinks&&d.find(".lightmybox-prev").show()):(this.resetLi(g),d.find(".lightmybox-prev").hide())},this.nextPrevLinks=function(){"slideshow"==this.options.mode&&this.options.nextPrevLinks?(d.find(".lightmybox-next").show(),d.find(".lightmybox-prev").show()):(d.find(".lightmybox-next").hide(),d.find(".lightmybox-prev").hide())},this.loadImage=function(b,d,f){return!!b&&(f||(f=0),!!b.loaded||(b.loading&&b.promise?b.promise:(d&&e.show(),b.loading=!0,b.promise=new a.Deferred(function(g){a("").load(function(){b.width=a(this)[0].width,b.height=a(this)[0].height,b.loading=!1,b.loaded=!0,g.resolve(),d&&e.hide(),0!=f&&c.loadImage(c.getImage(b.index+f),!1,f)}).error(function(){b.error=!0,g.resolve(),d&&e.hide(),0!=f&&c.loadImage(c.getImage(b.index+f),!1,f)}).attr("src",b.src)}).promise(),b.promise)))},this.animateWrapperIn=function(){return a("body").addClass("lightmybox-open"),d.fadeIn(this.options.duration)},this.resetLis=function(){this.li.prev=d.find(".lightmybox-item-prev"),this.li.current=d.find(".lightmybox-item-current"),this.li.next=d.find(".lightmybox-item-next")},this.resetLi=function(a){a.find(".lightmybox-bg").html("").removeAttr("style").attr("class","lightmybox-bg"),a.find(".lightmybox-image").removeAttr("style").attr("class","lightmybox-image")},this.beautify=function(a,b){a=a||this.activeLi(),b=b||this.getImage(),this.resetLi(a);var d=(a.find(".lightmybox-bg"),a.find(".lightmybox-image"));this.options.frame?d.addClass("lightmybox-has-frame"):d.removeClass("lightmybox-has-frame"),a.scrollTop(0),this.setBackground(a,b),this.setHeight(a,b)},this.setHeight=function(b,c){b=b||this.activeLi(),c=c||this.getImage();var f=(b.find(".lightmybox-bg"),b.find(".lightmybox-image"));if(f.removeAttr("style").children("img").removeAttr("style"),"fit"==this.options.height){var g=h;g+=f.css("padding-top").replace("px","")/1,g+=f.css("padding-bottom").replace("px","")/1;var i=a(window).height()-g,j=this.getMaxWidth(f),k=c.width/c.height,l=i>c.height?c.height:i,m=j>c.width?c.width:j,n=m/k;if(n>l){var o=l*k;m=o}else l=n;var p=(a(window).height()-l)/2;f.css("margin-top",p+"px"),b.find(".lightmybox-image img").css({"max-height":i,width:m+"px",height:l+"px"})}else if("fullscreen"==this.options.height){d.addClass("lightmybox-fullscreen");var k=c.width/c.height,m=a(window).width(),l=m/k,q=a(window).height()-l;q>0&&f.css("margin-top",q/2+"px")}},this.getMaxWidth=function(b){var c=b.css("max-width");return"%"==c.substr(-1)?a(window).width()*(parseFloat(c.replace("%",""))/100):"px"==c.substr(-2)?c.replace("px","")/1:b.width()},this.setBackground=function(b,c){b=b||this.activeLi(),c=c||this.getImage();var d=b.find(".lightmybox-bg");b.find(".lightmybox-image");if("color"==this.options.bg||c.element.data("color")){var f=c.element.data("color");if(!f&&this.options.color&&(f=this.options.color),"auto"==f){var g=this.getPalette(a("")[0],5);f={r:g[0][0],g:g[0][1],b:g[0][2]}}else f=this.hexToRgb(f);d.css({backgroundColor:"rgba("+f.r+","+f.g+","+f.b+","+this.options.bgOpacity+")"}),d.addClass("lightmybox-bg-color")}else if(this.options.bg&&this.options.bg.length>0&&d.addClass("lightmybox-bg-"+this.options.bg),"pixelate"==this.options.bg){var h=l.apply(a("")[0]),i=h.toDataURL(1);d.css({backgroundImage:"url("+i+")"}).fadeTo(0,this.options.bgOpacity)}else"image"==this.options.bg&&(d.css({backgroundImage:"url("+c.src+")"}).fadeTo(0,this.options.bgOpacity),this.options.blur>-1&&this.blur(d,this.options.blur))},this.start=function(){var b=this;this.callback("beforeShow"),this.beautify(),b.setSrc(),a.when(this.animateWrapperIn()).done(function(){b.callback("afterShow")}),this.nextPrevLinks(),"slideshow"==this.options.mode&&this.initNextPrevs()},this.setSrc=function(a,b){a=a||this.activeLi(),b=b||this.getImage(),a.find(".lightmybox-image img").attr("src",b.src)},this.goNext=function(){var b=this.nextImage();return!(!b||"slideshow"!=this.options.mode||g)&&(g=!0,void(b.loaded?this.doGoNext():!b.loaded&&b.loading&&b.promise?(e.show(),a.when(b.promise).done(function(){e.hide(),c.doGoNext()})):a.when(this.loadImage(b,!1)).done(function(){c.beautify(c.nextLi(),b),c.setSrc(c.nextLi(),b),c.doGoNext()})))},this.doGoNext=function(){var b=this.nextImage();if(!b)return!1;this.callback("beforeNext");var d=new a.Deferred;this.activeLi().attr("class","lightmybox-item-prev").one("cssAnimated",function(){d.resolve()});var e=new a.Deferred;this.nextLi().attr("class","lightmybox-item-current").one("cssAnimated",function(){e.resolve()}),a.when(d.promise(),e.promise()).done(function(){c.prevLi().attr("class","no-transition lightmybox-item-next"),setTimeout(function(){c.prevLi().removeClass("no-transition"),c.resetLis(),f=b.index,c.initNextPrevs(),g=!1,c.callback("afterNext")},1)})},this.goPrev=function(){var b=this.prevImage();return!(!b||"slideshow"!=this.options.mode||g)&&(g=!0,void(b.loaded?this.doGoPrev():!b.loaded&&b.loading&&b.promise?(e.show(),a.when(b.promise).done(function(){e.hide(),c.doGoPrev()})):a.when(this.loadImage(b,!1)).done(function(){c.beautify(c.prevLi(),b),c.setSrc(c.prevLi(),b),c.doGoPrev()})))},this.doGoPrev=function(){var b=this.prevImage();if(!b)return!1;this.callback("beforePrevious");var d=new a.Deferred;this.activeLi().attr("class","lightmybox-item-next").one("cssAnimated",function(){d.resolve()});var e=new a.Deferred;this.prevLi().attr("class","lightmybox-item-current").one("cssAnimated",function(){e.resolve()}),a.when(d.promise(),e.promise()).done(function(){c.nextLi().attr("class","no-transition lightmybox-item-prev"),setTimeout(function(){c.nextLi().removeClass("no-transition"),c.resetLis(),f=b.index,c.initNextPrevs(),g=!1,c.callback("afterPrevious")},1)})},this.close=function(){this.callback("beforeClose"),d.fadeOut(this.options.duration,function(){c.callback("afterClose")}),e.fadeOut(this.options.duration),a("body").removeClass("lightmybox-open")},this.activeLi=function(){return this.li.current},this.prevLi=function(){return this.li.prev},this.nextLi=function(){return this.li.next},this.addImage=function(a){var b=this.images.length,c={width:!1,height:!1,src:a.attr("href"),loading:!1,loaded:!1,promise:!1,error:!1,index:b,element:a};return this.images.push(c),b},this.getImage=function(a){return"undefined"==typeof a&&(a=f),this.images[a]||!1},this.nextImage=function(a){var b=!1;return b=a?this.getImage(a.index+1):this.getImage(f+1),b&&b.error?this.nextImage(b):b},this.prevImage=function(a){var b=!1;return b=a?this.getImage(a.index-1):this.getImage(f-1),b&&b.error?this.prevImage(b):b},this.callback=function(a){"function"==typeof this.options.callbacks[a]&&this.options.callbacks[a].call()},this.isOpen=function(){return d.is(":visible")&&d.hasClass(this.uniqueClass)},this.keyboardHandler=function(a){var b=window.event?window.event:a;switch(b.keyCode){case 39:case 32:this.goNext();break;case 37:this.goPrev();break;case 27:this.close()}},this.blur=function(a,b){a.css({filter:"blur("+b+"px)","-webkit-filter":"blur("+b+"px)"})},this.hexToRgb=function(a){var b=/^#?([a-f\d])([a-f\d])([a-f\d])$/i;a=a.replace(b,function(a,b,c,d){return b+b+c+c+d+d});var c=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);return c?{r:parseInt(c[1],16),g:parseInt(c[2],16),b:parseInt(c[3],16)}:null},this.getPalette=function(a,b,c){"undefined"==typeof b&&(b=10),("undefined"==typeof c||c<1)&&(c=10);for(var l,m,n,o,p,d=new i(a),e=d.context.getImageData(0,0,d.width,d.height),f=e.data,g=d.width*d.height,h=[],k=0;k=125&&(m>250&&n>250&&o>250||h.push([m,n,o]));var q=j.quantize(h,b),r=q?q.palette():null;return d.canvas.parentNode.removeChild(d.canvas),r};var i=function(a){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),document.body.appendChild(this.canvas),this.width=this.canvas.width=a.width,this.height=this.canvas.height=a.height,this.context.drawImage(a,0,0,this.width,this.height)},j=function(){function e(b,c,d){return(b<<2*a)+(c<>b,i=a[1]>>b,j=a[2]>>b,g=e(h,i,j),f[g]=(f[g]||0)+1}),f}function j(a,c){var k,l,m,d=1e6,e=0,f=1e6,h=0,i=1e6,j=0;return a.forEach(function(a){k=a[0]>>b,l=a[1]>>b,m=a[2]>>b,ke&&(e=k),lh&&(h=l),mj&&(j=m)}),new g(d,e,f,h,i,j,c)}function l(a,b){function q(a){var e,f,g,k,m,c=a+"1",d=a+"2",n=0;for(l=b[c];l<=b[d];l++)if(i[l]>h/2){for(g=b.copy(),k=b.copy(),e=l-b[c],f=b[d]-l,m=e<=f?Math.min(b[d]-1,~~(l+f/2)):Math.max(b[c],~~(l-1-e/2));!i[m];)m++;for(n=j[m];!n&&i[m-1];)n=j[--m];return g[d]=m,k[c]=g[d]+1,[g,k]}}if(b.count()){var c=b.r2-b.r1+1,d=b.g2-b.g1+1,f=b.b2-b.b1+1,g=k.max([c,d,f]);if(1==b.count())return[b.copy()];var l,m,n,o,p,h=0,i=[],j=[];if(g==c)for(l=b.r1;l<=b.r2;l++){for(o=0,m=b.g1;m<=b.g2;m++)for(n=b.b1;n<=b.b2;n++)p=e(l,m,n),o+=a[p]||0;h+=o,i[l]=h}else if(g==d)for(l=b.g1;l<=b.g2;l++){for(o=0,m=b.r1;m<=b.r2;m++)for(n=b.b1;n<=b.b2;n++)p=e(m,l,n),o+=a[p]||0;h+=o,i[l]=h}else for(l=b.b1;l<=b.b2;l++){for(o=0,m=b.r1;m<=b.r2;m++)for(n=b.g1;n<=b.g2;n++)p=e(m,n,l),o+=a[p]||0;h+=o,i[l]=h}return i.forEach(function(a,b){j[b]=h-a}),q(g==c?"r":g==d?"g":"b")}}function m(b,e){function q(a,b){for(var f,d=1,e=0;e=b)return;if(e++>c)return}else a.push(f),e++}if(!b.length||e<2||e>256)return!1;var g=i(b),n=0;g.forEach(function(){n++});var o=j(b,g),p=new f(function(a,b){return k.naturalOrder(a.count(),b.count())});p.push(o),q(p,d*e);for(var r=new f(function(a,b){return k.naturalOrder(a.count()*a.volume(),b.count()*b.volume())});p.size();)r.push(p.pop());q(r,e-r.size());for(var s=new h;r.size();)s.push(r.pop());return s}var a=5,b=8-a,c=1e3,d=.75;return g.prototype={volume:function(a){var b=this;return b._volume&&!a||(b._volume=(b.r2-b.r1+1)*(b.g2-b.g1+1)*(b.b2-b.b1+1)),b._volume},count:function(a){var d,b=this,c=b.histo;if(!b._count_set||a){var g,h,i,f=0;for(g=b.r1;g<=b.r2;g++)for(h=b.g1;h<=b.g2;h++)for(i=b.b1;i<=b.b2;i++)d=e(g,h,i),f+=c[d]||0;b._count=f,b._count_set=!0}return b._count},copy:function(){var a=this;return new g(a.r1,a.r2,a.g1,a.g2,a.b1,a.b2,a.histo)},avg:function(b){var c=this,d=c.histo;if(!c._avg||b){var k,l,m,n,o,f=0,g=1<<8-a,h=0,i=0,j=0;for(l=c.r1;l<=c.r2;l++)for(m=c.g1;m<=c.g2;m++)for(n=c.b1;n<=c.b2;n++)o=e(l,m,n),k=d[o]||0,f+=k,h+=k*(l+.5)*g,i+=k*(m+.5)*g,j+=k*(n+.5)*g;f?c._avg=[~~(h/f),~~(i/f),~~(j/f)]:c._avg=[~~(g*(c.r1+c.r2+1)/2),~~(g*(c.g1+c.g2+1)/2),~~(g*(c.b1+c.b2+1)/2)]}return c._avg},contains:function(a){var c=this,d=a[0]>>b;return gval=a[1]>>b,bval=a[2]>>b,d>=c.r1&&d<=c.r2&&gval>=c.g1&&gval<=c.g2&&bval>=c.b1&&bval<=c.b2}},h.prototype={push:function(a){this.vboxes.push({vbox:a,color:a.avg()})},palette:function(){return this.vboxes.map(function(a){return a.color})},size:function(){return this.vboxes.size()},map:function(a){for(var b=this.vboxes,c=0;c251&&d[1]>251&&d[2]>251&&(a[c].color=[255,255,255])}},{quantize:m}}(),k={map:function(a,b){var c={};return b?a.map(function(a,d){return c.index=d,b.call(c,a)}):a.slice()},naturalOrder:function(a,b){return ab?1:0},sum:function(a,b){var c={};return a.reduce(b?function(a,d,e){return c.index=e,a+b.call(c,d)}:function(a,b){return a+b},0)},max:function(a,b){return Math.max.apply(null,b?k.map(a,b):a)}},l=function(){var a={value:.05},c=this,f=(c.parentNode,c.style.display,c.width),g=c.height,i=document.createElement("canvas");i.width=.8*f,i.height=.8*g;var j=i.getContext("2d");j.mozImageSmoothingEnabled=!1,j.webkitImageSmoothingEnabled=!1,j.imageSmoothingEnabled=!1;var k=f*a.value,l=g*a.value;return j.drawImage(c,0,0,k,l),j.drawImage(i,0,0,k,l,0,0,i.width,i.height),i};return this.initElements(),this.bindEvents(),this.each(function(b){if(a(this).data("lightmybox-index")>-1)return!0;var d=c.addImage(a(this));a(this).data("lightmybox-index",d),a(this).on("click",function(b){b.preventDefault(),c.init(a(this))})})}}(jQuery);