Changeset 495b019 in Klonkt for src/routes


Ignore:
Timestamp:
10/25/2026 09:52:01 AM (2 days ago)
Author:
Bart <bart@…>
Children:
b4aaadd
Parents:
5d0d3f35
git-author:
Bart <bart@…> (10/14/2026 02:48:46 PM)
git-committer:
Bart <bart@…> (10/25/2026 09:52:01 AM)
Message:

Lay-outthema's: een pakket, de beheerder kiest, en de zijbalk als eerste

Een lay-out is nu een pakket: een map in src/themes/ met een theme.json (id,
naam, versie, contract, stylesheet) en de stylesheet zelf. De zijbalk is het
eerste ingebouwde thema; een thema van buiten installeren komt later en gaat
door dezelfde lader, zodat er één vorm is.

Dezelfde markup, een ander stelsel: een thema verandert geen template. Het
contract (1) is de afspraak over de ids en klassen waar het op mag bouwen; een
thema op een ander contract valt terug op de gewone kop in plaats van half te
werken. Elke regel staat onder html[data-layout="<id>"], en een toets bewaakt
dat, zodat een thema niets raakt zolang het niet gekozen is.

WIE KIEST: de beheerder, in het sitebeheer (sites.layout). Een bezoeker niet
-- de server zet data-layout zelf, het bezoekersscript met localStorage is
weg, en ?layout= werkt alleen als voorproefje voor wie de site beheert. Het
beheer houdt altijd de gewone kop, ook bij navigeren via htmx (de lay-out reist
mee in pcmsNav): een kapot thema mag je nooit buitensluiten van de instelling
waarmee je het uitzet.

Geserveerd op /themes/<id>/<versie>/<bestand>, met de versie in het pad als
cache-buster; alleen wat het pakket zelf noemt komt eruit. De actor noemt het
gekozen thema als shaer:theme, zodat Shaer het van zijn eigen site kan halen
in plaats van er zelf een te kiezen.

Co-Authored-By: Claude Opus 5.5 <claude@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/routes/admin-sites.js

    r5d0d3f35 r495b019  
    191191    users: listOwnerCandidates(),
    192192    palettes: ThemeService.listPalettes(),
     193    layouts: ThemeService.listLayouts(),
    193194    accents: ThemeService.listAccents(),
    194195    platforms: listPlatforms(),
    … …  
    268269    users: listOwnerCandidates(),
    269270    palettes: ThemeService.listPalettes(),
     271    layouts: ThemeService.listLayouts(),
    270272    accents: ThemeService.listAccents(),
    271273    platforms: listPlatforms(),
    … …  
    334336  // "Auto" — defer to user's prefers-color-scheme on first paint.
    335337  const themeOverride = ['light', 'dark'].includes(f.theme_override) ? f.theme_override : '';
     338  // layout: alleen een thema dat deze Klonkt kent (experimental/theme). Leeg
     339  // is de gewone kop. Een onbekend id opslaan zou een site maken die naar
     340  // niets verwijst, en die valt dan stil terug -- liever meteen leeg.
     341  const layout = ThemeService.getLayout(f.layout) ? f.layout : null;
    336342
    337343  // accent: only accept colors from the curated ACCENTS list. Falls back to
    … …  
    342348    UPDATE sites SET
    343349      title = ?, description = ?, tagline = ?, language = ?,
    344       palette = ?, accent = ?, theme_override = ?, profile_photo = ?,
     350      palette = ?, accent = ?, theme_override = ?, layout = ?, profile_photo = ?,
    345351      profile_enabled = ?,
    346352      ap_aliases = ?,
    … …  
    361367    accent,
    362368    themeOverride,
     369    layout,
    363370    f.profile_photo || null,
    364371    f.profile_enabled ? 1 : 0,
Note: See TracChangeset for help on using the changeset viewer.