Desu Image Downloader

Download images with original filenames on desuarchive.org (all boards)

当前为 2024-08-06 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Desu Image Downloader
  3. // @version 1.15
  4. // @description Download images with original filenames on desuarchive.org (all boards)
  5. // @author Anonimas
  6. // @match https://desuarchive.org/*
  7. // @grant GM_download
  8. // @namespace https://greasyfork.org/users/1342214
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict';
  13.  
  14. function getFullFilename(element) {
  15. return element.getAttribute('title') || element.textContent.trim();
  16. }
  17.  
  18. function downloadImage(imageUrl, originalFilename) {
  19. if (imageUrl && originalFilename) {
  20. GM_download({
  21. url: imageUrl,
  22. name: originalFilename,
  23. onload: () => {},
  24. onerror: (error) => console.error('Download error:', error)
  25. });
  26. }
  27. }
  28.  
  29. function handleDownload(event) {
  30. event.preventDefault();
  31. const imageLink = event.target.closest('a[href*="//desu-usergeneratedcontent.xyz/"]');
  32. if (!imageLink) return;
  33.  
  34. const imageUrl = imageLink.href;
  35. let filenameElement = imageLink.closest('div.post_file, article.thread, article.post')?.querySelector('a.post_file_filename');
  36. if (!filenameElement) return;
  37.  
  38. const originalFilename = getFullFilename(filenameElement);
  39. downloadImage(imageUrl, originalFilename);
  40. }
  41.  
  42. document.querySelectorAll('a[href*="//desu-usergeneratedcontent.xyz/"] i.icon-download-alt').forEach(button => {
  43. button.closest('a').addEventListener('click', handleDownload);
  44. });
  45.  
  46. document.querySelectorAll('a.post_file_filename').forEach(link => {
  47. link.addEventListener('click', handleDownload);
  48. });
  49. })();