// ==UserScript== // @name Desu Image Downloader // @version 1.12 // @description Download images with original filenames on desuarchive.org (all boards) // @author Anonimas // @match https://desuarchive.org/* // @grant GM_download // @namespace https://greasyfork.org/users/1342214 // @downloadURL none // ==/UserScript== (function() { 'use strict'; function downloadImage(imageUrl, originalFilename) { if (imageUrl && originalFilename) { GM_download({ url: imageUrl, name: originalFilename, onload: () => console.log('Image downloaded successfully!'), onerror: (error) => console.error('Download error:', error) }); } else { console.error('Could not download image. Unable to find URL or filename.'); } } const downloadButtons = document.querySelectorAll('a[href*="//desu-usergeneratedcontent.xyz/"] i.icon-download-alt'); downloadButtons.forEach(button => { button.closest('a').addEventListener('click', (event) => { event.preventDefault(); const imageLink = event.target.closest('a'); const imageUrl = imageLink.href; let filenameElement = imageLink.closest('div.post_file')?.querySelector('a.post_file_filename'); if (!filenameElement) { filenameElement = imageLink.closest('article.thread, article.post')?.querySelector('a.post_file_filename'); } const originalFilename = filenameElement ? filenameElement.textContent.trim() : null; downloadImage(imageUrl, originalFilename); }); }); const filenameLinks = document.querySelectorAll('a.post_file_filename'); filenameLinks.forEach(link => { link.addEventListener('click', (event) => { event.preventDefault(); const originalFilename = link.textContent.trim(); const imageLink = link.closest('div.post_file, article.thread, article.post') .querySelector('a[href*="//desu-usergeneratedcontent.xyz/"]'); const imageUrl = imageLink ? imageLink.href : null; downloadImage(imageUrl, originalFilename); }); }); })();