By
Burn
—
Uploaded
Jun 17, 2009
/*
@author: Burn
@url: http://userscripts.org/users/42427
@update: http://userscripts.org/jetpacks/64.js
@title: Delicious Collect
@description: Post to Delicious all your open tabs
@include : *
@license: GPL - http://www.gnu.org/licenses/gpl.html
@version: 0.1.5
*/
function DeliciousCollect() {}
function DeliciousAPI() {}
const DBG = 0; // set to 1 to enable log messages in Firebug Console
const Icon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kGEBYKHj73T1MAAAUPSURBVEjH3ZZZbJRVHMXP/ZZZOu1MZ1ra0oVpS9tEgi0UqMESoVgxQhM2IwQFpEQNIW4scXsRIygaiQ3VmLhgggQ1FANohLaBhhKWWqBQoJTCtLN1ZtrOPt83y7dcHwwEAiTVRB+8b/fe3PPL/+Gcc4H/1Tqxa5vu0Jb1jYc2rS/6J+9Pf9+U8/OGFRvvPmPu3oxe7G6J2m5+K3rdPQcal9X+HfGwy252tLUOix5388GNz7feB/jppedWRj2+hVkGI7Xk55qFuLj32PubLeMRd18+zx96Y3078QfZ3LyJNBnyP3X4tbWv3AH4e7u4oH/0ZZVjQEGIsbiYaLNNJULEP388gOPNHy+JibFphDDUlJtHzBWTEfb7Vv6xZ7eOAYDj33yeJRGlXDKlYSgaRFAQocnJwVg0tHo8gFgsvCKp5ZmQhhB/Mg4m0wJZy1f0d3WaOAAI8OlaQaczmrOyEXY5MeSwIz0nB0qutey2SEtHIpunqWq/yNTzVHFdcWPfR+vUANGYqag3TNebjIgHA3D7vCjIy4XAsRnRUJDnAKBq2RphxD4wYkzjjF7HIBSwmFLzBCKR+C182ISWE4kGnkMl5fTnpGCSu+pCkySrOz7Zj81iJP51R2sLSQXccFzvhcc7DH1ShqFsajjbkp/iACAZjyNFtCitnI2iR2YBhAAUflYjiPvaxGwVamVdjX5nhoYo278Lz4kJMkLhhMHvl7746nCqtba05JS1tn5S7VKWDYVC4Dketwb6OYYwDAMAkVA47nLYA/6xEbTt3w3b1QsAYYyCICzWQa5OQn8uQ0MUALCPytQ2FMGwJ0RttjHWOxLcKEvS4rgoSAO93eg5fhDJhAC3fTDsdg79NUHDsuXJbe++FfUMD1MxKZNRnxcTisL86ZMdPF86qb7r6Baurq5uTjIZp2lie93c6tlQFZ6oMoVGR2pHfR5jmiENCSEE/6gX0UgEPq8vVlxaInMAQAhRmnd92uvzep5UiBZutweTKiJgWdajxtyu7p7+Jnt/FyRJQk3NGWx4fQEF0omsUBxpH7nSd61vVqYli3XZHYiKEjxuNyQ55Xp21erYHaOpKj0pigKMRj3GvIOQFBVSSnL02Jl9BlOJEI/HIcsylWUFAEhKVnFzKILcbP5Ls8VsN2VaoNPzKLBaIcRi0On1fYQQ9Q7g1c1bf/d6PBj1jdKxsTH0XjwPlSq2PR88Fpz3zNo3i6cuigIsUeQEZEXBoCOienzJHZd6hd4Rn+9635XL6Gxvw+mTHXA5HVAVteueqCCEJGQVvcFIjPBEwrDXjpSsXiOEqDu3zjvy64HmU+9s//GssWDR2V+O3jibkUY7587O/+29TVWyLMvOoSEbtDotzFkTaCAQwIpVL3QAAHe3I4uLrTsvnBn4wel00fKaGpJmsHQDAMcSL4CFD3OyCuamw2kDJwbpWCxOJlot14tKSoP3penS5VMONDbOctTPLSUvruGFdWtL+sYTFVXTyi/NnFmYkhWRFBaaMb26as/tu3smMBstauZMnaesJH2STiOooDwdD6ChYXpAiZ9PWDMnaMqrHpVuODM/e2Af8IYZkkoKzmkN+aBMnodhJ8bGA2BJpswyWvr4fC3yCgzXFjy9WHkgAAAIm7+X009TOc56VWOYERgXQDPZBq5MpEwhKEwtD200ANAa6roZvmwJq6nYMd42YzUkyvDWo6yuMs7yxcf+lT6nlPKpROfb//lH4k/9QmroaUv5/wAAAABJRU5ErkJggg==";
DeliciousCollect.prototype = {
RE_url: new RegExp('^(http|https)://','i'),
TabList: new Array(),
saveBookmarks: function(ARRurls) {
var Count = 0;
var Skipped = [];
for (url in ARRurls) {
if (this.RE_url.test(ARRurls[url])) {
var Obj = new DeliciousAPI();
var URLexists = Obj.GetBM(ARRurls[url]);
if (!URLexists) {
var AjaxCall = Obj.AddBM(ARRurls[url], ARRurls[url]);
if (AjaxCall) {
Count++;
}
} else {
Skipped.push(ARRurls[url]);
}
} else if (DBG) console.log('not an URL: '+ARRurls[url]);
}
var strSkipped = (Skipped.length > 0) ? " Skipped: "+Skipped.join(", ") : "";
this.notify(ARRurls.length+" urls found, "+Count+" added."+ strSkipped);
},
getTabs: function() {
this.TabList = Array(0);
for (tab in jetpack.tabs) {
if (jetpack.tabs[tab].url
&& this.RE_url.test(jetpack.tabs[tab].url)
&& jQuery.inArray(jetpack.tabs[tab].url, this.TabList) == -1) {
this.TabList.push(jetpack.tabs[tab].url);
}
}
if (this.TabList.length == 0) {
return false;
}
return this.TabList;
},
openInTab: function(page) {
if (this.RE_url.test(page)) {
jetpack.tabs.open(page);
return true;
}
return false;
},
openInCurrent: function(page) {
if (this.RE_url.test(page)) {
Components.utils.import("resource://jetpack/ubiquity-modules/utils.js");
Utils.openUrlInBrowser(page);
return true;
}
return false;
},
notify: function(msg) {
jetpack.notifications.show({
title: "DeliciousCollect",
body: msg,
icon: Icon
});
},
}
DeliciousAPI.prototype = {
baseURL: "https://api.del.icio.us/v1/posts/",
URLitem: "url=",
// methods and properties to add new bookmark
URL_ADD: 'add?',
ADDdescription: "&description=",
ADDshared: "&shared=no", // set to yes to share bookmark
AddBM: function(theUrl, descr) {
this.URLitem += encodeURIComponent(theUrl);
this.ADDdescription += descr;
this.URL_ADD = this.baseURL + this.URL_ADD + this.URLitem + this.ADDdescription + this.ADDshared;
let retVal = false;
if (DBG) console.log('Sending '+this.URL_ADD);
$.ajax({
type: "GET",
url: this.URL_ADD,
dataType: "xml",
async: false,
success: function(xml) {
var Reply = $(xml).find("result").attr("code");
if (/done/.test(Reply)) {
if (DBG) console.log('OK - '+ Reply);
retVal = true;
} else {
if (DBG) console.log('KO - '+ Reply);
retVal = false;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
if (DBG) console.log('KO - error in XHR while using ADD method');
retVal = false;
}
});
return retVal;
},
// methods and properties to get an existing bookmark
URL_GET: "get?",
GetBM: function(URL) {
this.URLitem += encodeURIComponent(URL);
this.URL_GET = this.baseURL + this.URL_GET + this.URLitem;
var retVal = false;
if (DBG) console.log('Checking ' + this.URL_GET);
$.ajax({
type: "GET",
url: this.URL_GET,
dataType: "xml",
async: false,
success: function(xml) {
var Reply = $(xml).find("post").attr("href");
if (Reply == URL) {
if (DBG) console.log('OK - bookmark existing: '+ Reply);
retVal = true;
} else {
if (DBG) console.log('OK - bookmark NOT existing.');
retVal = false;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
if (DBG) console.log('KO - error in XHR while using GET method');
retVal = false;
}
});
return retVal;
}
}
jetpack.statusBar.append({
html: (<><![CDATA[
<span style="cursor:pointer">
<img id="icon" alt="Click to collect open tabs in Delicious" />
</span>
]]></>).toString(),
width: 24,
onReady: function(doc) {
$("img#icon", doc).attr("src", Icon);
$(doc).click(function() {
NewObj = new DeliciousCollect();
lista = NewObj.getTabs();
if (lista) {
NewObj.saveBookmarks(lista);
} else NewObj.notify('No open tabs found.');
});
}
});