(function ($) { 'use strict'; function Lightbox(element, options) { this.el = element; this.$element = $(element); this.$body = $('body'); this.objects = {}; this.lightboxModul = {}; this.$item = ''; this.$cont = ''; this.$items = this.$element.children().find('a:not(.title_url)'); this.settings = $.extend({}, this.constructor.defaults, options); this.init(); return this; } Lightbox.defaults = { slideAnimationType: 'effect_1', arrows: 'arrows_1', speed: 600, width: '50%', height: '70%', videoMaxWidth: '790', overlayDuration: 100, preload: 10, openCloseType: { 0: 'open_1', 1: 'close_1' } }; Lightbox.prototype.init = function () { var $object = this, $openCloseType; switch(this.settings.openCloseType){ case 'none': $openCloseType = { 0: 'open_0', 1: 'close_0' }; break; case 'unfold': $openCloseType = { 0: 'open_1', 1: 'close_1' }; break; case 'unfold_r': $openCloseType = { 0: 'open_1_r', 1: 'close_1_r' }; break; case 'blowup': $openCloseType = { 0: 'open_2', 1: 'close_2' }; break; case 'blowup_r': $openCloseType = { 0: 'open_2_r', 1: 'close_2_r' }; break; case 'roadrunner': $openCloseType = { 0: 'open_3', 1: 'close_3' }; break; case 'roadrunner_r': $openCloseType = { 0: 'open_3_r', 1: 'close_3_r' }; break; case 'runner': $openCloseType = { 0: 'open_4', 1: 'close_4' }; break; case 'runner_r': $openCloseType = { 0: 'open_4_r', 1: 'close_4_r' }; break; case 'rotate': $openCloseType = { 0: 'open_5', 1: 'close_5' }; break; case 'rotate_r': $openCloseType = { 0: 'open_5_r', 1: 'close_5_r' }; break; } this.settings.openCloseType = $openCloseType; (($object.settings.preload > $object.$items.length) && ($object.settings.preload = $object.$items.length)); $object.$items.on('click.rwdcustom', function (event) { if(!$('.rwd-SlideWrapper').hasClass('lightboxOff')){ if(!$('.rwd-SlideWrapper').hasClass('rwd-fullscreen-on')){ var $disabled = jQuery('.lSAction a').hasClass('disabled'); if($disabled){ return false; } event = event || window.event; event.preventDefault ? event.preventDefault() : (event.returnValue = false); $object.index = $object.$items.index(this); if (!$object.$body.hasClass('rwd-on')) { $object.build($object.index); $object.$body.addClass('rwd-on'); } } else { event.preventDefault(); } } }); $object.$body.on('click', function () { $object.$_y_ = window.pageYOffset; }); }; Lightbox.prototype.build = function (index) { var $object = this; $object.structure(index); $object.lightboxModul['modul'] = new $.fn.lightbox.lightboxModul['modul']($object.el); $object.slide(index, false, false); $object.addKeyEvents(); if ($object.$items.length > 1) { $object.arrow(); } $object.closeGallery(); $object.$cont.on('click.rwd-container', function () { $object.$cont.removeClass('rwd-hide-items'); }); $object.calculateDimensions(index); }; Lightbox.prototype.structure = function (index) { var $object = this, list = '', controls = '', i, subHtmlCont = '', close = '', template; this.$body.append( this.objects.overlay = $('
') ); this.objects.overlay.css('transition-duration', this.settings.overlayDuration + 'ms'); for (i = 0; i < this.$items.length; i++) { list += '
'; } close = ''; if (this.$items.length > 1) { controls = '
' + '
' + '
' + '
'; } template = '
' + '
' + '
' + list + '
' + '
' + close + '
' + controls + '
' + '
'; switch($object.settings.openCloseType[0]){ case 'open_1': case 'open_2': case 'open_3': case 'open_4': case 'open_5': case 'open_1_r': case 'open_2_r': case 'open_3_r': case 'open_4_r': case 'open_5_r': setTimeout(function(){ $object.$cont.addClass('rwd-visible'); $('.rwd-container').addClass($object.settings.openCloseType[0]); }, 500); break; default: $('.rwd-container').addClass($object.settings.openCloseType[0]); setTimeout(function () { $object.$cont.addClass('rwd-visible'); }, this.settings.overlayDuration); break; } this.$body.append(template); this.$cont = $('.rwd-cont'); this.$item = this.$cont.find('.rwd-item'); this.$cont.addClass('rwd-use'); $object.calculateDimensions(index); this.$item.eq(this.index).addClass('rwd-current'); if (this.effectsSupport()) { this.$cont.addClass('rwd-support'); } else { this.$cont.addClass('rwd-noSupport'); this.settings.speed = 0; } this.$cont.addClass('slider_' + this.settings.slideAnimationType); this.$cont.addClass('rwd-show-after-load'); if (this.effectsSupport()) { var $inner = this.$cont.find('.cont-inner'); $inner.css('transition-timing-function', 'ease'); $inner.css('transition-duration', this.settings.speed + 'ms'); } $object.objects.overlay.addClass('in'); this.prevScrollTop = $(window).scrollTop(); $object.objects.content = $('.rwd-container'); if(jQuery(window).width() < 768){ $object.objects.content.css({ 'width': '90%', 'height': '90%' }); } else { $object.objects.content.css({ 'width': $object.settings.width, 'height': $object.settings.height }); } jQuery(window).on('resize', function(){ if(jQuery(window).width() < 768){ $object.objects.content.css({ 'width': '90%', 'height': '90%' }); } else { $object.objects.content.css({ 'width': $object.settings.width, 'height': $object.settings.height }); } }); }; Lightbox.prototype.calculateDimensions = function (index) { var $object = this, $width, $container; $width = $('.rwd-current').height() * 16 / 9; if ($width > $object.settings.videoMaxWidth) { $width = $object.settings.videoMaxWidth; } $('.rwd-video-cont ').css({ 'max-width': $width + 'px' }); $container = $('.rwd-container'); var $left, $top, $prev, $next; switch(this.settings.arrows){ case 'arrows_1': case 'arrows_2': case 'arrows_3': $left = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 9; $top = ($container.height() - $object.$item.eq(index).find('.rwd-object').height()) / 2 - 16; $prev = ($container.width() - $object.$item.eq(index).find('.rwd-object').width()) / 2; $next = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 46; break; case 'arrows_4': $left = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 20; $top = ($container.height() - $object.$item.eq(index).find('.rwd-object').height()) / 2 - 10.5; $prev = ($container.width() - $object.$item.eq(index).find('.rwd-object').width()) / 2 - 30; $next = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 16; break; case 'arrows_5': $left = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 5; $top = ($container.height() - $object.$item.eq(index).find('.rwd-object').height()) / 2 - 23.5; $prev = ($container.width() - $object.$item.eq(index).find('.rwd-object').width()) / 2 - 28; $next = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 20; break; case 'arrows_6': $left = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 24; $top = ($container.height() - $object.$item.eq(index).find('.rwd-object').height()) / 2 - 11.5; $prev = ($container.width() - $object.$item.eq(index).find('.rwd-object').width()) / 2 - 30; $next = ($container.width() + $object.$item.eq(index).find('.rwd-object').width()) / 2 - 17; break; } $('.rwd-toolbar').css({ 'top': $top }); $('.rwd-close').css({ 'position': 'absolute', 'left': $left }); $('.rwd-prev').css({ 'top': '50%', 'transform': 'translateY(-15px)', 'left': $prev }); $('.rwd-next').css({ 'top': '50%', 'transform': 'translateY(-15px)', 'left': $next }); $object.$element.on('onBeforeSlide.rwd-container', function (event, prevIndex, index) { $('.rwd-close, .rwd-prev, .rwd-next').css({ 'visibility': 'hidden', 'opacity': '0', 'transition': 'visibility 0s, opacity 0.5s linear' }); }); $object.$element.on('onAfterSlide.rwd-container', function (event, prevIndex) { setTimeout(function(){ $('.rwd-close, .rwd-prev, .rwd-next').css({ 'visibility': 'visible', 'opacity': '1' }); }, 700); }); }; Lightbox.prototype.effectsSupport = function () { var transition, root, support; support = function () { transition = ['transition', 'MozTransition', 'WebkitTransition', 'OTransition', 'msTransition', 'KhtmlTransition']; root = document.documentElement; for (var i = 0; i < transition.length; i++) { if (transition[i] in root.style) { return transition[i] in root.style; } } }; return support(); }; Lightbox.prototype.isVideo = function (src, index) { var youtube, vimeo; if(src !== undefined){ if(src.indexOf('youtu') !== -1){ youtube = src.match(/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/); } if(src.indexOf('vimeo') !== -1){ vimeo = src.match(/(videos|video|channels|\.com)\/([\d]+)/); } } if (youtube) { return { youtube: youtube }; } else if (vimeo) { return { vimeo: vimeo }; } }; Lightbox.prototype.preload = function (index) { for (var i = 1; i <= this.settings.preload; i++) { if (i >= this.$items.length - index) { break; } this.loadContent(index + i, false, 0); } for (var j = 1; j <= this.settings.preload; j++) { if (index - j < 0) { break; } this.loadContent(index - j, false, 0); } }; Lightbox.prototype.loadContent = function (index, rec, delay) { var $object, src, isVideo; $object = this; function isImg() { src = $object.$items.eq(index).attr('href'); return src.match(/\.(jpg|png|gif)\b/); } src = $object.$items.eq(index).attr('href'); isVideo = $object.isVideo(src, index); if (!$object.$item.eq(index).hasClass('rwd-loaded')) { if (isVideo) { $object.$item.eq(index).prepend('
'); $object.$element.trigger('hasVideo.rwd-container', [index, src]); } else { $object.$item.eq(index).prepend('
'); } $object.$element.trigger('onAferAppendSlide.rwd-container', [index]); $object.$item.eq(index).addClass('rwd-loaded'); } $object.$item.eq(index).find('.rwd-object').on('load.rwd-container error.rwd-container', function () { var speed = 0; if (delay) { speed = delay; } setTimeout(function () { $object.$item.eq(index).addClass('rwd-complete'); }, speed); }); if (rec === true) { if (!$object.$item.eq(index).hasClass('rwd-complete')) { $object.$item.eq(index).find('.rwd-object').on('load.rwd-container error.rwd-container', function () { $object.preload(index); }); } else { $object.preload(index); } } }; Lightbox.prototype.slide = function (index, fromSlide, fromThumb) { var $object, prevIndex; $object = this; prevIndex = this.$cont.find('.rwd-current').index(); var length = this.$item.length, next = false, prev = false; this.$element.trigger('onBeforeSlide.rwd-container', [prevIndex, index, fromSlide, fromThumb]); $object.$cont.addClass('rwd-no-trans'); this.$item.removeClass('rwd-prev-slide rwd-next-slide'); if (!fromSlide) { if (index < prevIndex) { prev = true; if ((index === 0) && (prevIndex === length - 1) && !fromThumb) { prev = false; next = true; } } else if (index > prevIndex) { next = true; if ((index === length - 1) && (prevIndex === 0) && !fromThumb) { prev = true; next = false; } } if (prev) { this.$item.eq(index).addClass('rwd-prev-slide'); this.$item.eq(prevIndex).addClass('rwd-next-slide'); } else if (next) { this.$item.eq(index).addClass('rwd-next-slide'); this.$item.eq(prevIndex).addClass('rwd-prev-slide'); } setTimeout(function () { $object.$item.removeClass('rwd-current'); $object.$item.eq(index).addClass('rwd-current'); $object.$cont.removeClass('rwd-no-trans'); }, 50); } else { var slidePrev = index - 1; var slideNext = index + 1; if ((index === 0) && (prevIndex === length - 1)) { slideNext = 0; slidePrev = length - 1; } else if ((index === length - 1) && (prevIndex === 0)) { slideNext = 0; slidePrev = length - 1; } this.$item.removeClass('rwd-prev-slide rwd-current rwd-next-slide'); $object.$item.eq(slidePrev).addClass('rwd-prev-slide'); $object.$item.eq(slideNext).addClass('rwd-next-slide'); $object.$item.eq(index).addClass('rwd-current'); } $object.loadContent(index, true, $object.settings.overlayDuration); $object.$element.trigger('onAfterSlide.rwd-container', [prevIndex, index, fromSlide, fromThumb]); $object.calculateDimensions(index); $(window).on('resize.rwd-container', function () { $object.calculateDimensions(index); }); }; Lightbox.prototype.goToNextSlide = function (fromSlide) { var $object = this; if (($object.index + 1) < $object.$item.length) { $object.index++; $object.slide($object.index, fromSlide, false); } else { $object.index = 0; $object.slide($object.index, fromSlide, false); } }; Lightbox.prototype.goToPrevSlide = function (fromSlide) { var $object = this; if ($object.index > 0) { $object.index--; $object.slide($object.index, fromSlide, false); } else { $object.index = $object.$items.length - 1; $object.slide($object.index, fromSlide, false); } }; Lightbox.prototype.addKeyEvents = function () { var $object = this; if (this.$items.length > 1) { $(window).on('keyup.rwd-container', function (e) { if ($object.$items.length > 1) { if (e.keyCode === 37) { e.preventDefault(); $object.goToPrevSlide(); } if (e.keyCode === 39) { e.preventDefault(); $object.goToNextSlide(); } } }); } $(window).on('keydown.rwd-container', function (e) { if (e.keyCode === 27) { e.preventDefault(); $object.destroy(); } }); }; Lightbox.prototype.arrow = function () { var $object = this; this.$cont.find('.rwd-prev').on('click.rwd-container', function () { $object.goToPrevSlide(); }); this.$cont.find('.rwd-next').on('click.rwd-container', function () { $object.goToNextSlide(); }); }; Lightbox.prototype.closeGallery = function () { var $object = this, mousedown = false; this.$cont.find('.rwd-close').on('click.rwd-container', function () { $object.destroy(); }); $object.$cont.on('mousedown.rwd-container', function (e) { mousedown = ($(e.target).is('.rwd-cont') || $(e.target).is('.rwd-item ') || $(e.target).is('.rwd-img-wrap')); }); $object.$cont.on('mouseup.rwd-container', function (e) { if ($(e.target).is('.contInner') || $(e.target).is('.rwd-cont') || $(e.target).is('.rwd-item ') || $(e.target).is('.rwd-img-wrap') && mousedown) { if (!$object.$cont.hasClass('rwd-dragEvent')) { $object.destroy(); } } }); }; Lightbox.prototype.destroy = function (d) { var $object = this, $time; $('.rwd-container').removeClass(this.settings.openCloseType[0]).addClass(this.settings.openCloseType[1]); switch(this.settings.openCloseType[1]){ case 'close_1': case 'close_1_r': $time = 1000; break; case 'close_2': case 'close_2_r': $time = 300; break; case 'close_3': case 'close_4': case 'close_3_r': case 'close_4_r': $time = 340; break; case 'close_5': case 'close_5_r': $time = 250; break; } setTimeout(function(){ clearInterval($object.interval); $object.$body.removeClass('rwd-on'); $(window).scrollTop($object.prevScrollTop); if (d) { $.removeData($object.el, 'lightbox'); } ($object.settings.socialSharing && (window.location.hash = '')); if ($object.$cont) { $object.$cont.removeClass('rwd-visible'); } $object.objects.overlay.removeClass('in'); setTimeout(function () { if ($object.$cont) { $object.$cont.remove(); } $object.objects.overlay.remove(); }, $object.settings.overlayDuration + 50); window.scrollTo(0, $object.$_y_); }, $time); }; $.fn.lightbox = function (options) { return this.each(function () { if (!$.data(this, 'lightbox')) { $.data(this, 'lightbox', new Lightbox(this, options)); } }); }; $.fn.lightbox.lightboxModul = {}; var Modul = function (element) { this.dataL = $(element).data('lightbox'); this.$element = $(element); this.init(); this.$el = $(element); return this; }; Modul.prototype.init = function () { var $object = this; $object.dataL.$element.one('hasVideo.rwd-container', function (event, index, src) { $object.dataL.$item.eq(index).find('.rwd-video').append($object.loadVideo(src, 'rwd-object', index)); }); $object.dataL.$element.on('onAferAppendSlide.rwd-container', function (event, index) { $object.dataL.$item.eq(index).find('.rwd-video-cont').css({ 'max-width': '790px' }); }); $object.dataL.$element.on('onBeforeSlide.rwd-container', function (event, prevIndex, index) { var $videoSlide = $object.dataL.$item.eq(prevIndex), youtubePlayer = $videoSlide.find('.rwd-youtube').get(0), vimeoPlayer = $videoSlide.find('.rwd-vimeo').get(0); if (youtubePlayer) { youtubePlayer.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*'); } else if (vimeoPlayer) { try { $f(vimeoPlayer).api('pause'); } catch (e) { console.error('Make sure you have included froogaloop2 js'); } } var src; src = $object.dataL.$items.eq(index).attr('href'); var isVideo = $object.dataL.isVideo(src, index) || {}; }); $object.dataL.$element.on('onAfterSlide.rwd-container', function (event, prevIndex) { $object.dataL.$item.eq(prevIndex).removeClass('rwd-video-playing'); }); }; Modul.prototype.loadVideo = function (src, addClass, index) { var video = '', autoplay = 0, a = '', isVideo = this.dataL.isVideo(src, index) || {}; if (isVideo.youtube) { a = '?wmode=opaque&autoplay=' + autoplay + '&enablejsapi=1'; video = ''; } else if (isVideo.vimeo) { a = '?autoplay=' + autoplay + '&api=1'; video = ''; } return video; }; $.fn.lightbox.lightboxModul.modul = Modul; })(jQuery);