Dokumentacija

Sestavljanje

Uvozi vedenje, ga veži na svoje podatke in spremeni, kar sme mesto klica spremeniti. Avtomat stanj ostane last vedenja.

Večina programa Orb je sestavljena, ne napisana. Vedenje iz standardne knjižnice (ali tvojih gradnikov) se uvozi z uses, nato se nanj skliče po lastnostih ali kot na celoten orbital. Vežeš ga na svojo entiteto in nastaviš gumbe; njegova stanja in prehodi ostanejo natanko taki, kot jih določa vedenje.

Sklic na lastnost

lolo
1uses Browse from "std/behaviors/std-browse" 2 3trait BookShelf = Browse.traits.BrowseItemBrowse -> Book { 4 config { 5 browseLook: feed 6 fields: [{ name: "name", label: "Title", variant: h4 }] 7 } 8}

Alias.traits.Name -> Entity vzame lastnost in jo veže na tvojo entiteto. Telo se sme dotakniti le površine klica:

PrilagoditevUčinek
config { key: value }Nastavi gumbe, ki jih lastnost navede
events { OLD: NEW }Preimenuje ključe dogodkov povsod v avtomatu
fields { old: new }Preimenuje polja entitete, ki jih lastnost bere in piše
listens { … }V celoti zamenja poslušanja lastnosti
emitsScope internalVsa oddajanja ohrani znotraj orbitala

Na mestu klica ni mogoče dodati stanja, odstraniti prehoda ali spremeniti učinkov prehoda. Za drugačen odziv dodaj sorodno lastnost, ki posluša dogodke vedenja. To pravilo naredi sestavljen program enako preverljiv kot ročno napisanega.

Tu sta dve standardni vedenji vezani na lokalno entiteto Book, brez ročno napisanega avtomata stanj:

Avtomat stanj

LibraryPage

on LibraryView · states: 1 · transitions: 0
idle

BookShelf

on Book · states: 3 · transitions: 9
emitsBrowseItemLoadedemitsBrowseItemLoadFailedemitsVIEWemitsEDITemitsDELETE
BrowseItemLoaded
BrowseItemLoadFailed
REFETCH_QUERY
REFETCH_FILTER
REFETCH_PAGE
VIEW
CLOSE
BrowseItemLoaded
BrowseItemLoadFailed
loading
browsing
error

BookFacts

on LibraryView · states: 1 · transitions: 0
idle

MasterListView

on Book · states: 1 · transitions: 1
listensBrowseItemLoadedemitsREORDERemitsVIEWemitsSWIPE_LEFTemitsSWIPE_RIGHTemitsLONG_PRESSemitsLOAD_MOREemitsVIEWemitsDataListLoaded
DataListLoaded
idle
Teče v živo

The shelf at a glance

3

books

1

on loan

Structure and Interpretation

On the shelf

Abelson and Sussman

Communicating Sequential Processes

On loan

Hoare

The Art of Computer Programming

On the shelf

Knuth

Zgornji program kot avtomati stanj, eden za vsako lastnost: vsak okvir je stanje, vsaka puščica dogodek, ki ga premakne, ikone na puščici pa so učinki, ki jih ta dogodek izvede. ◇ na puščici je varovalo; z miško pojdite nanj in preberite pogoj. Kako brati AVL

std-orb-docex-library.lolololo
1app std-orb-docex-library "1.0.0" 2"std-orb-docex-library — composition: two standard behaviors bound to a local entity and configured at the call site, with no state machine written by hand." 3orbital LibraryOrbital { 4 uses Browse from "std/behaviors/std-browse" 5 uses StatBand from "std/behaviors/std-stat-band" 6 7 entity Book [persistent: docex_books, local] { 8 id : string! 9 name : string! 10 author : string = "" 11 status : "active" | "pending" | "inactive" = active 12 instances [ 13 { id: "B-1", name: "Structure and Interpretation", author: "Abelson and Sussman", status: active }, 14 { id: "B-2", name: "Communicating Sequential Processes", author: "Hoare", status: pending }, 15 { id: "B-3", name: "The Art of Computer Programming", author: "Knuth", status: active } 16 ] 17 } 18 19 entity LibraryView [runtime] { 20 id : string! 21 } 22 23 trait LibraryPage -> LibraryView [interaction, instance] { 24 initial: idle 25 26 state idle { 27 INIT -> idle 28 (render-ui main { type: stack, direction: vertical, gap: lg, children: [@trait.BookFacts, @trait.BookShelf] }) 29 } 30 } 31 32 trait BookShelf = Browse.traits.BrowseItemBrowse -> Book { 33 config { 34 browseLook: feed 35 bodySearch: false 36 fields: [{ name: "name", label: "Title", variant: h4 }, { name: "author", label: "Author", variant: caption }, { name: "status", label: "Status", variant: badge, labels: { active: "On the shelf", pending: "On loan", inactive: "Lost" } }] 37 } 38 } 39 40 trait BookFacts = StatBand.traits.StatBandRender -> LibraryView { 41 config { 42 heading: "The shelf at a glance" 43 items: [{ value: "3", label: "books" }, { value: "1", label: "on loan" }] 44 } 45 } 46 47 page "/library" -> LibraryPage 48}

Uvoz celotnega orbitala

lolo
1uses Board from "std/behaviors/std-board" 2 3orbital Hiring = Board.orbitals.BoardOrbital { 4 entity Candidate 5 fields { title: name } 6 extend { referredBy : string = "" } 7 pages { "/board": "/hiring" } 8}

Sklic na orbital prinese entiteto, vse lastnosti in vse strani. Njegovo telo lahko entiteto veže drugače, preimenuje polja, z extend doda nova, preslika poti, z omit ali only skrči nabor lastnosti in s config nastavi navedene gumbe orbitala. Uvožena imena dobijo predpono z imenom tvojega orbitala, zato dva uvoza istega vedenja nikoli ne trčita.

Nastavitve na treh ravneh

Gumbi živijo na lastnosti (trait.config), na orbitalu (gumbi, ki jih objavi prek svojih lastnosti) in na aplikaciji. Lastnost si objavi gumb orbitala ali aplikacije tako, da privzeto vrednost svojega gumba nastavi na @config.<knob>, razreševanje pa gre od mesta klica prek orbitala do aplikacije. Navedeni gumb, ki ga nobena lastnost ne posreduje, je napaka, prav tako prilagoditev gumba, ki ni bil naveden.

Nalaganje po potrebi

lolo
1uses lazy Guide from "./guide" 2 3orbital GuideIntro = Guide.orbitals.GuidePage { 4 pages { "/guide": "/guide/intro" } 5}

Vedenje z uses lazy se prevede v svojo datoteko in naloži šele, ko se odpre ena od njegovih strani, zato veliko spletišče ne pošlje vseh razdelkov vnaprej. Tako uvoženo ime se sme uporabiti le kot celoten orbital s stranmi. Te strani dokumentacije so vedenja, ki se nalagajo po potrebi.

© 2026 Almadar. Ljubljana, Slovenija.