DeviantBlocker

DeviantArt gallery - block images from selected artists in Eclipse

  1. // ==UserScript==
  2. // @name DeviantBlocker
  3. // @namespace brandrock.co.za
  4. // @author Peter Brand
  5. // @description DeviantArt gallery - block images from selected artists in Eclipse
  6. // @license GNU GPLv3
  7. // @include http://www.deviantart.com/*
  8. // @include https://www.deviantart.com/*
  9. // @version 4.3
  10. // @grant GM_getValue
  11. // @grant GM_setValue
  12. // @run-at document-start
  13. // ==/UserScript==
  14.  
  15. // @grant GM_log
  16. (function() {
  17. //first time scan on load
  18. document.addEventListener ('DOMContentLoaded', pageInit);
  19. function buttonAdd(parent, label, title, style, clickEvent){
  20. var elem = document.createElement('button');
  21. elem.type = 'button';
  22. elem.style = style;
  23. elem.style.zIndex = '99';
  24. elem.style.position = 'absolute';
  25. elem.title = title;
  26. elem.innerHTML = label;
  27. parent.appendChild(elem);
  28. elem.addEventListener('click', clickEvent);
  29. return elem;
  30. }
  31. function pageInit() {
  32. //button to reveal blacklist
  33. var bdiv = document.getElementById('root');
  34. var blackText = document.createElement('textarea');
  35. blackText.style = 'position: absolute; display: none; top:100px; right: 0px; z-index: 99;';
  36. bdiv.appendChild(blackText);
  37. buttonAdd(bdiv, '?DAB', 'Click to show blacklisted artists'
  38. , 'top:0px; right: 0px', function(e){
  39. var blacklist = GM_getValue('DAGbl2', '|');
  40. blackText.innerHTML = blacklist;
  41. blackText.style.display='inline-block';
  42. });
  43. blackText.addEventListener('change', function (){
  44. GM_setValue('DAGbl2', blackText.value)
  45. });
  46. }
  47. function scanImages() {
  48. var blacklist = GM_getValue('DAGbl2', '|');
  49. var artSecs = document.querySelectorAll('._2YkEf');
  50. GM_setValue('DAGdebug', artSecs.length);
  51. var count = 0;
  52. //scan all artists sections
  53. for(var i = artSecs.length; i--;) {
  54. var artLink = artSecs[i].querySelector('a[data-username]');
  55. var artist = artLink.getAttribute('data-username');
  56. var img = artSecs[i].querySelector('img');
  57. //quick check to see if src has been specified and haven't done this image already
  58. if (!img.devblok && img.getAttribute('src')>''){
  59. img.devblok = true;
  60. img.setAttribute("data-blocked", -1);
  61. var elem = buttonAdd(artSecs[i], 'x', 'Click to hide/show images from this artist'
  62. , 'bottom:0px; right: 0px', function(e){
  63. artistToggle(e, this);
  64. });
  65. elem.img = img;
  66. img.setAttribute('data-artist', artist);
  67. img.artist = artist;
  68. var arto = '|' + artist + '|';
  69. if (blacklist.indexOf(arto) > -1){
  70. imgHide(img);
  71. img.isBlocked = true;
  72. img.setAttribute('data-blocked', 1);
  73. count++;
  74. } else {
  75. img.isBlocked = false;
  76. img.setAttribute('data-blocked', 0);
  77. }
  78. }
  79. }
  80. }
  81.  
  82. function artistToggle(e, button) {
  83. //show or hide the images for this artist
  84. var i, img;
  85. var blacklist = GM_getValue('DAGbl2', '|');
  86. var thumbs = document.querySelectorAll('img[data-artist=\'' + button.img.artist + '\']');
  87. if (button.img.isBlocked){
  88. //remove from blacklist string - could have used an array, but string is fast enough
  89. blacklist = blacklist.replace(button.img.artist + '|', '');
  90. GM_setValue('DAGbl2', blacklist);
  91. //scan page for all images for this artist and show them
  92. for(i = thumbs.length; i--;) imgShow(thumbs[i]);
  93. button.img.isBlocked = false;
  94. } else {
  95. //add to blacklist
  96. blacklist = blacklist + button.img.artist + '|';
  97. GM_setValue('DAGbl2', blacklist);
  98. //scan page for all images for this artist and hide them
  99. for(i = thumbs.length; i--;) imgHide(thumbs[i]);
  100. button.img.isBlocked = true;
  101. }
  102. var event = e || window.event;
  103. if (!event) return;
  104. event.cancelBubble = true;
  105. if (event.stopPropagation) event.stopPropagation();
  106. }
  107. function imgHide(img){
  108. //img.style.opacity = '0.05';
  109. img.style.visibility = 'hidden';
  110. }
  111. function imgShow(img){
  112. //img.style.opacity = '1';
  113. img.style.visibility = 'visible';
  114. }
  115. setInterval(function() {scanImages();}, 1000);
  116. }
  117. )();

QingJ © 2025

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