dev_broken_thumbs

remove broken thumb-code within your custom-boxes on deviantart.

  1. // ==UserScript==
  2. // @name dev_broken_thumbs
  3. // @namespace dev_broken_thumbs
  4. // @version 1.01
  5. // @description remove broken thumb-code within your custom-boxes on deviantart.
  6. // @include http://*.deviantart.com/
  7. // @include http://*.deviantart.com/journal/*
  8. // @author Dediggefedde
  9. // @grant GM_setValue
  10. // @grant GM_getValue
  11. // @grant GM_deleteValue
  12. // ==/UserScript==
  13.  
  14. (function(){
  15. var thumblist=new Array();
  16. var corr_list=new Array();
  17. var dellist=new Array();
  18. var storlist=new Array();
  19. var eingabenaktiv;
  20. var aktivbox;
  21. var uberset;
  22. var journal=false;
  23. var temp_thumblist=GM_getValue("thumblist");
  24. var temp_corrlist=GM_getValue("corrlist");
  25.  
  26. function start(){
  27. if(document.getElementById("journal-entry-form")!=null){
  28. if(temp_thumblist!=null)temp_thumblist=JSON.parse(temp_thumblist);
  29. if(temp_corrlist!=null)temp_corrlist=JSON.parse(temp_corrlist);
  30. if(temp_thumblist.length==0)return;
  31. thumblist=temp_thumblist;
  32. corr_list=temp_corrlist;
  33. GM_deleteValue("thumblist");
  34. GM_deleteValue("corrlist");
  35. journal=true;
  36. showbox();
  37. }else if(location.href.indexOf("/journal/")!=-1){ //remove thumbs in journal: addition to script
  38. journal=true;
  39. var editbut=document.getElementsByClassName("edit-button");
  40. if(editbut.length==0)return;
  41. editbut[0].setAttribute("onclick","return false");
  42. editbut[0].addEventListener("click",analyse);
  43. }else{
  44. var customcont = document.getElementsByClassName("gr-box");
  45. var customedit;
  46. for(var i=0;i<customcont.length;i++){
  47. customedit=customcont[i].parentNode.getElementsByClassName("gmbutton2chaos")[0];
  48. if(typeof customedit =="undefined"||customedit.getAttribute("dev_broken_thumbs"))continue;
  49. customedit.setAttribute("dev_broken_thumbs","true");
  50. customedit.addEventListener("click",analyse);
  51. }
  52. }
  53. }
  54. function analyse(){
  55. var rex=/(:thumb\d+:)|(class="instorage)|(a class="thumb)/g;
  56. corr_list=new Array();
  57. if(!journal){
  58. aktivbox=this.parentNode.parentNode.parentNode;
  59. if(aktivbox.getElementsByClassName("grf-mirror").length>0)
  60. thumblist=aktivbox.getElementsByClassName("grf-mirror")[0].innerHTML.match(rex);
  61. else if(document.getElementById("aboutme-info") != null)
  62. thumblist=document.getElementById("aboutme-info").innerHTML.match(rex);
  63. else
  64. return;
  65. }else{
  66. // if(document.getElementsByClassName("journaltext").length==0){setTimeout(analyse,1000);return;}
  67. thumblist=document.getElementsByClassName("journaltext")[0].innerHTML.match(rex);
  68. }
  69. if(!thumblist)return;
  70. for(var i=0;i<thumblist.length;i++){
  71. switch(thumblist[i]){
  72. case "class=\"instorage":corr_list.push(new Array(i,0));break;
  73. case "a class=\"thumb":break;
  74. default: corr_list.push(new Array(i,1));break;
  75. }
  76. }
  77. if(!journal){
  78. detektbutton();
  79. eingabenaktiv=setInterval(detektbutton,1000);
  80. }else{
  81. // showbox();
  82. //page change when journal-edit is clicked. solution: temporary store thumblist and corr_list and use showbox on load when there is stored data
  83. GM_setValue("thumblist",JSON.stringify(thumblist));
  84. GM_setValue("corrlist",JSON.stringify(corr_list));
  85. location.href=this.getAttribute("href");
  86. }
  87. }
  88. function detektbutton(){
  89. if(document.getElementsByClassName("blockmenu").length==0){clearInterval(eingabenaktiv);return;}
  90. document.getElementsByClassName("blockmenu")[0].getElementsByClassName("edit_link")[0].addEventListener("click",showbox);
  91. }
  92. function showbox(){
  93. if(corr_list.length==0)return;
  94. if(!journal){
  95. if(typeof aktivbox.getElementsByTagName("textarea")[0]=="undefined"){setTimeout(showbox,1000);return;}
  96. uberset=aktivbox.getElementsByTagName("textarea")[0].innerHTML.match(/(:thumb\d+:)|(class="instorage)/g);
  97. }else{
  98. if(document.getElementById("journal-entry-form")==null||document.getElementById("journal-entry-form").getElementsByClassName("writer").length==0){setTimeout(showbox,1000);return;}
  99. uberset=document.getElementById("journal-entry-form").getElementsByClassName("writer")[0].innerHTML.match(/(:thumb\d+:)|(class="instorage)/g);
  100. }
  101. dellist=new Array();
  102. storlist=new Array();
  103. for(var i=0;i<corr_list.length;i++){
  104. if(corr_list[i][1]==0)storlist.push(uberset[corr_list[i][0]]);
  105. else dellist.push(uberset[corr_list[i][0]]);;
  106. }
  107. var nbox=document.createElement("div");
  108. nbox.id="dev_broken_thumb_alert";
  109. nbox.setAttribute("class","loading modal modal-rounded");
  110. nbox.setAttribute("style","display:block;z-index:999999;top: 60%; left: 60%; width: 400px; height: 400px; margin-left: -339px; margin-top: -298px; position: fixed; box-shadow: rgba(0, 0, 0, 0.496094) 0px 1px 4px, rgb(255, 255, 255) 0px 1px 1px inset; ");
  111. nbox.innerHTML="<a href='' onclick='document.body.removeChild(document.getElementById(\"dev_broken_thumb_alert\"));return false;' class='x'></a>"+
  112. "<div class='fakedeepee-box'>"+
  113. "<div class='deepee-title'><strong>Corrupted thumbnails detected!</strong></div>"+
  114. "<span style='font-weight:bold;'><input type='checkbox' checked='checked' name='rem_del_thumb' id='rem_del_thumb'/><label for='rem_del_thumb'>Remove "+dellist.length+" deleted thumbs</label><br/>"+
  115. "<ul style='height: 100px;overflow-y:scroll;'><li>"+dellist.join("</li><li>")+"</li></ul><br/>"+
  116. "<span style='font-weight:bold;'><input type='checkbox' checked='checked' name='rem_stor_thumb' id='rem_stor_thumb'/><label for='rem_stor_thumb'>Remove "+storlist.length+" thumbs in storage</label><br/>"+
  117. "<ul style='height: 100px;overflow-y:scroll;'><li>"+storlist.join("</li><li>")+"</li></ul><br/>"+
  118. "<div style='margin:0px auto;text-align:center;'>"+
  119. "<a href='' onclick='return false;' class='gmbutton2 gmbutton2s' style='margin-right:10px;width:100px;display:inline-block' id='dev_broken_thumb_execute'>Remove<b></b></a>"+
  120. "<a href='' onclick='document.body.removeChild(document.getElementById(\"dev_broken_thumb_alert\"));return false;' class='gmbutton2 gmbutton2c' style='width:100px;display:inline-block' id='dev_broken_thumb_execute'>Cancel<b></b></a>"+
  121. "</div>"+
  122. "</div>";
  123. document.body.appendChild(nbox);
  124. document.getElementById("dev_broken_thumb_execute").addEventListener("click",remover);
  125. }
  126. function remover(){
  127. var remstor=(document.getElementById("rem_stor_thumb").checked);
  128. var remdel=(document.getElementById("rem_del_thumb").checked);
  129. var tex;
  130. if(!journal)tex=aktivbox.getElementsByTagName("textarea")[0].innerHTML;
  131. else tex=document.getElementById("journal-entry-form").getElementsByClassName("writer")[0].innerHTML;
  132.  
  133. for(var i=corr_list.length-1; i>=0;i--){
  134. if((corr_list[i][1]==0&&remstor)||(corr_list[i][1]==1&&remdel)){tex=tex.replace(uberset[corr_list[i][0]],"");}
  135. }
  136. if(!journal)aktivbox.getElementsByTagName("textarea")[0].innerHTML=tex;
  137. else document.getElementById("journal-entry-form").getElementsByClassName("writer")[0].innerHTML=tex;
  138.  
  139. document.body.removeChild(document.getElementById("dev_broken_thumb_alert"));
  140. }
  141.  
  142. window.onload=start;
  143. // setInterval(start,1000);
  144. })();