Del.icio.us archive item

By systempuntoout Last update Aug 16, 2005 — Installed 1,201 times.
// ==UserScript==
// @name          Del.icio.us archive item 
// @namespace     http://systempuntoout.blogspot.com
// @include       http://del.icio.us/*
// @exclude       
// @description	  Adds an "archive" link that remove your "toRead" tag
// @version 	  0.3
// ==/UserScript==

(function(){
	var toReadTag=".toread";
	
	//MAIN
	function createArchiveLinks(){
		var locationHrefLength=document.location.href.length;
		var toReadTagLength=toReadTag.length;
		if ( document.location.href.substr(locationHrefLength-toReadTagLength,locationHrefLength) == toReadTag){		
			var divs = document.getElementsByTagName("div");
			var postLinks = getPostLinks();
			if(postLinks) addDeleteItem(postLinks);
		}
	}
		
	
	//UTILITY
	function addDeleteItem(linkNodes){	
	
		for(var i=0;i<linkNodes.length;i++){
			addLink(linkNodes[i].node, linkNodes[i].link, linkNodes[i].prefix,linkNodes[i].tags,linkNodes[i].description,linkNodes[i].extended);
		}
	}
	
	function getPostLinks(){
		var links = new Array();
		var posts = document.evaluate(
    			"//li[@class='post']",
			document,
			null,
			XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
			null);
		
		if(posts.snapshotLength == 0){
			return null;
		}
		for(var i=0;i<posts.snapshotLength;i++){
			var metas=document.evaluate(
				"div[@class='meta']",
				posts.snapshotItem(i),
				null,
				XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    				null);
    		var desc=document.evaluate(
				"h4[@class='desc']",
				posts.snapshotItem(i),
				null,
				XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    				null);
    		var commands=document.evaluate(
				"div[@class='commands']",
				posts.snapshotItem(i),
				null,
				XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    				null);
			
			var extend=document.evaluate(
				"p[@class='notes']",
				posts.snapshotItem(i),
				null,
				XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    				null);	
    				
			if(toAddLink(commands.snapshotItem(0))){ 
				var prefix = getLinkPrefix(commands.snapshotItem(0));
				
				var tags = getTags(metas.snapshotItem(0));
			
				var link = getLink(posts.snapshotItem(i));
				var description = getDesc(desc.snapshotItem(0));
				var extended =getExtended(extend.snapshotItem(0));
				links.push({"link":link,"node":commands.snapshotItem(0),"prefix":prefix,"tags":tags,"description":description,"extended":extended});
			}
		}
		return links;
	}

	
	function getLink(node){
		var aParent = node.getElementsByTagName("h4")[0];//this used to look for a div element
		var delLink = aParent.getElementsByTagName("a")[0];
		return delLink.href;
	} 
	
	function toAddLink(linkParent) { 
		var links = linkParent.getElementsByTagName("a");
		
		for(var i=0;i<links.length;i++){ 
			if(links[i].innerHTML == "edit"){ 
				return true;
			}
		} 
		return false;
	}
	
	function getLinkPrefix(linkParent){ 
		var links = linkParent.getElementsByTagName("a");
		for(var i=0;i<links.length;i++){
			if(links[i].innerHTML == "edit"){
				var url = links[i].getAttribute("href");
				var prefix =  url.split("?")[0];
				return prefix;
			}
		}
	}
	
	function getTags(linkParent){ 
			var tags="";
			var links = linkParent.getElementsByTagName("a");
			
			for(var i=0;i<links.length;i++){
				if(links[i].innerHTML!="edit"  && links[i].innerHTML.indexOf("other people")==-1 && links[i].innerHTML.indexOf("other person")==-1  && links[i].innerHTML!=toReadTag){
				 	tags=links[i].innerHTML+" "+tags;				
				};
				
			}
			return tags.substring(0,tags.length-1);
	}
	
	function getDesc(linkParent){ 
				var links = linkParent.getElementsByTagName("a");
				return(links[0].innerHTML);
	}

	function getExtended(linkParent){
				if (linkParent!=null) return linkParent.textContent;
				else return "";				
	}
	
	
	function addLink(node, url, prefix,tags,description,extended){
		var archiveLink = document.createElement("a");
		archiveLink.setAttribute("style","background-color: rgb(4%,219%,52%);");
		archiveLink.href="javascript:{var xmlhttp = new XMLHttpRequest();xmlhttp.open('POST','http://del.icio.us/api/posts/add',false);var xmlstring='url='+encodeURIComponent(\'"+url.split("'").join("\\'")+"\')+'&description='+encodeURIComponent(\'"+description.split("'").join("\\'")+"\')+'&tags='+encodeURIComponent(\'"+tags.split("'").join("\\'")+"\')+'&extended='+encodeURIComponent(\'"+extended.split("'").join("\\'")+"\');xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');xmlhttp.send(xmlstring);document.location ='http://del.icio.us"+prefix+"';}";
		archiveLink.innerHTML="archive";
		node.appendChild(document.createTextNode(" / "));
		node.appendChild(archiveLink);		
	}
		

	window.addEventListener("load",createArchiveLinks,false); 
}
)();