Arkitektur
inskewl er bygget som et modulært userscript. Hver funksjon ligger i en egen modul, mens felles kode for lasting, DOM-injisering og API-kall ligger i egne mapper.
Overordnet flyt
- Userscriptet lastes inn på VIS InSchool.
main.tsoppretter modulene.UrlWatcherfølger med på hvilken side brukeren er på.ModuleLoaderbestemmer hvilke moduler som skal være aktive.- Modulene injiserer knapper, paneler eller annen UI ved behov.
Moduler
Moduler arver fra en felles VismaModule-struktur og kan definere:
- når modulen skal lastes
- hvilke elementer som skal injiseres
- hva som skal skje når siden endres
- opprydding når modulen fjernes
Dette gjør at funksjoner som fraværskalkulator og kalendereksport kan utvikles hver for seg.
API-lag
API-koden ligger i src/api. Endepunktene er delt etter fagområde, for eksempel calendar, timetable og attendance.
Prosjektet bruker Zod for runtime-validering av data fra VIS InSchool. Det betyr at dataene ikke bare types i TypeScript, men også sjekkes når de kommer fra API-et.
DOM-injisering
Modulene legger UI inn i eksisterende VIS InSchool-sider. Dette skjer gjennom felles DOM-hjelpere og injectables.
Hvorfor modulær struktur?
Fordeler:
- Nye funksjoner kan legges til uten å endre hele prosjektet.
- Feil i én modul trenger ikke nødvendigvis å ødelegge andre moduler.
- Koden blir enklere å teste og forklare.
- Felles funksjoner kan flyttes til
utilseller API-laget når flere moduler trenger dem.