// Themify Lightbox and Fullscreen ///////////////////////// var ThemifyGallery = {}; (function($){ 'use strict'; ThemifyGallery = { config: { fullscreen: themifyScript.lightbox.fullscreenSelector, lightbox: themifyScript.lightbox.lightboxSelector, lightboxGallery: themifyScript.lightbox.gallerySelector, lightboxContentImages: themifyScript.lightbox.lightboxContentImagesSelector, context: document }, init: function(config){ if (config && typeof config == 'object') { $.extend(ThemifyGallery.config, config); } if (config.extraLightboxArgs && typeof config == 'object') { for (var attrname in config.extraLightboxArgs) { themifyScript.lightbox[attrname] = config.extraLightboxArgs[attrname]; } } this.general(); this.parseArgs(); this.doLightbox(); }, general: function(){ var context = this.config.context; }, parseArgs: function(){ $.each(themifyScript.lightbox, function(index, value){ if( 'false' == value || 'true' == value ){ themifyScript.lightbox[index] = 'false'!=value; } else if( parseInt(value) ){ themifyScript.lightbox[index] = parseInt(value); } else if( parseFloat(value) ){ themifyScript.lightbox[index] = parseFloat(value); } }); }, doLightbox: function(){ var context = this.config.context; if(typeof $.fn.magnificPopup !== 'undefined' && typeof themifyScript.lightbox.lightboxOn !== 'undefined') { // Lightbox Link $(context).on('click', ThemifyGallery.config.lightbox, function(event){ event.preventDefault(); var $self = $(this), $link = $(this).attr('href'), $type = ThemifyGallery.getFileType($link), $title = (typeof $(this).children('img').attr('alt') !== 'undefined') ? $(this).children('img').attr('alt') : $(this).attr('title'), $iframe_width = (ThemifyGallery.isVideo($link)) ? '100%' : (ThemifyGallery.getParam('width', $link)) ? ThemifyGallery.getParam('width', $link) : '700', $iframe_height = (ThemifyGallery.isVideo($link)) ? '100%' : (ThemifyGallery.getParam('height', $link)) ? ThemifyGallery.getParam('height', $link) : '100%'; if($iframe_width.indexOf("%") == -1) $iframe_width += 'px'; if($iframe_height.indexOf("%") == -1) $iframe_height += 'px'; if( ThemifyGallery.isYoutube( $link ) ) { // for youtube videos, sanitize the URL properly $link = ThemifyGallery.getYoutubePath( $link ); } var $args = { items: { src: $link, title: $title }, type: $type, iframe: { markup: '
'+ '
'+ '
'+ ''+ '
'+ '
' } }; if($self.find('img').length > 0) { $.extend( $args, { mainClass: 'mfp-with-zoom', zoom: { enabled: true, duration: 300, easing: 'ease-in-out', opener: function() { return $self.find('img'); } } }); } if(ThemifyGallery.isVideo($link)){ $args['mainClass'] += ' video-frame'; } else { $args['mainClass'] += ' standard-frame'; } if(ThemifyGallery.isInIframe()) { window.parent.jQuery.magnificPopup.open($args); } else { $.magnificPopup.open($args); } }); // Images in post content $(themifyScript.lightbox.contentImagesAreas, context).each(function() { var images = [], links = []; if(themifyScript.lightbox.lightboxContentImages && themifyScript.lightbox.lightboxGalleryOn){ $(ThemifyGallery.config.lightboxContentImages, $(this)).filter( function(){ if(!$(this).parent().hasClass('gallery-icon') && !$(this).hasClass('lightbox')){ links.push($(this)); var description = $(this).attr('title'); if($(this).next('.wp-caption-text').length > 0){ // If there's a caption set for the image, use it description = $(this).next('.wp-caption-text').html(); } else { // Otherwise, see if there's an alt attribute set description = $(this).children('img').attr('alt'); } images.push({ src: $(this).attr('href'), title: description, type: 'image' }); return $(this); } }).each(function(index) { if (links.length > 0) { $(this).on('click', function(event){ event.preventDefault(); var $self = $(this); var $args = { items: { src: images[index].src, title: images[index].title }, type: 'image' }; if($self.find('img').length > 0) { $.extend( $args, { mainClass: 'mfp-with-zoom', zoom: { enabled: true, duration: 300, easing: 'ease-in-out', opener: function() { return $self.find('img'); } } }); } if(ThemifyGallery.isInIframe()) { window.parent.jQuery.magnificPopup.open($args); } else { $.magnificPopup.open($args); } }); } }); } }); // Images in WP Gallery if(themifyScript.lightbox.lightboxGalleryOn){ $(context).on('click', ThemifyGallery.config.lightboxGallery, function(event){ event.preventDefault(); var $gallery = $(ThemifyGallery.config.lightboxGallery, $(this).parent().parent().parent()), images = []; $gallery.each(function() { var description = $(this).attr('title'); if($(this).parent().next('.gallery-caption').length > 0){ // If there's a caption set for the image, use it description = $(this).parent().next('.wp-caption-text').html(); } else if ( $(this).children('img').length > 0 ) { // Otherwise, see if there's an alt attribute set description = $(this).children('img').attr('alt'); } else if ( $(this).find('.gallery-caption').find('.entry-content').length > 0 ) { description = $(this).find('.gallery-caption').find('.entry-content').text(); } images.push({ src: $(this).attr('href'), title: description, type: 'image' }); }); var $args = { gallery: { enabled: true }, items: images, mainClass: 'mfp-with-zoom', zoom: { enabled: true, duration: 300, easing: 'ease-in-out', opener: function(openerElement) { var imageEl = $($gallery[openerElement.index]); return imageEl.is('img') ? imageEl : imageEl.find('img'); } } }; if(ThemifyGallery.isInIframe()){ window.parent.jQuery.magnificPopup.open($args, $gallery.index(this)); } else { $.magnificPopup.open($args, $gallery.index(this)); } }); } } }, countItems : function(type){ var context = this.config.context; if('lightbox' == type) return $(this.config.lightbox, context).length + $(this.config.lightboxGallery, context).length + $(ThemifyGallery.config.lightboxContentImages, context).length; else return $(this.config.fullscreen, context).length + $(ThemifyGallery.config.lightboxContentImages, context).length; }, isInIframe: function(){ if( typeof ThemifyGallery.config.extraLightboxArgs !== 'undefined' ) { return typeof ThemifyGallery.config.extraLightboxArgs.displayIframeContentsInParent !== 'undefined' && true == ThemifyGallery.config.extraLightboxArgs.displayIframeContentsInParent; } else { return false; } }, getFileType: function( itemSrc ) { if ( ThemifyGallery.isYoutube( itemSrc ) || itemSrc.match(/vimeo\.com/i) || itemSrc.match(/\b.mov\b/i) || itemSrc.match(/\b.swf\b/i) || itemSrc.match(/\biframe=true\b/i) ) { return 'iframe'; } else if(itemSrc.match(/\bajax=true\b/i)) { return 'ajax'; } else if(itemSrc.substr(0,1) == '#') { return 'inline'; } else { return 'image'; } }, isVideo: function( itemSrc ) { return ThemifyGallery.isYoutube( itemSrc ) || itemSrc.match(/vimeo\.com/i) || itemSrc.match(/\b.mov\b/i) || itemSrc.match(/\b.swf\b/i); }, isYoutube : function( itemSrc ) { return itemSrc.match( /youtube\.com\/watch/i ) || itemSrc.match( /youtu\.be/i ); }, getYoutubePath : function( url ) { if( url.match( /youtu\.be/i ) ) { // convert youtu.be/ urls to youtube.com return 'http://youtube.com/watch?v=' + url.match( /youtu\.be\/([^\?]*)/i )[1]; } else { return 'http://youtube.com/watch?v=' + ThemifyGallery.getParam( 'v', url ); } }, getParam: function(name, url){ name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); var regexS = "[\\?&]"+name+"=([^&#]*)"; var regex = new RegExp(regexS); var results = regex.exec(url); return(results==null) ? "" : results[1]; } }; }(jQuery));