- Bomen/vogels/planten/topografie verstopten "Niveau" als een los
keuzeveld onderin het inklapbare Instellingen-paneel; de oefenklok,
het geldwidget, plaatswaarde en rekenwidgets tonen niveau altijd als
een knoppenrij bovenaan, direct zichtbaar tijdens het spelen.
- Niveau is nu overal dezelfde knoppenrij (Niveau 1/2/3, met uitleg per
knop via title, net als bij de oefenklok) direct in de bovenbalk naast
de score - geen Instellingen meer nodig om niveau te wisselen.
- Niveau wisselen zet score en reeks terug naar 0, zoals bij de andere
oefenwidgets (voorheen bleef de score gewoon doorlopen).
- Topografie: de knoppenrij verdwijnt bij "Landsdelen", waar niveau toch
al niet van toepassing was - zelfde gedrag als voorheen, nu alleen
consistent met de rest.
- Bomen, vogels en wilde planten krijgen twee nieuwe werkvormen naast
Leren/Quiz: Flitskaarten (naam kort tonen, dan zelftoets - zelfde opzet
als het losse Flitswoorden-widget) en Letterblokken (de naam met
sleepblokken spellen, zelfde mechaniek als de letterblokken-widget,
inclusief puntenpatroon per letter).
- Topografie krijgt dezelfde twee werkvormen: flitskaarten tonen de kaart
met de plek pas gelabeld na onthullen, letterblokken laat de naam van de
gemarkeerde provincie/plaats/rivier/werelddeel spellen.
- Letterblokken werkt ook bij namen met spaties (bv. "Witte
paardenkastanje") - spaties worden een visuele tussenruimte, geen vak.
- Geverifieerd door alle vier widgets (bomen/vogels/planten/topografie)
volledig te spelen: flitskaart onthullen + zelftoets, en een woord
volledig spellen puur op basis van de getoonde puntenpatronen.
- De vorige puntenpatroon-fix (v0.4.16) loste alleen op dat de tien
cijferblokken onderling verschillen. De écht ontbrekende stap: bij de
letterblokken en de rekenwidgets (madd/msub/mmul/mdiv/mpct) toont een
leeg vakje altijd het puntenpatroon van het cijfer/de letter die er
hoort te staan - een tastbare hint, ongeacht wat er al ligt. Bij de
oefenklok en het geldwidget toonde het vakje in plaats daarvan niets
(leeg) of het patroon van wat er toevallig al in lag - geen hint.
- Oefenklok (blockAnswer), geldwidget (digitAnswer) en de nieuwe
plaatswaarde-oefening (buildAnswer) tonen nu overal het patroon van het
juiste doelcijfer per vak, consistent met letterblokken/rekenwidgets.
- Geverifieerd door drie oefeningen (geldrekenen niveau 2/3, oefenklok
niveau 3, plaatswaarde niveau 3) volledig op te lossen met uitsluitend
de puntenpatronen als leidraad (geen tekst gelezen) - in alle gevallen
"Goed gedaan!".
- De cijferblokken (oefenklok, geldwidget) hergebruikten de braille a-j-
patronen, die nooit de onderste rij (posities 3/6) gebruiken - daardoor
leken alle tien blokken op elkaar. Eigen DIGIT_DOTCODE-tabel die alle
zes stippen inzet, geeft elk cijfer nu een echt eigen vorm.
- Plaatswaardetabel-widget had geen enkele oefenvorm (alleen een vrij
invoerveld); nieuwe "Bouwen"-stand met drie niveaus (T/E, H/T/E, of
HD/TD/D/H/T/E) laat kinderen een getal opbouwen door cijferblokken in
de juiste kolom te slepen, met score/reeks en directe feedback - zelfde
bouwsteen als de oefenklok/het geldwidget. De vrije verkenstand blijft
ongewijzigd bestaan.
- Bijvangst: instellingenvelden met .hidden (bv. "24-uursklok" bij de
oefenklok) werden nooit echt verborgen door een CSS-specificiteitsbotsing
(.edu-controls label versloeg [hidden]); toegevoegde regel herstelt dit
voor alle leerwidgets.
- Oorzaak van het "vanzelf" openende uploadvenster gevonden: elk leeg plaatjesvak in een ankerdiagram had eigen pointer/click-handlers die het pannen blokkeerden en de plaatjeskiezer (met uploadtab) openden bij elke veeg die erop begon - op een telefoon was dat vrijwel elke aanraking, dus ook direct na het verversen
- Lege plaatjesvakken lopen nu via dezelfde tik/sleep-logica als de cellen (6px-drempel): vegen pant het diagram, alleen een stilstaande tik opent de kiezer; woord bewerken blijft ongewijzigd
- Tekenbalk op telefoons weer gecentreerd op inhoudsbreedte i.p.v. vastgepind aan beide randen: geminimaliseerd is hij weer smal (121px i.p.v. volle breedte), nog steeds in de eigen laag boven +/borden
- Hardening: een onbekende achtergrond-waarde in opgeslagen borddata crashte de hydrate en logde de gebruiker stilletjes uit bij verversen - valt nu terug op de standaardachtergrond
- Geverifieerd in iPhone-emulatie (8 checks): geen venster na verversen, veeg pant, tik kiest, tekenbalk smal en vrij van +
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0149FgUQvuwxKKEdvQGmNngF
- Nieuwe generieke withBranch-combinator (explorer.js): een tweede adapter
verschijnt als vaste map in de root van de hoofdboom; item-sleutels worden
geprefixt en slepen tussen de takken wordt geweigerd (ander soort inhoud)
- De borden-verkenner (📁 in de menubalk) toont nu "⚓ Ankerdiagrammen" met
daarin de eigen diagrammappen én de gedeelde 🌐/🏫-takken voor ankers -
borden en ankerwoorden op één plek, met dezelfde regels (slepen, kopiëren,
alleen-lezen, één-klik-mappen)
- Diagram openen vanuit de hoofdverkenner plaatst een nieuw ankerwidget op
het huidige bord met dat diagram geladen; het 🗂-knopje op een widget
blijft in dát widget laden (adapter naar module-niveau getild met een
onOpen-parameter, gedeeld door beide ingangen)
- withSharedBranches (explorer.js): wikkelt een eigen-inhoud-adapter en
voegt in de root de vaste takken "🌐 Systeem" (systeembreed) en
"🏫 School" (binnen de eigen school) toe
- Slepen tussen bomen = kopiëren: eigen bord/diagram of hele map naar een
gedeelde tak publiceert (POST /shared, kopie - origineel blijft); gedeeld
item of map naar de eigen boom kopieert (borden krijgen nieuw id + verse
wids); binnen een tak is slepen echt verplaatsen (PATCH, server bewaakt)
- Dubbelklik op een gedeeld bord kopieert en opent het; op een gedeeld
ankerdiagram laadt het in het widget
- Verkenner ondersteunt nu async adapters (init/mutaties), groene
ok-meldingen ("Gedeeld ✓"/"Gekopieerd ✓") en een eigenaar-hint per tegel
- Gasten en leerlingen zien alleen de eigen boom
- Nieuwe ankerbibliotheek ANCHOR_LIB, opgeslagen in een eigen data-sectie
"anchors" (server-whitelist + 5MB-cap; lijst i.p.v. object toegestaan);
reist mee in de volledige save, hydrate, gastreset en reservekopie-herstel
- Ankerwidget: 💾 bewaart het huidige diagram (naam = middelwoord, met
✓-feedback; leeg diagram wordt geweigerd met een hint), 🗂 opent dezelfde
Windows-stijl mappenverkenner met de bewaarde diagrammen (geneste mappen,
slepen, hernoemen, verwijderen)
- Dubbelklik op een bewaard diagram laadt het in het widget (cellen +
plaatjes, thema-spiegel en bord-autosave volgen automatisch)
- Nieuwe servertest: anchors-sectie accepteert een lijst, andere secties
weigeren die (en andersom)
- 🗂-knop in de woorden-editor opent de Windows-stijl verkenner met de
thema's van de actieve taal (★-tegels met woordaantal); dubbelklik
selecteert het thema in de editor
- Geneste mappen via het folder-veld als pad; nieuwe lege mappen bestaan
sessie-lokaal tot er een thema in wordt gezet (mappen zijn afgeleid van
de themavelden)
- Ankerthema's staan vast in de map "⚓": niet versleepbaar, hernoemen/
verwijderen geweigerd (anchor.js beheert ze)
- Het 📁-knopje + inline map-invoer uit v0.3.21 zijn vervangen door de
verkenner; de optgroup-weergave in de dropdowns blijft en toont het pad
- Thema's krijgen een optioneel folder-veld; de theme-dropdown in de
woorden-editor en de kaart-dropdowns in de widgets (fillWordSourceSel)
groeperen per map met optgroups, mapl0ze thema's bovenaan
- Nieuw 📁-knopje in de editor zet het gekozen thema in een map (leeg veld
haalt het eruit); zichtbaarheid volgt de themakeuze
- Ankerthema's komen automatisch in de vaste map "⚓" (id-koppeling met de
ankerwidget blijft onaangeroerd)
- Nieuwe i18n-teksten themeFolder/themeFolderPh (nl/en)
- board.js: fix bug waarbij de opts-parameter (readonly e.d.) nooit bij
mountMath aankwam, doordat de registry-wrapper hem liet vallen
- math.js/letters.js/ball.js: nieuwe opts.onProgress-callback, aangeroepen
bij resp. einde rekenronde, voltooid woord en geknapte ballon
- pupil.js: geeft onProgress mee bij het mounten en post het naar
/my/progress; alleen actief in leerling-speelmodus, niet bij bewerken
- voeg acht educatieve en klaswidgets toe\n- verbeter galerij met zoeken, favorieten en lessjablonen\n- voeg dupliceren, vergrendelen en voorbeeldweergave toe\n- voeg geschiedenis en begrensde bordexport/import toe\n- verbeter responsiviteit, toegankelijkheid en vertalingen
- Nieuwe tabel `assignments`: een leerkracht koppelt één van haar eigen
borden aan een klas (standaard) of een individuele leerling (uitzondering,
voor wie op een ander niveau werkt).
- Geen momentopname: /my/assignment zoekt het bord live op bij de
leerkracht, dus nieuwe woorden die zij toevoegt komen vanzelf door zodra
de leerling-pagina opnieuw pollt (elke 20s).
- Leerlingen loggen in op een vereenvoudigde pagina zonder whiteboard/
tekengereedschap: enkel de toegewezen taal-/rekenwidgets, als vaste
(niet-sleepbare) kaarten in speelmodus.
- Speelmodus verbergt bewerkfuncties in Ankerwoorden (plaatje kiezen,
woord typen, kleur wijzigen) en Letterblokken (thema/woordbeheer) -
overige widgets waren al zuiver speelgericht.
- Elk bord krijgt een stabiel id (board.js) zodat een toewijzing een bord
blijft vinden ook na hernoemen of herordenen.
- Nieuw tabblad "Toewijzingen" in het beheerpaneel: per klas of leerling
een eigen bord kiezen, met een expliciete toewijs-stap.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DuxHJtk5aHe2pA3xwCLEAk
- Lengte-check voor ankerwoorden was strenger dan het invoerveld zelf toestond ({2,12} vs maxLength 24): woorden als "kledingwinkel" werden nooit opgezocht terwijl ARASAAC er prima plaatjes voor heeft
- Geen ankersymbool meer als terugval wanneer ARASAAC geen match heeft (bv. "contant"); de cel blijft leeg en is klikbaar als snelkoppeling naar een nieuwe, herbruikbare plaatjeskiezer (nieuw: public/js/picker.js, hergebruikt dezelfde emoji-lijst/ARASAAC-zoekfunctie/CSS als de bestaande woordkaart-editor)
- Elk ankerraster synchroniseert zijn woorden-met-plaatje voortaan naar een eigen thema in THEMES, zodat ankerwoorden ook beheerbaar zijn via de bestaande woordkaart-editor (Letterblokken-widget) - geen wijziging aan letters.js nodig, het bestaande thema-systeem pakt dit vanzelf op
- Oudere borden met het letterlijke ankersymbool als opgeslagen "plaatje" migreren automatisch naar de nieuwe lege staat
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- De automatische ARASAAC-plaatjes (sinds v0.2.06-beta) werden alleen doorgegeven aan andere widgets (Hak/Flits/Bal/Woordkaart) als woordbron, maar nooit getoond in het Ankerwoorden-raster zelf - vandaar dat het leek te ontbreken, voor zowel bestaande als nieuwe woorden
- render() tekent nu een klein plaatje naast elk woord in de cel, met een render()-aanroep zodra een opgehaald plaatje binnenkomt
- Getest tegen de echte ARASAAC-API: bestaande woorden (uit een opgeslagen bord) tonen hun plaatje meteen bij het laden, nieuwe woorden tonen eerst het ankersymbool en daarna het echte plaatje zodra dat binnenkomt
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Ankerwoorden-widget: elk toegevoegd, gewijzigd of verwijderd woord wordt nu automatisch (na korte debounce) opgeslagen naar de server, net als bij de woordkaart-editor
- persistWords(): ververst eerst de bordstatus (stashCurrent) voordat er opgeslagen wordt, zodat ook de bestaande woordkaart-autosave geen verouderde bordstatus meer verstuurt
- Zonder deze fix gingen getypte ankerwoorden verloren bij herladen/opnieuw inloggen zonder expliciet op "Bord opslaan" te klikken, en verschenen ze daardoor ook niet in andere widgets na een reload
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- Ankerwoorden-widget: elk woord krijgt nu automatisch een passend plaatje via de ARASAAC-pictogrammendienst, in plaats van steeds hetzelfde ankersymbool
- Plaatjes worden per woord gecachet en bewaard in de bordstatus, zodat ze niet steeds opnieuw opgehaald worden
- Bij geen resultaat of een netwerkfout valt de widget terug op het ankersymbool
- ARASAAC-opzoekfunctie hergebruikt vanuit de bestaande woordkaart-editor (geen dubbele code meer)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- ball.js/flits.js/hak.js: S.card bewaart de geselecteerde bronwaarde nu altijd als string i.p.v. te casten naar number, zodat de bronselectie correct blijft werken
- AGENTS.md en CLAUDE.md toegevoegd met projectafspraken
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>