二次元图片网站增强

增强二次元图片网站的体验

  1. // ==UserScript==
  2. // @name 二次元图片网站增强
  3. // @namespace https://github.com/LU-JIEJIE/UserScript/tree/main/packages/anime-site-evolved
  4. // @version 1.0.0
  5. // @author lu-jiejie
  6. // @description 增强二次元图片网站的体验
  7. // @license MIT
  8. // @icon https://yande.re/favicon.ico
  9. // @homepage https://github.com/LU-JIEJIE/UserScript/tree/main/packages/anime-site-evolved
  10. // @match *://yande.re/*
  11. // @grant GM_addStyle
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. 'use strict';
  16.  
  17. var _GM_addStyle = /* @__PURE__ */ (() => typeof GM_addStyle != "undefined" ? GM_addStyle : void 0)();
  18. const generalTagsTableUrl = "https://cdn.jsdelivr.net/gh/LU-JIEJIE/UserScript@main/packages/anime-site-evolved/src/data/yande_tags_general.json";
  19. const copyrightTagsTableUrl = "https://cdn.jsdelivr.net/gh/LU-JIEJIE/UserScript@main/packages/anime-site-evolved/src/data/yande_tags_copyright.json";
  20. const showImageSize = () => {
  21. _GM_addStyle(`
  22. #post-list-posts li a.directlink span.directlink-info {
  23. display:none;
  24. }
  25. #post-list-posts li a.directlink span.directlink-res{
  26. display:inline;
  27. }
  28. `);
  29. };
  30. const bindClickToLoadRawImage = () => {
  31. const img = document.querySelector("#image");
  32. const loadRawImageButton = document.querySelector("#highres-show");
  33. const downloadPngButton = document.querySelector("#png");
  34. if (!img || !loadRawImageButton)
  35. return;
  36. if (downloadPngButton)
  37. loadRawImageButton.setAttribute("href", downloadPngButton.getAttribute("href"));
  38. img.addEventListener("click", () => {
  39. loadRawImageButton.click();
  40. });
  41. };
  42. const showImageHidden = () => {
  43. const hideImageButton = document.querySelector("#blacklisted-sidebar");
  44. hideImageButton == null ? void 0 : hideImageButton.remove();
  45. const hiddenImages = document.querySelectorAll(".javascript-hide");
  46. hiddenImages.forEach((hiddenImage) => {
  47. hiddenImage.classList.remove("javascript-hide");
  48. });
  49. };
  50. const addTagTypeHeader = () => {
  51. const tagDefault = document.querySelector("div.sidebar > div:nth-child(3) > h5");
  52. tagDefault == null ? void 0 : tagDefault.remove();
  53. const tagTypes = {
  54. general: "一般",
  55. artist: "画师",
  56. copyright: "版权",
  57. character: "角色",
  58. circle: "社团",
  59. faults: "缺陷"
  60. };
  61. for (const tagType in tagTypes) {
  62. const firstTagByType = document.querySelector(`#tag-sidebar li.tag-type-${tagType}`);
  63. if (!firstTagByType)
  64. continue;
  65. const tagTypeHeader = document.createElement("h5");
  66. tagTypeHeader.style.marginTop = "0.5em";
  67. tagTypeHeader.textContent = tagTypes[tagType];
  68. firstTagByType.before(tagTypeHeader);
  69. }
  70. };
  71. const translateTag = (tagLi, tagsTable) => {
  72. const tagA = tagLi.children[1];
  73. const tag = tagA.textContent;
  74. const tagFormatted = tag.replaceAll(" ", "_");
  75. if (tagsTable[tagFormatted] && tagsTable[tagFormatted] !== "UNTRANSLATED")
  76. tagA.textContent = `[${tagsTable[tagFormatted]}] ${tag}`;
  77. };
  78. const translateTags = async () => {
  79. const generalTagsTable = await (await fetch(generalTagsTableUrl)).json();
  80. const copyrightTagsTable = await (await fetch(copyrightTagsTableUrl)).json();
  81. const tagLis = document.querySelectorAll("#tag-sidebar li");
  82. tagLis.forEach((tagLi) => {
  83. var _a;
  84. const tagType = (_a = tagLi.className.match(/tag-type-(\w+)/)) == null ? void 0 : _a[1];
  85. switch (tagType) {
  86. case "general":
  87. translateTag(tagLi, generalTagsTable);
  88. break;
  89. case "copyright":
  90. translateTag(tagLi, copyrightTagsTable);
  91. break;
  92. }
  93. });
  94. };
  95. const yande = {
  96. regexp: /yande.re/,
  97. handler: async () => {
  98. showImageSize();
  99. bindClickToLoadRawImage();
  100. showImageHidden();
  101. addTagTypeHeader();
  102. translateTags();
  103. }
  104. };
  105. const websites = [
  106. yande
  107. ];
  108. websites.some((website) => {
  109. if (website.regexp.test(window.location.href)) {
  110. website.handler();
  111. return true;
  112. }
  113. return false;
  114. });
  115.  
  116. })();