/* * Nivo Lightbox v1.3.1 * http://dev7studios.com/nivo-lightbox * * Copyright 2013, Dev7studios * Free to use and abuse under the MIT license. * http://www.opensource.org/licenses/mit-license.php */ ;(function($, window, document, undefined){ var pluginName = 'nivoLightbox', defaults = { effect: 'fade', theme: 'default', keyboardNav: true, clickImgToClose: false, clickOverlayToClose: true, onInit: function(){}, beforeShowLightbox: function(){}, afterShowLightbox: function(lightbox){}, beforeHideLightbox: function(){}, afterHideLightbox: function(){}, beforePrev: function(element){}, onPrev: function(element){}, beforeNext: function(element){}, onNext: function(element){}, errorMessage: 'The requested content cannot be loaded. Please try again later.' }; function NivoLightbox(element, options){ this.el = element; this.$el = $(this.el); this.options = $.extend({}, defaults, options); this._defaults = defaults; this._name = pluginName; this.init(); } NivoLightbox.prototype = { init: function(){ var $this = this; // Need this so we don't use CSS transitions in mobile if(!$('html').hasClass('nivo-lightbox-notouch')) $('html').addClass('nivo-lightbox-notouch'); if('ontouchstart' in document) $('html').removeClass('nivo-lightbox-notouch'); // Setup the click this.$el.on('click', function(e){ $this.showLightbox(e); }); // keyboardNav if(this.options.keyboardNav){ $('body').off('keyup').on('keyup', function(e){ var code = (e.keyCode ? e.keyCode : e.which); // Escape if(code == 27) $this.destructLightbox(); // Left if(code == 37) $('.nivo-lightbox-prev').trigger('click'); // Right if(code == 39) $('.nivo-lightbox-next').trigger('click'); }); } this.options.onInit.call(this); }, showLightbox: function(e){ var $this = this, currentLink = this.$el; // Check content var check = this.checkContent(currentLink); if(!check) return; e.preventDefault(); this.options.beforeShowLightbox.call(this); var lightbox = this.constructLightbox(); if(!lightbox) return; var content = lightbox.find('.nivo-lightbox-content'); if(!content) return; $('body').addClass('nivo-lightbox-body-effect-'+ this.options.effect); this.processContent( content, currentLink ); // Nav if(this.$el.attr('data-lightbox-gallery')){ var galleryItems = $('[data-lightbox-gallery="'+ this.$el.attr('data-lightbox-gallery') +'"]'); $('.nivo-lightbox-nav').show(); // Prev $('.nivo-lightbox-prev').off('click').on('click', function(e){ e.preventDefault(); var index = galleryItems.index(currentLink); currentLink = galleryItems.eq(index - 1); if(!$(currentLink).length) currentLink = galleryItems.last(); $.when($this.options.beforePrev.call(this, [ currentLink ])).done(function(){ $this.processContent(content, currentLink); $this.options.onPrev.call(this, [ currentLink ]); }); }); // Next $('.nivo-lightbox-next').off('click').on('click', function(e){ e.preventDefault(); var index = galleryItems.index(currentLink); currentLink = galleryItems.eq(index + 1); if(!$(currentLink).length) currentLink = galleryItems.first(); $.when($this.options.beforeNext.call(this, [ currentLink ])).done(function(){ $this.processContent(content, currentLink); $this.options.onNext.call(this, [ currentLink ]); }); }); } setTimeout(function(){ lightbox.addClass('nivo-lightbox-open'); $this.options.afterShowLightbox.call(this, [ lightbox ]); }, 1); // For CSS transitions }, checkContent: function( link ) { var $this = this, href = link.attr('href'), video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/); if(href.match(/\.(jpeg|jpg|gif|png)$/i) !== null){ return true; } // Video (Youtube/Vimeo) else if(video){ return true; } // AJAX else if(link.attr('data-lightbox-type') == 'ajax'){ return true; } // Inline HTML else if(href.substring(0, 1) == '#' && link.attr('data-lightbox-type') == 'inline'){ return true; } // iFrame (default) else if(link.attr('data-lightbox-type') == 'iframe'){ return true; } return false; }, processContent: function(content, link){ var $this = this, href = link.attr('href'), video = href.match(/(youtube|youtube-nocookie|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/); content.html('').addClass('nivo-lightbox-loading'); // Is HiDPI? if(this.isHidpi() && link.attr('data-lightbox-hidpi')){ href = link.attr('data-lightbox-hidpi'); } // Image if(href.match(/\.(jpeg|jpg|gif|png)$/i) !== null){ var img = $('', { src: href, 'class': 'nivo-lightbox-image-display' }); img.one('load', function() { var wrap = $('
'); wrap.append(img); content.html(wrap).removeClass('nivo-lightbox-loading'); // Vertically center images wrap.css({ 'line-height': $('.nivo-lightbox-content').height() +'px', 'height': $('.nivo-lightbox-content').height() +'px' // For Firefox }); $(window).resize(function() { wrap.css({ 'line-height': $('.nivo-lightbox-content').height() +'px', 'height': $('.nivo-lightbox-content').height() +'px' // For Firefox }); }); }).each(function() { if(this.complete) $(this).load(); }); img.error(function() { var wrap = $('

'+ $this.options.errorMessage +'

'); content.html(wrap).removeClass('nivo-lightbox-loading'); }); } // Video (Youtube/Vimeo) else if(video){ var src = '', classTerm = 'nivo-lightbox-video'; if(video[1] == 'youtube'){ src = '//www.youtube.com/embed/'+ video[4]; classTerm = 'nivo-lightbox-youtube'; } if(video[1] == 'youtube-nocookie'){ src = href; //https://www.youtube-nocookie.com/embed/... classTerm = 'nivo-lightbox-youtube'; } if(video[1] == 'youtu'){ src = '//www.youtube.com/embed/'+ video[3]; classTerm = 'nivo-lightbox-youtube'; } if(video[1] == 'vimeo'){ src = '//player.vimeo.com/video/'+ video[3]; classTerm = 'nivo-lightbox-vimeo'; } if(src){ var iframeVideo = $('