Greasy Fork is available in English.
Adds a download button to gradtag images
// ==UserScript== // @name GradTag Stealer // @namespace https://gist.github.com/Pseudorizer/27abc3f643ad61c6923513c34e9b1c3a // @version 1.0.1 // @description Adds a download button to gradtag images // @author Pseudorizer <https://github.com/Pseudorizer> // @match https://photos.gradtag.co.uk/gradtag-* // @icon https://www.google.com/s2/favicons?sz=64&domain=gradtag.co.uk // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; const run = () => { const images = document.querySelector('.grid'); const urlRegex = /url\("(.+?)"\)/i; for (const image of images.childNodes) { const imageSrc = image.childNodes[0]; const originalButton = image.childNodes[1]; const imageUrl = imageSrc.style.backgroundImage; const imageUrlMatch = imageUrl.match(urlRegex)[1]; const clonedButton = originalButton.cloneNode(true); clonedButton.style.right = '7rem'; clonedButton.addEventListener('click', () => { window.open(imageUrlMatch); }); const clonedButtonIcon = clonedButton.childNodes[0]; clonedButtonIcon.classList.replace('fa-search', 'fa-download'); clonedButtonIcon.style.transform = 'unset'; image.insertBefore(clonedButton, originalButton); } }; window.addEventListener('load', () => { const targetNode = document.body; const callback = (mutationList, observer) => { for (const mutation of mutationList) { for (const addedNode of mutation.addedNodes) { if (addedNode.classList && addedNode.classList.contains('grid')) { observer.disconnect(); run(); } } } }; const observer = new MutationObserver(callback); observer.observe(targetNode, { attributes: false, childList: true, subtree: true }); }); })();