Disassembler

Artificial intelligence is no match for natural stupidity.
11srpna2015

Firefox konečně umí kopírovat text


Bulvární titulek? Možná. On ho ve skutečnosti stále neumí kopírovat úplně správně. Už jsem tu zmiňoval, že Firefox nemám rád, protože obsahuje spoustu chyb a nedomyšleností, které mi značně znepříjemňují vývoj webových aplikací. Chápu, že spousta věcí nemusí být natvrdo napsaná v dokumentaci, ale my lidi jsme občas takoví, že čekáme, že bude něco fungovat intuitivně. Včera jsem ale zjistil, že jedna z obzvláště otravných chyb, která znemožňovala používání spousty webů včetně mého, byla konečně alespoň částečně opravena.

Zalamování


Zalamování není proces vysazování lam krotkých do cizích biotopů, jak by si někdo mohl myslet. Zalamování v tomhle případě označuje konce řádků a začátky řádků následujících. Firefox měl (a stále má) velmi podivná pravidla pro kopírování těchto neviditelných znaků, zejména u elementů používajících CSS vlastnosti white-space s hodnotami pre a pre-wrap. V zásadě to fungovalo tak, že Firefox nekopíroval konce řádků nikde jinde než u HTML tagu <pre>. Upozorňuji, že poprvé byla tato chyba nahlášena 19. 12. 2001 v reportu 116083. K mému nesmírnému překvapení pánové z Mozilla Foundation po 14 letech tento bugreport zavřeli s tím, že mají od verze 38 opraveno. Tento převelice stupidní bug nabyl absurdnosti s příchodem HTML5 a <code> tagem, kdy v případě, že jste na stránce kopírovali nějaký text z <code style="white-space:pre">, Firefox váš krásně odsazený a odřádkovaný kód očesal o zalomení a slil jej do jednolitého bloku textu. Problém se týkal i mých stránek, protože přesně takový tag pro označení kódu používám. Dokonce jsem byl u jednoho z mých nejčtenějších článků (Lámání hesel k Excelovským dokumentům), donucen zkopírovat kód do stažitelného souboru, aby si nebožáci, kterým Firefox někdo vnutil (protože je to přece super prohlížeč, protože... ééé... prostě proto) mohli skript překopírovat a spustit.

Use it, break it, fix it, trash it


Nicméně problém stále není úplně vyřešený, což vzhledem k tomu, že původní bugreport a všechny duplikáty jsou označeny jako vyřešené nebo zavřené, je celkem průser, protože teď už se mu nebude věnovat vůbec nikdo. Kopírování z codeboxů na mých stránkách funguje, ale podstata problému zůstala úplně netknuta. Oproti původní situaci se změnilo jen to, že Firefox mimo tagu <pre> nově zachovává whitespace znaky i u <code> tagu a CSS vlastně ani nikoho moc nezajímá. Zkuste si ale zkopírovat text z <div style="white-space:pre"> níže a uvidíte, že Firefox zalomení neponechá. Vzhledem k tomu, že Mozilla Foundation je jedním z předních inovátorů HTML a CSS a jsou všemi deseti pro Open Web, je jejich referenční prohlížeč docela žalostný. O to žalostnější pak je, že některé další prohlížeče s volnějším release cyklem fungují na starších verzích Gecko engine (například SeaMonkey) a ta hromada chyb v nich bude opravena ještě daleko později.

Tohle je <div> převlečený za codebox. Pokud jeho obsah zkopírujete ve Firefoxu, nezachová zalomění řádků. Ostatní prohlížeče ale zalomení zachovají, jak byste asi čekali.