Update Image Loader Placeholder Remover to 1.19.2
- Fix null TypeError - Create (and use) a unified image link wrapper - Fix potential hangs, especially on sites with a lot of images like forbes.com
This commit is contained in:
parent
b2e2d21c09
commit
51fb9fac1f
|
@ -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 <source>s can fuck up image rendering (firefox still thinks that the <img> 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));
|
||||
}
|
||||
}
|
|
@ -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/
|
||||
|
||||
|
|
Loading…
Reference in New Issue