GLB Forum Quote Collapse

By pabst Last update Sep 12, 2009 — Installed 371 times.

There are 7 previous versions of this script.

// ==UserScript==
// @name           GLB Forum Quote Collapse
// @namespace      pbr/collapse
// @description    Collapse Quoted Messages In GLB Forum Posts
// @include        http://goallineblitz.com/game/forum_thread.pl?thread_id=*
// @copyright      2009, pabst
// @license        (CC) Attribution Share Alike; http://creativecommons.org/licenses/by-sa/3.0/
// @version        09.09.12
// ==/UserScript==

var depth = 2;

window.setTimeout(
    function() {
	main();
    }
,100);

function main() {
    var posts = document.getElementsByClassName("post_content_inner");
    for (var i=0; i<posts.length; i++) {
    	var count = doRecursion(posts[i], 0) - 1;
//    	console.log(i+" : "+count);
    }

    var posts = document.getElementsByClassName("post_content_inner");
    while (depth > 0) {
//		console.log("pass # : "+depth+" -- post length = "+posts.length);
	var quotes = new Array();
	for (var i=0; i<posts.length; i++) {
	    var collapse = getChildrenByClassName("collapse",posts[i]);
	    for (var j=0; j<collapse.length; j++) {
		var evt = document.createEvent("MouseEvent");
		evt.initMouseEvent("click",true,true,window,-1,-1,-1,-1,-1,false,false,false,false,0,null);
		quotes.push(collapse[j].nextSibling);
		collapse[j].dispatchEvent(evt);
	    }
	}
//		console.log(depth+" | quotes.length = "+quotes.length);
	posts = quotes;
	depth--;
    }
	    
    var buttons = document.getElementsByClassName("buttonSmall");
    for (var i=0; i<buttons.length; i++) {
	if (buttons[i].innerHTML == "<span>Quote</span>") {
	    var code = buttons[i].getAttribute("onclick");
	    code = code.split("'")[1];	   
	    buttons[i].setAttribute("id","quote_"+code);
	    buttons[i].setAttribute("onclick","");
//	    console.log("added for : "+code);
	    buttons[i].addEventListener("click", 
					function(e) { 
					    quoteButton(e); 
					}, false);
	}
    }
}

function doRecursion(post, num) {
    var str = "doRecursion : ";
    for (var i=0; i<num; i++) {
	str += "\t";
    }
	
    var children = getChildrenByClassName("quote", post);
    var count = new Array(children.length);
    for (var i=0; i<children.length; i++) {
//      console.log(str+num+" -- "+children[i].innerHTML.slice(0,40));
	count[i] = doRecursion(children[i], num+1);
	hideElement(children[i], count[i]);
    }	
    var sum = 1;
    for (var i=0; i<count.length; i++) {
	sum += count[i];
    }
    return sum;
}

function hideElement(el, len) {
    if (el == null) { 
	return; 
    }
    el.setAttribute("style","display: none;"); 
        
    var hspan = document.createElement("span");
    hspan.setAttribute("class","collapse");
    hspan.setAttribute("style","color: #A03C19; text-decoration: underline;");
    hspan.innerHTML = "-- "+len+" message";
    if (len > 1) {
	hspan.innerHTML += "s --";
    }
    else {
	hspan.innerHTML += " --";
    }
    	
    el.parentNode.insertBefore(hspan, el);
    hspan.addEventListener('click', function(e) { showElement(e); }, false);
}

function showElement(e) {
    var pressed = e.target;
    var parent = e.target.parentNode;
    var unquoted = e.target.nextSibling;
	
    unquoted.setAttribute("style",""); 
    parent.removeChild(pressed);
}

function quoteButton(evt) {
    var code = evt.target.parentNode.getAttribute("id").split("_")[1];
    var post = document.getElementById(code).parentNode;
//    console.log("1 : "+post.innerHTML);

    if (post.getElementsByClassName("collapse").length == 0) {
//	console.log("no collapse's found");
	while (post.innerHTML.indexOf(' style=""') != -1) {
	    post.innerHTML = post.innerHTML.replace(' style=""','');
	}
	unsafeWindow.reply(code);
	return;
    }

    while (post.getElementsByClassName("collapse").length > 0) {
	var el = post.getElementsByClassName("collapse")[0];
	el.parentNode.removeChild(el);
    }
//    console.log("2 : "+post.innerHTML);
    var q = post.getElementsByClassName("quote");
    for (i=0; i<q.length; i++) {
	q[i].style.display = "";
    }
    while (post.innerHTML.indexOf(' style=""') != -1) {
	post.innerHTML = post.innerHTML.replace(' style=""','');
    }
//    console.log("3 : "+post.innerHTML);
    var saved = post.innerHTML;
    
    unsafeWindow.reply(code);        
    
    post.innerHTML = saved;
    doRecursion(post, 0);
}

function getChildrenByClassName(classname, el) {
    var output = [];
    if (el != null) {
	if (el.childNodes == null) { console.log("is null"); return; }
	for (var i=0; i<el.childNodes.length; i++) {
//	    console.log(el.childNodes[i].tagName+" : "+el.childNodes[i].className);
	    var cls = null;
	    try {
		cls = el.childNodes[i].getAttribute("class");
	    }
	    catch (e) { }
	    if (cls != null) {
		if (cls.indexOf(classname) != -1) {
		    output.push(el.childNodes[i]);
//     		    console.log("+");
		}
	    }
	}
    }
    return output;
}