Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Diagramy a grafy

diagramy a grafy na webu: jeden prohlížeč pro každý diagram Mermaid (zoom, posun, celá obrazovka, stažení, trasování), adresy `#diagram-<name>` a `#diagram-<name>:<node>`, odkazy na uzly odvozené při sestavení z identit, které nesou generovaná data, a grafy kreslené z tabulek, které stránka už vykresluje

Vykresleno z docs/DIAGRAMS.md — stejného Markdownu, který ukazuje GitHub.

Každý diagram, který tento web publikuje, kreslí jeden prohlížeč a každý graf jedna komponenta. Žádné se nenastavuje po stránkách. Diagram je blok ```mermaid v jediném dokumentu, který vztah uvádí, nebo zdroj Mermaid, který šablona zapíše z generovaných dat; graf je tabulka, kterou stránka už vykresluje. To, co je činí interaktivními, adresovatelnými a propojenými, se odvozuje při buildu z toho, co repozitář už ví. Rozhodnutím je ADR 0152; pravidlem, že diagram se kreslí a nikdy nepíše, je project.a-diagram-is-drawn-not-typed.

Cesta jednoho diagramu

flowchart LR
    fence["a mermaid fence<br/><small>docs, a decision, a rule</small>"]
    data["site/data/generated<br/><small>diagrams.json, plan.json</small>"]
    zola["Zola<br/><small>pre class=mermaid</small>"]
    pass["scripts/lib/diagrams.mjs<br/><small>name, nodes, toolbar, links</small>"]
    check["scripts/ci/link-check<br/><small>every link and every address</small>"]
    viewer["site/diagrams.js<br/><small>draw, zoom, pan, trace, address</small>"]
    fence --> zola
    data --> zola
    zola --> pass
    data -- "identities and routes" --> pass
    pass --> check
    pass --> viewer

Nic v té cestě se nepíše dvakrát. Plot je jediné místo, kde je vztah zapsán; identity, na které může uzel odkazovat, jsou ty, které scripts/generate-site-data již zapsal; a prohlížeč čte to, co build připravil, ne vlastní konfiguraci.

Co build přidává k diagramu

scripts/site-build spouští scripts/lib/diagrams.mjs nad stránkami, které napsala Zola. Pro každé <pre class="mermaid"> přidává čtyři věci:

PřidánoOdProč
id="diagram-<name>"jméno data-diagram, které šablona deklarovala, jinak id nadpisu, pod kterým diagram sedí, jinak jeho pořadí na stránce; druhý diagram pod jedním nadpisem je <name>-2adresa, na kterou lze přistát, s JavaScriptem i bez něj
data-nodesid uzlů, které zdroj deklaruje (vývojové diagramy a stavové diagramy)odkaz na jeden uzel může být odmítnut, když diagram takový uzel nemá
panel nástrojů, zapisovaný hiddensamotný průchodovládací prvek, který markup deklaruje, je ten, který scripts/ci/interaction-check dokáže vázat na chování; prohlížeč jej odhalí, až když je co ovládat
seznam odkazů vedle nějidentity v site/data/generatedodkazy fungují bez JavaScriptu a kontrolují se jako každý jiný odkaz

Stránka, která by nesla dva diagramy pod jedním deklarovaným jménem, se odmítne a sestavení se zastaví (exit 10). Zdroj diagramu se nikdy nemění.

Uzel se stane odkazem, když jeho id, jeho štítek nebo jeden řádek jeho štítku je identitou objektu, pro který tento build napsal stránku:

Identita v diagramuOdkazuje naČteno z
I2653, M003úkol nebo milník v plánuplan.json
ADR 0152, adr-0152rozhodnutíentities.json
id pravidla, s verzí nebo bez nípravidloentities.json
majordomus doctor, majordomus plan nextpříkazcommands.json
id schopnosti, například mesh.claimschopnostexecutable.json
id doktrínydoktrínadoctrines.json
docs/DESIGN.mddokumentdocs.json

Identita uvnitř delšího popisku se rozřeší také, ale jen když popisek jmenuje jeden objekt. Popisek, který jmenuje dva, nebo objekt, pro který tento web nemá stránku, se neodkazuje na žádný: odkaz, který by vybral ten, jejž dokáže rozřešit, by byl hádáním. Holý název souboru ve větě není identita. Identita, jejíž stránku build nezapsal, se nenabízí vůbec.

Nikdo nezapisuje href do diagramu. Direktiva click v Mermaidu se nepoužívá: odkaz existuje, protože se v diagramu objevuje identita, a při dalším sestavení zmizí, když zmizí objekt.

Prohlížeč

site/diagrams.js načítají jen stránky, které nesou diagram, a stahuje vendorovaný build Mermaid poté, co byla stránka zpracována. Každý diagram kreslí ve vlastních barvách stránky, čtených z design tokenů, a při změně motivu je vykreslí znovu.

DoDělat
přiblížení− a + na liště nástrojů; + a - na klávesnici; Ctrl nebo Cmd s kolečkem; stisk dvěma prsty
pantažení; šipky
zobrazit celý diagramFit; 0; dvojklik na prázdné místo
vyplnit obrazovkuExpand; F; Escape listů
ponechat výkresSVG ukládá <name>.svg
sledovat uzelklikněte na něj, nebo na něj přesuňte fokus a stiskněte Enter, když ho sestavení propojilo
trasovat uzelnajeďte na něj nebo na něj přesuňte fokus: jeho hrany a sousedé zůstanou, ostatní ustoupí
vyberte uzelklikněte na uzel, který není odkazem; Alt a klik, nebo S se zaměřením na něj, pro ten, který jím je
zkopírovat adresuLink zkopíruje adresu diagramu, nebo vybraného uzlu

Diagram příliš velký na přečtení vcelku, například graf závislostí všech úkolů, se otevře v čitelné velikosti z levého horního rohu a odtud se posouvá. Obyčejné kolečko vždy posouvá stránku.

Rámec je vlastní <pre> diagramu: zachovává své id a místo v pořadí tabulátoru. Diagram, který se nepodaří nakreslit, ponechá svůj zdroj viditelný, nedostane žádné ovládací prvky a ohlásí chybu v konzoli prohlížeče, kterou scripts/interaction-probe považuje za nález.

Adresy

AdresaOtevírá
#diagram-<name>stránka u tohoto diagramu
#diagram-<name>:<node>ten diagram s vybraným, vycentrovaným a vysledovaným uzlem

scripts/ci/link-check rozhoduje obojí offline. První je běžný fragment: id musí na stránce existovat. Druhý se vyřeší, jen když stránka nese diagram a diagram deklaruje uzel, takže odkaz na uzel, který byl přejmenován, shodí build, který jej přejmenoval.

Grafy

Graf je tabulka, kterou stránka už vykresluje, deklarovaná jako taková:

<figure id="chart-milestones" data-chart="bar" data-chart-stack data-chart-horizontal data-chart-unit="issues">
  <table>
    <thead><tr><th>milestone</th><th data-series="done">…</th></tr></thead>
    <tbody><tr id="chart-milestones:m000"><td><a href="…">M000</a></td><td>15</td></tr></tbody>
  </table>
</figure>

site/charts.js vykreslí tabulku pomocí Apache ECharts: první sloupec je kategorie a každý sloupec, jehož záhlaví nese data-series, je řada. Čísla se čtou z buněk, které stránka ukazuje, takže graf nemůže být v rozporu se svou tabulkou a neexistuje druhá kopie dat. Tabulka na stránce zůstává; dostane ji čtenář bez JavaScriptu, čtečka obrazovky i tisk.

DeklaraceVýznam
data-chart="bar" nebo "line"co nakreslit
data-chart-stackřady jsou částmi jednoho celku
data-chart-horizontalkategorie běží po straně
data-chart-unitjednotka, na ose i v tooltipu
data-chart-labelčeho je obrázek, pro čtenáře, který ho nevidí
data-series na buňce záhlavítento sloupec je nakreslen
data-value na buňcenezaokrouhlené číslo, když buňka ukazuje zaokrouhlené
odkaz v první buňce řádkuznačka řádku otevírá tutéž stránku
id="chart-<name>:<row>" na řádkuadresa řádku, která také zvýrazní jeho značku

Řada dostane barvu, v níž je kreslena její hlavička, když hlavička nese odznak stavu, takže stav se kreslí v barvě, kterou pro něj design deklaruje; jakákoli jiná řada dostane další z barev řad designu. ECharts se vendoruje při sestavení z připnutého balíčku npm a stáhne se poprvé, když se graf přiblíží k viewportu.

Takto se dnes kreslí dva grafy:

GrafStránkaTabulka, kterou čteData
#chart-milestones/plan/úkoly každého milníku podle odvozeného stavuplan.json
#chart-context-history/economics/poměr redukce kontextu při každém zaznamenaném běhueconomics.json

Co se kontroluje a čím

TvrzeníKontrola
co zdroj deklaruje a na co se uzel vyřešínode --test scripts/lib/diagrams.test.mjs
názvy, uzly, panel nástrojů, odkazy, idempotence, odmítnutí duplicitního názvu a oba druhy adres přes link-checkbash test/run.sh 3006_diagrams_are_interactive_and_linkable
každý odkaz, který průchod zapsal, se rozeznáváscripts/ci/link-check, při každém sestavení
panel nástrojů, klávesy, adresa a propojené uzly se chovají v prohlížečispecifikace diagram pro scripts/interaction-probe
žádný vztah není typován jako ozdobný obrázekscripts/ci/diagram-check

Grafy zatím nemají specifikaci chování: nedeklarují žádný ovládací prvek, takže sonda nemá co tvrdit a to, co graf čte ze své tabulky, nepotvrzuje žádná kontrola. To je úkol I2654.

Omezení

  • Odkazy na uzly a adresy uzlů existují pro vývojové diagramy a stavové diagramy. Sekvenční diagram nebo jakýkoli jiný druh se pojmenuje, kreslí, zvětšuje a adresuje jako celek a nemá uzly, na které by se odkazovalo.
  • Hrany se trasují jen ve vývojových diagramech.
  • Domovská stránka nenese žádný diagram ani graf. Její sekce a rozpočet bajtů jsou deklarovány v site/data/homepage.toml a přidání kteréhokoli je změnou této deklarace (úkol I2655).
  • Cockpit a majordomus ui kreslí vlastní grafy a tento prohlížeč nepoužívají (úkol I2656).

Tvrzení, která tento dokument definuje

Každý odkazuje na vlastní stránku s implementací, testem a místy použití.

Prohledává názvy a popisy všech stránek, které tento web publikuje.