Mozilla Labs Ubiquity : mashup while you browse


Recommended Posts

http://labs.mozilla.com/2008/08/introducing-ubiquity/

Ubiquity is a Firefox extension with a similar feel to Launchy or Executor - the "type and find" desktop applications, but it runs within the browser and is more of social networking enhancement than a simple launcher.

You can highlight a locality you have typed in an email, type "map" and you will have a map to paste in your message.

You can translate on-page; search amazon, google, wikipedia, yahoo, youtube, etc.; digg and twitter; lookup and insert yelp review; get the weather; syntax highlight any code you find; and a lot more.

Concept seems to be very useful but i really doubt users will find it easy to use, or else it will became one more geeky stuff :)

That was my worry as well to begin with, but using it I realized that it was extremely intuitive so I'm not gonna write it off as something for "geeks only" just yet.

This is brilliant. The basic functions should be easy enough for even non-geeky users "email to contact", looking up word definitions, weather info etc. work very nicely. As a Gmail addict I have been in love with the "email to" command since the beginning.

Edited by macel
what a geek may think is intuitive may well not be simply because of learned behaviour.

The thing is, there's only so much you can before you have to start breaking certain user interface traditions in order to innovate. It doesn't seem to hard though, and will indeed feel more intuitive to do once they do it a few times (well, as in, once they get used to it, they'll just do it naturally instead of making it seem like a chore).

This is the code for my gmail ubiquity command. To install it just ubiquity "command-editor" then copy and paste the code into the text box on the page that appears and it should just work!

Just typing "gmail" will show you the 5 newest unread emails in your inbox.

If you then type a number up to 20 after gmail it will show you the 5 unread emails after that e.g. 6 will show you emails 6-11.

You can also look at emails with different labels e.g. "label work" or filter results by a contact or email e.g. "email [email protected]".

Clicking on the subject line of the email previews will take you that email.

pressing enter will take you to your inbox or whatever label you are currently looking at.

Note: You have to be logged into gmail for this to work, but you don't need to be on the gmail website.

noun_email_type = new CmdUtils.NounType("type",
  ["unread", "inbox", "starred", "chats", "sent", "drafts", "all", "spam", "trash"]);

CmdUtils.CreateCommand({
  name: "gmail",
  contributors: "Ross Brown",
  description: "Lets you look at your gmail",
  help: "Lets you look at new emails in your gmail account using the gmail atom feed.",
  takes: {StartNumber: noun_arb_text},
  modifiers: {label: noun_arb_text ,type: noun_email_type ,contact: noun_type_contact ,email: noun_arb_text},

  preview: function(pblock, mn, mods) {
    pblock.innerHTML = "Fetching mail";
    if(mods.label.text!=null && mods.label.text!=undefined) {
      var url = "http://mail.google.com/mail/feed/atom/" + mods.label.text;
    } else if(mods.type.text!=null && mods.type.text!=undefined) {
      var url = "http://mail.google.com/mail/feed/atom/" + mods.type.text;
    } else {
      var url = "http://mail.google.com/mail/feed/atom/";
    }

    var EmailSearch = false;
    if(mods.contact.text!=null && mods.contact.text!=undefined) {
      var SearchEmail = mods.contact.text;
      EmailSearch = true;
    } else if(mods.email.text!=null && mods.email.text!=undefined) {
      var SearchEmail = mods.email.text;
      EmailSearch = true;
    }

    jQuery.ajax({
      url: url,
      type: "GET",
      dataType: "xml",
      timeout: 1000,
      error: function(){
         pblock.innerHTML = "Error: Could not get mail";
      },
      success: function(xml){
          var emailNo = 1;
          var intMn = parseInt(mn.text);
          if (isNaN(intMn)) {
            var emailMin = 1;
          } else {
            var emailMin = intMn;
          }
          var emailMax = emailMin + 5;

          pblock.innerHTML = "<style> .title {font-size: 90%;} .subject {font-size: 75%;} .summary {font-size: 60%; font-style: italic;} .info {font-size: 60%;}</style>";

          var searchTitle = jQuery(xml).find('tagline').text();
          if(EmailSearch) {searchTitle += " From: " + SearchEmail;}

          pblock.innerHTML += "<div class='title'>" + searchTitle + " (Showing " + emailMin + "-" + (emailMax-1) + " of " + jQuery(xml).find('fullcount').text() + " messages)</div>";

          jQuery(xml).find('entry').each(function(){
            email = jQuery(this).find('email').text();
            if(EmailSearch!=true || email.indexOf(SearchEmail)!=-1) {
              if(emailMin <= emailNo && emailNo < emailMax) {
                subject = jQuery(this).find('title').text();
                link = jQuery(this).find('link').attr('href');
                name = jQuery(this).find('name').text();
                summary = jQuery(this).find('summary').text();
                modified = jQuery(this).find('modified').text();
                modified = modified.replace("T", " ");
                modified = modified.replace("Z", "");
                modified = modified.replace(/-/g, "/");

                pblock.innerHTML += "<p><a href='" + link + "'><div class='subject'>" + subject + "</div>";
                //For some reason the </a> tag acts like <p> here//ail
                pblock.innerHTML += "<div class='info'>From: " + name + " (<a href='mailto:" + email + "'>" + email + ") - " + modified + "</div>";
                pblock.innerHTML += "<div class='summary'>" + summary + "</div>";
                pblock.innerHTML += "</p>";
              }
              emailNo++;
            }
          });
      }
    });
  },
  execute: function(mn, mods) {
    if(mods.label.text!=null && mods.label.text!=undefined && mods.label.text!="") {
      Utils.openUrlInBrowser("http://mail.google.com/mail/#label/" + mods.label.text);
    } else if(mods.type.text!=null && mods.type.text!=undefined) {
      Utils.openUrlInBrowser("http://mail.google.com/mail/#" + mods.type.text);
    } else {
      Utils.openUrlInBrowser("http://mail.google.com/mail/");
    }
  }
});

Maybe a toolbar button / drop down menu with a list of common tasks would make it more user friendly?

If you ubiquity "command-list" or navigate to "chrome://ubiquity/content/cmdlist.html" there is a list of all the available commands you have for ubiquity.

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.