0
|
1
|
|
2 var oProps = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties);
|
|
3 var sUserChrome = (oProps.get("UChrm", Components.interfaces.nsIFile)).path;
|
|
4 var sPathSeperator = "\\";
|
|
5 if(sUserChrome[0].indexOf("/") > -1) sPathSeperator = "/";
|
|
6
|
|
7 var sTinyRdfName = "tinyurl.rdf";
|
|
8 var sTinyRdfPath = sUserChrome + sPathSeperator + sTinyRdfName;
|
|
9
|
|
10 // RDF Vars
|
|
11 var gTinyRdf = null;
|
|
12 var gTinyDs = null;
|
|
13 var gTinyRdfUtil = null;
|
|
14 var gTinyRdfC = null;
|
|
15 var gTinyRdfRoot = "http://jgillick.nettripper.com/tinyurl";
|
|
16
|
|
17 // Create RDF File if it does not exist
|
|
18 function tinyurl_saved_rdfCreate(){
|
|
19 try{
|
|
20
|
|
21 var oFileLocal = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
|
|
22 oFileLocal.initWithPath(sTinyRdfPath);
|
|
23
|
|
24 // Doesn't Exist?
|
|
25 if(!oFileLocal.exists()){
|
|
26
|
|
27 // Read RDF
|
|
28 var oRequest = new XMLHttpRequest();
|
|
29 oRequest.open("GET", "chrome://tinyurl/content/"+ sTinyRdfName, false);
|
|
30 oRequest.send("");
|
|
31 var sContent = oRequest.responseText;
|
|
32
|
|
33 // Write
|
|
34 oFileLocal.create(0x00, 0666);
|
|
35 var oFileOut = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
|
|
36 oFileOut.init(oFileLocal, 0x20 | 0x02, 00666, null);
|
|
37 oFileOut.write(sContent, sContent.length);
|
|
38 oFileOut.flush();
|
|
39 oFileOut.close();
|
|
40 }
|
|
41
|
|
42 }catch(err){ }
|
|
43
|
|
44 }
|
|
45
|
|
46 // Enable Buttons
|
|
47 function tinyurl_saved_disable(dis){
|
|
48 document.getElementById('go-saved-button').disabled = dis;
|
|
49 document.getElementById('copy-saved-button').disabled = dis;
|
|
50 document.getElementById('edit-saved-button').disabled = dis;
|
|
51 document.getElementById('remove-saved-button').disabled = dis;
|
|
52
|
|
53 if(dis){
|
|
54 document.getElementById('go-saved-button').image = "chrome://tinyurl/content/icons/go_off.png";
|
|
55 document.getElementById('copy-saved-button').image = "chrome://tinyurl/content/icons/copy_off.png";
|
|
56 document.getElementById('edit-saved-button').image = "chrome://tinyurl/content/icons/edit_off.png";
|
|
57 document.getElementById('remove-saved-button').image = "chrome://tinyurl/content/icons/remove_off.png";
|
|
58 }
|
|
59 else{
|
|
60 document.getElementById('go-saved-button').image = "chrome://tinyurl/content/icons/go.png";
|
|
61 document.getElementById('copy-saved-button').image = "chrome://tinyurl/content/icons/copy.png";
|
|
62 document.getElementById('edit-saved-button').image = "chrome://tinyurl/content/icons/edit.png";
|
|
63 document.getElementById('remove-saved-button').image = "chrome://tinyurl/content/icons/remove.png";
|
|
64 }
|
|
65 }
|
|
66
|
|
67 // Goto Saved Url
|
|
68 function tinyurl_saved_go(){
|
|
69 var sUri = oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
|
|
70
|
|
71 // Get Real Url
|
|
72 try{
|
|
73 var aProps = tinyurl_saved_getEntry(sUri);
|
|
74
|
|
75 if(opener){
|
|
76 opener.gBrowser.selectedTab = opener.gBrowser.addTab(aProps["realurl"]);
|
|
77 }
|
|
78 else{
|
|
79 window.open(aProps["realurl"]);
|
|
80 }
|
|
81
|
|
82 setTimeout("self.focus()", 100);
|
|
83
|
|
84 }catch(err) { alert("Error: 560\n Could not access that URL\n"+ err); }
|
|
85 }
|
|
86
|
|
87 // Copy TinyUrl
|
|
88 function tinyurl_saved_copy(){
|
|
89 if(oSavedTree.currentIndex > -1){
|
|
90 var sUri = oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
|
|
91 try{
|
|
92 var aProps = tinyurl_saved_getEntry(sUri);
|
|
93 tinyurl_copyText(aProps["tinyurl"]);
|
|
94 }catch(err){ alert("Error: 580\n Could not copy that URL\n"+ err); }
|
|
95 }
|
|
96 }
|
|
97
|
|
98 // Open Edit Dialog
|
|
99 function tinyurl_saved_openEdit(){
|
|
100 var sUri = oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
|
|
101
|
|
102 if(sUri != null && sUri != "")
|
|
103 window.openDialog('chrome://tinyurl/content/tinyurl_edit.xul','TinyUrlEditDialog','centerscreen, chrome, modal, resizable', sUri).focus()
|
|
104 }
|
|
105
|
|
106 // Read RDF Entries
|
|
107 function tinyurl_saved_read(){
|
|
108 if(oSavedTreeItems == null)
|
|
109 return;
|
|
110
|
|
111 try{
|
|
112 tinyurl_saved_initRdf();
|
|
113
|
|
114 // Remove All Existing
|
|
115 while(oSavedTreeItems.childNodes.length > 0)
|
|
116 oSavedTreeItems.removeChild(oSavedTreeItems.firstChild);
|
|
117
|
|
118 // Read From RDF
|
|
119 var aProps = null;
|
|
120 var oTrgt = null;
|
|
121 var oTreeItem = null;
|
|
122 var oTreeRow = null;
|
|
123 var oTreeCell = null;
|
|
124 var aElements = gTinyRdfC.GetElements();
|
|
125 while(aElements.hasMoreElements()){
|
|
126 try{
|
|
127 var oRes = aElements.getNext();
|
|
128 oRes = oRes.QueryInterface(Components.interfaces.nsIRDFResource);
|
|
129
|
|
130 oTreeItem = document.createElement("treeitem");
|
|
131 oTreeItem.setAttribute("uri", oRes.Value);
|
|
132 oTreeRow = oTreeItem.appendChild(document.createElement("treerow"));
|
|
133
|
|
134 aProps = tinyurl_saved_getEntry(oRes.Value);
|
|
135
|
|
136 // Title
|
|
137 oTreeRow.appendChild(document.createElement("treecell")).setAttribute("label", aProps["title"])
|
|
138 // TinyUrl
|
|
139 oTreeRow.appendChild(document.createElement("treecell")).setAttribute("label", aProps["tinyurl"])
|
|
140 // Real Url
|
|
141 oTreeRow.appendChild(document.createElement("treecell")).setAttribute("label", aProps["realurl"])
|
|
142
|
|
143 oSavedTreeItems.appendChild(oTreeItem);
|
|
144
|
|
145 }catch(err){ }
|
|
146 }
|
|
147
|
|
148 tinyurl_saved_disable(true);
|
|
149
|
|
150 }catch(err) { alert("Error 500\nAn unknown error occurred loading saved data\n"+ err); }
|
|
151 }
|
|
152
|
|
153 // Remvoe RDF Entry
|
|
154 function tinyurl_saved_remove(){
|
|
155
|
|
156 var sUri = oSavedTree.contentView.getItemAtIndex(oSavedTree.currentIndex).getAttribute("uri");
|
|
157 var iSelect = oSavedTree.currentIndex;
|
|
158
|
|
159 if(sUri != null && sUri != "" && confirm("Are you SURE you want to remove this entry?")){
|
|
160 try{
|
|
161 tinyurl_saved_initRdf();
|
|
162
|
|
163 var oRes = gTinyRdf.GetResource(sUri);
|
|
164
|
|
165 // Remove All Archs
|
|
166 var aArchs = null;
|
|
167 var hasArchs = true;
|
|
168 while(hasArchs){
|
|
169 aArchs = gTinyDs.ArcLabelsOut(oRes);
|
|
170 hasArchs = aArchs.hasMoreElements();
|
|
171 while(aArchs.hasMoreElements()){
|
|
172 oArch = aArchs.getNext().QueryInterface(Components.interfaces.nsIRDFResource);
|
|
173
|
|
174 //Remove
|
|
175 gTinyDs.Unassert(oRes, oArch, gTinyDs.GetTarget(oRes, oArch, true));
|
|
176 }
|
|
177 }
|
|
178
|
|
179 // Remove Element
|
|
180 gTinyRdfC.RemoveElement(oRes, true);
|
|
181
|
|
182 // Rewrite Tree
|
|
183 tinyurl_saved_read()
|
|
184
|
|
185 // Select Row
|
|
186 if(iSelect > oSavedTree.view.rowCount - 1){
|
|
187 oSavedTree.view.selection.select(oSavedTree.view.rowCount - 1);
|
|
188 }
|
|
189 else{
|
|
190 oSavedTree.view.selection.select(iSelect);
|
|
191 }
|
|
192
|
|
193 }catch(err){ alert("Error 520\nCould not remove that entry.\n"+ err); }
|
|
194 }
|
|
195 }
|
|
196
|
|
197 // Add RDF Entry
|
|
198 function tinyurl_saved_add(tinyUrl, realUrl, title){
|
|
199 var sTitle = "";
|
|
200 var sTimestamp = (new Date()).getTime();
|
|
201 var sTiny = tinyUrl;
|
|
202 var sReal = realUrl;
|
|
203 var sPageTitle = (title == null) ? "" : title;
|
|
204 var sUri = "http://jgillick.nettripper.com/tinyurl/";
|
|
205 var oRes = null;
|
|
206
|
|
207 tinyurl_saved_rdfCreate();
|
|
208
|
|
209 // Get Uri
|
|
210 if(sTiny.length > "http://tinyurl.com/".length){
|
|
211 sUri += sTiny.substring(("http://tinyurl.com/".length));
|
|
212 }
|
|
213 else{ sUri = null; }
|
|
214
|
|
215 // Is this TinyUrl already saved?
|
|
216 try{
|
|
217 tinyurl_saved_initRdf();
|
|
218 oRes = gTinyRdf.GetResource(sUri);
|
|
219
|
|
220 if(gTinyRdfC.IndexOf(oRes) > -1){
|
|
221 alert("You have already saved a TinyUrl entry for that URL.")
|
|
222 return false;
|
|
223 }
|
|
224 }catch(err){ }
|
|
225
|
|
226 if(!sTiny || !sReal)
|
|
227 return;
|
|
228
|
|
229 // Check Uri
|
|
230 if(sUri == null){
|
|
231 alert("Error 540\nCould not save that TinyUrl.\n"+ tinyUrl);
|
|
232 return false;
|
|
233 }
|
|
234
|
|
235 // Get Title
|
|
236 while(true){
|
|
237 sTitle = prompt("Title to save it under:", sPageTitle);
|
|
238
|
|
239 // Empty
|
|
240 if(sTitle == ""){
|
|
241 alert("You must enter a title.");
|
|
242 }
|
|
243 // null (cancel)
|
|
244 else if(sTitle == null){
|
|
245 break;
|
|
246 }
|
|
247 // Duplicate
|
|
248 else if(tinyurl_saved_getUriForTitle(sTitle) != null){
|
|
249 alert("A saved TinyUrl entry already exists with that title.");
|
|
250 sTitle
|
|
251 }
|
|
252 else{
|
|
253 break;
|
|
254 }
|
|
255 }
|
|
256
|
|
257 if(sTitle != null){
|
|
258 try{
|
|
259 tinyurl_saved_initRdf()
|
|
260 var oRes = gTinyRdf.GetResource(sUri);
|
|
261 gTinyRdfC.AppendElement(oRes);
|
|
262 gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title"), gTinyRdf.GetLiteral(sTitle), true);
|
|
263 gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#tinyurl"), gTinyRdf.GetLiteral(sTiny), true);
|
|
264 gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#realurl"), gTinyRdf.GetLiteral(sReal), true);
|
|
265 gTinyDs.Assert(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#created"), gTinyRdf.GetLiteral(sTimestamp), true);
|
|
266
|
|
267
|
|
268 // Rewrite Tree
|
|
269 tinyurl_saved_read();
|
|
270
|
|
271 return true;
|
|
272 }catch(err){
|
|
273 alert("Error 541\nCould not save that TinyUrl.\n"+ err);
|
|
274 }
|
|
275 }
|
|
276
|
|
277 return false;
|
|
278 }
|
|
279
|
|
280 // Get favicon.ico for url
|
|
281 function tinyurl_saved_getFavIcon(sUrl){
|
|
282 if(opener){
|
|
283
|
|
284 // Get Url for favicon.ico
|
|
285 var oUri = Components.classes["@mozilla.org/network/standard-url;1"].createInstance(Components.interfaces.nsIURI);
|
|
286 oUri.spec = sUrl;
|
|
287 var sFavUri = opener.gBrowser.buildFavIconString(oUri);
|
|
288
|
|
289 // Verify Exists
|
|
290 try{
|
|
291 var oRequest = new XMLHttpRequest();
|
|
292 oRequest.open("GET", sFavUri, false);
|
|
293 oRequest.send("");
|
|
294
|
|
295 if(oRequest.status == 200)
|
|
296 return sFavUri;
|
|
297
|
|
298 }catch(err) { }
|
|
299 }
|
|
300
|
|
301 return "";
|
|
302 }
|
|
303
|
|
304
|
|
305 // Get Data From Entry
|
|
306 function tinyurl_saved_getEntry(sUri){
|
|
307 var aProps = new Array();
|
|
308
|
|
309 try{
|
|
310 tinyurl_saved_initRdf();
|
|
311
|
|
312 var oRes = gTinyRdf.GetResource(sUri);
|
|
313
|
|
314 // Get Resources
|
|
315 aProps["title"] = gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title"), true);
|
|
316 aProps["tinyurl"] = gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#tinyurl"), true);
|
|
317 aProps["realurl"] = gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#realurl"), true);
|
|
318 aProps["created"] = gTinyDs.GetTarget(oRes, gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#created"), true);
|
|
319
|
|
320 // Get Values
|
|
321 (aProps["title"] instanceof Components.interfaces.nsIRDFLiteral) ? aProps["title"] = aProps["title"].Value : aProps["title"] = "";
|
|
322 (aProps["tinyurl"] instanceof Components.interfaces.nsIRDFLiteral) ? aProps["tinyurl"] = aProps["tinyurl"].Value : aProps["tinyurl"] = "";
|
|
323 (aProps["realurl"] instanceof Components.interfaces.nsIRDFLiteral) ? aProps["realurl"] = aProps["realurl"].Value : aProps["realurl"] = "";
|
|
324 (aProps["created"] instanceof Components.interfaces.nsIRDFLiteral) ? aProps["created"] = aProps["created"].Value : aProps["created"] = "";
|
|
325
|
|
326 }catch(err){ throw err; }
|
|
327
|
|
328 return aProps;
|
|
329 }
|
|
330
|
|
331 // Get Uri for title
|
|
332 function tinyurl_saved_getUriForTitle(sTitle){
|
|
333 try{
|
|
334 tinyurl_saved_initRdf();
|
|
335
|
|
336 var oSubject = gTinyDs.GetSource(gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title"), gTinyRdf.GetLiteral(sTitle), true);
|
|
337 if(oSubject instanceof Components.interfaces.nsIRDFResource)
|
|
338 return oSubject.Value
|
|
339
|
|
340 }catch(err) { throw err; }
|
|
341
|
|
342 return null;
|
|
343 }
|
|
344
|
|
345 // Change Title to sTitle for sUri
|
|
346 function tinyurl_saved_changeTitle(sUri, sTitle){
|
|
347 try{
|
|
348 tinyurl_saved_initRdf();
|
|
349
|
|
350 var oRes = gTinyRdf.GetResource(sUri);
|
|
351 var oProp = gTinyRdf.GetResource("http://jgillick.nettripper.com/tinyurl/rdf#title");
|
|
352 var sOld = gTinyDs.GetTarget(oRes, oProp, true); // Old Value
|
|
353
|
|
354 //Change
|
|
355 gTinyDs.Change(oRes, oProp, sOld, gTinyRdf.GetLiteral(sTitle));
|
|
356
|
|
357 }catch(err) { throw err; }
|
|
358
|
|
359 return null;
|
|
360 }
|
|
361
|
|
362
|
|
363 // Init RDF Objects
|
|
364 function tinyurl_saved_initRdf(){
|
|
365 try{
|
|
366 if(gTinyRdf == null)
|
|
367 gTinyRdf = Components.classes["@mozilla.org/rdf/rdf-service;1"].getService(Components.interfaces.nsIRDFService);
|
|
368 if(gTinyDs == null)
|
|
369 gTinyDs = gTinyRdf.GetDataSourceBlocking("file:///"+ sTinyRdfPath);
|
|
370 if(gTinyRdfUtil == null)
|
|
371 gTinyRdfUtil = Components.classes["@mozilla.org/rdf/container-utils;1"].getService(Components.interfaces.nsIRDFContainerUtils);
|
|
372 if(gTinyRdfC == null){
|
|
373 gTinyRdfC = Components.classes["@mozilla.org/rdf/container;1"].createInstance(Components.interfaces.nsIRDFContainer);
|
|
374
|
|
375 //Get or Add Sequence
|
|
376 if(gTinyRdfUtil.IsSeq(gTinyDs, gTinyRdf.GetResource(gTinyRdfRoot))){
|
|
377 gTinyRdfC.Init(gTinyDs, gTinyRdf.GetResource(gTinyRdfRoot));
|
|
378 }else{
|
|
379 gTinyRdfC = gTinyRdfUtil.MakeSeq(gTinyDs, gTinyRdf.GetResource(gTinyRdfRoot)); //Create
|
|
380 }
|
|
381 }
|
|
382
|
|
383 }catch(err){throw err}
|
|
384 } |