Uruchomienie szablonu badań wieloźródłowych wyprodukowało dobry raport o instrumentach inwestycyjnych, a potem źle go wydrukowało. Dziewięćdziesiąt pięć znaczników w postaci [^1] było wewnątrz tekstu, a dziewięć linii w postaci [^1]: piętrzyło się poniżej. Zarówno w sieci, jak i na telefonie.
Przyczyna jest taka, że przypisy nie są częścią markdown. To rozszerzenie, i żaden z dwóch silników markdown, które dostarczamy — jeden w sieci, drugi na mobile — go nie implementuje. Prosiliśmy model dokładnie o tę formę, a potem renderowaliśmy ją jako dosłowny tekst.
Jeden przepisywacz, dwa silniki
Zamiast uczyć oba renderery tego samego rozszerzenia, znaczniki są przepisywane, zanim któryś z nich je zobaczy, na prosty link, który oba już renderują identycznie. Definicje są wyodrębniane i zwracane osobno, a to, co po nich następowało, pozostaje jako ogon dokumentu. Nawiasy kwadratowe zostają w tekście linku, więc spiętrzone cytaty czyta się jako [1][2], a nie 12.
W sieci cytat jest rysowany w indeksie górnym, definicje są renderowane jako lista z prawdziwymi kotwicami, kliknięcie w jedną przewija do niej i migocze linią, a numer na liście wraca do pierwszego miejsca, gdzie był cytowany. Najechanie pokazuje definicję bez przewijania. Na telefonie te same znaczniki są rysowane kolorem akcentu, a dotknięcie jednego przewija panel do odpowiedniej linii. Linki, które nie są cytatami, nadal otwierają się w przeglądarce, jak wcześniej.
Karty źródeł pod raportem nigdy nie były dotknięte — pochodzą z innego miejsca i zawsze były w porządku.
I w pobraniu
Raport, który pobierasz jako .docx, .pdf lub .md, przechodził przez inny konwerter, który drukował surowe znaczniki bezpośrednio w dokumencie. Specyfikacja dokumentu nie ma indeksu górnego, więc cytat drukuje się jako [3], a każda definicja otwiera własną linię zaczynającą się od [3]. Wcięte linie kontynuacji dołączają do swojej definicji. Numery w pliku to numery na ekranie.
Pierwsza próba była błędna w sposób, przed którym już mieliśmy zabezpieczenie
Pierwsza wersja zamieniała numery przypisów na zwykłe linki fragmentów — href="#fn-3". Pod <base href="/">, którego potrzebuje aplikacja jednostronicowa, goły fragment rozwiązuje się względem korzenia strony, więc link wskazuje na stronę główną. Obsługa kliknięcia anulowała nawigację, więc działało to — i działałoby dalej, dopóki ktoś nie dotknąłby tej obsługi.
Kontrola, którą już mieliśmy dokładnie dla tego wzorca, zapaliła się na czerwono podczas lokalnego uruchomienia przed pushem. Numery są teraz przyciskami; przewijają, przenoszą fokus i respektują preferencję czytelnika dotyczącą ograniczonego ruchu.