Source for "Sage news filter"

By joro
Has no other scripts.


// ==UserScript==
// @name          Sage news filter
// @namespace     http://allyourfeedsarebelongtous.com
// @description	  Based on the digg de-n00ber script. Gets rid of unwanted rss news.
// @include       file://*sage.html
// ==/UserScript==

(function() {

	var diggdenoob = new Object();

	diggdenoob.destruct = function ()
        {
		var denoob = document.getElementById("denoobhead");
		denoob.parentNode.removeChild(denoob);
	}

	diggdenoob.init = function ()
        {
		var parent = document.createElement("div");
		parent.id = "parent";
		parent.style.textAlign = "right";
		parent.style.width = document.width - 315 + "px";
		parent.style.position = "absolute";
		parent.style.top = "15px";
		parent.style.right = "15px";
		parent.style.fontSize = "8pt";

		document.getElementById("rss-header").appendChild(parent);

		var GM_value = 'digg_de-n00b_keywords';

		var setStyle = function(el)
		{
			el.setAttribute("style", "display:block; float:right; font-size:11px; padding:2px 6px;");
		}

		var appendKeywordList = function (keyword, parent, before) 
		{
			var spanc = document.createElement('span');
			setStyle(spanc);
			//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");
				div.style.width = "725px";

				var inputc = document.createElement("span")
				setStyle(inputc);
				//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");
				setStyle(label);
				//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;
				setStyle(div);
				//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");
				setStyle(clear);
				//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 regkeywords = keywords.join('|');
		var regkeywords = getKeywords().substr(1);

		var hiddenStories = new Array();

		var fontSize = ".9em";
 
		var xpathResult = document.evaluate("//div[@class = 'item']", 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 title = document.evaluate("h2/a/text()", 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 = "solid 1px red";
			}
			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";
		setStyle(container);
		//container.className = 'news-details';
		container.style.paddingTop = "0px";

		var span = document.createElement("span");
		setStyle(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');
			setStyle(toggle);
			//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');
		setStyle(addremove);
		//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();

}) ();