VYSOKÉ U ˇ
CENÍ TECHNICKÉ V BRN ˇ
E
BRNO UNIVERSITY OF TECHNOLOGYFAKULTA INFORMA ˇ
CNÍCH TECHNOLOGIÍ
ÚSTAV PO ˇ
CÍTA ˇ
COVÉ GRAFIKY A MULTIMÉDIÍ
FACULTY OF INFORMATION TECHNOLOGYDEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
ZOBRAZOVÁNÍ ANOTACÍ V REÁLNÉM ˇ
CASE
BAKALÁ ˇ
RSKÁ PRÁCE
BACHELOR’S THESIS
AUTOR PRÁCE
PETR PAPOUŠEK
AUTHOR
VYSOKÉ U ˇ
CENÍ TECHNICKÉ V BRN ˇ
E
BRNO UNIVERSITY OF TECHNOLOGY
FAKULTA INFORMA ˇ
CNÍCH TECHNOLOGIÍ
ÚSTAV PO ˇ
CÍTA ˇ
COVÉ GRAFIKY A MULTIMÉDIÍ
FACULTY OF INFORMATION TECHNOLOGYDEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA
ZOBRAZOVÁNÍ ANOTACÍ V REÁLNÉM ˇ
CASE
REAL-TIME ANNOTATION VIEW
BAKALÁ ˇ
RSKÁ PRÁCE
BACHELOR’S THESIS
AUTOR PRÁCE
PETR PAPOUŠEK
AUTHOR
VEDOUCÍ PRÁCE
Ing. JAROSLAV DYTRYCH
SUPERVISOR
Abstrakt
Tato pr´ace se zab´yv´a tvorbou doplˇnku webov´eho prohl´ıˇzeˇce Firefox, kter´y umoˇzˇnuje zob-razen´ı anotac´ı dokumentu a jejich ´uprav v re´aln´em ˇcase. D´ıky napojen´ı na 4A Framework se doplnˇek liˇs´ı od existuj´ıc´ıch doplˇnk˚u pro anotaci napˇr´ıklad moˇznost´ı spolupr´ace v´ıce uˇ ziva-tel˚u v re´aln´em ˇcase a moˇznost´ı pr´ace s vnoˇren´ymi anotacemi. Souˇc´ast´ı t´eto pr´ace je i n´avrh, implementace a testov´an´ı doplˇnku.
Abstract
This work is about creating an addon for Firefox web browser. Addon is able to show annotations and their modifications in real-time. Thanks to connection to 4A Framework, this addon is different from other existing annotation addons by real-time cooperation ability and capability of working with nested annotations. This work also contains concept, implementation and testing of this addon.
Kl´ıˇ
cov´
a slova
Doplnˇek, Firefox, anotace, vnoˇren´a anotace, uˇzivatelsk´e rozhran´ı, web, spolupr´ace, re´aln´y ˇ
cas.
Keywords
Addon, Firefox, annotation, nested annotation, user interface, web, co-operation, real-time.
Citace
Petr Papouˇsek: Zobrazov´an´ı anotac´ı v re´aln´em ˇcase, bakal´aˇrsk´a pr´ace, Brno, FIT VUT v Brnˇe, 2011
Zobrazov´
an´ı anotac´ı v re´
aln´
em ˇ
case
Prohl´
aˇ
sen´ı
Prohlaˇsuji, ˇze jsem tuto bakal´aˇrskou pr´aci vypracoval samostatnˇe pod veden´ım pana Ing. Jaroslava Dytrycha. Uvedl jsem vˇsechny liter´arn´ı prameny a publikace, ze kter´ych jsem ˇ
cerpal.
. . . . Petr Papouˇsek 16. kvˇetna 2011
Podˇ
ekov´
an´ı
Chtˇel bych podˇekovat vedouc´ımu pr´ace, panu Ing. Jaroslavu Dytrychovi za ˇcas vˇenovan´y konzultac´ım a za rady, pˇripom´ınky a odpovˇedi, kter´e mi pˇri pr´aci velmi pomohly a uˇsetˇrily mnoho ˇcasu.
c
Petr Papouˇsek, 2011.
Tato pr´ace vznikla jako ˇskoln´ı d´ılo na Vysok´em uˇcen´ı technick´em v Brnˇe, Fakultˇe informaˇ c-n´ıch technologi´ı. Pr´ace je chr´anˇena autorsk´ym z´akonem a jej´ı uˇzit´ı bez udˇelen´ı opr´avnˇen´ı autorem je nez´akonn´e, s v´yjimkou z´akonem definovan´ych pˇr´ıpad˚u.
Obsah
1 Uvod´ 3 2 Anal´yza 4 2.1 Poˇzadavky. . . 4 2.2 Pojem anotace . . . 4 2.3 4A Framework . . . 4 2.4 Firefox . . . 6 2.5 Syst´em doplˇnk˚u. . . 62.5.1 Souˇc´asti doplˇnku Firefoxu . . . 8
3 Technologie 10 3.1 HTTP . . . 10 3.2 XPCOM . . . 11 3.3 XML . . . 11 3.4 XUL . . . 11 3.5 JavaScript . . . 12 3.6 jQuery . . . 12 3.7 Ajax . . . 12 3.8 Comet . . . 13 3.9 CSS . . . 13 3.10 DOM . . . 13 3.11 XPath . . . 13 3.12 HTML . . . 14 3.13 XHTML . . . 14 3.14 XHR . . . 14 4 N´avrh 15 4.1 Princip ˇcinnosti . . . 15 4.2 Komunikace . . . 16
4.3 Prvky uˇzivatelsk´eho rozhran´ı . . . 17
4.4 Ovl´ad´an´ı, uˇzivatelsk´e akce . . . 19
4.5 N´avrh datov´ych struktur. . . 20
4.6 N´avrh funkˇcn´ıch blok˚u . . . 20
5 Implementace 22 5.1 N´astroje . . . 22
5.2 Prvotn´ı postup . . . 22
5.4 Implementace funkˇcn´ıch blok˚u . . . 25
5.5 V´ysledn´a podoba implementace . . . 27
6 Testov´an´ı 29 6.1 Experiment . . . 29 7 Z´avˇer 33 Literatura 34 Pˇr´ılohy 37 Seznam pˇr´ıloh. . . 38
A Uk´azka strukturovan´e anotace 39 B Protokol pro pˇrenos anotac´ı mezi klientem a serverem 41 B.1 Spr´ava sezen´ı . . . 41
B.2 Uˇzivatel´e a skupiny . . . 42
B.3 R´ızen´ı odbˇˇ eru anotac´ı . . . 43
B.4 Synchronizace dokumentu . . . 43
B.5 Pˇrenos typ˚u anotac´ı . . . 45
B.6 Pˇrenos anotac´ı . . . 46
B.7 Nab´ızen´ı anotac´ı . . . 47
B.8 Pˇrenos nastaven´ı . . . 48
B.9 Chyby a varov´an´ı. . . 48
B.10 Potvrzen´ı bez doplˇnuj´ıc´ıch dat . . . 52
Kapitola 1
´
Uvod
V t´eto pr´aci se zab´yv´am vytvoˇren´ım doplˇnku webov´eho prohl´ıˇzeˇce Firefox pro zobrazen´ı anotac´ı webov´eho dokumentu.
V kapitole 2 lze nal´ezt poˇzadavky na tento doplnˇek, sezn´amen´ı s 4A Frameworkem, na kter´y doplnˇek navazuje, a informace o webov´em prohl´ıˇzeˇc´ı Firefox. Souˇc´ast´ı t´eto kapitoly je tak´e ´uvod do problematiky syst´emu doplˇnk˚u Firefoxu, jejich struktury, d˚uleˇzit´ych ˇc´ast´ı a zaˇclenˇen´ı do prohl´ıˇzeˇce.
V´yˇcet technologi´ı, kter´e jsou v pr´aci vyuˇzity, z´akladn´ı informace o nich a zd˚uvodnˇen´ı jejich volby se nach´az´ı v kapitole 3.
Logiku a funkˇcnost doplˇnku, komunikaci, jeho uˇzivatelsk´e rozhran´ı, zp˚usob pr´ace s n´ım, struktury a funkˇcn´ı bloky jsem navrhl v kapitole 4.
Implementaˇcn´ı detaily, probl´emy, se kter´ymi jsem se bˇehem implementace setkal, a n´ a-stroje, kter´e jsem pouˇz´ıval, jsou pops´any v kapitole5.
Postup testov´an´ı implementace a n´astroje k tomu vyuˇzit´e jsou pops´any v kapitole6. Zhodnocen´ı v´ysledk˚u pr´ace a n´avrh moˇzn´ych rozˇs´ıˇren´ı lze nal´ezt v kapitole 7.
Kapitola 2
Anal´
yza
V t´eto kapitole se nach´az´ı popis poˇzadavk˚u na pr´aci a sezn´amen´ı s 4A Frameworkem, webov´ym prohl´ıˇzeˇcem Firefox a syst´emem jeho doplˇnk˚u.
2.1
Poˇ
zadavky
M´ym ´ukolem bylo vytvoˇrit doplnˇek aplikace Firefox schopn´y zobrazovat anotace textu a je-jich ´upravy na aktu´alnˇe otevˇren´e str´ance. Tyto anotace jsou ukl´ad´any na vyhrazen´y server jin´ymi aplikacemi. Komunikace s t´ımto serverem m´a prob´ıhat asynchronnˇe pomoc´ı techno-logie Comet, aby bylo doc´ıleno zm´ınˇen´eho zobrazen´ı v re´aln´em ˇcase.
Mˇel jsem za ´ukol ˇc´asteˇcnˇe implementovat komunikaˇcn´ı protokol serveru, kter´y je vyv´ıjen v r´amci syst´emu pro anotov´an´ı webov´ych str´anek a jin´ych dokument˚u, kter´eho m´a b´yt doplnˇek souˇc´ast´ı. Tento syst´em je bl´ıˇze pops´an v sekci 2.3.
Anotace se zobraz´ı u anotovan´eho textu v samostatn´em objektu (napˇr´ıklad oknˇe, ˇci bub-linˇe). Vˇsechny souˇc´asti anotace, jejich struktura a bliˇzˇs´ı popis viz sekce 2.3. Poˇzadavkem je tak´e vhodn´e zobrazen´ı vnoˇren´ych a odkazovan´ych anotac´ı.
Anotovan´y text bude viditelnˇe odliˇsen, aby mohl b´yt rozpozn´an od bˇeˇzn´eho textu. Toto oznaˇcen´ı se bude liˇsit v z´avislosti na ´urovni zanoˇren´ı anotace.
2.2
Pojem anotace
Pojmem anotace se obecnˇe rozum´ı pozn´amka (s obsahem textov´ym, ˇci jin´eho charakteru) k nˇejak´e jiˇz existuj´ıc´ı pr´aci (napˇr´ıklad ˇcl´anku v knize). Pojmem se m˚uˇze rozumˇet tak´e vytv´aˇren´ı takov´ychto pozn´amek.
V kontextu moj´ı pr´ace je anotace pozn´amkou k webov´e str´ance.
Vnoˇren´a anotace
Tento pojem oznaˇcuje anotaci, kter´a m´a v´yznam pouze v kontextu jin´e, jiˇz existuj´ıc´ı anotace a jej´ı samostatn´e zobrazen´ı pod´av´a nekompletn´ı, ˇci matouc´ı informaci.
2.3
4A Framework
M˚uj doplnˇek navazuje na 4A (Annotations Anywhere, Annotations Anytime) Framework. Motivac´ı pro vznik tohoto frameworku byl nedostatek strukturovanosti metadat informac´ı
na webu a z toho vypl´yvaj´ıc´ı obt´ıˇznost strojov´eho zpracov´an´ı. Jeho c´ılem je vytvoˇrit sys-t´em, pomoc´ı nˇehoˇz bude uˇzivatel˚um umoˇznˇeno jednoduch´ym zp˚usobem vytv´aˇret anotace, a to v aplikaci, kterou znaj´ı a jsou zvykl´ı pouˇz´ıvat. T´ımto zp˚usobem chce dos´ahnout zv´ y-ˇsen´ı ´urovnˇe a mnoˇzstv´ı strukturovan´ych informac´ı o obsahu webov´ych dokument˚u. Jeho c´ılem je tak´e umoˇznit spolupr´aci prostˇrednictv´ım soubˇeˇzn´eho anotov´an´ı v r˚uzn´ych prostˇ re-d´ıch a vytvoˇrit syst´em nab´ızen´ı anotac´ı serverem na z´akladˇe pˇredpokladu vhodnosti, kter´e by uˇzivatel potom uˇz jen schvaloval s moˇznou ´upravou, ˇci odm´ıtal. Od podobn´ych projekt˚u se liˇs´ı napˇr´ıklad jednoduchou moˇznost´ı sd´ılen´ı anotac´ı, moˇznost´ı vytv´aˇren´ı strukturovan´ych anotac´ı a poˇctem typ˚u anotac´ı, kter´y nen´ı pevnˇe dan´y. Koncept zahrnuje server, kter´y ucho-v´av´a anotace a klienty, kter´ı je zobrazuj´ı, ˇci upravuj´ı v r˚uzn´ych prostˇred´ıch. Pr´avˇe jedn´ım z tˇechto klient˚u je i doplnˇek do Firefoxu, kter´y jsem vytvoˇril. Zdroj: [32].
Protokol
Protokol zahrnuje pˇrenos anotac´ı, typ˚u anotac´ı, nastaven´ı klienta a serveru, v´ybˇer zdroje odeb´ıran´ych anotac´ı, nab´ızen´ı anotac´ı a spr´avu sezen´ı.
Detailn´ı popis protokolu je v pˇr´ılozeBa je v pln´e m´ıˇre pˇrejat z pr´ace [33] od jeho autora, pana Ing. Jaroslava Dytrycha.
Server
Server je uk´azkovou implementac´ı pro ovˇeˇren´ı konceptu 4A Frameworku, jeho v´yvoj st´ale prob´ıha a funkcionalita zahrnuje:
• ukl´ad´an´ı a aktualizaci (synchronizaci, zaznamen´av´an´ı zmˇen) kopi´ı dokument˚u, • ukl´ad´an´ı, aktualizace a maz´an´ı anotac´ı,
• spr´avu typ˚u anotac´ı,
• nab´ızen´ı jednoduch´ych anotac´ı (hled´an´ı slov v jednoduch´em slovn´ıku), • spr´avu uˇzivatelsk´ych ´uˇct˚u s webov´ym rozhran´ım,
• spr´avu uˇzivatelsk´ych nastaven´ı, • z´akladn´ı komunikaci s klientem, • z´akladn´ı pr´aci s anotacemi. Komunikace
Komunikace se serverem prob´ıh´a pomoc´ı protokolu HTTP, a to metodou POST v pˇr´ıpadˇe pˇr´ıhlaˇsov´an´ı a synchronizace, metodou GET v pˇr´ıpadˇe Comet.
Struktura anotace
Z´aznam o anotaci obsahuje: id anotace
datum vytvoˇren´ı
typ anotace Seznam typ˚u anotac´ı je spravov´an serverem, lze vytv´aˇret i v´ıce ´urovn´ı pod-typ˚u, takˇze tento seznam tvoˇr´ı stromovou hierarchii.
fragmenty Fragmentem se rozum´ı anotovan´y text. Jedna anotace m˚uˇze m´ıt v´ıce frag-ment˚u, kaˇzd´y z nich je identifikov´an pomoc´ı kombinace XPath v´yrazu identifikuj´ıc´ıho cestu k uzlu dokumentu, ve kter´em se fragment nach´az´ı, posunut´ı (offsetu) v r´amci tohoto uzlu, d´elky anotovan´eho textu a samotn´eho anotovan´eho textu.
samotn´y text anotace
atributy Kromˇe z´akladn´ıch typ˚u atribut˚u1, jako napˇr´ıklad datum, ˇc´ıslo ˇci text existuj´ı tak´e:
geografick´y bod obsahuje informace o zemˇepisn´e ˇs´ıˇrce a d´elce odkaz na jinou anotaci
vnoˇren´a anotace
Pˇresn´a struktura anotace a pˇr´ıklad jej´ı XML reprezentace viz pˇr´ıloha A.
2.4
Firefox
Firefox je webov´y prohl´ıˇzeˇc, kter´y jiˇz proˇsel dlouholet´ym v´yvojem. Jeho prvn´ı verze – 0.1 – byla dokonˇcena v roce 2002 a tehdy jeˇstˇe nesla n´azev Phoenix. Byla vytvoˇrena ˇcleny Mozilla komunity s c´ılem (v pˇrekladu)
”poskytnout nejlepˇs´ı moˇzn´y proˇzitek z prohl´ıˇzen´ı webov´ych str´anek pro co nejˇsirˇs´ı skupinu lid´ı“. Projekt vych´azel z
”Mozilla Suite“, bal´ıku, kter´y obsa-hoval prohl´ıˇzeˇc, poˇstovn´ıho klienta a dalˇs´ı aplikace.
V roce 2003 vznikla Mozilla Foundation, nez´avisl´a neziskov´a organizace, kter´a se ujala role managementu budouc´ıho v´yvoje projektu.
Firefox verze 1.0 byl dokonˇcen v roce 2004 a jeho obl´ıbenost rychle rostla. V roce 2008 dos´ahl 20% pod´ılu na celosvˇetov´em trhu2, v roce 2011 dos´ahl jiˇz 30% a v Evropˇe dokonce pˇredehnal konkurenˇcn´ı Internet Explorer3.
Komunita, kter´a se dnes pod´ıl´ı na jej´ım v´yvoji, je velmi ˇsirok´a, zdrojov´e k´ody jsou otevˇren´e a zapojit se m˚uˇze kaˇzd´y. V souˇcasn´e dobˇe nejnovˇejˇs´ı je verze 4.0.1. V´ıce o historii projektu v [13].
Gecko Pomysln´ym srdcem Firefoxu je jeho renderovac´ı j´adro Gecko. To se star´a jak o zob-razen´ı uˇzivatelsk´eho rozhran´ı prohl´ıˇzeˇce a jeho doplˇnk˚u popsan´eho pomoc´ı jazyka XUL, tak o odpov´ıdaj´ıc´ı zobrazen´ı webov´ych str´anek.
2.5
Syst´
em doplˇ
nk˚
u
Koncept modularity a upravitelnosti je v souˇcasn´e dobˇe siln´ym trendem uˇzivatelsk´eho roz-hran´ı, a to nejen webov´ych prohl´ıˇzeˇc˚u, jako je Firefox, Internet Explorer, ˇci Opera. Se-tk´av´ame se napˇr´ıklad s doplˇnky hudebn´ıch pˇrehr´avaˇc˚u, poˇstovn´ıch klient˚u, komunik´ator˚u
1 http://www.w3schools.com/Schema/default.asp 2 http://www.tgdaily.com/trendwatch-features/40381-firefox-sails-past-20-market-share-ie-drops-below-70 3 http://aktualne.centrum.cz/ekonomika/business-ve-svete/clanek.phtml?id=687093
a spousty dalˇs´ıch program˚u. Modularita je patrn´a i u ˇcistˇe webov´ych aplikac´ı, jako napˇ r´ı-klad u redakˇcn´ıho syst´emu Wordpress4, ˇci Internetov´eho port´alu iGoogle, po jeho vzoru Seznam.cz a dalˇs´ıch.
Koncept umoˇzˇnuje pokr´yt rozd´ıln´e poˇzadavky kladen´e na aplikace jejich uˇzivateli. V sou-vislost´ı s t´ımto konceptem se v prohl´ıˇzeˇci Firefox setk´av´ame s dvˇema pojmy, a to z´asuvn´y modul a doplnˇek.
Z´asuvn´y modul Firefoxu
Z´asuvn´e moduly (ˇcasto t´eˇz naz´yvan´e pluginy) jsou software tˇret´ıch stran, kter´y do webo-v´eho prohl´ıˇzeˇce pˇrid´av´a podporu pro manipulaci s obsahem, s kter´ym webov´y prohl´ıˇzeˇc standardnˇe neum´ı pracovat. Moduly nejˇcastˇeji zajiˇst’uj´ı spolupr´aci s extern´ım software jako je napˇr´ıklad multimedi´aln´ı pˇrehr´avaˇc, kter´y zajist´ı pˇrehr´an´ı videa na str´ance. Pˇrejato z [31].
Doplˇnek Firefoxu
Doplˇnky (nˇekdy t´eˇz chybnˇe naz´yvan´e jako pluginy) jsou mal´e bal´ıˇcky, kter´e umoˇzˇnuj´ı rozˇs´ıˇrit aplikace Mozilla o nov´e funkce, zmˇenit jejich vzhled ˇci napˇr´ıklad pˇridat podporu pro spo-lupr´aci s extern´ımi aplikacemi. Pˇrejato z [11].
Firefox byl jedn´ım z prvn´ıch, ne-li pˇr´ımo prvn´ı prohl´ıˇzeˇc, kter´y velice intuitivn´ım a pro uˇ zi-vatele pˇr´ıvˇetiv´ym zp˚usobem zavedl uˇz´ıv´an´ı doplˇnk˚u do praxe. Mozilla Foundation se snaˇz´ı tvorbu tˇechto doplˇnk˚u silnˇe podporovat, jak je ostatnˇe patrno i z port´alu
”Centrum pro v´ y-voj´aˇre doplˇnk˚u“ [5], kter´y nab´ız´ı mnoho ˇcl´ank˚u pro rychl´y ´uvod do problematiky, pˇr´ıklady, rady, n´avody, pˇr´ıpadov´e studie a dalˇs´ı uˇziteˇcn´e informace.
Proˇc doplnˇek
Jelikoˇz form´at obsahu, kter´y prohl´ıˇzeˇc v pˇr´ıpadˇe m´e pr´ace zobrazuje, je pro nˇej zn´am´y a m´ym c´ılem je pouze rozˇs´ıˇrit prohl´ıˇzeˇc o novou funkci – schopnost zobrazovat anotace – je na z´akladˇe uveden´ych charakteristik z´asuvn´eho modulu a doplˇnku logick´e rozhodnout se pro v´yvoj doplˇnku.
Existuj´ıc´ı anotaˇcn´ı doplˇnky firefoxu
Doplˇnk˚u umoˇzˇnuj´ıc´ıch anotaci webov´ych str´anek je v´ıce a kaˇzd´y z nich se sv´ym pˇr´ıstupem k probl´emu trochu liˇs´ı, a to napˇr´ıklad v tˇechto oblastech:
• Forma – jak´ymi zp˚usoby lze anotaci vytvoˇrit • Grafick´a reprezentace
• Zp˚usob uloˇzen´ı, sd´ılen´ı a spolupr´ace
Awesome Screenshot umoˇzˇnuje vytvoˇrit sn´ımek obrazovky, ˇci jej´ı ˇc´asti a ten potom anotovat pomoc´ı grafick´ych primitiv a textu. N´avaznost na anotovan´y text vych´az´ı ˇcistˇe z obrazov´eho rozpozn´an´ı. Uloˇzen´ı takto vytvoˇren´eho souboru je potom lok´aln´ı, ˇci na vyhra-zen´em serveru.
4
FloatNotes umoˇzˇnuje vytv´aˇret pozn´amky, kter´e se zobrazuj´ı nad anotovanou str´ankou. V t´eto pozn´amce lze vyuˇz´ıt HTML a vkl´adat obr´azky. Pozn´amky se v´aˇzou k adres´am str´ a-nek, na kter´ych se zobrazuj´ı, nikoli pˇr´ımo k textu. Uloˇzen´ı je lok´aln´ı, doplnˇek neumoˇzˇnuje spolupr´aci v´ıce uˇzivatel˚u.
Edit and Note ukl´ad´a lok´aln´ı kopii anotovan´e str´anky. Anotace jsou vkl´ad´any na ´urovni k´odu str´anky, doplnˇek manipuluje s HTML elementy a jejich atributy. Pro tento ´uˇcel nab´ız´ı doplnˇek sv˚uj editor, kter´y m´a tuto pr´aci usnadnit.
Vˇsechny uveden´e doplˇnky jsou dostupn´e na serveru Mozilla doplˇnk˚u5.
D´ıky napojen´ı na 4A Framework se m˚uj doplnˇek liˇs´ı od uveden´ych pˇr´ıklad˚u napˇr´ıklad moˇznost´ı spolupr´ace v´ıce uˇzivatel˚u v re´aln´em ˇcase, moˇznost´ı pr´ace s vnoˇren´ymi anotacemi a zpracov´an´ım strukturovan´ych anotac´ı.
2.5.1 Souˇc´asti doplˇnku Firefoxu
Zde je pops´ana skladba doplˇnku, zp˚usob adresov´an´ı, kter´y pouˇz´ıv´a, zp˚usob zaˇclenˇen´ı do pro-hl´ıˇzeˇce a jeho d˚uleˇzit´e souˇc´asti.
Skladba
Skladba doplˇnku je navrˇzena tak, aby umoˇzˇnovala:
• Snadn´e zaˇclenˇen´ı do prohl´ıˇzeˇce a definici funkˇcnosti (sekce content, obsahuje XUL a JavaScript soubory)
• Jednotn´y pˇr´ıstup k lokalizaci (sekce locale, obsahuje soubory s ˇretˇezci pro lokalizaci uˇzivatelsk´eho rozhran´ı)
• Spr´avu vzhledu (sekce skin, obsahuje CSS soubory upravuj´ıc´ı vzhled uˇzivatelsk´eho rozhran´ı a obr´azky)
Chrome URI
Adresa k soubor˚um doplˇnku je tvoˇrena
”Chrome URI“, kter´a m´a form´at: chrome://n´azev_doplˇnku/sekce/cesta_k_souboru_v_sekci.
Adresa zaˇc´ın´a chrome, aby prohl´ıˇzeˇc vˇedˇel, ˇze se jedn´a o Chrome URI. N´azev_doplˇnku by mˇel b´yt unik´atn´ı pro kaˇzd´y doplnˇek, aby nedoˇslo ke koliz´ım. Sekce byly pops´any v´yˇse, tedy content, locale, ˇci skin. Pˇr´ıkladem Chrome URI m˚uˇze b´yt tedy napˇr´ıklad chrome://mujdoplnek/skin/obrazek.png. Pomoc´ı Chrome URI jsem adresoval XUL sou-bory, soubory se zdrojov´ymi k´ody jazyka JavaScript a obr´azky.
Zaˇclenˇen´ı do prohl´ıˇzeˇce
Je prov´adˇeno na z´akladˇe soubor˚u typu
”Overlay“, tedy v pˇrekladu pˇrekryt´ı. Jsou to XUL soubory, kter´e popisuj´ı prvky uˇzivatelsk´eho rozhran´ı, kter´e maj´ı b´yt vloˇzeny do uˇ zivatel-sk´eho rozhran´ı prohl´ıˇzeˇce. Kromˇe pˇrid´av´an´ı nov´ych prvk˚u umoˇzˇnuj´ı tak´e ´upravu, ˇci zno-vupouˇz´ıt´ı prvk˚u st´avaj´ıc´ıch. Pomoc´ı nich je tedy moˇzn´e napˇr´ıklad pˇridat poloˇzku do kon-textov´e nab´ıdky, ˇci ikonu doplˇnku do stavov´e liˇsty [3,30].
5
Soubor
”chrome.manifest“
Tento soubor se nach´az´ı v koˇrenov´em adres´aˇri doplˇnku a jeho funkc´ı je registrace obsahu doplˇnku v sekc´ıch popsan´ych v´yˇse. Do tohoto souboru nahl´ıˇz´ı spr´avce doplˇnk˚u Firefoxu a umoˇzˇnuje uˇzivateli zvolit napˇr´ıklad z v´ıce jazykov´ych lokalizac´ı, ˇci vzhled˚u registrova-n´ych t´ımto souborem. Pokud je doplnˇek urˇcen i pro jin´e aplikace, neˇz Firefox (napˇr´ıklad Thunderbird), je moˇzno pomoc´ı souboru chrome.manifest urˇcit, kter´y popis uˇzivatelsk´eho rozhran´ı se m´a pro danou aplikaci pouˇz´ıt [3].
Soubor
”install.rdf“
Tento soubor se tak´e nach´az´ı v koˇrenov´em adres´aˇri doplˇnku a obsahuje souhrnn´e infor-mace o doplˇnku, jako jm´eno doplˇnku, id, verzi, jm´eno autora, Chrome URI dialogu nasta-ven´ı, verze aplikac´ı, pro kter´e je doplnˇek urˇcen, a dalˇs´ı. Zm´ınˇen´e id doplˇnku m´a form´at e-mailov´e adresy, kter´a vˇsak nemus´ı skuteˇcnˇe existovat. Id by mˇelo b´yt unik´atn´ı a nesho-dovat se tak s ˇz´adn´ym jiˇz existuj´ıc´ım doplˇnkem [3].
Kapitola 3
Technologie
Technologie, kter´e Firefox a jeho doplˇnky vyuˇz´ıvaj´ı, a to, jak´y je mezi nimi vztah, je zn´ a-zornˇeno na obr´azku 3.1 a bl´ıˇze pops´ano v ˇcl´anku [6], ze kter´eho obr´azek poch´az´ı. Vyuˇzit´ı technolog´ı XPCOM, XUL, JavaScript a CSS bylo tedy povinn´e.
Technologie Ajax a Comet jsem zvolil pro dodrˇzen´ı poˇzadavku na zobrazen´ı anotac´ı a jejich ´uprav v re´aln´em ˇcase.
Protokol HTTP a jazyky XML, XPath a XHTML jsou vyuˇz´ıv´any syst´emem 4A Fra-mework, na kter´y doplnˇek navazuje, proto jejich pouˇzit´ı bylo nutn´e.
Obr´azek 3.1: Technologick´a prov´azanost prohl´ıˇzeˇce Firefox a jeho doplˇnk˚u
3.1
HTTP
HTTP (HyperText Transfer Protocol) je protokol aplikaˇcn´ı vrstvy s´ıt’ov´eho modelu TCP/IP (v´ıce v [38]) vyuˇz´ıvan´y pro pˇrenos
”zdroj˚u“ po Internetu. T´ımto”zdrojem“ je soubor, ˇci jin´a reprezentace dat identifikovateln´a pomoc´ı URL (Unique Resource Locator je zp˚usob, jak lze jednoznaˇcnˇe zapsat um´ıstˇen´ı souboru v poˇc´ıtaˇcov´e s´ıti. V´ıce viz1). Komunikace je zaloˇzena
na architektuˇre klient-server. Klient, nejˇcastˇeji webov´y prohl´ıˇzeˇc (ale i jak´ykoli jin´y pro-gram), vytvoˇr´ı poˇzadavek a odeˇsle ho serveru, kter´y ˇz´adost zpracuje a poˇsle klientovi od-povˇed’. Pokud je tedy napˇr´ıklad klientem webov´y prohl´ıˇzeˇc, vyˇz´ad´a si od serveru webovou str´anku, kterou chce uˇzivatel zobrazit. Komunikace je bezstavov´a – po odpovˇedi na poˇ za-davek si server neuchov´av´a informaci o probˇehl´em spojen´ı. Kaˇzd´a HTTP zpr´ava obsahuje hlaviˇcku a m˚uˇze obsahovat data. V hlaviˇcce poˇzadavku se nach´az´ı informace o verzi pro-tokolu, metodˇe poˇzadavku, poˇzadovan´em zdroji a dalˇs´ı. Odpovˇed’ obsahuje v hlaviˇcce ˇc´ıslo odpovˇedi a m˚uˇze obsahovat poˇzadovan´a data. Existuj´ı tˇri metody poˇzadavk˚u – GET, POST a HEAD. Poˇzadavek metody GET neobsahuje data, pokud je tˇreba pˇredat nˇejak´e informace serveru, dˇeje se tak pˇrid´an´ım do URL – jsou tak veˇrejnˇe ˇciteln´e. HEAD se od GET liˇs´ı pouze t´ım, ˇze v odpovˇedi serveru neˇz´ad´a data, pouze hlaviˇcku. Poˇzadavek metody POST obsa-huje data, kter´a jsou ˇcasto na stranˇe serveru zpracov´av´ana programem, ˇci skriptem urˇcen´ym v hlaviˇcce. Aktu´aln´ı verz´ı HTTP je 1.1. [37]
3.2
XPCOM
XPCOM (Cross Platform Component Object Model) je meziplatformn´ı objektov´y model komponent podobn´y Microsoft COM2. M´a nˇekolik zp˚usob˚u propojen´ı s r˚uzn´ymi programo-vac´ımi jazyky, d´ıky kter´ym lze XPCOM komponenty pouˇz´ıt a implementovat nejen v C++3 (ve kter´em je XPCOM ps´an), ale i v jazyce JavaScript, Java4a Python5. D˚uleˇzit´ym pojmem
je v t´eto problematice
”rozhran´ı“, kter´e je definov´ano pomoc´ı XPIDL (XPCOM Interface Description Language) 6. Rozhran´ı popisuj´ı pˇr´ıstup k XPCOM objekt˚um. XPCOM nab´ız´ı sadu komponent a tˇr´ıd j´adra, jako napˇr´ıklad spr´avu soubor˚u a pamˇeti, vl´akna, z´akladn´ı datov´e struktury (ˇretˇezec, pole, . . . ) atd. Vˇetˇsina komponent, ke kter´ym lze d´ıky XPCOM pˇristoupit, vˇsak nejsou pˇr´ımo jeho souˇc´ast´ı, ale mohou poch´azet napˇr´ıklad od j´adra Gecko, jin´e aplikace ˇci doplˇnku [28].
3.3
XML
XML (Extensible Markup Language) je znaˇckovac´ı jazyk se ˇsirok´ym vyuˇz´ıt´ım. Je spravo-van´y organizac´ı W3C a jeho n´avrh byl prezentov´an v roce 1996 na konferenci v Bostonu a od t´e doby jeho popularita rychle rostla. Jeho znaˇcky nejsou pˇredem definovan´e, ˇc´ımˇz umoˇzˇnuje popisovat spoustu odliˇsn´ych typ˚u dat. Jeho prim´arn´ım c´ılem je usnadnit sd´ılen´ı a pˇrenos tˇechto dat mezi r˚uzn´ymi syst´emy, obzvl´aˇstˇe syst´emy komunikuj´ıc´ımi pˇres Inter-net. Mezi jazyky, kter´e vznikly na jeho z´akladˇe, patˇr´ı i jazyk XUL, kter´y v pr´aci vyuˇz´ıv´am. V jazyce XML je implementov´an i protokol pro komunikaci doplˇnku se serverem. Zdroj: [25].
3.4
XUL
XUL (XML User Interface Language, v´yslovnost
”zool“) je jazyk zaloˇzen´y na XML, kter´y byl vyvinut spoleˇcnost´ı Mozilla pro jednoduchou tvorbu uˇzivatelsk´eho rozhran´ı. Umoˇzˇnuje
2 http://www.microsoft.com/com/default.mspx 3 http://www.cplusplus.com/ 4 http://www.java.com/ 5 http://www.python.org/ 6https://developer.mozilla.org/en/XPIDL
vytv´aˇret aplikace nez´avisl´e na operaˇcn´ım syst´emu, kter´e ke sv´emu bˇehu nepotˇrebuj´ı In-ternet, ale mohou s n´ım samozˇrejmˇe pracovat. Pomoc´ı tohoto jazyka vˇsak nelze vytv´aˇret vlastn´ı funkˇcnost aplikace, ale pouze jej´ı vzhled. Vˇetˇsina prvk˚u potˇrebn´ych pro tvorbu uˇ zi-vatelsk´eho rozhran´ı (jako napˇr´ıklad r˚uzn´a textov´a pole, tlaˇc´ıtka, panely n´astroj˚u, menu, stromov´e struktury, tabulky a kl´avesov´e zkratky aj.) uˇz je pˇredchyst´ana a staˇc´ı je jed-noduˇse pouˇz´ıt a pomoc´ı atribut˚u je upravit podle sv´e potˇreby. Jazyk tak´e zjednoduˇsuje lokalizaci aplikace. V jazyce XUL je ps´ano uˇzivatelsk´e rozhran´ı Firefoxu, Thunderbirdu a jejich doplˇnk˚u. V tˇechto pˇr´ıpadech se vyuˇz´ıv´a vykreslovac´ıho j´adra Gecko. Vice v [29].
3.5
JavaScript
JavaScript, jehoˇz autorem je Brendan Eich, je v souˇcasn´e dobˇe jedn´ım z nejrozˇs´ıˇrenˇejˇs´ıch skriptovac´ıch jazyk˚u7 na Internetu. Aˇckoli je pro zm´ınˇen´y ´uˇcel vyuˇz´ıv´an nejv´ıce, je navrˇzen obecnˇeji a je vyuˇziteln´y i jako serverov´y jazyk, ˇci jazyk pro tvorbu desktopov´ych aplikac´ı. Je podporov´an vˇsemi v souˇcasn´e dobˇe nejrozˇs´ıˇrenˇejˇs´ımi webov´ymi prohl´ıˇzeˇci, jako je Firefox, Chrome, Opera, a Safari. Jeho podpora prohl´ıˇzeˇcem Internet Explorer je pouze ˇc´asteˇcn´a (jeho hlavn´ım skriptovac´ım jazykem je jScript8). Byl navrˇzen proto, aby dodal interaktivitu
do webov´ych str´anek, a to zejm´ena pomoc´ı reakc´ı na r˚uzn´e ud´alosti. Umoˇzˇnuje tak´e napˇ r´ı-klad manipulaci s dokumentem, validaci dat pˇred odesl´an´ım na server, detekci uˇzivatelova prohl´ıˇzeˇce a dalˇs´ı. O sandardizaci JavaScriptu se star´a asociace Ecma9, odpov´ıd´a mu
stan-dard ECMA-262 (nejnovˇejˇs´ı vyd´an´ı 5). V tuto chv´ıli nejnovˇejˇs´ı verz´ı Javascriptu je 1.8.5. V m´e pr´aci – stejnˇe jako ve vˇsech ostatn´ıch doplˇnc´ıch firefoxu – zast´av´a JavaScript prim´arn´ı funkˇcnost a jeho schopnosti a pr´ava jsou jeˇstˇe rozˇs´ıˇreny pomoc´ı XPConnect. Zdroj: [17,16]. V´ıce se lze doˇc´ıst tak´e na webu autora [34] a v [42].
3.6
jQuery
Jedn´a se o knihovnu jazyka JavaScript, nez´avislou na prohl´ıˇzeˇci, kter´a zjednoduˇsuje ´upravu HTML dokumentu, oˇsetˇren´ı ud´alost´ı, animaci a komunikaci pomoc´ı technologie Ajax a na-pom´ah´a tak k rychlejˇs´ımu v´yvoji webov´ych aplikac´ı. Jej´ım heslem je
”piˇs m´enˇe, udˇelej v´ıce“ a autoˇri tvrd´ı, ˇze je navrˇzena tak, aby
”zmˇenila zp˚usob, jak´ym p´ıˇsete JavaScript“ [18]. Verze 1.5 byla v dobˇe implementace aktu´aln´ı stabiln´ı verz´ı. Knihovnu vyuˇz´ıv´am kv˚uli jej´ım vhod-n´ym funkc´ım a selektor˚um, kter´e zjedoduˇsuj´ı pr´aci s DOM modelem, a to jak dokumentu zobrazovan´e str´anky, tak XUL dokumentu doplˇnku. D´ale ji tak´e pouˇz´ıv´am pro komunikaci pomoc´ı technologie Ajax. V´ıce o jQuery v [40].
3.7
Ajax
N´azev Ajax vznikl spojen´ım slov Asynchronn´ı JavaScript a XML. Jedn´a se o pˇr´ıstup, kter´y je zaloˇzen na technologi´ıch: JavaScript, XHR, CSS, DOM a dalˇs´ıch. Byl definov´an panem Jesse James Garrettem v roce 2005. Je to platforma, architektura, kter´a spojuje zm´ınˇen´e technologie, aby dos´ahla rozˇs´ıˇren´ı komunikaˇcn´ıho klient-server modelu, rozˇs´ıˇren´ı moˇznost´ı
7
skriptovac´ı jazyky b´yvaj´ı vˇetˇsinou interpretov´any a nepotˇrebuj´ı tedy pˇredchoz´ı kompilaci pro sv˚uj bˇeh, coˇz umoˇzˇnuje vˇetˇs´ı dynamiˇcnost a upravitelnost za bˇehu.
8
http://msdn.microsoft.com/en-us/library/hbxc2t98(v=VS.85).aspx
9
komunikace webov´ych aplikac´ı, sn´ıˇzen´ı ˇcekac´ı doby klienta a t´ım tak´e vyˇsˇs´ı ´urovnˇe inter-akce mezi uˇzivatelem a webovou aplikac´ı. Zav´ad´ı sebe, jako vrstvu mezi uˇzivatele a server. Poˇzadavky od uˇzivatele ˇreˇs´ı bud’ s´am, nebo se na nˇe dotazuje serveru, ale asynchronnˇe. V m´e pr´aci jsem jej vyuˇzil pro komunikaci doplˇnku se serverem. Pˇri popisu technologie jsem vych´azel z ˇclanku autora tohoto pojmu [35].
3.8
Comet
Comet umoˇzˇnuje ud´alostmi ˇr´ızen´y pˇrenos dat ze strany serveru ke klientovi. Jedn´a se o asyn-chronn´ı komunikaci a vyuˇz´ıv´a se pˇri n´ı dlouho trvaj´ıc´ıch HTTP spojen´ı. Nejedn´a se o to, ˇ
ze by byl serveru pravidelnˇe, ˇci nepravidelnˇe pˇredkl´ad´an poˇzadavek (klasick´y polling), ale o to, ˇze klient serveru poˇsle poˇzadavek, na kter´y server odpov´ı aˇz ve chv´ıli, kdy zn´a od-povˇed’ nebo potˇrebuje klientovi nˇeco sdˇelit. Takto se klient dostane k poˇzadovan´ym dat˚um ve spr´avn´y ˇcas a jedin´e zpoˇzdˇen´ı tedy plyne ze samotn´e komunikace po s´ıti a ne z doby, kter´a by uplynula, neˇz by zaˇz´adal o data, kter´a uˇz jsou na serveru pˇripravena. Comet tak usnad-ˇ
nuje spolupr´aci v´ıce uˇzivatel˚u. Kdyˇz jeden uˇzivatel uˇcin´ı nˇejakou zmˇenu (napˇr´ıklad vytvoˇr´ı novou anotaci), server o t´eto zmˇenˇe informuje okamˇzitˇe vˇsechny uˇzivatele, kter´ych se tato ud´alost t´yk´a, protoˇze jejich poˇzadavek st´ale eviduje a jeˇstˇe na nˇej dosud neodpovˇedˇel. Pr´avˇe pro tento ´uˇcel je Comet vyuˇz´ıv´an v m´e pr´aci. V´ıce v ˇcl´anku autora pojmu [39].
3.9
CSS
Kask´adov´e styly (Cascading Style Sheets) byly vytvoˇreny W3C (World Wide Web Consor-tium). Definuj´ı, jak maj´ı b´yt zobrazeny jednotliv´e HTML elementy webov´e str´anky. Umoˇ z-ˇ
nuj´ı napˇr´ıklad ´upravu fontu, barvy, odsazen´ı atd. Spr´ava tˇechto vlastnost´ı vzhledu je d´ıky kask´adov´ym styl˚um umoˇznˇena jednotnˇe, coˇz je mnohem m´enˇe nam´ahav´e, neˇz definov´an´ı vzhledu u kaˇzd´eho elementu. Kask´adov´e styly jsou nyn´ı podporov´any vˇsemi nejrozˇs´ıˇrenˇ ej-ˇs´ımi webov´ymi prohl´ıˇzeˇci. Aktu´aln´ı verz´ı je 2.1 a verze 3 je ve v´yvoji [4]. Pomoc´ı kask´adov´ych styl˚u je definov´an vzhled uˇzivatelsk´eho prostˇred´ı FireFoxu a jeho doplˇnk˚u. V m´e pr´aci jsou vyuˇzity i pro podbarven´ı anotovan´eho textu ve webov´e str´ance [9].
3.10
DOM
DOM (Document Object Model) je programovac´ı rozhran´ı pro HTML a XML dokumenty. Poskytuje strukturovanou reprezentaci dokumentu a definuje zp˚usob, jak´ym m˚uˇze progra-m´ator k t´eto reprezentaci pˇristoupit, aby zmˇenil obsah dokumentu, jeho strukturu, nebo styl. Tato reprezentace je plnˇe objektovˇe orientovan´a a je tvoˇrena uzly a objekty, kter´e maj´ı sv´e vlastnosti a metody. DOM je poj´ıtkem mezi webovou str´ankou a programovac´ım jazy-kem, jako je tˇreba JavaScript [12]. Aktu´aln´ı verze DOM je oznaˇcov´ana
”Level 3“ [10]. DOM pouˇz´ıv´am pro pˇr´ıstup k zobrazen´e webov´e str´ance, XUL element˚um doplˇnku a pˇri parsov´an´ı XML protokolu.
3.11
XPath
Prim´arn´ı funkc´ı XPath je adresov´an´ı ˇc´ast´ı XML dokumentu. Odtud tak´e poch´az´ı jeho n´azev, protoˇze zachycuje
”cestu“ (anglicky”path“) skrze hierarchickou strukturu XML dokumentu. Nav´ıc tak´e poskytuje z´akladn´ı funkce pro manipulaci s ˇretˇezci, ˇc´ısly a logick´ymi hodnotami.
Pouˇz´ıv´a kompaktn´ı syntaxi pro usnadnˇen´ı uˇzit´ı XPath jako souˇc´ast URI a pr´aci s hodnotami XML atribut˚u. Podporuje tak´e pr´aci se jmenn´ymi prostory. Cesta zapsan´a t´ımto jazykem se oznaˇcuje jako
”XPath v´yraz“ a jeho vyhodnocen´ım nad XML dokumentem lze oznaˇcit sadu uzl˚u, logickou hodnotu, ˇc´ıslo, ˇci ˇretˇezec. Souˇcasn´a je verze 1.0. V´ıce se lze doˇc´ıst v doporuˇcen´ı W3C z roku 1999 [26].
3.12
HTML
HTML (HyperText Markup Language) je znaˇckovac´ım jazykem pro tvorbu webov´ych str´ a-nek. Znaˇcky tohoto jazyka jsou kl´ıˇcov´a slova uzavˇren´a do ´uhlov´ych z´avorek. Existuj´ı p´arov´e a nep´arov´e znaˇcky. Pokud jsou znaˇcky p´arov´e, znamen´a to, ˇze maj´ı poˇc´ateˇcn´ı a konco-vou znaˇcku, kter´a obsahuje pˇred kl´ıˇcov´ym slovem znak
”/“. Nep´arov´e znaˇcky nevyˇzaduj´ı uveden´ı koncov´e znaˇcky. V´yznamem tˇechto znaˇcek se ˇr´ıd´ı webov´y prohl´ıˇzeˇc pˇri zobrazo-v´an´ı str´anky. Prohl´ıˇzeˇce jsou ˇcasto schopny zobrazit i tzv.
”nevalidn´ı“ webov´e str´anky, tedy str´anky, jejichˇz HTML k´od nesplˇnuje specifikaci jazyka. Aktu´aln´ı stabiln´ı verz´ı je 4.01, verze 5 je v pokroˇcil´e f´azi v´yvoje [14,36].
3.13
XHTML
XHTML (eXtensible HyperText Markup Language) je HTML definovan´e pomoc´ı XML. Je t´emˇeˇr identick´e s HTML verze 4.01 a je s n´ım kompatibiln´ı. Zjednoduˇsenˇe ˇreˇceno je XHTML striktnˇejˇs´ı a ˇc´ıstˇejˇs´ı verz´ı HTML, a to t´ım, ˇze nedovoluje ˇspatn´e form´atov´an´ı dokumentu, jako napˇr´ıklad neukonˇcen´e p´arov´e znaˇcky, r˚uznou velikost p´ısmen v n´azvech znaˇcek a atribut˚u a dalˇs´ı. Dodrˇzov´an´ı tˇechto pravidel v´yraznˇe sniˇzuje n´aroˇcnost zobrazen´ı, ˇ
ci zpracov´an´ı webov´e str´anky. XHTML je podpororov´ano vˇsemi souˇcasn´ymi webov´ymi pro-hl´ıˇzeˇci. Aktu´aln´ı verz´ı je 1.1 [23,24].
Str´anky, kter´e jsou pos´ıl´any 4A Framework serveru k synchronizaci, mus´ı b´yt validn´ımi XHTML str´ankami.
3.14
XHR
XHR – XMLHttpRequest je objektem j´adra skriptovac´ıho jazyka, kter´y umoˇzˇnuje skriptu fungovat jako HTTP klient a prov´adˇet akce jako napˇr´ıklad nahr´av´an´ı dat ze serveru, ˇci ode-s´ıl´an´ı dat z formul´aˇre. N´azev XMLHttpRequest je zav´adˇej´ıc´ı hned ze tˇr´ı d˚uvod˚u. Zaprv´e je podporov´ana pr´ace s jak´ymkoli textov´ym form´atem, ne jen s XML. Zadruh´e komunikace neprob´ıh´a pouze pomoc´ı protokolu HTTP, ale i HTTPS (nˇekter´e implementace dovoluj´ı i dalˇs´ı). Zatˇret´ı, objekt obsluhuje nejen poˇzadavky (request), ale i odpovˇedi. XHR je vyu-ˇ
Kapitola 4
N´
avrh
V t´eto kapitole navrhnu nejdˇr´ıve logiku ˇcinnosti doplˇnku, pot´e prvky uˇzivatelsk´eho rozhran´ı, na nˇe navazuj´ıc´ı uˇzivatelsk´e akce, kter´e bude moci uˇzivatel prov´adˇet, datov´e struktury odpov´ıdaj´ıc´ı potˇrebn´ym prvk˚um a nakonec funkˇcn´ı bloky, kter´e budou implementov´any.
Pojmy
Nyn´ı uvedu pˇrednostnˇe pojmy, kter´e budu d´ale v dokumentu pouˇz´ıv´at.
pracovn´ı dokument dokument, kter´y je zobrazen v z´aloˇzce prohl´ıˇzeˇce v dobˇe pˇrihl´aˇsen´ı, jehoˇz obsah bude synchronizov´an. V tomto dokumentu budou tak´e anotace zobrazo-v´any.
id zdroje identifikaˇcn´ıˇretˇezec, pod kter´ym server vede pracovn´ı dokument ve sv´e datab´azi. bublina objekt, kter´y bude obsahovat poˇzadovan´e informace o anotaci.
fragment anotovan´y text
4.1
Princip ˇ
cinnosti
Logick´y princip ˇcinnosti je pro ilustraci demonstrov´an na obr´azku 4.1.
1. Uˇzivatel nejdˇr´ıve specifikuje adresu anotaˇcn´ıho serveru. Spr´avnost adresy se vˇsak v tomto bodˇe ovˇeˇrovat nebude.
2. Pˇrihl´as´ı se (viz sekce 4.4) a pokud je zadan´a adresa serveru spr´avn´a a uˇzivatel za-dal spr´avn´e pˇrihlaˇsovac´ı ´udaje (jm´eno a heslo), dojde k nav´az´an´ı spojen´ı a pˇrejde se ke kroku 3. Pokud adresa, ˇci pˇrihlaˇsovac´ı ´udaje spr´avn´e nebudou, bude o tom uˇ zi-vatel odpov´ıdaj´ıc´ım zp˚usobem informov´an a v ˇcinnosti se nebude d´ale pokraˇcovat. 3. Bez dalˇs´ıho potˇrebn´eho uˇzivatelsk´eho z´asahu dojde k synchronizaci pracovn´ıho
doku-mentu.
4. Data z´ıskan´a pˇri synchronizaci budou zpracov´ana a anotace uloˇzeny do odpov´ıdaj´ıc´ı datov´e struktury.
Pˇrihl´aˇsen´ı
Synchronizace dokumentu
Comet
Pˇrid´an´ı anotace
Pokraˇcovat? Konec Timeout Zmˇena zobr. dokumentu -´
Uprava, maz´an´ı anotace Konec ? ´ uspˇeˇsn´e ? ? ? ? - ? ne ?
ne´uspˇeˇsn´e
?
ano
Obr´azek 4.1: Princip ˇcinnosti
6. Uˇzivatel si bude moci anotace prohl´ıˇzet, pˇriˇcemˇz na pozad´ı bude d´ale prob´ıhat komu-nikace se serverem a pˇr´ıpadn´e zmˇeny se okamˇzitˇe prom´ıtnou do pracovn´ıho dokumentu. 7. Pokud se uˇzivatel rozhodne pro zobrazen´ı jin´eho pracovn´ıho dokumentu, dojde k syn-chronizaci tohoto nov´eho dokumentu a zobrazen´ı jeho anotac´ı, jak bylo pops´ano v bo-dech 3 – 5.
8. V pˇr´ıpadˇe, ˇze uˇzivatel jiˇz nebude cht´ıt nad´ale zobrazovat anotace, klikne na ikonu ve stavov´e liˇstˇe a pracovn´ı dokument se navr´at´ı do p˚uvodn´ıho stavu. Dalˇs´ı Comet poˇzadavky se tedy jiˇz nebudou pos´ılat.
4.2
Komunikace
Z komunikaˇcn´ıho protokolu serveru, zmiˇnovan´eho v sekci2.3, budou implementov´any ty ˇc´asti, kter´e jsou potˇrebn´e pro funkˇcn´ı zobrazen´ı anotac´ı, jejich ´upravu a maz´an´ı. Tyto ˇc´asti jsou: Spr´ava sezen´ı Pˇrihl´aˇsen´ı probˇehne metodou POST, protoˇze je v r´amci t´eto zpr´avy za-s´ıl´ano uˇzivatelsk´e jm´eno a heslo. V pˇr´ıpadˇe spr´avn´ych pˇrihlaˇsovac´ıch ´udaj˚u server v odpovˇedi sdˇel´ı ˇc´ıslo spojen´ı, kter´e se bude pouˇz´ıvat pˇri dalˇs´ı komunikaci se serve-rem. V opaˇcn´em pˇr´ıpadˇe bude server o nespr´avn´ych pˇrihlaˇsovac´ıch ´udaj´ıch informovat chybov´ym hl´aˇsen´ım dle protokolu.
Synchronizace Synchronizace dokumentu je proces, pˇri kter´em server z´ısk´a kopii aktu´aln´ı verze anotovan´eho dokumentu. Server se tento dokument pokus´ı vyhledat ve sv´e da-tab´azi a pokud jej nenalezne, uloˇz´ı si jej. V obou pˇr´ıpadech (nalezen´ı, ˇci nenalezen´ı) vˇsak vr´at´ı klientovi id zdroje. Synchronizace bude prob´ıhat metodou POST a odpovˇed’ serveru bude obsahovat tak´e anotace pracovn´ıho dokumentu.
Pˇrenos anotac´ı Probˇehne v odpovˇedi na synchronizaci dokumentu, d´ale potom bude pro-b´ıhat pomoc´ı technologie Comet, kter´a bude vyuˇz´ıvat HTTP metodu GET, kde je-din´ym parametrem bude ˇc´ıslo spojen´ı. Na z´akladˇe odpovˇed´ı serveru na Comet poˇ za-davky bude doch´azet k pˇrid´av´an´ı, ´upravˇe, ˇci maz´an´ı anotac´ı.
Chyby a varov´an´ı Chyby, na kter´e server upozorn´ı, budou zobrazeny uˇzivateli ve srozu-miteln´em form´atu. Z tohoto form´atu bude patrn´e ˇc´ıslo chyby, ke kter´e doˇslo, a popis t´eto chyby.
Potvrzen´ı bez doplˇnuj´ıc´ıch dat Odpovˇed’ obsahuj´ıc´ı pouze <ok/> bude zas´ıl´ana serve-rem v pˇr´ıpadˇe vyprˇsen´ı ˇcasov´eho limitu Comet spojen´ı a v reakci na n´ı doplnˇek zaˇsle dalˇs´ı poˇzadavek.
4.3
Prvky uˇ
zivatelsk´
eho rozhran´ı
Nyn´ı pop´ıˇsu prvky uˇzivatelsk´eho rozhran´ı, kter´e budou odpov´ıdat doposud navrˇzen´e funk-cionalitˇe.
Bublina zobrazuj´ıc´ı informace o anotaci
Kaˇzd´a jedna bublina (jej´ıˇz n´avrh je na obr´azku 4.2) bude obsahovat informace o jedn´e anotaci, a to:
jm´eno autora
datum vytvoˇren´ı ve form´atu
”RRRR-MM-DD HH:MM“, tedy napˇr´ıklad”2011-04-18 17:15“ typ anotace ve form´atu
”typ -> podtyp“ samotn´y text anotace
atributy bˇeˇzn´ych typ˚u, jako ˇretˇezec, ˇc´ıslo a datum budou zobrazeny ve form´atu
”n´azev atributu = hodnota“. Existuj´ı vˇsak tak´e speci´aln´ı typy:
geografick´y bod bude zobrazen ve form´atu
”n´azev atributu = (Geo: ˇs´ıˇrka, d´elka)“ odkazovan´a anotace, vnoˇren´a anotace budou zobrazeny ve form´atu
”n´azev atri-butu(aLink)“ v pˇr´ıpadˇe odkazovan´e a
”n´azev atributu(Nested)“ v pˇr´ıpadˇe vno-ˇren´e anotace. Pokud nebude anotace v pracovn´ım dokumentu nalezena, bude tato skuteˇcnost signalizov´ana pˇr´ıponou
”(not found)“ v popisku tohoto atributu. Pˇri implementaci bude potˇreba br´at v ´uvahu tak´e to, ˇze bublina mus´ı z˚ustat zobrazen´a, pokud by uˇzivatel chtˇel napˇr´ıklad oznaˇcit v n´ı zobrazen´y text, nebo kliknul nˇekam mimo ni. Poˇzadavkem bude tak´e ukotven´ı k anotovan´emu textu.
Obr´azek 4.2: N´avrh bubliny zobrazen´e u anotovan´eho textu.
Volba vhodn´eho elementu Moˇzn´ych zp˚usob˚u implementace bubliny je v´ıce. V ´uvahu pˇrich´az´ı napˇr´ıklad samostatn´e okno, n´apovˇedn´e okna ˇci jin´e zp˚usoby zobrazen´ı, bl´ıˇze roze-ps´any v ˇclanku [20]. Rozhodl jsem se pro XUL element panel, protoˇze nab´ız´ı ukotven´ı pˇr´ımo k elementu dokumentu, zp˚usob jeho zobrazen´ı nep˚usob´ı ruˇsivˇe a s uveden´ım odpov´ıdaj´ıc´ıho parametru nezmiz´ı, pokud je kliknuto mimo nˇej.
Vyznaˇcen´y text
Kaˇzd´y vyznaˇcen´y text bude odpov´ıdat fragmentu anotace.
Poˇzadavek na odliˇsen´ı anotovan´eho textu bude ˇreˇsen ˇzlut´ym podbarven´ım. Fragmenty anotace prvn´ı ´urovnˇe zanoˇren´ı budou podbarveny oranˇzovˇe a fragmenty anotac´ı druh´e a vyˇsˇs´ı ´urovnˇe zanoˇren´ı budou podbarveny ˇcervenˇe.
Anotovan´y text vnoˇren´e anotace bude viditelnˇe oznaˇcen pouze tehdy, bude-li zobrazena jeho nadˇrazen´a anotace.
Vyznaˇcen´ı v dokumentu Anotovan´y text bude ve str´ance vyznaˇcen na z´akladˇe XPath v´yrazu identifikuj´ıc´ıho cestu k uzlu dokumentu, ve kter´em se fragment nach´az´ı, posunut´ı (offsetu) v r´amci tohoto uzlu a d´elky anotovan´eho textu.
Komunikace mezi priviligovan´ym a nepriviligovan´ym obsahem Priviligova-n´ym obsahem je k´od prohl´ıˇzeˇce a jeho doplˇnk˚u, nepriviligovan´ym obsahem jsou zobrazen´e webov´e str´anky a jejich k´od. Doplnˇek mus´ı b´yt informov´an o tom kdy a kde m´a zobrazit bublinu. Kdyby mˇel vˇsak nepriviligovan´y obsah pˇr´ıstup k funkc´ım priviligovan´eho obsahu, vzniklo by tak velik´e bezpeˇcnostn´ı riziko. Potˇreba komunikace mezi tˇemito obsahy vˇsak z˚ust´av´a.
Na z´akladˇe ˇcl´ank˚u [8,15] jsem se rozhodl pro vyuˇzit´ı syst´emu zas´ılan´ı ud´alost´ı, protoˇze vyhovuje m´ym poˇzadavk˚um a je bezpeˇcn´y. Zpracov´an´ı ud´alost´ı zas´ılan´ych neprivilegova-n´ym obsahem nen´ı implicitnˇe povoleno, ale v pˇr´ıpadˇe Firefoxu lze u konkr´etn´ıch ud´alost´ı toto zpracov´an´ı povolit. Tento pˇr´ıstup je doporuˇcovan´ym zp˚usobem komunikace s neprivi-legovan´ym obsahem.
Komunikace bude prob´ıhat tak, ˇze v pˇr´ıpadˇe najet´ı kurzorem myˇsi na vyznaˇcen´y text, ˇ
ci jeho opuˇstˇen´ı a v pˇr´ıpadˇe kliknut´ı na nˇej bude prvkem implementuj´ıc´ım anotovan´y text odesl´ana zpr´ava o t´eto ud´alosti. Jej´ı souˇc´ast´ı bude i identifikace anotovan´eho textu, aby bylo zˇrejm´e, k jak´emu prvku bublinu ukotvit.
Rozˇs´ıˇren´ı stavov´e liˇsty
Rozˇs´ıˇren´ı stavov´e liˇsty bude prostˇrednictv´ım ikony a popisn´eho textu znaˇcit, zda je uˇzivatel pˇrihl´aˇsen´y a pracovn´ı dokument synchronizov´an. Prostˇrednictv´ım tohoto rozˇs´ıˇren´ı bude m´ıt tak´e uˇzivatel moˇznost vyvolat pˇrihlaˇsovac´ı dialog a ukonˇcit pr´aci s doplˇnkem.
Pˇrihlaˇsovac´ı dialog
Pˇrihlaˇsovac´ı dialog bude obsahovat pole pro vloˇzen´ı uˇzivatelsk´eho jm´ena a hesla.
Dialog nastaven´ı
V tomto dialogu bude moˇzn´e specifikovat adresu anotaˇcn´ıho serveru. Tato adresa bude ulo-ˇ
zena pomoc´ı syst´emu pˇredvoleb Firefoxu (preferences). Zp˚usob pˇr´ıstupu k tomuto syst´emu je pops´an v [2].
4.4
Ovl´
ad´
an´ı, uˇ
zivatelsk´
e akce
Zmˇena nastaven´ı
Uˇzivatel mus´ı m´ıt moˇznost zmˇenit adresu anotaˇcn´ıho serveru. Dialog, kter´y mu to umoˇzn´ı, vyvol´a pˇres kontextovou nab´ıdku ikony ve stavov´e liˇstˇe, ˇci pˇres nastaven´ı doplˇnku ve spr´avci doplˇnk˚u Firefoxu.
Pˇrihl´aˇsen´ı
Dialog pro pˇrihl´aˇsen´ı se zobraz´ı kliknut´ım na ikonu doplˇnku ve stavov´e liˇstˇe prohl´ıˇzeˇce, popˇr´ıpadˇe volbou v kontextov´e nab´ıdce t´eto ikony.
Prohl´ıˇzen´ı anotac´ı
Po najet´ı kurzorem myˇsi na anotovan´y text se zobraz´ı bublina, kter´a zmiz´ı po jeho opuˇstˇen´ı. Pokud uˇzivatel klikne na anotovan´y text, po jeho opuˇstˇen´ı kurzorem bublina sama nezmiz´ı a bude muset b´yt zavˇrena na z´akladˇe urˇcit´e akce (napˇr´ıklad kliknut´ı na kˇr´ıˇzek).
Bublina zobrazuj´ıc´ı vnoˇrenou anotaci zmiz´ı tak´e po zavˇren´ı bubliny nadˇrazen´e anotace. Kliknut´ım na objekt reprezentuj´ıc´ı atribut typu geografick´y bod bude otevˇreno nov´e okno prohl´ıˇzeˇce, kde bude tento gegorafick´y bod zobrazen na mapˇe Google Maps1.
Po kliknut´ı na objekt reprezentuj´ıc´ı atribut typu odkazovan´a, ˇci vnoˇren´a anotace se zob-raz´ı tomu odpov´ıdaj´ıc´ı bublina anotace (pokud se bude v pracovn´ım dokumentu nach´azet).
Zmˇena pracovn´ıho dokumentu
Zmˇenu pracovn´ıho dokumentu provede uˇzivatel zad´an´ım nov´e adresy dokumentu do adresn´ı ˇr´adky prohl´ıˇzeˇce.
1
Ukonˇcen´ı pr´ace s doplˇnkem
Ukonˇcen´ı, po kter´em se vr´at´ı dokument do p˚uvodn´ıho stavu (budou z nˇej odstranˇena zv´ y-raznˇen´ı anotovan´eho textu), doc´ıl´ı uˇzivatel lev´ym kliknut´ım myˇsi na ikonu ve stavov´e liˇstˇe, popˇr´ıpadˇe volbou v kontextov´e nab´ıdce t´eto ikony.
4.5
N´
avrh datov´
ych struktur
Bude potˇreba vytvoˇrit struktury pro reprezentaci jednotliv´ych prvk˚u syt´emu, tedy kon-kr´etnˇe:
• Anotace (bude uchov´avat tyto ´udaje: identifikace, autor, datum vytvoˇren´ı, typ, text anotace, pole fragment˚u, pole atribut˚u)
• Fragmentu (bude uchov´avat tyto ´udaje: Xpath v´yraz, offset, d´elka fragmentu, anoto-van´y text)
• Atributu (bude uchov´avat tyto ´udaje: n´azev, typ, hodnota)
4.6
N´
avrh funkˇ
cn´ıch blok˚
u
Funkˇcnost doplˇnku bude rozdˇelena do n´asleduj´ıc´ıch modul˚u.
Parser
Tento modul bude ˇreˇsit:
• vytv´aˇren´ı zpr´av komunikaˇcn´ıho protokolu pro pˇrihl´aˇsen´ı, synchronizaci a Comet • zpracov´an´ı pˇr´ıchoz´ıch zpr´av a uloˇzen´ı dat do odpov´ıdaj´ıc´ıch struktur
• vyhled´an´ı chyb v pˇr´ıchoz´ıch zpr´av´ach
Modul pro komunikaci
Tento modul bude umoˇzˇnovat komunikaci pomoc´ı Ajax tak, jak bylo navrˇzeno v sekci 4.2.
Modul pro manipulaci s DOM
Tento modul bude ˇreˇsit manipulace s DOM str´anky a XUL dokumentu, konkr´etnˇeji: • vyznaˇcen´ı anotovan´eho textu
• podbarven´ı/odbarven´ı fragment˚u vnoˇren´ych anotac´ı • zpˇr´ıstupnˇen´ı/znepˇr´ıstupnˇen´ı fragment˚u vnoˇren´ych anotac´ı
• odstranˇen´ı vyznaˇcen´ı anotovan´eho textu v pˇr´ıpadˇe maz´an´ı anotace, nebo ukonˇcen´ı pr´ace s doplˇnkem
Modul pro manipulaci s bublinou
Funkˇcnost tohoto modulu bude zahrnovat: • vytvoˇren´ı bubliny
• naplnˇen´ı a aktualizaci jej´ıho obsahu • jej´ı zobrazen´ı a zavˇren´ı
• zobrazen´ı atribut˚u
Kapitola 5
Implementace
V t´eto sekci uvedu n´astroje, kter´e jsem pˇri pr´aci pouˇzil, pop´ıˇsu nˇekter´e probl´emy, se kter´ymi jsem se setkal pˇri implementaci, a uvedu konkr´etn´ı zp˚usob implementace jednotliv´ych prvk˚u.
5.1
N´
astroje
Pˇri pr´aci jsem vyuˇzil n´ıˇze pops´an´e n´astroje.
NetBeans
V´yvojov´e prostˇred´ı NetBeans1 jsem vyuˇzil pˇri psan´ı zdrojov´eho k´odu JavaScriptu zejm´ena kv˚uli propracovan´emu syst´emu nab´ızen´ı a doplˇnov´an´ı n´azv˚u funkc´ı, metod a tˇr´ıd defino-van´ych v jin´ych souborech projektu a nab´ızen´ı standardn´ıch metod objekt˚u JavaScriptu. Vyuˇzil jsem tak´e z´asuvn´eho modulu nbgit2, pracuj´ıc´ıho se syst´emem git3, pro aktualizaci 4A serveru.
Addon builder
Tento webov´y n´astroj4jsem pouˇzil pro vygenerov´an´ı kostry doplˇnku a soubor˚u chrome.manifest a install.rdf popsan´ych v sekci2.5.1.
Komodo Edit
V´yvojov´ych prostˇred´ı, kter´e usnadn´ı psan´ı XUL soubor˚u, nen´ı mnoho a pro tento ´uˇcel jsem vyuˇzil Komodo Edit5.
5.2
Prvotn´ı postup
V poˇc´atc´ıch pr´ace na tomto doplˇnku, kdy jsem se teprve seznamoval s technologi´ı XUL a zp˚usobem, jak´ym jej Firefox zobrazuje, jsem postupoval podle ˇcl´anku [41], a to spouˇstˇen´ım Firefoxu s parametry -chrome soubor.xul. T´ımto zp˚usobem se zobrazilo pouze uˇzivatelsk´e rozhran´ı definovan´e v soubor.xul a ne uˇzivatelsk´e rozhran´ı prohl´ıˇzeˇce.
1http://netbeans.org/ 2 http://code.google.com/p/nbgit/ 3http://git-scm.com/ 4 https://addons.mozilla.org/en-US/developers/tools/builder 5 http://www.activestate.com/komodo-edit
5.3
Implementace prvk˚
u uˇ
zivatelsk´
eho rozhran´ı
Jak bylo ˇreˇceno v sekci 2.5.1, rozˇs´ıˇren´ı uˇzivatelsk´eho rozhran´ı se maj´ı nach´azet v souboru typu Overlay. V m´em pˇr´ıpadˇe je to tedy konkr´etnˇe soubor ff-overlay.xul, kter´y se nach´az´ı v sekci doplˇnku content.
Bublina
Bublina byla implementov´ana dle n´avrhu v sekci 4.3, jako XUL element panel. Prvky v panelu jsou implementov´any jako XUL elementy:
• label v pˇr´ıpadˇe ´udaj˚u: autor anotace, datum vytvoˇren´ı anotace, typ anotace • textbox pro text anotace
• richlistbox pro zobrazen´ı atribut˚u
Po prostudov´an´ı [19] jsem pouˇzil tyto atributy: • id pro identifikaci
• noautohide bez tohoto atributu by panel zmizel v pˇr´ıpadˇe kliknut´ı mimo nˇej
• persist mnou zaveden´y atribut, pomoc´ı kter´eho se rozliˇsuje, zda byl panel zobrazen najet´ım kurzorem na anotovan´y text, ˇci kliknut´ım na nˇej (tzn. kdy m´a zmizet) • type ˇctvrt´a verze Firefoxu zavedla tento atribut, pomoc´ı nˇehoˇz lze doc´ılit r´ameˇceku
kolem panelu a ˇsipky k objektu, ke kter´emu je ukotven
• onpopuphiding tato obsluha ud´alosti je vol´ana v pˇr´ıpadˇe zavˇren´ı panelu, toho jsem vyuˇzil pro zavˇren´ı panel˚u vlastn´ıch vnoˇren´ych anotac´ı a pro zruˇsen´ı podbarven´ı a zne-pˇr´ıstupnˇen´ı jejich fragment˚u
Pˇr´ıstup k panelu Bˇehem implementace jsem zjistil, ˇze oznaˇcen´ı panelu standardn´ı funkc´ı pro pˇr´ıstup k element˚um dokumentu getElementById() mus´ı b´yt jeho nadˇrazen´ym elementem prvek, kter´y je souˇc´ast´ı nˇekter´eho z rozˇs´ıˇren´ı uˇzivatelsk´eho rozhran´ı (v souboru ff-overlay.xul). T´ımto nadˇrazen´ym elementem jsem uˇcinil popupset v rozˇs´ıˇren´ı stavov´e liˇsty.
Ukotven´ı k prvku dokumentu, u kter´eho se panel zobraz´ı Metodˇe elementu panel pro zobrazen´ı openPopup() lze parametrem pˇredat element, u kter´eho se m´a zobrazit. To je velice v´yhodn´e, protoˇze ne vˇsechny moˇznosti zobrazen´ı bubliny tuto moˇznost nab´ızely a muselo by se pracovat se zobrazen´ım bubliny na z´akladˇe souˇradnic kurzoru. Probl´em by nastal tak´e v pˇr´ıpadˇe zobrazen´ı bubliny odkazovan´e, ˇci vnoˇren´e anotace, kde by bylo urˇcen´ı souˇradnic pravdˇepodobnˇe obt´ıˇzn´e. V m´em pˇr´ıpadˇe je to element obsahuj´ıc´ı anotovan´y text.
Vyznaˇcen´y text
Vyznaˇcen´y text je uzavˇren do HTML elementu span. Kaˇzd´y span bude odpov´ıdat jednomu fragmentu anotace.
V z´avislosti na poˇzadavc´ıch a n´avrhu jsem vyuˇzil tyto atributy:
• id nutn´a identifikace pro zobrazen´ı panelu u spr´avn´eho anotovan´eho textu
• onmouseover odeˇsle ud´alost, kter´a se zpracuje v doplˇnku. V r´amci tohoto zpracov´an´ı se zobraz´ı odpov´ıdaj´ıc´ı anotace
• onclick stejn´y princip jako onmouseover, panel se otevˇre, ale nav´ıc se nastav´ı jeho atribut persist, kter´y znaˇc´ı, ˇze panel nem´a zmizet, pokud kurzor myˇsi opust´ı ano-tovan´y text
• onmouseout stejn´y princip jako onmouseover, ale panel se zavˇre, pokud nebude ote-vˇren s atributem persist
• style nastaven´ım tohoto atributu bude doc´ıleno odpov´ıdaj´ıc´ıho podbarven´ı
• active nezanoˇren´e anotace budou m´ıt tento atribut v hodntˇe true vˇzdy, zanoˇren´e potom pouze pokud bude zobrazena jejich nadˇrazen´a anotace. Zamez´ı se t´ım zobrazen´ı anotace, kter´a by ned´avala sama o sobˇe smysl.
Komunikace s privilegovan´ym obsahem byla implementov´ana podle n´avrhu v sekci 4.3. Ud´alost ShowAPanelEvent je odesl´ana v pˇr´ıpadˇe najet´ı kurzorem myˇsi na anotovan´y text, OpenAPanelEvent v pˇr´ıpadˇe kliknut´ı na anotovan´y text a HideAPanelEvent v pˇr´ıpadˇe, ˇ
ze kurzor opust´ı anotovan´y text.
Funkce pro odesl´an´ı ud´alosti Pro odesl´an´ı ud´alosti spanem jsem vytvoˇril funkci dispatch, kter´a je vloˇzena po ´uspˇeˇsn´em pˇrihl´aˇsen´ı uˇzivatele do JavaScriptu pracovn´ıho dokumentu.
Rozˇs´ıˇren´ı stavov´e liˇsty
Je implementov´ano XUL elementem statusbar v souboru ff-overlay.xul. Demonstrace na obr´azku 5.1.
Obr´azek 5.1: Ikona na stavov´e liˇstˇe znaˇc´ıc´ı, ˇze je doplnˇek aktivn´ı (vlevo), ˇci neaktivn´ı (vpravo).
Pˇrihlaˇsovac´ı dialog
Je implementov´an jako XUL element prefwindow v souboru login.xul. Demonstrace na obr´azku 5.2.
Obr´azek 5.2: Uk´azka pˇrihlaˇsovac´ıho dialogu.
Dialog nastaven´ı
Je implementov´an jako XUL element prefwindow v souboru options.xul. Demonstrace na obr´azku 5.3.
Obr´azek 5.3: Uk´azka dialogu nastaven´ı.
5.4
Implementace funkˇ
cn´ıch blok˚
u
V t´eto sekci pop´ıˇsu zejm´ena probl´emy, kter´e jsem ˇreˇsil v souvislosti s jednotliv´ymi funkˇcn´ımi bloky. U kaˇzd´eho z blok˚u je uvedeno, v kter´em konkr´etn´ım souboru se nach´az´ı jeho zdrojov´y k´od. Tyto soubory se nach´az´ı v sekci doplˇnku content (viz kapitola2.5.1).
Parser
Je implementov´an v souboru AnnotParser.js.
Oznaˇcen´ı pouze vlastn´ıch fragment˚u a atribut˚u anotace Pˇri parsov´an´ı anotac´ı jsem se setkal s probl´emem zp˚usoben´ym ˇspatn´ym zvolen´ım selektoru pro v´ybˇer fragment˚u a atribut˚u anotac´ı, kter´e mˇely jako jeden z atribut˚u vnoˇrenou anotaci. Selektor oznaˇcuj´ıc´ı vˇsechny elementy s n´azvem fragment, ˇci attribute oznaˇcil i fragmenty a atributy vnoˇren´e anotace a tak doch´azelo k jejich nespr´avn´emu pˇriˇrazen´ı. ˇReˇsen´ı jsem nalezl v [7], a to pouˇzit´ı jQuery selektoru
”>“, kter´y dovoluje oznaˇcit pouze elementy, kter´e jsou pˇr´ım´ymi potomky.
Modul pro komunikaci
Je implementov´an v souboru communication.js. Komunikace pomoc´ı technologi´ı Ajax a Comet je implementov´ana pomoc´ı funkce knihovny jQuery $.ajax.
Modul pro manipulaci s DOM
Je implementov´an v souboru domManipulation.js.
Pˇr´ıstup k obsahu aktu´aln´ı z´aloˇzky prohl´ıˇzeˇce Jedn´ım z probl´em˚u, kter´e jsem ˇreˇsil, byl pˇr´ıstup k HTML elementu document a window dokumentu zobrazen´eho v aktu´aln´ı z´aloˇzce prohl´ıˇzeˇce, kter´e jsem potˇreboval pro vnoˇren´ı objektu reprezentuj´ıc´ıho fragment anotace – spanu a funkce JavaScriptu do str´anky. ˇReˇsen´ı, kter´e jsem nalezl d´ıky [22, 21], je demonstrov´ano v algoritmu 1.
Algoritmus 1: Pˇr´ıstup k element˚um document a window aktu´aln´ı z´aloˇzky prohl´ıˇzeˇce /* vyuˇzit´ı XPCOM rozhran´ı komponenty spr´avce oken prohl´ıˇzeˇce */ var WindowMediator =
Components.classes[’@mozilla.org/appshell/window-mediator;1’].getService(Components.interfaces.nsIWindowMediator)
/* oznaˇcen´ı aktu´aln´ıho okna prohl´ıˇzeˇce */ var browser = WindowMediator.getMostRecentWindow(’navigator:browser’)
/* oznaˇcen´ı potˇrebn´eho elementu content */ var mainTabs = browser.document.getElementById(’content’)
document = mainTabs.contentDocument; /* pˇr´ıstup k elementu document */ window = mainTabs.contentWindow; /* pˇr´ıstup k elementu window */
Postup vnoˇren´ı fragmentu do str´anky Prvn´ı postup, kter´y jsem vytvoˇril, se sk´ al-dal z:
1. Oznaˇcen´ı textu elementu, ve kter´em se anotovan´y text nach´az´ı, pomoc´ı XPath v´yrazu. 2. Rozdˇelen´ı jej na z´akladˇe offsetu a d´elky anotovan´eho textu na tˇri ˇc´asti, a to: text pˇred
anotovan´ym textem, anotovan´y text a zb´yvaj´ıc´ı text.
3. Zabalen´ı anotovan´eho textu do elementu span a nastaven´ı potˇrebn´ych atribut˚u. 4. Vloˇzen´ı pomoc´ı funkc´ı appendChild() a replaceChild() do nadˇrazen´eho elementu
uzlu s textem, kter´y byl pˇred anotovan´ym textem, vytvoˇren´eho spanu a uzlu s textem, kter´y byl za anotovan´ym textem.
Tento postup byl funkˇcn´ı, ale bˇehem testov´an´ı jsem zjistil, ˇze jen za pˇredpokladu, ˇ
ze v textu oznaˇcen´em pomoc´ı XPath v´yrazu se nach´az´ı pouze text a ˇz´adn´e elementy znaˇ c-kovac´ıho jazyka. Proto jsem tento postup zmˇenil a nyn´ı pracuje t´ımto zp˚usobem:
1. Uloˇz´ı obsah atributu innerHTML rodiˇcovsk´eho uzlu textu specifikovan´eho pomoc´ı XPath v´yrazu. Tento atribut obsahuje nejen text, ale i textovou reprezentaci zna-ˇcek jazyka XHTML.
2. Proch´az´ı znaky uloˇzen´eho ˇretˇezce a poˇc´ıt´a pouze ty, kter´e nejsou souˇc´ast´ı znaˇcek jazyka aˇz do t´e doby, neˇz se poˇcet napoˇc´ıtan´ych znak˚u textu shoduje s offsetem anotovan´eho textu.
3. Jako offset nastav´ı pozici, na kterou musel doj´ıt, aby napoˇc´ıtal potˇrebn´e textov´e znaky.
4. Rozdˇelen´ıˇretˇezce z atributu innerHTML na tˇri ˇc´asti a vytvoˇren´ı elementu span provede stejn´ym zp˚usobem, jako v prvn´ım postupu.
5. Spoj´ı text pˇred anotovan´ym textem, vytvoˇren´y span pˇreveden´y do textov´e podoby a text za anotovan´ym textem. Vznikl´y ˇretˇezec pot´e uloˇz´ı do atributu innerHTML stej-n´eho uzlu, ze kter´eho v prvn´ım bodˇe postupu ˇcetl.
HTML, ˇci XUL element Bˇehem implementace vnoˇrov´an´ı span˚u odpov´ıdaj´ıc´ıch fragment˚um anotace jsem zjistil, ˇze pouˇzit´ım bˇeˇzn´eho pˇr´ıkazu pro vytvoˇren´ı nov´eho ele-mentu dokuele-mentu document.createElement("span") v k´odu doplˇnku je vytvoˇren XUL element span a ne HTML element span. To mˇelo za n´asledek nekorektn´ı form´atov´an´ı textu a varovn´e v´ypisy Firebugu. ˇReˇsen´ı, kter´e jsem naˇsel v [1], bylo pouˇz´ıt jmenn´e prostory. Pˇr´ıkaz tedy potom vypad´a:
document.createElementNS("http://www.w3.org/1999/xhtml","html:span"). Uveden´y princip se vztahuje na vytv´aˇren´ı jak´ychkoli HTML element˚u v XUL doku-mentu.
Modul pro manipulaci s panelem
Je implementov´an v souboru panels.js.
5.5
V´
ysledn´
a podoba implementace
Na obr´azku5.4se nach´az´ı uk´azka implementace uˇzivatelsk´eho rozhran´ı. ˇZlutˇe je podbarven anotovan´y text anotac´ı, oranˇzovˇe potom anotovan´y text vnoˇren´ych anotac´ı. Na obr´azku jsou tak´e tˇri bubliny, kter´e kromˇe bˇeˇzn´ych atribut˚u obsahuj´ı tak´e atributy vnoˇren´ych anotac´ı, oznaˇcen´e pomoc´ı popisku
”(Nested)“ a ikony bubliny, a atribut typu geografick´y bod (oboj´ı bublina 1). V bublinˇe 2 je atribut typu odkaz na anotaci oznaˇcen´y pomoc´ı popisku
”(aLink)“ a ikony bubliny. Bublina 3 obsahuje pouze atributy typu string.
Kapitola 6
Testov´
an´ı
V t´eto sekci jsou pops´any n´astroje, kter´e jsem pouˇz´ıval pro pr˚ubˇeˇzn´e testov´an´ı funkˇcnosti doplˇnku bˇehem implementace, a experiment pro ovˇeˇren´ı a demonstraci funkˇcnosti doplˇnku.
Firebug
Firebug1je velice obl´ıben´ym testovac´ım a lad´ıc´ım n´astrojem Firefoxu a pˇri pr´aci na doplˇnku jsem jeho funkc´ı tak´e vyuˇzil. Uˇziteˇcn´y byl zejm´ena pˇri ladˇen´ı komunikace se serverem, protoˇze umoˇzˇnuje pˇrehlednˇe zobrazit HTTP poˇzadavky a odpovˇedi na nˇe.
Webov´
e rozhran´ı 4A Framework serveru
Webov´e rozhran´ı serveru popsan´eho v sekci 2.3 jsem vyuˇzil pro vkl´ad´an´ı nov´ych anotac´ı do str´anky, jejich ´upravu a maz´an´ı, abych ovˇeˇril spr´avnou reakci doplˇnku na tuto ud´alost.
6.1
Experiment
Pomoc´ı tohoto experimentu bude ovˇeˇrena funkcionalita doplˇnku. Bude zahrnovat pˇr´ıhl´aˇsen´ı, pˇrid´an´ı anotace, jej´ı ´upravu a smaz´an´ı a nakonec ukonˇcen´ı pr´ace s doplˇnkem. Experiment bude proveden v prohl´ıˇzeˇci Firefox verze 4.0.1 a pro vkl´ad´an´ı, ´upravu a maz´an´ı anotac´ı bude pouˇzito webov´e rozhran´ı 4A Framework serveru popsan´e v´yˇse. Instalaˇcn´ı soubor prohl´ıˇzeˇce, 4A Framework server, v´ychoz´ı stav jeho datab´aze a testovac´ı webov´y dokument (v dobˇe testov´an´ı dostupn´y online2) se nach´az´ı na pˇriloˇzen´em CD.
Pˇr´ıhl´aˇsen´ı
Po lev´em kliknut´ı na ikonu na stavov´e liˇstˇe, vyplnˇen´ı pˇrihlaˇsovac´ıch ´udaj˚u (login
”novakj“, heslo
”test“) a potvrzen´ı se anotace st´ahly a jejich fragmenty zobrazily tak, jak je uvedeno na obr´azku 6.1.
1http://getfirebug.com/ 2
Pˇrid´an´ı anotace
Na obr´azku 6.2 je anotovan´y text pˇred a po vloˇzen´ı anotace. (Pro ´uˇcel demonstrace bylo na anotovan´y text kliknuto.)
´
Uprava anotace
Na obr´azku6.3je anotovan´y text pˇred a po ´upravˇe. (Pro ´uˇcel demonstrace bylo na anoto-van´y text kliknuto.)
Smaz´an´ı anotace
Na obr´azku6.4
Ukonˇcen´ı pr´ace s doplˇnkem
Lev´ym kliknut´ım na ikonu ve stavov´e liˇstˇe byla ukonˇcena pr´ace s doplˇnkem. T´ım se doku-ment vr´atil do stejn´eho stavu jako pˇred pˇrihl´aˇsen´ım.
Obr´azek 6.2: Text pˇred (vlevo) a po (vpravo) anotaci.
Obr´azek 6.3: Text pˇred (vlevo) a po (vpravo) ´upravˇe anotovan´eho textu.
Kapitola 7
Z´
avˇ
er
Pˇri ˇreˇsen´ı t´eto pr´ace jsem postupoval tak, ˇze jsem se v zimn´ım semestru sezn´amil s postupem tvorby doplˇnk˚u webov´eho prohl´ıˇzeˇce Firefox, s jejich d˚uleˇzit´ymi souˇc´astmi, s technologiemi, kter´e jsou potˇreba pro jejich tvorbu, a tak´e se zp˚usobem jejich zaˇclenˇen´ı do Firefoxu. D´ale bylo potˇreba se sezn´amit s problematikou tvorby anotac´ı, s 4A Frameworkem a zp˚usobem, jak´ym s n´ım bude doplnˇek spolupracovat. N´aslednˇe jsem navrhl princip ˇcinnosti a komu-nikace, uˇzivatelsk´e rozhran´ı, zp˚usob ovl´ad´an´ı a funkˇcn´ı bloky, do kter´ych bude doplnˇek rozdˇelen. Cel´y tento postup odpov´ıd´a prvn´ım tˇrem bod˚um m´eho zad´an´ı.
Popsan´y n´avrh jsem v letn´ım semestru implementoval jak bylo poˇzadov´ano ˇctvrt´ym a posledn´ım bodem m´eho zad´an´ı a implementaci jsem tak´e testoval.
Funkˇcnost doplˇnku lze v budoucnu rozˇs´ıˇrit napr´ıklad o nastaven´ı odbˇeru anotac´ı, zpra-cov´an´ı nab´ızen´ych anotac´ı, ˇci nastaven´ı r˚uzn´eho podbarven´ı anotovan´eho textu v z´avislosti na typu, ˇci zdroji anotace.
Literatura
[1] Adding HTML Elements. [online], posledn´ı ´uprava: 2011-04-04, [Navˇst´ıveno: 2011-05-05].
URLhttps://developer.mozilla.org/en/XUL_Tutorial/Adding_HTML_Elements
[2] A brief guide to Mozilla preferences. [online], posledn´ı ´uprava: 2011-01-24, [Navˇst´ıveno: 2011-05-10].
URLhttps://developer.mozilla.org/en/Preferences_System
[3] Building an Extension. [online], posledn´ı ´uprava: 2011-05-05, [Navˇst´ıveno: 2011-05-06].
URLhttps://developer.mozilla.org/en/building_an_extension
[4] Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. [online], 2011-04-12, [Navˇst´ıveno: 2011-05-05].
URLhttp://www.w3.org/TR/CSS2/
[5] Centrum pro v´yvoj´aˇre doplˇnk˚u. [online], [Navˇst´ıveno: 2011-04-30].
URLhttps://addons.mozilla.org/cs/firefox/developers
[6] Chapter 2: Technologies used in developing extensions. [online], posledn´ı ´uprava: 2011-01-24, [Navˇst´ıveno: 2011-05-11].
URLhttps://developer.mozilla.org/En/Firefox_addons_developer_guide/
Technologies_used_in_developing_extensions
[7] Child Selector (“parent > child”). [online], [Navˇst´ıveno: 2011-05-10].
URLhttp://api.jquery.com/child-selector/
[8] Communication between HTML and your extension. [online], posledn´ı ´uprava: 2010-06-21, [Navˇst´ıveno: 2011-05-01].
URLhttps://developer.mozilla.org/en/Communication_between_HTML_and_
your_extension
[9] CSS Tutorial. [online], [Navˇst´ıveno: 2011-05-02].
URLhttp://www.w3schools.com/css/
[10] Document Object Model (DOM). [online], 2005-01-19, [Navˇst´ıveno: 2011-05-10].
URLhttp://www.w3.org/DOM/
[11] Doplˇnky. [online], [Navˇst´ıveno: 2011-05-01].
[12] Gecko DOM Reference. [online], posledn´ı ´uprava: 2011-03-02, [Navˇst´ıveno: 2011-04-30].
URLhttps://developer.mozilla.org/en/Gecko_DOM_Reference/Introduction
[13] History of the Mozilla Project. [online], [Navˇst´ıveno: 2011-05-01].
URLhttp://www.mozilla.org/about/history.html
[14] HTML Tutorial. [online], [Navˇst´ıveno: 2011-05-05].
URLhttp://www.w3schools.com/html/
[15] Interaction between privileged and non-privileged pages. [online], posledn´ı ´uprava: 2011-01-16, [Navˇst´ıveno: 2011-05-01].
URLhttps://developer.mozilla.org/en/Code_snippets/Interaction_
between_privileged_and_non-privileged_pages
[16] JavaScript. [online], posledn´ı ´uprava: 2011-04-24, [Navˇst´ıveno: 2011-04-28].
URLhttps://developer.mozilla.org/en/JavaScript
[17] JavaScript Tutorial. [online], [Navˇst´ıveno: 2011-04-27].
URLhttp://www.w3schools.com/js/
[18] jQuery. [online], 2010, [Navˇst´ıveno 2011-04-28].
URLhttp://jquery.com/
[19] panel. [online], posledn´ı ´uprava: 2011-04-01, [Navˇst´ıveno: 2011-04-28].
URLhttps://developer.mozilla.org/en/XUL/panel
[20] Popup Guide. [online], posledn´ı ´uprava: 2011-02-22, [Navˇst´ıveno: 2011-04-28].
URLhttps://developer.mozilla.org/en/XUL/PopupGuide
[21] Tabbed browser. [online], posledn´ı ´uprava: 2011-01-18, [Navˇst´ıveno: 2011-05-11].
URLhttps://developer.mozilla.org/en/Code_snippets/Tabbed_browser
[22] window.content. [online], posledn´ı ´uprava: 2007-12-2, [Navˇst´ıveno: 2011-05-11].
URLhttps://developer.mozilla.org/en/DOM/window.content
[23] XHTML Tutorial. [online], [Navˇst´ıveno: 2011-05-05].
URLhttp://www.w3schools.com/xhtml/
[24] XHTML2 Working Group Home Page. [online], posledn´ı ´uprava: 2010-12-17, [Navˇst´ıveno: 2011-05-11].
URLhttp://www.w3.org/MarkUp/
[25] XML. [online], posledn´ı ´uprava: 2009-11-24, [Navˇst´ıveno: 2011-05-01].
URLhttps://developer.mozilla.org/en/XML
[26] XML Path Language (XPath). [online], 1999-11-16, [Navˇst´ıveno: 2011-05-01].
URLhttp://www.w3.org/TR/xpath/
[27] XMLHttpRequest. [online], 2011-08-03, [Navˇst´ıveno: 2011-05-01].
URLhttp://www.w3.org/TR/XMLHttpRequest/
[28] XPCOM. [online], posledn´ı ´uprava: 2011-01-24, [Navˇst´ıveno: 2011-04-28].
[29] XUL. [online], posledn´ı ´uprava: 2011-04-01, [Navˇst´ıveno: 2011-04-30].
URLhttps://developer.mozilla.org/En/XUL
[30] XUL Overlays. [online], posledn´ı ´uprava: 2010-01-25, [Navˇst´ıveno: 2011-05-05].
URLhttps://developer.mozilla.org/en/XUL_Overlays
[31] Z´asuvn´e moduly (pluginy). [online], [Navˇst´ıveno: 2011-05-01].
URLhttp://www.mozilla.cz/doplnky/zasuvne-moduly/
[32] Dytrych, J.: 4A Framework: Annotations Anywhere, Annotations Anytime. [online], 2011-04-28, [Navˇst´ıveno: 2011-05-12].
URLhttp://keg.vse.cz/_slides/dytrych.pdf
[33] Dytrych, J.: Webov´e sluˇzby a komponentn´ı technologie, 2011, pojedn´an´ı k t´ematu disertaˇcn´ı pr´ace.
[34] Eich, B.: Blog. [online], [Navˇst´ıveno: 2011-05-01].
URLhttp://brendaneich.com/
[35] Garrett, J. J.: Ajax: A New Approach to Web Applications. [online], 2005-02-18, [Navˇst´ıveno: 2011-04-28].
URLhttp://www.adaptivepath.com/ideas/essays/archives/000385.php
[36] Janovsk´y, D.: HTML pˇr´ıruˇcka. [online], posledn´ı ´uprava: 2011-05-02, [Navˇst´ıveno: 2011-05-05].
URLhttp://www.jakpsatweb.cz/html/
[37] Marshall, J.: HTTP Made Really Easy. [online], posledn´ı ´uprava: 1997-08-15, [Navˇst´ıveno: 2011-05-05].
URLhttp://www.jmarshall.com/easy/http/
[38] Peterka, J.: S´ıt’ov´y model TCP/IP. [online], 1992, [Navˇst´ıveno: 2011-05-11].
URLhttp://www.earchiv.cz/a92/a231c110.php3
[39] Russell, A.: Comet: Low Latency Data for the Browser. [online], 2006-03-03, [Navˇst´ıveno: 2011-04-30].
URLhttp:
//infrequently.org/2006/03/comet-low-latency-data-for-the-browser/
[40] Sharp, J.; Burns, R.; aj.: jQuery Kuchaˇrka program´atora. Computer Press, a. s., Brno, prvn´ı vyd´an´ı, 2010, 436 s., iSBN 978-80-251-3152-7.
[41] Shimoda, H.: Chapter 3: Introduction to XUL — How to build a more intuitive UI. [online], posledn´ı ´uprava: 2011-02-20, [Navˇst´ıveno: 2011-05-11].
URLhttps://developer.mozilla.org/En/Firefox_addons_developer_guide/
Introduction_to_XUL%E2%80%94How_to_build_a_more_intuitive_UI
[42] Yank, K.; Adams, K.: Zaˇc´ın´ame s JavaScriptem. Zoner software, s.r.o., Brno, prvn´ı vyd´an´ı, 2008, 333 s., iSBN 978-80-86815-94-7.