Changeset 4b5db37 in Klonkt for src/assets/js/mod/admin-audio.js


Ignore:
Timestamp:
08/07/2026 06:33:54 PM (5 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
da84110
Parents:
c1df3e9
git-author:
Robin <roboburr@…> (08/07/2026 06:33:41 PM)
git-committer:
Robin <roboburr@…> (08/07/2026 06:33:54 PM)
Message:

Modules herstarten per paginawissel: de editor leeft weer na een terugkeer (shaer-5s1)

Drie klachten, een wortel. De oude inline scripts draaiden bij ELKE render;
een ES-module draait zijn top-level EEN keer per sessie, en de bootstrap
importeert een geladen module nooit opnieuw. Dus:

  • /posts/new na een htmx-terugkeer: geen toolbar, geen serialisatie -- het verborgen veld kreeg de chips nooit terug (shortcodes 'opgegeten')
  • /admin/audio na een terugkeer: de eigen kopieerhandler dood, en de klik viel door naar de GEDELEGEERDE handler van admin-media, die voor mediapaden terecht location.origin voorplakt -- vandaar https://site[[track:uuid]] op het klembord

De afspraak is nu: een module die per render moet draaien exporteert init(),
en de bootstrap roept die aan bij elke wissel waarop de module actief is.
Modules zonder init houden hun oude gedrag. Listeners op document/window
overleven de swap met closures naar dode elementen; makeSweeper in lib.js
veegt bij elke init de vorige lichting weg. Gedelegeerde handlers die
bewust blijven leven (media/videos) krijgen een paginawacht, want data-copy
betekent daar een PAD en elders een shortcode.

Omgezet: post-edit, admin-audio, admin-playlists. Bewaakt: admin-media,
admin-videos. playlist-editor en track-editor waren al swap-bestendig
(globale functie, gedelegeerd met eigen guards).

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/mod/admin-audio.js

    rc1df3e9 r4b5db37  
    55// link BINNEN de site binnenkomt (shaer-0i6).
    66
    7 import { pageData } from './lib.js';
    8 
    9   const T = pageData();
     7import { pageData, makeSweeper } from './lib.js';
     8
     9// Zie post-edit.js: init() per paginawissel, de veger haalt de window-
     10// listeners van de vorige lichting weg (shaer-5s1).
     11const doc = makeSweeper();
     12let T = {};
     13
     14export function init() {
     15  doc.sweep();
     16  T = pageData();
     17  run();
     18}
     19
     20function run() {
    1021
    1122(function() {
     
    197208  // explicitly handles them.
    198209  ['dragover', 'drop'].forEach(ev => {
    199     window.addEventListener(ev, e => {
     210    doc.on(window, ev, e => {
    200211      // Allow drops INSIDE the dropzone — its own listener handles those.
    201212      if (dropzone.contains(e.target)) return;
     
    441452  });
    442453})();
     454}
Note: See TracChangeset for help on using the changeset viewer.