Skip to content

Instantly share code, notes, and snippets.

@xbourn
Created March 17, 2009 01:30
Show Gist options
  • Save xbourn/80224 to your computer and use it in GitHub Desktop.
Save xbourn/80224 to your computer and use it in GitHub Desktop.
/* Mozilla Ubiquity Command for diigo, currently only support add bookmark.
* Some code from https://ubiquity.mozilla.com/standard-feeds/social.js
*/
var store = Application.storage;
const diigo_CUR_LOGIN = "ubiquity_diigo_cur_login";
var Choices = {"yes": "y", "no": "n"};
var noun_type_share = {
_name: "yes/no",
suggest: function( text, html ) {
var suggestions = [];
for ( var word in Choices ) {
if ( word.indexOf( text.toLowerCase() ) > -1 ) {
var sugg = CmdUtils.makeSugg(word, word, Choices[word]);
suggestions.push( sugg );
}
}
return suggestions;
},
};
function setCurLogin(login){
store.set(diigo_CUR_LOGIN, login);
}
function getCurLogin(){
var login = store.get(diigo_CUR_LOGIN, '');
if(!login){
logins = getdiigoIds();
if(logins.length > 0){
login = logins[0];
setCurLogin(login);
}
}
return login;
}
function make_basic_auth(user, password){
var tok = user + ":" + password;
var hash = CmdUtils.getWindow().btoa(tok); //Base64 encode.
return "Basic " + hash;
}
function getdiigoIds () {
var passwordManager = Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager);
var logins = passwordManager.findLogins({}, "https://secure.diigo.com", "", null);
return logins;
}
CmdUtils.CreateCommand({
name: "diigo",
homepage: "wangbin1979.com",
author: { name: "Wang Bin", email: "wangbin.zibo@gmail.com"},
license: "MPL,GPL",
description: "bookmark the page to your diigo account",
icon: "http://www.diigo.com/favicon.ico",
takes: {"notes": noun_arb_text},
modifiers: {"tags": noun_arb_text,
"share": noun_type_share},
preview: function(pblock, notes, mods) {
var doc = CmdUtils.getDocument();
notes.text = doc.getSelection() ? doc.getSelection().substring(0,140) : notes.text;
var previewTemplate = [
'<style type="text/css">',
'.preview a { color: #3774D0 }',
'.preview dl {margin: 0; padding: 0; }',
'.preview dd {float: left; text-align: right; width: 50px; margin: 0; padding: 0; }',
'.preview dt {margin-left: 60px;}',
'</style>',
'<div class="preview">',
'<p>Bookmark to <img src="http://www.diigo.com/favicon.ico" /> diigo: </p>',
'<dl>',
'<dd>Title:</dd><dt>${title}</dt>',
'<dd>Url:</dd><dt>${url}</dt>',
notes.text ? '<dd>Notes:</dd><dt>${desc}</dt>':' ',
mods.tags.text ? '<dd>Tags:</dd><dt>${tags}</dt>':' ',
mods.share.text ? '<dd>Share:</dd><dt>${shared}</dt>': ' ',
'</dl>',
'</div>'].join("\n");
var previewData = {
title: doc.title,
url: doc.URL,
tags: mods.tags.text,
desc: notes.text,
shared: mods.share.text
};
var previewHTML = CmdUtils.renderTemplate(previewTemplate, previewData);
pblock.innerHTML = previewHTML;
},
execute: function(notes, mods) {
var bookmark_url = "http://api2.diigo.com/bookmarks";
var doc = CmdUtils.getDocument();
var bookmark_params = {
title: doc.title,
url: doc.URL,
tags: '"' + mods.tags.text + '"'|| "no_tags",
desc: notes.text || "",
shared: mods.share.text
};
var curLogin = getCurLogin();
if( curLogin ){
var auth = make_basic_auth(curLogin.username, curLogin.password);
} else {
var auth = null;
}
jQuery.ajax({
type: "POST",
url: bookmark_url,
data: bookmark_params,
dataType: "json",
beforeSend: function(req) {
if( auth ) req.setRequestHeader("Authorization", auth);
},
error: function() {
displayMessage("diigo error - bookmark failure.");
},
success: function(resp) {
displayMessage(resp.message);
}
});
},
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment