Digg de-n00ber

By MooGoo Last update Dec 8, 2005 — Installed 1,459 times.
// ==UserScript==
// @name          Digg de-n00ber
// @namespace     http://werktheweb.com/gm
// @description	  Gets rid of stupid articles on digg
// @include       http://*digg.com/*
// ==/UserScript==

(function() {
	var diggdenoob = new Object();
	
	diggdenoob.destruct = function () {
		var denoob = document.getElementById("denoobhead");
		denoob.parentNode.removeChild(denoob);
	}
	
	diggdenoob.init = function () {
	
	var GM_value = 'digg_de-n00b_keywords';
	
	var appendKeywordList = function (keyword, parent, before) {
								var spanc = document.createElement('span');
								spanc.className = 'tool';
								spanc.setAttribute("keyword", keyword);
								
								
								
								
								spanc.remove = function () {
										var keywords = getKeywords();
										
										var newKeywords = keywords.replace("|" + this.firstChild.textContent, "");
										
										GM_setValue(GM_value, newKeywords);
										
										
										
										this.parentNode.removeChild(this);
									}
								
								spanc.addEventListener('click', spanc.remove, true);
								
								a = document.createElement('a');
								a.appendChild(document.createTextNode(keyword));
								a.style.textDecoration = "underline";
								a.style.cursor = 'pointer';
								
								spanc.appendChild(a);
								
								if (before) {
									parent.insertBefore(spanc, before);
								} else {
									parent.appendChild(spanc);
								}
								
								
							}
		
	var getKeywords = function() {
		return GM_getValue(GM_value, '');
	}
	
	
	
	
	var addKeyword = function (keyword) {
		var keywords = getKeywords();
		
		keyword = keyword.replace(/\|/g, '\\|');
		
		if (!keywords.match(keyword)) {
			var sep = "|";
			var newKeywords = keywords + sep + keyword;
			
			GM_setValue(GM_value, newKeywords);
			
			return true;
		} else {
			return false;
		}
	}
	
	var addRemoveKeys = function(e) {
	
						if (this.closeNext) {
							this.obj.parentNode.removeChild(this.obj);
							this.closeNext = false;
							this.clearObj.parentNode.removeChild(this.clearObj);
							this.textContent = "Add/Remove Keywords";
							this.parentNode.style.border = "none";
							
							diggdenoob.destruct();
							diggdenoob.init();
							
						} else {
							
							var div = document.createElement("div");
							var inputc = document.createElement("span")
							inputc.className = 'tool';
							inputc.style.border = "none";
							inputc.style.paddingRight = "0";
							var input = document.createElement("input");
							input.style.marginRight = "5px";
							inputc.appendChild(input);
							//var add = document.createElement("span");
							var label = document.createElement("span");
							label.className = 'tool';
							label.style.fontWeight = "bold";
							label.appendChild(document.createTextNode("Keywords (click to remove)"));
							div.appendChild(label);
							
							var keywords = getKeywords().substr(1);
							
							var keyarray = keywords.split("|");
							
							for (var i = 0; key = keyarray[i]; i++) {
								appendKeywordList(key, div);
							}
							
							input.style.border = "solid 1px #ccc";
							//input.style.marginLeft = "5px";
							
							div.style.clear = "both";
							div.style.fontSize = fontSize;
							div.className = 'news-details';
							
							var a = document.createElement('a');
							a.appendChild(document.createTextNode("Add"));
							
							
							a.style.textDecoration = "underline";
							a.style.cursor = "pointer";
							inputc.appendChild(a);
							//add.appendChild(a);
							//add.className = "tool";
							
							//add.style.border = "none";
							//add.style.cursor = "pointer";
							//add.type = "button";
							//add.style.fontSize = fontSize;
							a.addEventListener('click', function() {
								var keyword = input.value;
								
								if (addKeyword(keyword)) {
									appendKeywordList(keyword, div, inputc);
									input.value = "";
								}
								
								
								
								
							}, true);
							
							input.style.fontSize = fontSize
							
							div.appendChild(inputc);
							//div.appendChild(add);
							
							parent.insertBefore(div, container.nextSibling);
							
							div.style.display = "block";
							
							
							
							this.textContent = "Close";
							this.parentNode.style.border = "";
							
							var clear = document.createElement("span");
							clear.className = "tool";
							clear.style.border = "none";
							var cleara = document.createElement("a");
							cleara.appendChild(document.createTextNode("Clear"));
							cleara.style.textDecoration = "underline";
							cleara.style.cursor = "pointer";
							cleara.addEventListener('click', function () {
											var node = div.childNodes[0];
											while (node) {
												nextNode = node.nextSibling;
												if (node.firstChild.nodeName == "A") {
													node.parentNode.removeChild(node);
												}
												
												node = nextNode;
												
											}
											GM_setValue(GM_value, "");
										}, true);
							clear.appendChild(cleara);
							this.parentNode.parentNode.appendChild(clear);
							this.closeNext = true;
							this.obj = div;
							this.clearObj = clear;
						}
					}
					
	var parent = document.getElementById("contents");

	//var regkeywords = keywords.join('|');
	var regkeywords = getKeywords().substr(1);

	var hiddenStories = new Array();
	
	var fontSize = ".9em";
	
	var xpath = "//div[@id = 'contents']/div[@class != 'pages']";
	
	var xpathResult = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
	
	//var story = xpathResult.iterateNext();
	
	for (var n = 0; n < xpathResult.snapshotLength; n++) {
		story = xpathResult.snapshotItem(n);
		
		var cxpath = "div/h3/a/text()";
		
		var title = document.evaluate(cxpath, story, null, XPathResult.STRING_TYPE, null).stringValue;
		
		var re = new RegExp(regkeywords, "i");
		
		var found = re.test(title);
		
		if (found && regkeywords != "") {
			hiddenStories.push(story);
			
			story.style.display = "none";
			story.style.border = "dashed 1px red";
			story.style.MozBorderRadius = "10px";
		} else if (story.style.display == "none") {
			story.style.border = "none";
			story.style.display = "block";
		}
		
		//story = xpathResult.iterateNext();
		
	}
	
	
		var container = document.createElement("div");
		container.id = "denoobhead";
		container.className = 'news-details';
		container.style.paddingTop = "0px";
		
		var span = document.createElement("span");
		span.className = 'tool';
		container.appendChild(span);
		
		
		if (hiddenStories.length == 0) {
			span.appendChild(document.createTextNode("No stupid stories! w00t "));
		} else {
		
			var b = document.createElement("b");
			b.appendChild(document.createTextNode(hiddenStories.length));
			span.appendChild(b);
			
			if (hiddenStories.length == 1) var story_sp = "story";
			else var story_sp = "stories";
		
			span.appendChild(document.createTextNode(" stupid " + story_sp + " hidden "));
		
		
			var toggle = document.createElement('span');
			toggle.className = 'tool';
			
			var a = document.createElement("a");
			a.appendChild(document.createTextNode("Show Stories"));
			a.style.cursor = "pointer";
			a.style.textDecoration = "underline";
			a.addEventListener('click', function () {
						if (this.textContent == "Show Stories") {
							var newText = "Hide Stories";
							var display = "block";
						} else {
							var newText = "Show Stories";
							var display = "none";
						}
						
						for (var i = 0; story = hiddenStories[i]; i++) {
							story.style.display = display;
						}
						
						this.textContent = newText;
					}, true);
			
			toggle.appendChild(a);
			container.appendChild(toggle);
		}
		
		var addremove = document.createElement('span');
		addremove.className = 'tool';
		addremove.style.border = "none";
		
		
		var link = document.createElement('a');
		link.appendChild(document.createTextNode("Add/Remove Keywords"));
		link.style.cursor = "pointer";
		link.style.textDecoration = "underline";
		link.addEventListener('click', addRemoveKeys, true);
		
				
						
						
		
		addremove.appendChild(link);
		
		container.appendChild(addremove);
		
		
		
		
		
		parent.insertBefore(container, parent.firstChild);
	
		
	};
	
	if (!document.getElementById("comments")) diggdenoob.init();
	
}) ();