Greasy Fork is available in English.

dev_broken_thumbs

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

// ==UserScript==
// @name       dev_broken_thumbs
// @namespace  dev_broken_thumbs
// @version    1.01
// @description  remove broken thumb-code within your custom-boxes on deviantart.
// @include    http://*.deviantart.com/
// @include    http://*.deviantart.com/journal/*
// @author      Dediggefedde
// @grant		GM_setValue
// @grant		GM_getValue
// @grant		GM_deleteValue
// ==/UserScript==

(function(){
var thumblist=new Array();
var corr_list=new Array();
var dellist=new Array();
var storlist=new Array();
var eingabenaktiv;
var aktivbox;
var uberset;
var journal=false;
var temp_thumblist=GM_getValue("thumblist");
var temp_corrlist=GM_getValue("corrlist");

function start(){
	if(document.getElementById("journal-entry-form")!=null){
		if(temp_thumblist!=null)temp_thumblist=JSON.parse(temp_thumblist);
		if(temp_corrlist!=null)temp_corrlist=JSON.parse(temp_corrlist);
		if(temp_thumblist.length==0)return;
		thumblist=temp_thumblist;
		corr_list=temp_corrlist;
		GM_deleteValue("thumblist");
		GM_deleteValue("corrlist");
		journal=true;
		showbox();
	}else if(location.href.indexOf("/journal/")!=-1){ //remove thumbs in journal: addition to script
		journal=true;
		var editbut=document.getElementsByClassName("edit-button");
		if(editbut.length==0)return;
		editbut[0].setAttribute("onclick","return false");
		editbut[0].addEventListener("click",analyse);
	}else{
		var customcont = document.getElementsByClassName("gr-box");
		var customedit;
		for(var i=0;i<customcont.length;i++){
			customedit=customcont[i].parentNode.getElementsByClassName("gmbutton2chaos")[0];
			if(typeof customedit =="undefined"||customedit.getAttribute("dev_broken_thumbs"))continue;
			customedit.setAttribute("dev_broken_thumbs","true");
			customedit.addEventListener("click",analyse);
		}
	}
}
function analyse(){
    var rex=/(:thumb\d+:)|(class="instorage)|(a class="thumb)/g;
	corr_list=new Array();
	
    if(!journal){
		aktivbox=this.parentNode.parentNode.parentNode;
		
		if(aktivbox.getElementsByClassName("grf-mirror").length>0)
			thumblist=aktivbox.getElementsByClassName("grf-mirror")[0].innerHTML.match(rex);
		else if(document.getElementById("aboutme-info") != null)
			thumblist=document.getElementById("aboutme-info").innerHTML.match(rex);
		else
			return;
	}else{
		// if(document.getElementsByClassName("journaltext").length==0){setTimeout(analyse,1000);return;}
		thumblist=document.getElementsByClassName("journaltext")[0].innerHTML.match(rex);
	}
    if(!thumblist)return;
    for(var i=0;i<thumblist.length;i++){
        switch(thumblist[i]){
            case "class=\"instorage":corr_list.push(new Array(i,0));break; 
            case "a class=\"thumb":break; 
            default: corr_list.push(new Array(i,1));break; 
        }
    }
    if(!journal){
		detektbutton();
		eingabenaktiv=setInterval(detektbutton,1000);
	}else{
		// showbox();
		//page change when journal-edit is clicked. solution: temporary store thumblist and corr_list and use showbox on load when there is stored data
		GM_setValue("thumblist",JSON.stringify(thumblist));
		GM_setValue("corrlist",JSON.stringify(corr_list));
		location.href=this.getAttribute("href");
	}
}
function detektbutton(){
    if(document.getElementsByClassName("blockmenu").length==0){clearInterval(eingabenaktiv);return;}
	document.getElementsByClassName("blockmenu")[0].getElementsByClassName("edit_link")[0].addEventListener("click",showbox);  
}
function showbox(){
    if(corr_list.length==0)return;
	if(!journal){
		if(typeof aktivbox.getElementsByTagName("textarea")[0]=="undefined"){setTimeout(showbox,1000);return;}
		uberset=aktivbox.getElementsByTagName("textarea")[0].innerHTML.match(/(:thumb\d+:)|(class="instorage)/g);
	}else{
		if(document.getElementById("journal-entry-form")==null||document.getElementById("journal-entry-form").getElementsByClassName("writer").length==0){setTimeout(showbox,1000);return;}
		uberset=document.getElementById("journal-entry-form").getElementsByClassName("writer")[0].innerHTML.match(/(:thumb\d+:)|(class="instorage)/g);
	}
    dellist=new Array();
    storlist=new Array();    
    for(var i=0;i<corr_list.length;i++){
        if(corr_list[i][1]==0)storlist.push(uberset[corr_list[i][0]]);
        else dellist.push(uberset[corr_list[i][0]]);;
    }
    
    var nbox=document.createElement("div");
    nbox.id="dev_broken_thumb_alert";
    nbox.setAttribute("class","loading modal modal-rounded");
    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; ");
    nbox.innerHTML="<a href='' onclick='document.body.removeChild(document.getElementById(\"dev_broken_thumb_alert\"));return false;' class='x'></a>"+
        "<div class='fakedeepee-box'>"+
        "<div class='deepee-title'><strong>Corrupted thumbnails detected!</strong></div>"+
        "<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/>"+
        "<ul style='height: 100px;overflow-y:scroll;'><li>"+dellist.join("</li><li>")+"</li></ul><br/>"+
        "<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/>"+
        "<ul style='height: 100px;overflow-y:scroll;'><li>"+storlist.join("</li><li>")+"</li></ul><br/>"+
        "<div style='margin:0px auto;text-align:center;'>"+
        "<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>"+
        "<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>"+
        "</div>"+
        "</div>";
    document.body.appendChild(nbox);
    document.getElementById("dev_broken_thumb_execute").addEventListener("click",remover);
}
function remover(){
    var remstor=(document.getElementById("rem_stor_thumb").checked);
    var remdel=(document.getElementById("rem_del_thumb").checked);
	var tex;
	
	if(!journal)tex=aktivbox.getElementsByTagName("textarea")[0].innerHTML;
	else tex=document.getElementById("journal-entry-form").getElementsByClassName("writer")[0].innerHTML;

	for(var i=corr_list.length-1; i>=0;i--){
		if((corr_list[i][1]==0&&remstor)||(corr_list[i][1]==1&&remdel)){tex=tex.replace(uberset[corr_list[i][0]],"");}
	}
	if(!journal)aktivbox.getElementsByTagName("textarea")[0].innerHTML=tex;
	else document.getElementById("journal-entry-form").getElementsByClassName("writer")[0].innerHTML=tex;

	
    document.body.removeChild(document.getElementById("dev_broken_thumb_alert"));
}

window.onload=start;
// setInterval(start,1000);
})();