/** * SPDX-License-Identifier: CC0-1.0 * * Copyright (C) 2025 Woj. Kosior */ /* #+begin_src manifest-jq .matches = ["https://www.vaticannews.va/*"] #+end_src */ if (false) { /* #+begin_src background-js */ blockJsOnUrl("https://www.vaticannews.va/*"); } /* #+end_src */ /* Make some dynamically-loaded images work. */ const dynamicImages = Object.assign( {}, [...document.querySelectorAll("img[data-original]")].filter( img => img.parentElement.tagName === "A" ) ); const eps = 1e-10; let loadingTimeout = null; function imageLoaded(ev) { ev.target.classList.add("loaded"); ev.target.removeEventListener("load", imageLoaded); } function loadVisibleImages() { loadingTimeout = null; const min = -eps, max = window.innerHeight + eps; let allLoaded = true; for (const [idx, img] of Object.entries(dynamicImages)) { const boundingRect = img.getBoundingClientRect(); if (boundingRect.top > min && boundingRect.bottom < max) { delete dynamicImages[idx]; img.src = img.getAttribute("data-original"); img.addEventListener("load", imageLoaded); } else { allLoaded = false; } } if (allLoaded) window.removeEventListener("resize", setLoadingTimeout); } function setLoadingTimeout() { if (loadingTimeout !== null) clearTimeout(loadingTimeout); loadingTimeout = setTimeout(loadVisibleImages, 500); } window.addEventListener("scroll", setLoadingTimeout); window.addEventListener("resize", setLoadingTimeout); loadVisibleImages();