22. Standard UI je audit nad objevenou sadou stránek a jeho selhání se opravují na sdíleném zdroji
Kontext
Repozitář měl standard UI v tom smyslu, že na něj měl člověk názory. Existoval mobile-first případ, který v headless prohlížeči měřil horizontální přetečení na každé trase, a nad to posouzení. Web vyrostl na 483 stránek napříč devíti webovými povrchy, generovanými ze šablon sestavením, které nikdo nečte stránku po stránce.
První strojový audit všech z nich, při každé šířce, kterou zkompilované téma deklaruje, našel 1455 selhání. Celý argument je v rozdělení:
- 491 rolovatelných oblastí, ke kterým se klávesnicí nedalo dostat, na 197 stránkách — jedno typografické pravidlo, které způsobuje rolování
preatable, a zvýrazňovač, který vydávápre. - 411 selhání kontrastu na 134 stránkách — jedna generovaná paleta zvýrazňování, jejíž 18 z 19 barev leželo pod 4,5:1 na pozadí, které deklaroval tentýž stylesheet.
- 312 odkazů odlišených od okolního textu pouze barvou, na 92 stránkách — jediný idiom odkazu,
text-fg-brand hover:underline, zkopírovaný 140krát. - 165 stránek odpovídajících 404 pod běžícím spustitelným souborem — jedna nativní trasa připojená přes sekci aplikace. (Ta trasa se mezitím přesunula pod
project.web-surface-declared-once; toto rozhodnutí si ponechává validátor, který najde další.) - 36 přeskočených úrovní nadpisů na 3 stránkách, 27 příliš malých cílů na 14, 12 nepojmenovaných ovládacích prvků formuláře na 1 a 1 stránka přetékající při 320px.
Žádná z velkých tříd není chybou stránky. Každá je rozhodnutí učiněné jednou, aplikované všude a nikdy neměřené. Recenzent je nenajde, protože jejich nalezení znamená navštívit 1683 kombinací stránky a šířky a počítat kontrastní poměry.
Rozhodnutí
Standard UI je spustitelný audit nad množinou stránek a množinou šířek, které se objevují, a jeho zjištění se opravují u zdroje, který sdílejí.
Nic nevypisuje stránku ani šířku. Stránky pocházejí ze sestaveného webu — jeho souborového systému a jeho sitemapy, sjednocených, takže i osiřelá stránka se navštíví. Šířky pocházejí z media queries, které sestavení CSS vyprodukovalo, takže breakpoint přidaný do tématu se auditují, aniž by se měnil test. scripts/ui pages a scripts/ui viewports odpovídají, co se navštíví a odkud každá hodnota pochází, a ani jedno nečte seznam.
Audit je prohlížeč. scripts/ui audit řídí vlastní majordomus serve repozitáře a skutečný Chrome nad touto sadou a kontroluje to, na co umí odpovědět jen prohlížeč — rozložení při dané šířce, strom přístupnosti, zda spouštěč komponenty jmenuje existující cíl, zda stránka zalogovala chybu — a nemá druhý názor na to, jak se web servíruje.
Značkování, které tento repozitář nepíše, se normalizuje při sestavení; značkování, které píše, se drží u zdroje. pre zvýrazňovače syntaxe, table typografického pluginu a zaškrtávátko úkolu v markdownu přicházejí bez atributu, který bychom mohli nastavit upstream, takže sestavení normalizuje vykreslený výstup: které prvky se posouvají, se čte ze stylopisu, který sestavení právě zkompilovalo, a paleta se zvedne na práh kontrastu vůči pozadí, které tento stylopis deklaruje, přičemž odstín a sytost zůstanou nedotčeny. Vše, co tento repozitář píše sám, odmítá scripts/ui check, což stojí milisekundy a nepotřebuje prohlížeč.
Zpráva je sekcí testovacího povrchu. Běh shody je testovací běh, /tests/ui je místo, kde ho čtenář hledá, a topologie webu už odmítá povrch připojený uvnitř podstromu jiného. Proto majordomus web report ui zapisuje do povrchu, který vlastní testovací zpráva, nic vlastního nedeklaruje a nikdy nepřepíše deklaraci nadřazeného producenta.
Nativní routa připojená nad vlastní stránky aplikace je zjištění. Topologie správně vyjímá kořenovou aplikaci z pravidla vnořování — odpovídat na to, co si nenárokuje nic jiného, je její práce. Tato výjimka byla slepá k tomu, že aplikace má soubory na určitých cestách, a žádná úvaha o připojeních to nevidí: odpověď je na disku. web validate se nyní ptá výstupu aplikace samotné, zda má stránky pod připojením nativní routy, a varuje s počtem. Varuje, místo aby odmítlo, protože která z obou věcí se má přesunout, je záměr a rozhoduje o tom člověk. To, co toto našlo, už je rozhodnuto — /swagger, pod project.web-surface-declared-once — a validátor je to, co najde další dřív, než bude muset audit.
Důsledky
Stránka přidaná na web se audituje v den, kdy se vykreslí, a breakpoint přidaný do motivu se navštíví v den, kdy se zkompiluje. Ani jedno nestojí úpravu nikde.
Build nyní dvakrát přepisuje vlastní výstup — paletu a značkování posouvání. To je normalizace odvozeného stavu, ne úprava zdroje, a oba průchody jsou idempotentní: vyhovující paleta se přepíše sama na sebe a druhý průchod nic nezmění. Audit to dokazuje zvenčí, což je jediný důvod, proč tomu věřit.
Vygenerovaná paleta zvýrazňování už neodpovídá upstream tématu, ze kterého byla vygenerována. Odpovídá jeho odstínu a sytosti; neodpovídá jeho světlosti tam, kde byla světlost pod prahem. Volba jiného tématu by posunula číslo, ne opravila třídu vad, protože další téma se volí stejně — podle toho, jak se čte, někým, kdo neměří kontrast.
Zastínění nyní hlásí web validate s počtem stránek, místo aby ho o hodinu později objevil audit vykresleného webu. Co s ním udělat — přejmenovat route nebo přesunout sekci — zůstává rozhodnutím člověka a varování je to, na co se to rozhodnutí musí dívat.
Zamítnuté alternativy
Seznam stránek k auditu s pravidlem, že se udržuje aktuální. Táž vada jako registrace po jednotlivých površích, kterou tento repozitář už odmítá: seznam je správný v den, kdy se napíše. Audit by pokryl stránky, které si někdo pamatoval.
Zvolit jiné téma zvýraznění. Přesunulo by 411 nálezů na nějaké jiné číslo a repozitář by nevěděl, které to je. Paleta je generovaná; práh patří do generovaného výstupu.
Opravovat kontrast, posouvací boxy a odkazy stránku po stránce. 483 stránek, tři rozhodnutí. Náprava třídy zjištění mění jediné místo, odkud pochází, jinak repozitář získá 483 kopií rozhodnutí, které učinil jednou.
Udělat z auditu blokující kontrolu u každého commitu. Potřebuje sestavený web, prohlížeč a několik minut. Polovina, která se může postavit před commit — značky, které tento repozitář píše — je scripts/ui check a dělá to; audit v prohlížeči je kontrola, což pravidlo o levných blokujících kontrolách už vyžadovalo.