Difference between revisions of "Template:Peking/js/nivo-lightbox.min.js"

(Created page with "/* * Nivo Lightbox v1.1 * http://dev7studios.com/nivo-lightbox * * Copyright 2013, Dev7studios * Free to use and abuse under the MIT license. * http://www.opensource.org/li...")
 
(Blanked the page)
 
Line 1: Line 1:
/*
 
* Nivo Lightbox v1.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,
 
        clickOverlayToClose: true,
 
        onInit: function(){},
 
        beforeShowLightbox: function(){},
 
        afterShowLightbox: function(lightbox){},
 
        beforeHideLightbox: function(){},
 
        afterHideLightbox: function(){},
 
        onPrev: 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){
 
            e.preventDefault();
 
            $this.showLightbox();
 
            });
 
 
            // 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(){
 
        var $this = this;
 
        this.options.beforeShowLightbox.call(this);
 
 
            var lightbox = this.constructLightbox();
 
            if(!lightbox) return;
 
            var content = lightbox.find('.nivo-lightbox-content');
 
            if(!content) return;
 
            var currentLink = this.$el;
 
            $('body').addClass('nivo-lightbox-body-effect-'+ this.options.effect);
 
 
        // Add content
 
        this.processContent(content, currentLink);
 
 
        // Nav
 
        if(this.$el.attr('data-lightbox-gallery')){
 
        var $this = this,
 
        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();
 
        $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();
 
        $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
 
        },
 
 
        processContent: function(content, link){
 
        var $this = this;
 
        var href = link.attr('href');
 
        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 = $('<img>', { src: href });
 
img.one('load', function() {
 
var wrap = $('<div class="nivo-lightbox-image" />');
 
        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 = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
 
        content.html(wrap).removeClass('nivo-lightbox-loading');
 
});
 
        }
 
        // Video (Youtube/Vimeo)
 
        else if(video = href.match(/(youtube|youtu|vimeo)\.(com|be)\/(watch\?v=([\w-]+)|([\w-]+))/)){
 
        var src = '',
 
        classTerm = 'nivo-lightbox-video';
 
 
        if(video[1] == 'youtube'){
 
        src = 'http://www.youtube.com/v/'+ video[4];
 
        classTerm = 'nivo-lightbox-youtube';
 
        }
 
        if(video[1] == 'youtu'){
 
        src = 'http://www.youtube.com/v/'+ video[3];
 
        classTerm = 'nivo-lightbox-youtube';
 
        }
 
        if(video[1] == 'vimeo'){
 
        src = 'http://player.vimeo.com/video/'+ video[3];
 
        classTerm = 'nivo-lightbox-vimeo';
 
        }
 
 
        if(src){
 
        var iframe = $('<iframe>', {
 
        src: src,
 
        'class': classTerm,
 
        frameborder: 0,
 
        vspace: 0,
 
        hspace: 0,
 
        scrolling: 'auto'
 
        });
 
        content.html(iframe);
 
        iframe.load(function(){ content.removeClass('nivo-lightbox-loading'); });
 
        }
 
        }
 
        // AJAX
 
        else if(link.attr('data-lightbox-type') == 'ajax'){
 
        var $this = this;
 
$.ajax({
 
url: href,
 
cache: false,
 
success: function(data) {
 
var wrap = $('<div class="nivo-lightbox-ajax" />');
 
wrap.append(data);
 
content.html(wrap).removeClass('nivo-lightbox-loading');
 
 
// Vertically center html
 
if(wrap.outerHeight() < content.height()){
 
wrap.css({
 
'position': 'relative',
 
'top': '50%',
 
'margin-top': -(wrap.outerHeight()/2) +'px'
 
});
 
}
 
$(window).resize(function() {
 
if(wrap.outerHeight() < content.height()){
 
wrap.css({
 
'position': 'relative',
 
'top': '50%',
 
'margin-top': -(wrap.outerHeight()/2) +'px'
 
});
 
}
 
});
 
},
 
error: function(){
 
var wrap = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
 
        content.html(wrap).removeClass('nivo-lightbox-loading');
 
}
 
});
 
        }
 
        // Inline HTML
 
        else if(href.substring(0, 1) == '#'){
 
        if($(href).length){
 
        var wrap = $('<div class="nivo-lightbox-inline" />');
 
wrap.append($(href).clone().show());
 
        content.html(wrap).removeClass('nivo-lightbox-loading');
 
 
        // Vertically center html
 
if(wrap.outerHeight() < content.height()){
 
wrap.css({
 
'position': 'relative',
 
'top': '50%',
 
'margin-top': -(wrap.outerHeight()/2) +'px'
 
});
 
}
 
$(window).resize(function() {
 
if(wrap.outerHeight() < content.height()){
 
wrap.css({
 
'position': 'relative',
 
'top': '50%',
 
'margin-top': -(wrap.outerHeight()/2) +'px'
 
});
 
}
 
});
 
} else {
 
var wrap = $('<div class="nivo-lightbox-error"><p>'+ $this.options.errorMessage +'</p></div>');
 
    content.html(wrap).removeClass('nivo-lightbox-loading');
 
}
 
        }
 
        // iFrame (default)
 
        else {
 
        var iframe = $('<iframe>', {
 
        src: href,
 
        'class': 'nivo-lightbox-item',
 
        frameborder: 0,
 
        vspace: 0,
 
        hspace: 0,
 
        scrolling: 'auto'
 
        });
 
        content.html(iframe);
 
        iframe.load(function(){ content.removeClass('nivo-lightbox-loading'); });
 
        }
 
 
        // Set the title
 
        if(link.attr('title')){
 
        var titleWrap = $('<span>', { 'class': 'nivo-lightbox-title' });
 
        titleWrap.text(link.attr('title'));
 
        $('.nivo-lightbox-title-wrap').html(titleWrap);
 
        } else {
 
        $('.nivo-lightbox-title-wrap').html('');
 
        }
 
        },
 
 
        constructLightbox: function(){
 
        if($('.nivo-lightbox-overlay').length) return $('.nivo-lightbox-overlay');
 
 
        var overlay = $('<div>', { 'class': 'nivo-lightbox-overlay nivo-lightbox-theme-'+ this.options.theme +' nivo-lightbox-effect-'+ this.options.effect });
 
        var wrap = $('<div>', { 'class': 'nivo-lightbox-wrap' });
 
        var content = $('<div>', { 'class': 'nivo-lightbox-content' });
 
        var nav = $('<a href="#" class="nivo-lightbox-nav nivo-lightbox-prev">Previous</a><a href="#" class="nivo-lightbox-nav nivo-lightbox-next">Next</a>');
 
        var close = $('<a href="#" class="nivo-lightbox-close" title="Close">Close</a>');
 
        var title = $('<div>', { 'class': 'nivo-lightbox-title-wrap' });
 
 
        var isMSIE = /*@cc_on!@*/0;
 
        if(isMSIE) overlay.addClass('nivo-lightbox-ie');
 
 
        wrap.append(content);
 
        wrap.append(title);
 
        overlay.append(wrap);
 
        overlay.append(nav);
 
        overlay.append(close);
 
        $('body').append(overlay);
 
 
        var $this = this;
 
        if($this.options.clickOverlayToClose){
 
        overlay.on('click', function(e){
 
            if(e.target === this ||
 
              $(e.target).hasClass('nivo-lightbox-content') ||
 
              $(e.target).hasClass('nivo-lightbox-image')) $this.destructLightbox();
 
        });
 
    }
 
 
        close.on('click', function(e){
 
            e.preventDefault();
 
            $this.destructLightbox();
 
        });
 
 
        return overlay;
 
        },
 
 
        destructLightbox: function(){
 
        var $this = this;
 
        this.options.beforeHideLightbox.call(this);
 
 
        $('.nivo-lightbox-overlay').removeClass('nivo-lightbox-open');
 
        $('.nivo-lightbox-nav').hide();
 
        $('body').removeClass('nivo-lightbox-body-effect-'+ $this.options.effect);
 
 
        // For IE
 
        var isMSIE = /*@cc_on!@*/0;
 
        if(isMSIE){
 
        $('.nivo-lightbox-overlay iframe').attr("src", " ");
 
$('.nivo-lightbox-overlay iframe').remove();
 
}
 
 
        // Remove click handlers
 
        $('.nivo-lightbox-prev').off('click');
 
        $('.nivo-lightbox-next').off('click');
 
 
        // Empty content (for videos)
 
        $('.nivo-lightbox-content').empty();
 
 
        this.options.afterHideLightbox.call(this);
 
        },
 
 
        isHidpi: function(){
 
var mediaQuery = "(-webkit-min-device-pixel-ratio: 1.5),\
 
  (min--moz-device-pixel-ratio: 1.5),\
 
  (-o-min-device-pixel-ratio: 3/2),\
 
  (min-resolution: 1.5dppx)";
 
if(window.devicePixelRatio > 1) return true;
 
if(window.matchMedia && window.matchMedia(mediaQuery).matches) return true;
 
return false;
 
}
 
 
    };
 
 
    $.fn[pluginName] = function(options){
 
        return this.each(function(){
 
            if(!$.data(this, pluginName)){
 
                $.data(this, pluginName, new NivoLightbox(this, options));
 
            }
 
        });
 
    };
 
 
})(jQuery, window, document);
 

Latest revision as of 23:50, 16 September 2015