Changeset 39dab6b in Klonkt for src/assets/js/ward-sky.js


Ignore:
Timestamp:
08/12/2026 09:43:20 PM (3 months ago)
Author:
Robin <roboburr@…>
Children:
5e0fea7
Parents:
2086ea2
Message:

Ward-PWA: de mini-speler, de themakleur en een breder kaartraster

Drie dingen in een ronde.

DE THEMAKLEUR (SkyPalette). De acht presets en de luminantie-regel komen
LETTERLIJK uit Shaer: dezelfde kleuren, en dezelfde beslissing welke
tekst erop leesbaar is (donker op zon, wit op nacht). Een handgehouden
lijstje zou uit de pas lopen; luminantie beslist. De keuze kleurt het
accent (knoppen, bubbels, de (+)), tint de achtergrond zacht, en laat de
hemel zijn placeholder-schijfjes bijkleuren. Opgeslagen per apparaat.

DE MINI-SPELER. Een feed-kaart rendert een gewone audio, maar de feed
wordt bij elke verversing opnieuw getekend en dan sterft dat element:
de muziek stopt midden in een nummer. Daarom is er EEN blijvende speler
buiten de feed; een audiotegel geeft alleen zijn bron door (gevangen in
de capture-fase) en pauzeert zichzelf. Zo overleeft het geluid een
herteken en een wissel naar de hemel, precies als in de app.

HET KAARTRASTER (Robins wens, 12-8). Op desktop net als op mobiel en
tablet MEER kolommen: auto-fill met een minimum van 280px vult zelf op,
een op een smalle telefoon, twee op een tablet, drie of meer breed.

New file:
src/assets/js/ward-theme.js

  • presets, onSky (luminantie), load/save/apply

Changed files:
src/assets/js/ward.js

  • wireTheme (swatches), wireMiniPlayer (gedeelde audio)
  • de hemel skint bij op een themawissel

src/assets/js/ward-sky.js

  • buildAtlas neemt het accent; reskin() bij een kleurwissel

src/views/pages/ward.ejs

  • themaknop, themadialoog, mini-speler-balk

src/assets/css/ward.css

  • accent/achtergrond als variabelen, mini-speler, swatches, responsief raster (auto-fill minmax 280px)

src/services/i18n.js

  • kleur + play/pause in nl, en, de

test/ward-theme.test.js

  • acht presets, en de tekstkleur volgt luminantie

remarks: 905 tests groen. Slepen en het echt doorspelen van audio zijn
in code getest, niet met oor en vinger; dat is aan Robin op dev.

-robo
Co-Authored-By: Claude Opus 4.8 <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/ward-sky.js

    r2086ea2 r39dab6b  
    9999
    100100/** Eén canvas met alle avatars naast elkaar, zodat tekenen één drawImage is. */
    101 async function buildAtlas(faces) {
     101async function buildAtlas(faces, accent) {
    102102  const size = FACE * 2;                       // retina-scherp
    103103  const cols = Math.max(1, Math.ceil(Math.sqrt(faces.length || 1)));
    … …  
    120120      g.save();
    121121      g.beginPath(); g.arc(x + size / 2, y + size / 2, size / 2, 0, Math.PI * 2); g.clip();
    122       g.fillStyle = '#5a32e6'; g.fillRect(x, y, size, size);
     122      g.fillStyle = accent || '#5a32e6'; g.fillRect(x, y, size, size);
    123123      g.fillStyle = '#fff';
    124124      g.font = `600 ${size * 0.45}px system-ui, sans-serif`;
    … …  
    176176    this.faces = faces;
    177177    this.spots = orbitPlacement(faces.map((f) => f.ageMs));
    178     this.atlas = await buildAtlas(faces);
     178    this.atlas = await buildAtlas(faces, this._accent());
    179179    this._resize();
     180  }
     181
     182  /** De themakleur uit de CSS-variabele, voor de placeholder-schijfjes. */
     183  _accent() {
     184    return getComputedStyle(document.documentElement).getPropertyValue('--accent').trim() || '#5a32e6';
     185  }
     186
     187  /** Het thema veranderde: de letters-op-schijf opnieuw in het nieuwe accent. */
     188  async reskin() {
     189    if (this.faces.length) this.atlas = await buildAtlas(this.faces, this._accent());
    180190  }
    181191
Note: See TracChangeset for help on using the changeset viewer.