diff --git a/Image Loader Placeholder Remover.user.js b/Image Loader Placeholder Remover.user.js index 28b2b77..1656521 100644 --- a/Image Loader Placeholder Remover.user.js +++ b/Image Loader Placeholder Remover.user.js @@ -3,7 +3,7 @@ // @namespace blankie-scripts // @match http*://*/* // @grant none -// @version 1.19.1 +// @version 1.19.2 // @author blankie // @run-at document-end // @description Removes image loading placeholders @@ -25,6 +25,13 @@ function findUrl(element) { } } + // https://blog.google/ + // https://blog.google/threat-analysis-group/active-north-korean-campaign-targeting-security-researchers/ + if (window.location.host === "blog.google" && element.hasAttribute("data-loading")) { + let data = JSON.parse(element.getAttribute("data-loading")); + return data.desktop || data.mobile; + } + // Examples of data-src: // - https://closeronline.co.uk // - https://closeronline.co.uk/real-life/news/ever-used-excuses-documented-spreadsheet-man-used-expose-wife-s-lack-sex @@ -129,7 +136,7 @@ function cloneLazyloaderTree(element, elementLazyLoaderClasses) { let followingTopMostParent = element.parentElement; let bottomMostChild = null; - while (followingTopMostParent.localName !== "body") { + while (followingTopMostParent && followingTopMostParent.localName !== "body") { let clone = document.createElement(followingTopMostParent.localName); clone.classList.add(...getLazyloaderClasses(followingTopMostParent)); for (let attr of getLazyloaderAttributes(followingTopMostParent)) { @@ -218,13 +225,23 @@ function unhideElement(element, lazyLoaderClasses) { toRemove.remove(); } +function wrapImage(img, url) { + if (img.closest("a")) { + return img; + } + + let wrapper = document.createElement("a"); + img.replaceWith(wrapper); + wrapper.href = url; + wrapper.append(img); + return wrapper; +} + function removePlaceholder(img) { - let hasLinkParent = false; let parentElement = img.parentElement; while (parentElement) { - hasLinkParent = hasLinkParent || parentElement.localName === "a"; // Examples of hidden parents: // - https://www.wired.com/ // - https://www.wired.com/story/researcher-fooled-a-google-ai-into-thinking-a-rifle-was-a-helicopter/ @@ -237,11 +254,6 @@ function removePlaceholder(img) { } let picture = img.closest("picture"); - // Examples of blurred images with proper URLs: - // - https://blog.google/ - // - https://blog.google/threat-analysis-group/active-north-korean-campaign-targeting-security-researchers/ - unhideElement(img, getLazyloaderClasses(img)); - // Example of a would've been viewable image being blurred: // https://www.washingtonpost.com/nation/2023/07/21/ocean-color-changing-climate-change/ if (window.location.host === "www.washingtonpost.com") { @@ -274,6 +286,7 @@ function removePlaceholder(img) { originalUrl = urlObject.href; } + unhideElement(img, getLazyloaderClasses(img)); img.src = url; // apparently, remaining s can fuck up image rendering (firefox still thinks that the contains an empty image?) @@ -285,12 +298,7 @@ function removePlaceholder(img) { } } - if (!hasLinkParent) { - let wrapper = document.createElement("a"); - img.replaceWith(wrapper); - wrapper.href = originalUrl; - wrapper.appendChild(img); - } + wrapImage(img, originalUrl); } @@ -355,30 +363,6 @@ if (window.location.host === "www.forbes.com") { placeholder.style.paddingTop = 0; } - if (!progressiveImage.closest("a")) { - let wrapper = document.createElement("a"); - wrapper.href = url; - wrapper.append(img); - progressiveImage.replaceWith(wrapper); - } else { - progressiveImage.replaceWith(img); - } - } -} - -// https://blog.google/ -// https://blog.google/threat-analysis-group/active-north-korean-campaign-targeting-security-researchers/ -if (window.location.host === "blog.google") { - for (let img of document.querySelectorAll("img[data-loading]")) { - let data = JSON.parse(img.getAttribute("data-loading")); - let url = data.desktop || data.mobile; - img.src = url; - - if (!img.closest("a")) { - let wrapper = document.createElement("a"); - wrapper.href = url; - img.replaceWith(wrapper); - wrapper.append(img); - } + progressiveImage.replaceWith(wrapImage(img, url)); } } \ No newline at end of file diff --git a/README.md b/README.md index c6dccfc..a41bb25 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ A userscript that adds small but useful features for Compass. Features include: background - The context menu that only says "Copy" is now suppressed - The option to remember logins is unchecked by default -- The dashboard tab in a user's profile no longer points you to #dsb +- The dashboard tab in a user's profile no longer points you to #dsh [Link Hints]: https://lydell.github.io/LinkHints/