Mercurial > tinyurl_creator
view 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 source
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} }