diff chrome/content/saved.js @ 0:c14d52a3b2fe

initial import
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 11 Aug 2008 20:34:21 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/chrome/content/saved.js	Mon Aug 11 20:34:21 2008 +0900
@@ -0,0 +1,384 @@
+
+var oProps 		= Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
+var sUserChrome	= (oProps.get("UChrm", Components.interfaces.nsIFile)).path;
+var sPathSeperator = "\\";
+if(sUserChrome[0].indexOf("/") > -1) sPathSeperator = "/";
+
+var sTinyRdfName	= "tinyurl.rdf";
+var sTinyRdfPath	= sUserChrome + sPathSeperator + sTinyRdfName;
+
+// RDF Vars
+var gTinyRdf		= null;
+var gTinyDs			= null;
+var gTinyRdfUtil	= null;
+var gTinyRdfC 		= null;
+var gTinyRdfRoot	= "http://jgillick.nettripper.com/tinyurl";
+
+// Create RDF File if it does not exist
+function tinyurl_saved_rdfCreate(){
+	try{
+		
+		var oFileLocal	= Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);	
+			oFileLocal.initWithPath(sTinyRdfPath);	
+		
+		// Doesn't Exist?
+		if(!oFileLocal.exists()){
+					
+			// Read RDF
+			var oRequest	= new XMLHttpRequest();
+				oRequest.open("GET", "chrome://tinyurl/content/"+ sTinyRdfName, false);
+	        	oRequest.send("");
+			var sContent	= oRequest.responseText;
+			
+			// Write
+			oFileLocal.create(0x00, 0666);
+			var oFileOut = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
+				oFileOut.init(oFileLocal, 0x20 | 0x02, 00666, null);
+				oFileOut.write(sContent, sContent.length);
+				oFileOut.flush();
+				oFileOut.close();
+		}
+	
+	}catch(err){ }
+		
+}
+
+// Enable Buttons
+function tinyurl_saved_disable(dis){
+	document.getElementById('go-saved-button').disabled = dis;
+	document.getElementById('copy-saved-button').disabled = dis;
+	document.getElementById('edit-saved-button').disabled = dis;
+	document.getElementById('remove-saved-button').disabled = dis;
+	
+	if(dis){
+		document.getElementById('go-saved-button').image = "chrome://tinyurl/content/icons/go_off.png";
+		document.getElementById('copy-saved-button').image = "chrome://tinyurl/content/icons/copy_off.png";
+		document.getElementById('edit-saved-button').image = "chrome://tinyurl/content/icons/edit_off.png";
+		document.getElementById('remove-saved-button').image = "chrome://tinyurl/content/icons/remove_off.png";
+	}
+	else{
+		document.getElementById('go-saved-button').image = "chrome://tinyurl/content/icons/go.png";
+		document.getElementById('copy-saved-button').image = "chrome://tinyurl/content/icons/copy.png";
+		document.getElementById('edit-saved-button').image = "chrome://tinyurl/content/icons/edit.png";
+		document.getElementById('remove-saved-button').image = "chrome://tinyurl/content/icons/remove.png";
+	}
+}
+
+// Goto Saved Url
+function tinyurl_saved_go(){
+	var sUri = oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
+	
+	// Get Real Url
+	try{
+		var aProps = tinyurl_saved_getEntry(sUri);
+		
+		if(opener){
+			opener.gBrowser.selectedTab = opener.gBrowser.addTab(aProps["realurl"]);
+		}
+		else{
+			window.open(aProps["realurl"]);
+		}
+		
+		setTimeout("self.focus()", 100);
+		
+	}catch(err) { alert("Error: 560\n Could not access that URL\n"+ err); }
+}
+
+// Copy TinyUrl
+function tinyurl_saved_copy(){
+	if(oSavedTree.currentIndex > -1){
+		var sUri = oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
+		try{
+			var aProps = tinyurl_saved_getEntry(sUri);
+			tinyurl_copyText(aProps["tinyurl"]);		
+		}catch(err){ alert("Error: 580\n Could not copy that URL\n"+ err); }
+	}
+}
+
+// Open Edit Dialog
+function tinyurl_saved_openEdit(){
+	var sUri = oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
+	
+	if(sUri != null && sUri != "")
+		window.openDialog('chrome://tinyurl/content/tinyurl_edit.xul','TinyUrlEditDialog','centerscreen, chrome, modal, resizable', sUri).focus()
+}
+
+// Read RDF Entries
+function tinyurl_saved_read(){
+	if(oSavedTreeItems == null)
+		return;
+		
+	try{
+		tinyurl_saved_initRdf();
+		
+		// Remove All Existing
+		while(oSavedTreeItems.childNodes.length > 0)
+			oSavedTreeItems.removeChild(oSavedTreeItems.firstChild);
+			
+		// Read From RDF
+		var aProps		= null;
+		var oTrgt		= null;
+		var oTreeItem	= null;
+		var oTreeRow	= null;
+		var oTreeCell	= null;
+		var aElements	= gTinyRdfC.GetElements();
+		while(aElements.hasMoreElements()){
+			try{
+				var oRes = aElements.getNext();
+					oRes = oRes.QueryInterface(Components.interfaces.nsIRDFResource);
+				
+				oTreeItem	= document.createElement("treeitem");
+				oTreeItem.setAttribute("uri", oRes.Value);
+				oTreeRow	= oTreeItem.appendChild(document.createElement("treerow"));
+				
+				aProps = tinyurl_saved_getEntry(oRes.Value);
+				
+				// Title
+				oTreeRow.appendChild(document.createElement("treecell")).setAttribute("label", aProps["title"])
+				// TinyUrl
+				oTreeRow.appendChild(document.createElement("treecell")).setAttribute("label", aProps["tinyurl"])
+				// Real Url
+				oTreeRow.appendChild(document.createElement("treecell")).setAttribute("label", aProps["realurl"])
+				
+				oSavedTreeItems.appendChild(oTreeItem);
+				
+			}catch(err){ }
+		}
+		
+		tinyurl_saved_disable(true);
+		
+	}catch(err) { alert("Error 500\nAn unknown error occurred loading saved data\n"+ err); }
+}
+
+// Remvoe RDF Entry
+function tinyurl_saved_remove(){
+	
+	var sUri 	= oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
+	var iSelect	= oSavedTree.currentIndex;
+	
+	if(sUri != null && sUri != "" && confirm("Are you SURE you want to remove this entry?")){
+		try{
+			tinyurl_saved_initRdf();
+			
+			var oRes 		= gTinyRdf.GetResource(sUri);
+			
+			// Remove All Archs
+			var aArchs		= null;
+			var hasArchs	= true;
+			while(hasArchs){
+				aArchs 		= gTinyDs.ArcLabelsOut(oRes);
+				hasArchs 	= aArchs.hasMoreElements();
+				while(aArchs.hasMoreElements()){
+					oArch = aArchs.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
+					
+					//Remove
+					gTinyDs.Unassert(oRes, oArch, gTinyDs.GetTarget(oRes, oArch, true));
+				}
+			}
+			
+			// Remove Element
+			gTinyRdfC.RemoveElement(oRes, true);
+			
+			// Rewrite Tree
+			tinyurl_saved_read()
+			
+			// Select Row
+			if(iSelect > oSavedTree.view.rowCount - 1){
+				oSavedTree.view.selection.select(oSavedTree.view.rowCount - 1);
+			}
+			else{
+				oSavedTree.view.selection.select(iSelect);
+			}
+			
+		}catch(err){ alert("Error 520\nCould not remove that entry.\n"+ err); }
+	}
+}
+
+// Add RDF Entry
+function tinyurl_saved_add(tinyUrl, realUrl, title){
+	var sTitle		= "";
+	var sTimestamp	= (new Date()).getTime();
+	var sTiny		= tinyUrl;
+	var sReal		= realUrl;
+	var sPageTitle	= (title == null) ? "" : title;
+	var sUri		= "http://jgillick.nettripper.com/tinyurl/";
+	var oRes		= null;
+	
+	tinyurl_saved_rdfCreate();
+	
+	// Get Uri
+	if(sTiny.length > "http://tinyurl.com/".length){
+		sUri += sTiny.substring(("http://tinyurl.com/".length));
+	}
+	else{ sUri = null; }
+	
+	// Is this TinyUrl already saved?
+	try{
+		tinyurl_saved_initRdf();
+		oRes = gTinyRdf.GetResource(sUri);
+		
+		if(gTinyRdfC.IndexOf(oRes) > -1){
+			alert("You have already saved a TinyUrl entry for that URL.")
+			return false;
+		}		
+	}catch(err){ }
+	
+	if(!sTiny || !sReal)
+		return;
+	
+	// Check Uri
+	if(sUri == null){
+		alert("Error 540\nCould not save that TinyUrl.\n"+ tinyUrl);
+		return false;
+	}
+	
+	// Get Title
+	while(true){
+		sTitle = prompt("Title to save it under:", sPageTitle);
+		
+		// Empty
+		if(sTitle == ""){
+			alert("You must enter a title.");
+		}
+		// null (cancel)
+		else if(sTitle == null){
+			break;
+		}
+		// Duplicate
+		else if(tinyurl_saved_getUriForTitle(sTitle) != null){
+			alert("A saved TinyUrl entry already exists with that title.");
+			sTitle
+		}
+		else{
+			break;
+		}
+	}
+	
+	if(sTitle != null){
+		try{
+			tinyurl_saved_initRdf()
+			var oRes = gTinyRdf.GetResource(sUri);
+			gTinyRdfC.AppendElement(oRes);
+			gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title"), gTinyRdf.GetLiteral(sTitle), true);
+			gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#tinyurl"), gTinyRdf.GetLiteral(sTiny), true);
+			gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#realurl"), gTinyRdf.GetLiteral(sReal), true);
+			gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#created"), gTinyRdf.GetLiteral(sTimestamp), true);
+			
+		
+			// Rewrite Tree
+			tinyurl_saved_read();
+
+			return true;
+		}catch(err){ 
+			alert("Error 541\nCould not save that TinyUrl.\n"+ err); 
+		}
+	}
+
+	return false;
+}
+
+// Get favicon.ico for url
+function tinyurl_saved_getFavIcon(sUrl){
+	if(opener){
+		
+		// Get Url for favicon.ico
+		var oUri 		= Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
+			oUri.spec	= sUrl;
+		var sFavUri		= opener.gBrowser.buildFavIconString(oUri);
+				
+		// Verify Exists
+		try{
+			var oRequest	= new XMLHttpRequest();
+				oRequest.open("GET", sFavUri, false);
+				oRequest.send("");
+			
+			if(oRequest.status == 200)
+				return sFavUri;
+			
+		}catch(err) {  }
+	}
+	
+	return "";
+}
+
+
+// Get Data From Entry
+function tinyurl_saved_getEntry(sUri){
+	var aProps	= new Array();
+	
+	try{
+		tinyurl_saved_initRdf();
+		
+		var oRes 	= gTinyRdf.GetResource(sUri);
+		
+		// Get Resources
+		aProps["title"]		= gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title"), true);
+		aProps["tinyurl"]	= gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#tinyurl"), true);
+		aProps["realurl"]	= gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#realurl"), true);
+		aProps["created"]	= gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#created"), true);
+		
+		// Get Values
+		(aProps["title"] 	instanceof Components.interfaces.nsIRDFLiteral) ? aProps["title"] 	= aProps["title"].Value 	: aProps["title"] 	= "";
+		(aProps["tinyurl"] 	instanceof Components.interfaces.nsIRDFLiteral) ? aProps["tinyurl"] = aProps["tinyurl"].Value 	: aProps["tinyurl"] = "";
+		(aProps["realurl"] 	instanceof Components.interfaces.nsIRDFLiteral) ? aProps["realurl"] = aProps["realurl"].Value 	: aProps["realurl"] = "";
+		(aProps["created"] 	instanceof Components.interfaces.nsIRDFLiteral) ? aProps["created"] = aProps["created"].Value 	: aProps["created"] = "";
+		
+	}catch(err){ throw err; }
+	
+	return aProps;
+}
+
+// Get Uri for title
+function tinyurl_saved_getUriForTitle(sTitle){
+	try{
+		tinyurl_saved_initRdf();
+	
+		var oSubject	= gTinyDs.GetSource(gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title"), gTinyRdf.GetLiteral(sTitle), true);
+		if(oSubject instanceof Components.interfaces.nsIRDFResource)
+			return oSubject.Value
+			
+	}catch(err) { throw err; }
+	
+	return null;
+}
+
+// Change Title to sTitle for sUri
+function tinyurl_saved_changeTitle(sUri, sTitle){
+	try{
+		tinyurl_saved_initRdf();
+		
+		var oRes	= gTinyRdf.GetResource(sUri);
+		var oProp	= gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title");
+		var sOld 	= gTinyDs.GetTarget(oRes, oProp, true); // Old Value
+		
+		//Change
+		gTinyDs.Change(oRes, oProp, sOld, gTinyRdf.GetLiteral(sTitle));
+			
+	}catch(err) { throw err; }
+	
+	return null;
+}
+
+
+// Init RDF Objects
+function tinyurl_saved_initRdf(){
+	try{
+		if(gTinyRdf == null)
+			gTinyRdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
+		if(gTinyDs == null)
+			gTinyDs	= gTinyRdf.GetDataSourceBlocking("file:///"+ sTinyRdfPath);
+		if(gTinyRdfUtil == null)
+			gTinyRdfUtil = Components.classes["@mozilla.org/rdf/container-utils;1"].getService(Components.interfaces.nsIRDFContainerUtils);
+		if(gTinyRdfC == null){
+			gTinyRdfC = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer);
+			
+			//Get or Add Sequence
+			if(gTinyRdfUtil.IsSeq(gTinyDs, gTinyRdf.GetResource(gTinyRdfRoot))){
+				gTinyRdfC.Init(gTinyDs, gTinyRdf.GetResource(gTinyRdfRoot)); 
+			}else{
+				gTinyRdfC = gTinyRdfUtil.MakeSeq(gTinyDs, gTinyRdf.GetResource(gTinyRdfRoot)); //Create
+			}
+		}
+				
+	}catch(err){throw err}
+}
\ No newline at end of file