Hello Paulo,
I just found Ubiquity last week and was playing around a bit with the e-mail
command
since I didn't find it quite as useful as what I would like. Perhaps we
could merge our
code if you find mine useful.
I basically updated two things: 1) I updated the noun_type_contact and
getGmailContacts()
in "feed-parts/header/en/nountypes.js" to be a little bit smarter. It now
imports all
available fields and adds an object containing all of the data to the
suggestion. It leaves
the text and html fields of the suggestion as the contact's email address,
so unless
people are grabbing data from the noun_type_contact.contactList variable, it
should
be backwards compatible with everything currently in the works. 2) I created
a better
preview for the e-mail that updates as you type and looks more like what an
e-mail
should look like.
I tested my changes fairly thoroughly but there still may be bugs, so please
let me
know if you see anything that might break or that needs to be cleaned up :-)
I haven't had a chance to check out the source and update it there, so
things could
be different, but I wanted to get this on the list before I forgot about it.
Appropriate
portions of the files are below:
(Please forgive any formatting errors that g-mail introduces...the file was
formatted
correctly in my editor)
-------------------
nountypes.js
-------------------
function getGmailContacts( callback ) {
var url = "http://mail.google.com/mail/contacts/data/export";
var params = {
exportType: "ALL",
out: "CSV"
};
jQuery.get(url, params, function(data) {
data = data.split("\n");
var contacts = {};
for each( var line in data ) {
var splitLine = line.split(",");
if (splitLine[0].match("Name")) {
continue;
}
var contact = {};
contact.emails = {};
contact.numbers = {};
contact.name = splitLine[0];
contact.emails.home = splitLine[1];
if (splitLine.length >= 14) {
contact.notes = splitLine[2];
contact.description = splitLine[3];
contact.emails.work = splitLine[4];
contact.im = splitLine[5];
contact.numbers.home = splitLine[6];
contact.numbers.mobile = splitLine[7];
contact.numbers.pager = splitLine[8];
contact.numbers.fax = splitLine[9];
contact.company = splitLine[10];
contact.title = splitLine[11];
contact.other = splitLine[12];
contact.address = splitLine[13];
}
if (contact.numbers.mobile != "") {
contact.phone = contact.numbers.mobile;
} else if (contact.numbers.home != "") {
contact.phone = contact.numbers.home;
}
contact.email = contact.emails.home;
contacts[contact.name] = contact;
}
callback(contacts);
}, "text");
}
var noun_type_contact = {
_name: "contact",
contactList: null,
contactListLastUpdated: null,
callback:function(contacts) {
noun_type_contact.contactList = contacts;
contactListLastUpdated = new Date();
},
suggest: function(text, html) {
var now = new Date();
if (noun_type_contact.contactList == null ||
now.getMinutes() - contactListLastUpdated.getMinutes() > 10) {
getGmailContacts( noun_type_contact.callback);
var suggs = noun_type_email.suggest(text, html);
return suggs.length > 0 ? suggs : [];
}
if( text.length < 2 ) return [];
var suggestions = [];
for ( var c in this.contactList ) {
var contact = this.contactList[c];
if (contact.email == null || contact.email == "") {
contact.email = "";
}
if (contact.name.match(text, "i") != null || contact.email.match(text,
"i") != null) {
suggestions.push(CmdUtils.makeSugg(contact.name, contact.name,
contact));
}
}
var suggs = noun_type_email.suggest(text, html);
if (suggs.length > 0) {
suggestions.push(suggs[0]);
}
return suggestions.splice(0, 5);
}
};
-------------------
command file
-------------------
var _author = { name: "Topher Fangio", email: "[email protected]" };
function _replaceNull(value) {
return value == null ? "" : value;
}
CmdUtils.CreateCommand({
name: "my-email",
author: _author,
takes: { "message": noun_arb_text },
modifiers: { "to": noun_type_contact, "as": noun_arb_text },
preview:
function(pblock, message, mods) {
if (pblock == null) {
return;
}
var contact = mods["to"].data
if (contact == null) {
contact = { name:"", email:"" };
}
var msg = "";
msg += "<p>Sends the following e-mail to the requested
recipient.</p><hr />";
msg += "<strong>To: ${name}</strong>";
msg += "<${email}><br />";
msg += "<strong>Subject:</strong> <em>${subject}</em><br />";
msg += "<p>${message}</p>";
var templateData = {
name: contact.name + " ",
email: contact.email,
subject: mods["as"].text,
message: message.html
};
pblock.innerHTML = CmdUtils.renderTemplate( msg, templateData );
},
execute:
function() {
displayMessage("sending email!!!");
}
});
On Mon, Feb 16, 2009 at 8:52 AM, psargaco <[email protected]> wrote:
>
> I've done a bit of customization on the email command. The standard
> one wasn't really working for me because I find it more useful to
> write the subject in ubiquity instead of writing the body of the
> message. Even so, that is still a possibility in my version of the
> command. I'm posting it here just for kicks, I don't think it'll be
> very useful for most people because part of the predefined contents
> were translated to European Portuguese. And there are still some rough
> edges, I haven't fully tested it yet. Meanwhile if anybody knows a way
> how to distinguish between directObj having been obtained from the
> command line or from the selected text on the page I would appreciate
> if you could share it with me. Other suggestions will be greatly
> appreciated.
>
> Here's my version of the command:
>
> /* No changes in this function */
> function findGmailTab() {
> var window = Application.activeWindow;
>
> var gmailURL = "://mail.google.com";
> var currentLocation = String
> (Application.activeWindow.activeTab.document.location);
> if(currentLocation.indexOf(gmailURL) != -1) {
> return Application.activeWindow.activeTab;
> }
>
> for (var i = 0; i < window.tabs.length; i++) {
> var tab = window.tabs[i];
> var location = String(tab.document.location);
> if (location.indexOf(gmailURL) != -1) {
> return tab;
> }
> }
> return null;
> }
>
> CmdUtils.CreateCommand({
> name: "my_email",
> takes: {"message": noun_arb_text},
> icon: "chrome://ubiquity/skin/icons/email.png",
> modifiers: {subject:noun_arb_text,
> to: noun_type_contact},
> description:"Begins composing an email to a person from your contact
> list.",
> help:"Currently only works with <a href=\"http://mail.google.com
> \">Google Mail</a>, so you'll need a Gmail account to use it." +
> " Try selecting part of a web page (including links, images,
> etc) and then issuing "email this". You can" +
> " also specify the recipient of the email using the word
> "to" and the name of someone from your contact list." +
> " For example, try issuing "email hello to jono"
> (assuming you have a friend named "jono").",
> preview: function(pblock, directObj, modifiers) {
> var html = "Creates an email message ";
> if (modifiers.subject) {
> html += "with the subject " + modifiers.subject.text + " ";
> }
> if (modifiers.to) {
> html += "to " + modifiers.to.text + " ";
> }
> if (directObj.html) {
> html += "with these contents:" + directObj.html;
> } else {
> html += "with a link to the current page.";
> }
> pblock.innerHTML = html;
> },
>
> execute: function(directObj, headers) {
> var html = directObj.html;
> var document = context.focusedWindow.document;
> var title, subject_text;
> var toAddress = "";
> var location = document.location;
> if (document.title)
> title = document.title;
> else
> title = location;
> var gmailTab = findGmailTab();
> var pageLink = "<a href=\"" + location + "\">" + title + "</a>";
> if (html) {
> html = (""" + html + """ + "<br /><p>in " + pageLink +
> ":</p>");
> } else {
> // If there's no selection, just send the current page.
> html = "<p>Vê este endereço: " + pageLink + ".</p>";
> }
> html = html + "<br /><br /> Paulo"
>
> if (headers.subject) {
> if (headers.subject.text) {
> subject_text = headers.subject.text;
> } else {
> subject_text = title;
> }
> }
>
> if (headers.to)
> if (headers.to.text)
> toAddress = headers.to.text;
>
> if (gmailTab) {
> // Note that this is technically insecure because we're
> // accessing wrappedJSObject, but we're only executing this
> // in a Gmail tab, and Gmail is trusted code.
> var console =
> gmailTab.document.defaultView.wrappedJSObject.console;
> var gmonkey =
> gmailTab.document.defaultView.wrappedJSObject.gmonkey;
>
> var continuer = function() {
> // For some reason continuer.apply() won't work--we get
> // a security violation on Function.__parent__--so we'll
> // manually safety-wrap this.
> try {
> var gmail = gmonkey.get("1.0");
> var sidebar = gmail.getNavPaneElement();
> var composeMail = sidebar.getElementsByTagName("span")[0];
> //var composeMail = sidebar.getElementById(":qw");
> var event = composeMail.ownerDocument.createEvent("Events");
> event.initEvent("click", true, false);
> composeMail.dispatchEvent(event);
> var active = gmail.getActiveViewElement();
> var toField = composeMail.ownerDocument.getElementsByName("to")
> [0];
> toField.value = toAddress;
> var subject = active.getElementsByTagName("input")[0];
> if (subject) subject.value = subject_text;
> var iframe = active.getElementsByTagName("iframe")[0];
> if (iframe)
> iframe.contentDocument.execCommand("insertHTML", false,
> html);
> else {
> var body = composeMail.ownerDocument.getElementsByName
> ("body")[0];
> html = ("Note: the following probably looks strange
> because " +
> "you don't have rich formatting enabled. Please "
> +
> "click the 'Rich formatting' link above, discard "
> +
> "this message, and try " +
> "the email command again.\n\n" + html);
> body.value = html;
> }
> gmailTab.focus();
> } catch (e) {
> displayMessage({text: "A gmonkey exception occurred.",
> exception: e});
> }
> };
>
> gmonkey.load("1.0", continuer);
> } else {
> // No Gmail tab open? Open a new one:
> var params = {fs:1, tf:1, view:"cm", su:title, to:toAddress,
> body:html};
> Utils.openUrlInBrowser("http://mail.google.com/mail/?" +
> Utils.paramsToString(params));
> }
> }
> });
> >
>
--
Topher Fangio
Software Developer
[email protected]
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"ubiquity-firefox" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/ubiquity-firefox?hl=en
-~----------~----~----~----~------~----~------~--~---