chunks
1 week ago
vendor
8 months ago
admin.build.js
1 week ago
admin.js
3 months ago
analytics-tracker.js
4 weeks ago
analytics.build.js
1 week ago
blocks.build.js
1 week ago
carousel.js
1 year ago
custom-player.build.js
1 week ago
documents-viewer-script.js
3 months ago
ep-pdf-lightbox.js
3 months ago
ep-view-count.js
1 week ago
ep-yt-queue.js
4 weeks ago
feature-notices.js
7 months ago
front.js
4 weeks ago
frontend.build.js
3 months ago
gallery-justify.js
1 week ago
gutneberg-script.js
1 month ago
index.html
7 years ago
initCarousel.js
2 years ago
initplyr.js
1 month ago
instafeed.js
4 weeks ago
instagram-shortcode-generator.js
1 month ago
lazy-load.js
6 months ago
license.js
3 months ago
meetup-timezone.js
3 months ago
onboarding.build.js
1 week ago
pdf-gallery-elementor-editor.js
3 months ago
pdf-gallery.js
3 months ago
preview.js
8 months ago
settings.js
3 months ago
sponsored.js
9 months ago
gallery-justify.js
99 lines
| 1 | (function () { |
| 2 | var ROW_HEIGHT = Math.max(180, Math.round((window.screen && screen.height ? screen.height : 900) * 0.2)); |
| 3 | |
| 4 | function sizeItem(item, image) { |
| 5 | var w = image.naturalWidth; |
| 6 | var h = image.naturalHeight; |
| 7 | // naturalWidth is 0 while the image is still decoding (or a lazy |
| 8 | // image that hasn't entered the viewport yet). Bail and let the |
| 9 | // load handler size it later — never write a 0/NaN width, which is |
| 10 | // what collapses the whole row in the editor preview. |
| 11 | if (!w || !h) { |
| 12 | return false; |
| 13 | } |
| 14 | var ratio = w / h; |
| 15 | item.style.width = ROW_HEIGHT * ratio + 'px'; |
| 16 | item.style.flexGrow = ratio; |
| 17 | return true; |
| 18 | } |
| 19 | |
| 20 | function justifyGallery(root) { |
| 21 | var scope = root && root.querySelectorAll ? root : document; |
| 22 | var items = scope.querySelectorAll('.photos-gallery-justify .photo-item'); |
| 23 | |
| 24 | items.forEach(function (item) { |
| 25 | var image = item.querySelector('img'); |
| 26 | if (!image) return; |
| 27 | |
| 28 | // Lazy loading keeps off-screen images unloaded, so naturalWidth |
| 29 | // stays 0 and the row collapses. The justify layout needs the real |
| 30 | // ratio up front, so opt these images out of lazy loading. |
| 31 | if (image.getAttribute('loading') === 'lazy') { |
| 32 | image.removeAttribute('loading'); |
| 33 | } |
| 34 | |
| 35 | if (!sizeItem(item, image)) { |
| 36 | // Not ready yet — size it once the bytes arrive. decode() |
| 37 | // resolves on already-cached images too, with onload as a fallback. |
| 38 | var onReady = function () { sizeItem(item, image); }; |
| 39 | image.addEventListener('load', onReady, { once: true }); |
| 40 | if (image.decode) { |
| 41 | image.decode().then(onReady).catch(function () { /* onload covers it */ }); |
| 42 | } |
| 43 | } |
| 44 | }); |
| 45 | } |
| 46 | |
| 47 | function init() { |
| 48 | justifyGallery(document); |
| 49 | } |
| 50 | |
| 51 | if (document.readyState === 'loading') { |
| 52 | document.addEventListener('DOMContentLoaded', init); |
| 53 | } else { |
| 54 | init(); |
| 55 | } |
| 56 | window.addEventListener('load', init); |
| 57 | |
| 58 | // Elementor editor (and frontend) re-render widgets via AJAX after the |
| 59 | // initial load events have already fired, so re-justify whenever a Google |
| 60 | // Photos widget becomes ready. |
| 61 | if (window.jQuery) { |
| 62 | jQuery(window).on('elementor/frontend/init', function () { |
| 63 | if (window.elementorFrontend && elementorFrontend.hooks) { |
| 64 | elementorFrontend.hooks.addAction('frontend/element_ready/global', function ($scope) { |
| 65 | justifyGallery($scope && $scope[0] ? $scope[0] : document); |
| 66 | }); |
| 67 | } |
| 68 | }); |
| 69 | } |
| 70 | |
| 71 | // Catch any other late DOM injection (block editor preview, AJAX, etc.). |
| 72 | if (window.MutationObserver) { |
| 73 | var pending = false; |
| 74 | var observer = new MutationObserver(function (mutations) { |
| 75 | if (pending) return; |
| 76 | for (var i = 0; i < mutations.length; i++) { |
| 77 | if (mutations[i].addedNodes && mutations[i].addedNodes.length) { |
| 78 | pending = true; |
| 79 | window.requestAnimationFrame(function () { |
| 80 | pending = false; |
| 81 | justifyGallery(document); |
| 82 | }); |
| 83 | break; |
| 84 | } |
| 85 | } |
| 86 | }); |
| 87 | var startObserver = function () { |
| 88 | if (document.body) { |
| 89 | observer.observe(document.body, { childList: true, subtree: true }); |
| 90 | } |
| 91 | }; |
| 92 | if (document.readyState === 'loading') { |
| 93 | document.addEventListener('DOMContentLoaded', startObserver); |
| 94 | } else { |
| 95 | startObserver(); |
| 96 | } |
| 97 | } |
| 98 | })(); |
| 99 |