Tohle je další článek z cyklu nadávám na všechno na světě, tentokrát to je javascript. Protože jsem slíbil, že se pokusím udělat lepší fóra zde na vbnet.cz, zjistil jsem, že pro psaní příspěvků by se hodilo udělat WYSIWYG editor. Takových editorů je celá řada, mě se z nich ale nelíbí ani jeden. Ony toho totiž umí strašně moc a jejich javascriptové knihovny zabírají desítky až stovky kilobajtů kódu.
Problém je v tom, že přehnaná kreativita u většiny uživatelů je spíše na škodu, takže pokud mají naše fóra být seriózní, nesmíme povolit změnu velikosti, typů a barev písma, smajlíky, milion obrázků, tabulky a mnoho dalšího, stačí základní možnosti formátování a hlavně lepší zvýrazňování kódu a IntelliSense (a tyto specifické funkce neumí žádný editor). Než abych rozšiřoval nějaký giganticky komplexní editor, u kterém nevím, jak co funguje, řekl jsem si, že si radši napíšu svůj. Ono by to nemělo být tak těžké.
Potíž je v tom, že veškerá logika na klientovi se dá psát pouze v javascriptu. Obecně nemám rád dynamické programovací jazyky, jako právě javascript nebo PHP. Jsou pomalé, paměťově náročnější a nedá se pro ně udělat rozumná a všude dostupná IntelliSense. To je pro mě problém, obzvlášť v případě, kdy si každý prohlížeč implementuje standardy po svém.
Ono to ani jinak nemůže být, protože většina těchhle odlišností vznikla v době, kdy oficiální standardy teprve vznikaly. Chyby byly na všech stranách, často to vypadalo tak, že Microsoft něco vymyslel a naimplementoval do IE, konsorcium W3C to převzalo, trochu pozměnilo a prohlásilo za standard onu pozměněnou verzi, takže to v Microsoftích prohlížečích to pak standardu neodpovídalo. Takhle to bylo například s technologií AJAX.
Co se týče praktických zkušeností, už mi to funguje ve všech třech nejpoužívanějších prohlížečích, ale co s tím bylo práce. Napsal jsem jádro WYSIWYSG editoru podle dokumentace na MSDN, takže to fungovalo v Internet Exploreru. Nějakým zázrakem to fungovalo také v Opeře, protože ta, přestože podporuj standardy, se většinou snaží naimplementovat jak oficiální, tak i Microsoftí verzi. V tomto případě se jí to podařilo.
Největší problém byl samozřejmě s Firefoxem, nevím, jestli je to tím, že na něj nejsem zvyklý, ale pořád s ním byly nějaké problémy. Do okna, kterému jsem nastavil vlastnost designMode, se pořád nedalo psát, což je špatně. Pak jsem zjistil jednu šílenost:
// tohle funguje
document.getElementById(this.ControlId).contentWindow.document.designMode = 'on';
// tohle nefunguje !!!
var doc = document.getElementById(this.ControlId).contentWindow.document;
doc.designMode = 'on';
To je skoro jako kdyby se elementy v javascriptu nechovaly jako objekty, ale jako hodnotou předávané entity. V IE a Opeře fungovaly obě verze, ve FF jen ta první. Není to nějaký šílený bug, nebo to takhle má být? Anebo mám chybu ještě jinde? Fakt nevím.
Jinak nejlepším prohlížečem pro mě je Internet Explorer 7, dá se v něm totiž nádherně debugovat javascript pomocí Visual Studia 2008. Firebug nebo Opera Developer Tools jsou proti této kombinaci laciné náhražky, které pořádně nefungují (Firebug mi polovinu breakpointů vesele ignoroval, přitom kód pod ním se vykonal normálně).
Dobrá zpráva ale je, že WYSIWYG editor na vbnetu bude, doufám, že se mi podaří udělat i tu IntelliSense. Jen kdyby se to dalo pořádně odladit v té Opeře a FF, to by bylo.