Tvoříme uživatelské skripty pro Operator: pokročilé techniky

Rozšíření Operator umožňuje uživatelům prohlížeče Firefox používat mikroformáty při každodenní práci s webem. Jeho možnosti lze dále rozšířit pomocí uživatelských skriptů. V druhém dílu seriálu o tvorbě uživatelských skriptů se budeme věnovat pokročilejším tématům, např. hromadným akcím.

Seriál: Tvoříme uživatelské skripty pro Operator (3 díly)

  1. Tvoříme uživatelské skripty pro Operator: Základy 2.10.2008
  2. Tvoříme uživatelské skripty pro Operator: pokročilé techniky 8.10.2008
  3. Tvoříme uživatelské skripty pro Operator: používáme POST 10.10.2008

V minulém díle jsme si ukázali vytvoření uživatelského skriptu pro akci rozšíření Operator. V tomto dílu navážeme vysvětlením některých pokročilejších technik.

Celá série o tvorbě uživatelských skriptů pro rozšíření Operator je překladem anglického originálu, jehož autorem je vývojář Operatoru Michael Kaply.

Dnes se budeme věnovat třem tématům: vytvoření akce, která umí zpracovat všechny mikroformáty na stránce, dynamickou změnu jména akce a rozšíření nainstalovaných akcí tak, aby dokázaly pracovat s novými mikroformáty.

Co je Operator?

Operator je rozšíření prohlížeče Firefox, které uživatelům nabízí rozhraní pro práci s mikroformáty. Více se o používání Operatoru dočtete v článku Operator: snadná práce s mikroformáty ve Firefoxu.

Co jsou mikroformáty?

Mikroformáty je způsob vkládání sémantických informací do HTML dokumentů. Hodí se pro zápis kontaktů, událostí a mnohých dalších dat. Více se o nich dočtete v našem seriálu Kódujme sémanticky s mikroformáty.

Vytvoření akce pro všechny mikroformáty na stránce

Vedle funkce doAction, o které jsme hovořili posledně, existuje i podobná funkce doActionAll:

doActionAll: function(semanticArrays, semanticObjectType) {
  ...
} 

Nejprve si popíšeme druhý parametr semanticObjec­tType, protože je poněkud komplikovanější. Existují dva způsoby, jak může být vaše akce vyvolána, a oba záleží na tom, jak je Operator používán. Pokud uživatel používá zobrazení datových formátů (v orig. data types), pak je akce vyvolána pouze na mikroformátech určitého typu. V takovém případě bude semanticObjec­tType obsahovat tento typ mikroformátu. Pokud je ovšem v Operatoru zapnuto zobrazení akcí, pak bude semanticObjec­tType prázdný. Je to proto, že v zobrazení akcí může být akce vyvolána i na několika typech mikroformátů současně, např. akce „Google Mapy“ může být vyvolána jak na mikroformátu adr, tak na mikroformátu geo.

V praxi semanticObjec­tType pravděpodobně nikdy nepoužijete, jelikož většina akcí (zejména hromadné akce) jsou přidruženy k jednomu mikroformátu, proto ve vaší akci zpravidla budete sami předpokládat, o jaký mikroformát se jedná.

Parametr semanticArrays obsahuje pole se všemi mikroformáty ve stránce. Vy si z nich vyberete jen mikroformát, který vás zajímá, např. pokud chcete pracovat se všemi geografickými souřadnicemi na stránce, přistoupíte k nim skrze zápis:

semanticArrays['geo']; 

Výsledkem tohoto výrazu bude pole všech mikroformátů geo ve stránce, které si již zpracujete po jednotlivých sémantických objektech.

Pokud chcete přidat popisek pro hromadnou akci, stačí, když přidáte nový parametr descriptionAll do počáteční struktury.

Podotýkám, že o tom, kdy bude vaše hromadná akce uživateli nabídnuta, rozhoduje sémantický obor.

Úprava názvu akce za běhu

