FluentUI: storitve za register WvdS-DW
Paketi družin DW in DWDO svojega vmesnika ne rišejo sami: tri storitve dobijo iz registra paketa wkcore. Ta stran pove, katere.
Nazaj: FluentUI (knjižnica oblikovalskega sistema) · Sorodno: FluentUI: javni API pomočnika · FluentUI: oblikovalski žetoni
1. Namen
Stanje: stopnja 1 – opisuje dejansko izvedeno kodo.
Paketi družin WvdS-DW in DWDO (wksourceview, wkdogit, wkdoado, wkdoadogit,
wkdocore) svojega vmesnika ne rišejo sami, temveč iz registra storitev paketa wkcore dobijo
tri storitve:
ui.components– pet osnovnih gradnikov:button,badge,card,alert,icon; poleg njih ta wiki dodaja še skupno glavo dokumentaheader(razdelek 4)ui.icons– iz vzdevka ikone naredi končne oznake HTMLui.tokens– barvne vrednosti kot polje PHP, za porabnike na strežniku
Za to je predviden paket wvdsdwui. Tu namenoma ni nameščen: ta wiki ima z wkfluentui
že oblikovalski sistem, dva nabora žetonov in dva ponudnika ikon v istem wikiju pa bi pomenila, da
o barvi odloča vrstni red nalaganja in ne namen. Namesto tega tri storitve prijavi wkfluentui
sam.
2. Kako poteka prijava
action/dwdobridge.php se priključi na dogodek WKCORE_REGISTER_SERVICES in vpiše tri
storitve v register. Povezava je neobvezna v obe smeri:
- Če
wkcoreni nameščen, se dogodek nikoli ne sproži – ta paket se vede natanko tako kot prej. - Če paket DWDO storitve ne najde, po lastni pogodbi preide na preproste oznake HTML.
Prijava ničesar ne prepiše: če bi bil wvdsdwui vendarle nameščen, zmaga tisti, ki se prijavi
prvi – namesto da bi eden drugega tiho izpodrinil.
wvdsdwui\ComponentContract,
wvdsdwui\IconProvider) pripada prav paketu, ki ga ta rešitev nadomešča, torej je ni. Porabniki
storitve tako ali tako kličejo dinamično in nikoli ne tipizirajo proti vmesniku – enakost podpisov
je zato vsa pogodba. Spremenjen podpis klicatelje zlomi brez opozorila.
3. ''ui.components''
Izvedba: helper/uicomponents.php.
| Metoda | Podpis | Rezultat |
|---|---|---|
button() | (string $label, array $opts = []) | <button type=„button“> oziroma <a>, če je nastavljen href. opts: variant, icon (vzdevek, ne oznake HTML), href |
badge() | (string $text, string $variant = '') | <span class=„wk-badge …“>; oblikovane različice: success, warn, error, info |
card() | (string $title, string $bodyHtml) | preda widgets()→card() |
alert() | (string $message, string $level = 'info') | blok s sporočilom z role=„status“ in simbolom stanja; neznana stopnja postane info |
icon() | (string $alias, array $attr = []) | preda ui.icons; neznan vzdevek vrne '''' |
header() | (array $spec) | ni del pogodbe s petimi metodami – skupna glava dokumenta, glejte razdelek 4 |
Kodiranje posebnih znakov: vsaka skalarna vrednost je kodirana tukaj. Edina izjema je $bodyHtml
pri card() – končen delček HTML, za katerega kodiranje je po pogodbi odgovoren klicatelj.
button() v href preveri izvršljive sheme (javascript:,
vbscript:, data:) in jih nadomesti z '#'. Sam hsc() naredi javascript:alert(1)
le varnega za atribut, ne prepreči pa izvršitve ob kliku. Relativne in absolutne poti, poizvedba,
fragment, http(s): in mailto: gredo skozi nespremenjeni.
4. Skupna glava dokumenta
Izvedba: helper/docheader.php in pravila .wk-dochead* v style.css. Dosegljiva je kot
šesta metoda storitve ui.components.
Zakaj obstaja
Dva paketa sta za isto nalogo gradila vsak svojo glavo – wksourceview za datoteko, wkdoadogit
za repozitorij. Ista naloga, drugačen vrstni red elementov, drugačno krajšanje, drugačen barvni
odtenek. Na strani z obema sta stali dve različni predstavi o tem, kaj je glava.
Pogodba je polje s specifikacijo, ne oznake HTML. Klicatelj opiše, kaj je v glavi; gradnik odloča o razporeditvi, vrstnem redu, krajšanju in pripenjanju. Klicatelj z njim drugače oblikovane glave ne more ustvariti – in prav to je namen.
Območja
| Območje | Vsebina | Vedenje |
|---|---|---|
ident | ikona + ime (+ za njim zadržano prikazan sklic) | zavzame prosto širino, krajša se |
meta | značke stanja | kratke, nespremenljive, nikoli se ne skrčijo |
tabs | sorodni pogledi istega predmeta | odpade, če sta zavihka manj kot dva |
actions | povezave in gumbi za predmet | na koncu vrstice |
Ključi polja s specifikacijo
| Ključ | Pomen |
|---|---|
name | prikazno ime – tisto, kar bralec išče |
icon | vzdevek ikone (glejte razdelek 5), ne oznake HTML |
reference | podrobnejša opredelitev za imenom; odpade, če ime le ponovi |
headingLevel | 2–6: ime postane pravi naslov. Brez navedbe <span> |
badges | seznam z text, variant, mono |
tabs | seznam z label, href, active, disabled |
actions | seznam z label, icon, href, title, class, attrs |
layout | row (cel bralni stolpec) ali stacked (ozek stolpec) |
sticky | pripne glavo na vrh najbližjega nadrejenega elementa s pomikanjem |
class | dodaten razred na korenskem elementu, za sidra posameznega paketa |
stacked ni stvar okusa, temveč meritve. V 15 em široki stranski vrstici je ime edini
element, ki se lahko skrči, poleg kratkih značk nespremenljive širine – v skupni vrstici se je
skrčilo na en znak. Zato ima identiteta tam svojo vrstico.
headingLevel ime namenoma ni naslov. Orodna vrstica, ki se drži vrha območja
za pomikanje, je del upravljalnega okvira; če bi jo vpisali v zgradbo dokumenta, bi zavedla uporabnike
bralnikov zaslona pri navigaciji.
Varnost
Vsaka skalarna vrednost je kodirana tukaj; ključa, prek katerega bi klicatelj predal surov HTML, ni. To je namerno: glava je sestavljena iz imen, poti in sklicev (refs), ki prihajajo iz repozitorijev in besedila strani.
hrefgre skozi isto preverjanje shem kotbutton()(glejte razdelek 3).attrsse filtrira: dovoljena so samo imena z malimi črkami iza–z0–9-;on…se zavrne, prav takohref,class,src,srcdoc,style,action,formaction,formintype– prva dva zato, ker imata svoja ključa in bi bila izpisana dvakrat (brskalnik obdrži prvo navedbo, torej nepreverjeno).- Vrednost
trueustvari atribut brez vrednosti (download).
Nadomestna pot
Porabnik preveri z method_exists($ui, 'header'). Če metode ni (na primer ker storitve vendarle
zagotavlja izvirni wvdsdwui), nariše svojo, namenoma preprosto glavo z isto vsebino. Ta
nadomestna pot ne sme prerasti v drugo izvedbo iste oblike; to bi bilo natanko odstopanje, proti
kateremu je gradnik nastal.
5. ''ui.icons''
Izvedba: helper/icons.php. Metode: has(), icon(), aliases(), name() (zadnja
vrne 'wkfluentui-svg' in se prikaže v diagnostičnih pogledih).
Znaki so vgrajeni SVG, ne pisava z ikonami: brez dodatne zahteve, brez utripa pred nalaganjem,
brez licenčnih obveznosti, barvo pa prek currentColor samodejno prevzamejo od okoliškega
besedila. Narisani so na enotni mreži 16×16.
- Neznan vzdevek ni napaka:
has()vrnefalse,icon()vrne ''''''. Manjkajoča ikona strani nikoli ne pokvari, odpade le okras. * Dostopnost: brez ''labelje ikona okrasna (aria-hidden=„true“). Z nepraznimlabelnosi pomen (role=„img“+aria-label). Samtitleni dostopno ime – namigi se izpisujejo neenotno, na zaslonih na dotik pa nikoli.
Razpoložljivi vzdevki
project, dashboard, board, pipeline, wiki, org, home, menu, settings, account, repo, source, branch, commit, merge, tag, add, edit, delete, save, search, run, play, link, close, query, drawer, permalink, download, check, warning, error, info, bug, test, folder, file, rocket
→icon('alias') in posredno kot tretji
parameter konstruktorja definicije Hub v wkdocore. Kdor išče samo klice icon(), drugo
obliko spregleda – prav tako je manjkajoči vzdevek pipeline sprva ostal neopažen in vrstica
vozlišč je prikazala vnos brez ikone.
6. ''ui.tokens''
Preprosto polje ime ⇒ barvna vrednost, brez predpone –wk- (oblika, ki jo objavlja
wvdsdwui). Namenjeno je porabnikom v PHP – diagnostičnim pogledom in vrstičnim slogom, ki
nastanejo na strežniku. Slogovne datoteke paketov DWDO v resnici berejo lastnosti CSS v
style.css; oboje je treba vzdrževati skupaj.
7. Združljivostna plast v CSS
Slogovne datoteke DWDO rišejo z drugim besediščem: –wk-color-accent, –wk-color-bg,
–wk-color-surface, –wk-color-border, –wk-color-text-muted in drugimi, poleg tega
–wk-motion, –wk-easing in –wk-elevation-3. Ta wiki namesto tega pozna ploščato
paleto (–wk-accent, –wk-ink, –wk-paper …).
Brez preslikave se klici var() v paketih DWDO razrešijo v nič: ni ozadja, ni obrobe, ni
barve besedila – vidno pokvarjene površine, ne zgolj drug odtenek. Plast v style.css je zato
nosilna, ne okrasna.
Vsaka vrstica je vzdevek ploščate palete, nikoli nova barva. Če predloga ploščato paleto preglasi, se zasloni DWDO samodejno obarvajo z njo – drugega mesta, ki bi ga bilo treba vzdrževati, ni.
–wk-color-bg je osnovna površina, –wk-color-surface pa dvignjena površina na njej.
Ploščata paleta ju poimenuje ravno obratno (–wk-surface je najsvetlejša barva). Preslikava zato
namenoma ni po enakih imenih.