🏠 Home 

Google DWIMages

Direct links to images and pages on Google Images


Install this script?
// ==UserScript==
// @name          Google DWIMages
// @description   Direct links to images and pages on Google Images
// @author        chocolateboy
// @copyright     chocolateboy
// @version       3.1.0
// @namespace     https://github.com/chocolateboy/userscripts
// @license       GPL
// @include       https://www.google.tld/search?*tbm=isch*
// @include       https://www.google.tld/search?*udm=2*
// @grant         none
// ==/UserScript==
// NOTE This file is generated from src/google-dwimages.user.ts and should not be edited directly.
"use strict";
(() => {
// src/lib/util.ts
var constant = (value) => (..._args) => value;
// src/lib/observer.ts
var INIT = { childList: true, subtree: true };
var done = constant(false);
var r###me = constant(true);
var observe = (...args) => {
const $ = document;
const [target, init, callback] = args.length === 3 ? args : args.length === 2 ? args[0] instanceof Element ? [args[0], INIT, args[1]] : [$.body, args[0], args[1]] : [$.body, INIT, args[0]];
const $callback = (mutations, observer2) => {
observer2.disconnect();
const r###me2 = callback({ mutations, observer: observer2, target, init });
if (r###me2 !== false) {
observer2.observe(target, init);
}
};
const observer = new MutationObserver($callback);
queueMicrotask(() => $callback([], observer));
return observer;
};
// src/google-dwimages.user.ts
// @license       GPL
var EVENTS = [
"auxclick",
"click",
"contextmenu",
"focus",
"focusin",
"keydown",
"mousedown",
"touchstart"
];
var LINK_TARGET = "_blank";
var R###LT = ":scope > :is([data-lpage], [data-ri]):not([data-status])";
var R###LTS = ":has(> :is([data-lpage], [data-ri]))";
var stopPropagation = (e) => {
e.stopPropagation();
};
var onImageLink = (link, r###lt) => {
const { searchParams: params } = new URL(link.href);
const src = params.get("imgurl");
if (!src) {
console.warn("Can't find image URL in r###lt link:", { r###lt, link, params });
return;
}
const image = link.querySelector(":scope img");
if (!image) {
console.warn("Can't find image in r###lt link:", { r###lt, link });
return;
}
link.href = src;
link.title = image.alt;
link.target = LINK_TARGET;
r###lt.dataset.status = "fixed" /* FIXED */;
image.parentElement.innerHTML = image.parentElement.innerHTML;
};
var onR###lt = (r###lt) => {
r###lt.dataset.status = "pending" /* PENDING */;
for (const event of EVENTS) {
r###lt.addEventListener(event, stopPropagation);
}
const imageLink = r###lt.querySelector(":scope a");
if (!imageLink) {
console.warn("Can't find image link in r###lt:", r###lt);
return;
}
observe(imageLink, { attributeFilter: ["href"] }, () => {
return imageLink.href && done(onImageLink(imageLink, r###lt));
});
};
var run = () => {
const r###lts = document.querySelector(R###LTS);
if (!r###lts) {
console.warn("Can't find r###lt container");
return;
}
observe(r###lts, { childList: true }, () => {
r###lts.querySelectorAll(R###LT).forEach(onR###lt);
});
};
run();
})();