Image Wizard

Does some magic with images.

当前为 2018-05-01 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Image Wizard
  3. // @namespace https://github.com/GrumpyCrouton/Userscripts
  4. // @version 1.0
  5. // @description Does some magic with images.
  6. // @author GrumpyCrouton
  7. // @match *://*.stackoverflow.com/*
  8. // @match *://*.stackexchange.com/*
  9. // @match *://*.superuser.com/*
  10. // @grant GM.xmlHttpRequest
  11. // ==/UserScript==
  12.  
  13. var proxy = "http://service.bypass123.com/index.php";
  14. var replaceFrom = ["imgur.com", "facebook.com"];
  15. var processEvery = 5; //process every x seconds (Useful until I can figure out how to detect when a new image or link is added to DOM. Set to 0 to disable.
  16.  
  17. /* DEBUG */
  18. var debugImg = false;
  19. var debugA = false;
  20. var debug = false;
  21.  
  22.  
  23. /* INTERNAL VARIABLES */
  24. var supportedExtensions = ["png", "jpg", "gif"];
  25.  
  26.  
  27. //DO NOT ALTER BELOW THIS LINE
  28.  
  29. (function() {
  30.  
  31. process();
  32.  
  33. function handleImgTag() {
  34. $('img').each(function() {
  35. url = $(this).prop('src').split('?').shift();
  36. extension = url.split('.').pop();
  37. if (replaceFrom.some(function(v) {
  38. return url.indexOf(v) >= 0;
  39. }) && supportedExtensions.some(function(v) {
  40. return url.indexOf(v) >= 0;
  41. })) {
  42. if (!$(this).attr('processed')) {
  43. $(this).attr('processed', true);
  44. replaceImg(url, $(this));
  45. }
  46. return true;
  47. }
  48. if (debugImg) console.log("No URL match in <img>: " + url);
  49. });
  50. }
  51.  
  52. function handleATag() {
  53. $('a').each(function() {
  54. url = $(this).prop('href').split('?').shift();
  55. extension = url.split('.').pop();
  56. if (replaceFrom.some(function(v) {
  57. return url.indexOf(v) >= 0;
  58. }) && supportedExtensions.some(function(v) {
  59. return url.indexOf(v) >= 0;
  60. })) {
  61. if ($(this).has('img').length < 1) {
  62. replaceA(url, $(this));
  63. return true;
  64. }
  65. }
  66. if (debugA) console.log("No URL match in <a>: " + url);
  67. });
  68. }
  69.  
  70. function replaceImg(src, element) {
  71. GM.xmlHttpRequest({
  72. method: "POST",
  73. url: proxy,
  74. data: "url=" + src,
  75. headers: {
  76. "Content-Type": "application/x-www-form-urlencoded"
  77. },
  78. onload: function(response) {
  79. element.prop('src', response.finalUrl);
  80. element.prop('alt', "Image replaced by Image Wizard");
  81.  
  82. parent_link = element.parent("a");
  83. if (parent_link.length) {
  84. if (parent_link.prop('href') == src) {
  85. parent_link.prop('href', response.finalUrl);
  86. parent_link.prop('target', "_blank");
  87. }
  88. } else {
  89. element.wrap("<a href='" + response.finalUrl + "' target='_blank'></a>");
  90. }
  91. element = element.parent();
  92.  
  93. if (element.parents('.post-text').length) {
  94. wrapContentElement(element);
  95. } else {
  96. wrapDefaultElement(element);
  97. }
  98. }
  99. });
  100. }
  101.  
  102. function replaceA(src, element, addImg = true) {
  103. GM.xmlHttpRequest({
  104. method: "POST",
  105. url: proxy,
  106. data: "url=" + src,
  107. headers: {
  108. "Content-Type": "application/x-www-form-urlencoded"
  109. },
  110. onload: function(response) {
  111. if (element.parents('.post-text').length) {
  112. element.text("");
  113. element.append("<img src='" + response.finalUrl + "'></img>");
  114. wrapContentElement(element);
  115. } else {
  116. element.text("[Image Wizard");
  117. element.wrap("<span></span>").parent('span').append("<a href='https://github.com/GrumpyCrouton/Userscripts/blob/master/Image%20Wizard'>]</a>");
  118. }
  119. element.prop('href', response.finalUrl).prop('target', "_blank");
  120. }
  121. });
  122. }
  123.  
  124. function wrapContentElement(element) {
  125. element.wrap("<div class='module community-bulletin image-proxier'></div>");
  126. element = element.parent(".image-proxier");
  127. element.prepend("\
  128. <div class='bulletin-title'>\
  129. <center>\
  130. <a \
  131. style='text-decoration:none;' \
  132. href='https://github.com/GrumpyCrouton/Userscripts/blob/master/Image%20Wizard'>\
  133. Image Wizard\
  134. </a>\
  135. </center>\
  136. </div>\
  137. <hr>");
  138. }
  139.  
  140. function wrapDefaultElement(element) {
  141. element.wrap("<span></span>");
  142. }
  143.  
  144. function process() {
  145. if(debug) console.log("Processing page.");
  146. handleImgTag();
  147. handleATag();
  148. }
  149. $('img').on('load', function() {
  150. handleImgTag();
  151. });
  152.  
  153. $('a').on('load', function() {
  154. handleATag();
  155. });
  156. if(processEvery > 0) {
  157. setInterval (process, processEvery * 1000);
  158. }
  159.  
  160. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址