function Photonic_Lightbox() { this.socialIcons = "
" + "
" + "
" + "
" + "
"; var lastDeep; this.videoIndex = 1; } Photonic_Lightbox.prototype.getVideoSize = function(url, baseline){ return new Promise(function(resolve){ // create the video element var video = document.createElement('video'); // place a listener on it video.addEventListener( "loadedmetadata", function () { // retrieve dimensions var height = this.videoHeight; var width = this.videoWidth; var videoAspectRatio = this.videoWidth / this.videoHeight; var baseAspectRatio = baseline.width / baseline.height; var newWidth, newHeight; if (baseAspectRatio > videoAspectRatio) { // Window is wider than it needs to be ... constrain by window height newHeight = baseline.height; newWidth = width * newHeight / height; } else { // Window is narrower than it needs to be ... constrain by window width newWidth = baseline.width; newHeight = height * newWidth / width; } // send back result resolve({ height : height, width : width, newHeight: newHeight, newWidth: newWidth }); }, false ); // start download meta-datas video.src = url; }); }; Photonic_Lightbox.prototype.getImageSize = function(url, baseline){ return new Promise(function(resolve){ var image = document.createElement('img'); // place a listener on it image.addEventListener( "load", function () { // retrieve dimensions var height = this.height; var width = this.width; var imageAspectRatio = this.width / this.height; var baseAspectRatio = baseline.width / baseline.height; var newWidth, newHeight; if (baseAspectRatio > imageAspectRatio) { // Window is wider than it needs to be ... constrain by window height newHeight = baseline.height; newWidth = width * newHeight / height; } else { // Window is narrower than it needs to be ... constrain by window width newWidth = baseline.width; newHeight = height * newWidth / width; } // send back result resolve({ height : height, width : width, newHeight: newHeight, newWidth: newWidth }); }, false ); // start download meta-datas image.src = url; }); }; Photonic_Lightbox.prototype.addSocial = function(selector, shareable) { if ((Photonic_JS.social_media === undefined || Photonic_JS.social_media === '') && shareable['buy'] === undefined) { return; } var socialEl = document.getElementById('photonic-social'); if (socialEl !== null) { socialEl.parentNode.removeChild(socialEl); } if (location.hash !== '') { var social = this.socialIcons.replace(/{photonic_share_link}/g, encodeURIComponent(shareable['url'])). replace(/{photonic_share_title}/g, encodeURIComponent(shareable['title'])). replace(/{photonic_share_image}/g, encodeURIComponent(shareable['image'])); var selectorEl; if (typeof selector === 'string') { selectorEl = document.documentElement.querySelector(selector); if (selectorEl !== null) { selectorEl.insertAdjacentHTML('beforeend', social); } } if (Photonic_JS.social_media === undefined || Photonic_JS.social_media === '') { var socialMediaIcons = document.documentElement.querySelectorAll('.photonic-share-fb, .photonic-share-twitter, .photonic-share-pinterest'); Array.prototype.forEach.call(socialMediaIcons, function(socialIcon) { socialIcon.parentNode.removeChild(socialIcon); }); } if (!supportsSVG) { var icon = $('#photonic-social div'); var bg = icon.css('background-image'); bg = bg.replace( 'svg', 'png' ); icon.css({'background-image': bg}); } } }; Photonic_Lightbox.prototype.setHash = function(a) { if (Photonic_JS.deep_linking === undefined || Photonic_JS.deep_linking === 'none') { return; } var hash = typeof a === 'string' ? a : $(a).data('photonicDeep'); if (hash === undefined) { return; } if (typeof(window.history.pushState) === 'function' && Photonic_JS.deep_linking === 'yes-history') { window.history.pushState({}, document.title, '#' + hash); } else if (typeof(window.history.replaceState) === 'function' && Photonic_JS.deep_linking === 'no-history') { window.history.replaceState({}, document.title, '#' + hash); } else { document.location.hash = hash; } }; Photonic_Lightbox.prototype.unsetHash = function() { lastDeep = (lastDeep === undefined || deep !== '') ? location.hash : lastDeep; if (window.history && 'replaceState' in window.history) { history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length)); } else { window.location.hash = ''; } }; Photonic_Lightbox.prototype.changeHash = function() { var node = deep; if (node != null) { if (node.length > 1 && photonicLightbox !== null && photonicLightbox !== undefined) { if (window.location.hash && node.indexOf('#access_token=') !== -1) { photonicLightbox.unsetHash(); } else { node = node.substr(1); var allMatches = document.querySelectorAll('[data-photonic-deep="' + node + '"]'); //$('[data-photonic-deep="' + node + '"]'); if (allMatches.length > 0) { var thumbToClick = allMatches[0]; $(thumbToClick).click(); photonicLightbox.setHash(node); } } } } }; Photonic_Lightbox.prototype.catchYouTubeURL = function(url) { var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; var match = url.match(regExp); if (match && match[2].length === 11) { return match[2]; } }; Photonic_Lightbox.prototype.catchVimeoURL = function(url) { var regExp = /(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^\/]*)\/videos\/|album\/(?:\d+)\/video\/|video\/|)(\d+)(?:[a-zA-Z0-9_\-]+)?/; var match = url.match(regExp); if (match) { return match[1]; } }; Photonic_Lightbox.prototype.soloImages = function() { $('a[href]').filter(function() { return /(\.jpg|\.jpeg|\.bmp|\.gif|\.png)/i.test( this.getAttribute('href')); }).addClass("launch-gallery-" + Photonic_JS.slideshow_library).addClass(Photonic_JS.slideshow_library); }; Photonic_Lightbox.prototype.changeVideoURL = function(element, regular, embed) { // Implemented in individual lightboxes. Empty for unsupported lightboxes }; Photonic_Lightbox.prototype.hostedVideo = function(a) { // Implemented in individual lightboxes. Empty for unsupported lightboxes }; Photonic_Lightbox.prototype.soloVideos = function() { var self = this; if (Photonic_JS.lightbox_for_videos) { $('a[href]').each(function() { var regular, embed; var href = this.getAttribute('href'); var youTube = self.catchYouTubeURL(href); var vimeo = self.catchVimeoURL(href); if ((youTube) !== undefined) { regular = 'https://youtube.com/watch?v=' + youTube; embed = 'https://youtube.com/embed/' + youTube; } else if (vimeo !== undefined) { regular = 'https://vimeo.com/' + vimeo; embed = 'https://player.vimeo.com/video/' + vimeo; } if (regular !== undefined) { $(this).addClass(Photonic_JS.slideshow_library + "-video"); self.changeVideoURL(this, regular, embed); } self.hostedVideo(this); }); } }; Photonic_Lightbox.prototype.handleSolos = function() { if (Photonic_JS.lightbox_for_all) { this.soloImages(); } this.soloVideos(); $(window).on('load', this.changeHash); $(window).on('hashchange', this.changeHash); }; Photonic_Lightbox.prototype.initialize = function() { this.handleSolos(); // Implemented by child classes }; Photonic_Lightbox.prototype.initializeForNewContainer = function(containerId) { // Implemented by individual lightboxes. Empty for cases where not required }; Photonic_Lightbox.prototype.initializeForExisting = function() { // Implemented by child classes }; Photonic_Lightbox.prototype.initializeForSlideshow = function(selector, slider) { // Implemented by child classes };