Posts Tagged ‘ubiquity

18
Ene
09

Cómo crear un comando para ubiquity

Ubiquity es una extensión de Firefox desarrollada por Mozilla que permite ejecutar verbos o comandos al estilo de un lanzador de aplicaciones de escritorio como QuickSilver o Gnome-Do. Estos comandos son los que añaden funcionalidad a Ubiquity, y los que deben especificarse para realizar alguna acción. Se pueden programar sin necesidad de reiniciar el navegador en ningún momento, a diferencia de lo que ocurre cuando se programan extensiones para firefox, pudiendo probar los cambios inmediatamente. No hay más que utilizar el Command Editor que proporciona Ubiquity al que se puede acceder a través del comando help.

El esqueleto básico de un comando el el siguiente:

CmdUtils.CreateCommand({
     name: "11870",
     icon: "http://11870.com/favicon.ico",
     takes: {"search term": noun_arb_text},
     preview: function(pblock, search_term) {
          ...
     },
     execute: function(search_term) {
          ...
     }
})

CmdUtils es un espacio de nombres que proporciona Ubiquity y contiene todas las herramientas disponibles para crear un comando. Para ello deberemos ejecutar el método CreateCommand pasándole un hash que deberá contener los siguientes elementos:

  • name: Nombre del comando, se usará cuando se quiera ejecutar.
  • icon: Favicon del comando, aparecerá al lado del nombre cuando se ejecuta.
  • takes: Parámetros del comando. Es un hash parámetro, tipo de datos. Esto lo explicaremos más abajo.
  • preview: Método que se ejecutan mientras se están escribiendo los parámetros a el comando. Esta función recibe 2 parámetros. El primero es el nodo DOM donde debe insertarse el resultado, y el segundo es el parámetro que ha introducido el usuario, en nuestro caso un término de búsqueda.
  • execute: Método que se ejecuta cuando pulsamos enter sobre el comando. Sólo recibe el parámetro.

Otro punto interesante son los modificadores o modifiers que nos permiten recibir más parámetros en el comando especificando una palabra clave a partir de la cual vendrá el modificador. Por ejemplo, cuando un usuario escriba:

11870 restaurante en madrid

la palabra clave “en” identificará a madrid como un modificador y se recibirá en las funciones preview y execute como un nuevo parámetro. Para especificar un modificador en nuestro comando deberemos añadir la siguiente linea:

modifiers: {"en": noun_type_ooslocality},

donde “en” es la palabra clave y noun_type_ooslocality es el tipo de dato que se va a recibir. También deberemos añadir un nuevo parámetro a preview y execute donde recibir los modificadores. Este parámetro es un hash donde la clave es el modificador.

Estos tipos de datos también son personalizables y se pueden crear fácilmente siguiendo la siguiente estructura:

var noun_type_ooslocality = {
     _name: "localidad",
     suggest: function(text, html){
          ...
          return return [ CmdUtils.makeSugg(text, null, date) ];
     }
}

Cuándo el comando recibe como parámetro un tipo de datos lo primero que hace es ejecutar el método suggest, el cual devuelve una lista con todos los posibles valores para esa entrada. En nuestro caso hemos creado un noun_type llamado noun_type_ooslocality que, a través de la API de 11870, comprobará las localidades que disponemos que se corresponden con la entrada y se mostrará al usuario una lista para que pueda concretar su búsqueda.

Ubiquity también proporciona:

  • Geolocalización: Podemos obtener nuestra localización actual usando CmdUtils.getGeoLocation() para lo cual actualmente usa la API de MaxMind.
  • JavascriptTemplates: Que nos facilita la tarea de generar los preview, para lo cual usan TrimPath’s JavascriptTemplates.
  • JQuery: especialmente para las llamadas AJAX.

Y para acabar, os dejo aquí el comando 11870 para Ubiquity a modo de ejemplo, para que jueguéis con él todo lo que queráis 😀

Anuncios