Když jsme si prvně ukazovali tvorbu vlastní akce, zmínili jsme i poslední parametr propertyIndex metody doAction. Ten ukazuje, pro kterou instanci dané vlastnosti mikroformátu je akce prováděna (týká se jen vlastností, které se mohou v mikroformátu vyskytovat vícekrát).

A máme tu problém. Pokud máme např. hCard, který obsahuje pět URL, nechceme zobrazit pět akcí pouze s názvem „Otevři URL“. Jak by uživatel mezi jednotlivými URL rozlišil? Pomůže nám funkce getActionName.

getActionName: function(semanticObject, semanticObjectType, propertyIndex) {
  ...
} 

Funkce getActionName nám dovolí změnit název akce podle vlastností objektu, se kterým právě pracujeme. V našem případě bychom tak mohli změnit název z „Otevři URL“ na název, který bude obsahovat danou URL v závorce.

Funkcí getActionName můžeme dokonce zařídit, aby se akce nezobrazila vůbec. Pokud bychom vytvářeli akci, která pracuje pouze s AOL messengerem, mohli bychom zkontrolovat, zda URL obsahuje protokol aim a pokud ne, vůbec bychom ji nezobrazili. Docílíme toho navrácením hodnoty undefined. Poznamenejme jen, že pokud by funkce vracela prázdný řetězec, znamenalo by to zobrazit výchozí hodnotu.

Zmíněný mechanismus je použit např. v akci Go to web page.

Funkce getActionName je volána pro každou akci, můžete s ní proto experimentovat a pojmenovávat akce i na základě jiných kritérií než je sémantický obor.

Registrování k existujícím akcím

Někdy již existuje akce, která vykonává to, co potřebujete, ale vy k ní chcete přidat další funkcionalitu nebo vytvořit nový mikroformát, který by tuto akci používal. Např. mikroformát hResume se registruje pro akce „Bookmark with Firefox“, „Search Google“ a „Search Yahoo!“. Kód, který to zařídí, najdeme na konci skriptu hResume.js. Vypadá takto:

var hresume_firefox_bookmark = {
  scope: {
    semantic: {
      "hResume" : "hResume",
    }
  }
};

var hresume_google_search = {
  scope: {
    semantic: {
      "hResume" : "contact.fn"
    }
  }
};

var hresume_yahoo_search = {
  scope: {
    semantic: {
      "hResume" : "contact.fn"
    }
  }
};

SemanticActions.add("firefox_bookmark", hresume_firefox_bookmark);
SemanticActions.add("google_search", hresume_google_search);
SemanticActions.add("yahoo_search", hresume_yahoo_search); 

Všimněte si, že jsme jen vytvořili objekty, které definují další sémantické obory, a ty jsme následně přiřadili k existujícím akcím. Jelikož tyto akce používají stejná sémantická data, jako jsou data našeho sémantického oboru, nemusíme nic víc dělat.

V některých případech vám ale nezbude než vytvořit novou funkci doAction, která obslouží váš nový mikroformát. Funkce doAction se zřetězují za sebou, proto ve vaší funkci doAction zkontrolujete semanticObjec­Type, zda se funkce volá pro váš nový mikroformát, a pokud ano, vrátíte true jako signál, že jste akci obsloužili. V opačném případě vrátíte  false.

Dokončení příště

Probrali jsme základy i pokročilé techniky při tvorbě uživatelských skriptů. V posledním dílu nám zbývá podívat se, jak vytvářet akce obsahující dotazy používající metodu POST.

Tento text je překladem návodu Creating a Microformat Action User Script (Advanced), jehož autorem je Michael Kaply.

Martin Hassman založil a vede magazín Zdroják. Absolvoval VŠCHT Praha. Byl u založení projektu CZilla (dnes už nepamatujete, nevadí). Stavěl mosty a metal cestu pro HTML5 (to tu ještě máme). V GUG.cz organizoval akce pro vývojáře (a jestli neumřeli, kódují si dodnes…).

Zatím nebyl přidán žádný komentář, buďte první!

Přidat komentář
Zdroj: https://www.zdrojak.cz/?p=2829