/* global window, document */ (function () { 'use strict'; var Luxtools = window.Luxtools || (window.Luxtools = {}); var Lightbox = Luxtools.Lightbox; var OpenService = Luxtools.OpenService; var GalleryThumbnails = Luxtools.GalleryThumbnails; var Scratchpads = Luxtools.Scratchpads; // ============================================================ // Click Handlers // ============================================================ function findOpenElement(target) { var el = target; while (el && el !== document) { if (el.classList && el.classList.contains('luxtools-open')) return el; el = el.parentNode; } return null; } function findGalleryItem(target) { var el = target; while (el && el !== document) { if (el.classList && el.classList.contains('luxtools-gallery-item')) return el; el = el.parentNode; } return null; } function onClick(event) { // Image gallery lightbox: intercept clicks so we don't navigate away. var galleryItem = findGalleryItem(event.target); if (galleryItem && Lightbox && Lightbox.open) { var gallery = galleryItem.closest ? galleryItem.closest('div.luxtools-gallery[data-luxtools-gallery="1"]') : null; if (gallery) { event.preventDefault(); Lightbox.open(gallery, galleryItem); return; } } var el = findOpenElement(event.target); if (!el) return; // {{open>...}} renders as a link; avoid jumping to '#'. if (el.tagName && el.tagName.toLowerCase() === 'a') { event.preventDefault(); } var raw = el.getAttribute('data-path') || ''; if (!raw) return; if (!OpenService || !OpenService.openViaService) return; // Prefer local client service. OpenService.openViaService(el, raw) .catch(function (err) { // If the browser blocks the request before it reaches localhost (mixed-content, // extensions, stricter CORS handling), fall back to a no-CORS GET ping. if (OpenService && OpenService.pingOpenViaImage) { OpenService.pingOpenViaImage(el, raw); } // Fallback to old behavior (often blocked in modern browsers). var url = OpenService && OpenService.normalizeToFileUrl ? OpenService.normalizeToFileUrl(raw) : ''; if (!url) return; console.warn('Local client service failed, falling back to file:// navigation:', err); try { window.open(url, '_blank', 'noopener'); } catch (e) { try { window.location.href = url; } catch (e2) { console.error('Failed to open file URL:', e2); } } }); } // ============================================================ // Initialize // ============================================================ document.addEventListener('click', onClick, false); document.addEventListener('DOMContentLoaded', function () { if (GalleryThumbnails && GalleryThumbnails.init) GalleryThumbnails.init(); }, false); document.addEventListener('DOMContentLoaded', function () { if (Scratchpads && Scratchpads.init) Scratchpads.init(); }, false); })();