Changeset a8364ee in Klonkt


Ignore:
Timestamp:
08/07/2026 06:47:45 PM (5 weeks ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
3ca7bdf, a39c9bd
Parents:
da84110
git-author:
Robin <roboburr@…> (08/07/2026 06:47:02 PM)
git-committer:
Robin <roboburr@…> (08/07/2026 06:47:45 PM)
Message:

Alle element-bedrade modules herstarten per paginawissel (shaer-5s1, vervolg)

Het recept van 4b5db37, toegepast op de rest van de familie. Twaalf modules
exporteren nu init(): download (de auto-start liep alleen bij import, dus na
een htmx-bezoek startte er niets), auth-register, admin-settings, admin-epk,
admin-paid, admin-help, admin-push, admin-site-edit, authorize-interaction,
paid-gate, paid-passkey en news.

Twee verdienen een woord:

authorize-interaction blok 1 bedraadde een element achter een WINDOW-vlag:

na een swap is de knop een nieuw element en
blokkeerde de vlag het herbedraden voorgoed. De vlag
zit nu op het element zelf.

news de gif- en lees-meer-scanners claimden in hun

commentaar per render te draaien, maar deden dat als
module niet meer. Ze zijn nu benoemde functies:
init() draait ze per navigatie, en een gedelegeerde
htmx:afterSettle draait ze ook na feed-paginering --
binnengehaalde items kregen anders geen lees-meer en
geen gif-gedrag.

Bewust ONaangeraakt, met reden: chrome (gedelegeerd, en de profile-sheet
staat BUITEN de geswapte #pcms-chrome dus zijn element-referenties blijven
geldig), post en messages (gedelegeerd; messages herstart zichzelf al via
pcmsNav), track-editor en playlist-editor (gedelegeerd / globale functie).

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

Location:
src/assets/js/mod
Files:
12 edited

Legend:

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

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015(function () {
    1116  var box = document.querySelector('.epk-track-pick');
     
    2025  sync();
    2126})();
     27}
  • src/assets/js/mod/admin-help.js

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015(function () {
    1116  var q = document.getElementById('hb-q');
     
    2934  q.addEventListener('input', run);
    3035})();
     36}
  • src/assets/js/mod/admin-paid.js

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015(function () {
    1116  var field = document.getElementById('pd-redirect');
     
    2025  });
    2126})();
     27}
  • src/assets/js/mod/admin-push.js

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015(function () {
    1116  var cfg = JSON.parse(document.getElementById('np-data').textContent);
     
    109114  });
    110115})();
     116}
  • src/assets/js/mod/admin-settings.js

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015    (function () {
    1116      var f = document.getElementById('mode-form');
     
    1823      });
    1924    })();
    20    
     25}
  • src/assets/js/mod/admin-site-edit.js

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015    (function(){
    1116      if (window.__themePreviewWired) return; window.__themePreviewWired = true;
     
    129134  }
    130135})();
     136}
  • src/assets/js/mod/auth-register.js

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015(function () {
    1116  var u = document.getElementById('setup-username'), out = document.getElementById('setup-handle');
     
    1823  upd();
    1924})();
     25}
  • src/assets/js/mod/authorize-interaction.js

    rda84110 ra8364ee  
    88// er nu staat) en tegen een tweede aanroep te kunnen.
    99
     10// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     11// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     12export function init() { run(); }
     13
     14function run() {
    1015    (function () {
    11       if (window.__fediBmWired) return; window.__fediBmWired = true;
    12       var a = document.getElementById('fedi-bm-btn'); if (!a) return;
     16      // Element-vlag, geen window-vlag: na een swap is de knop een NIEUW element
     17      // en moet hij opnieuw bedraad; een window-vlag zou dat voorgoed blokkeren.
     18      var a = document.getElementById('fedi-bm-btn'); if (!a || a.__wired) return; a.__wired = true;
    1319      a.setAttribute('href', "javascript:void(window.open('" + location.origin + "/authorize_interaction?uri='+encodeURIComponent(window.location.href)))");
    1420      a.addEventListener('click', function (e) { e.preventDefault(); a.classList.add('nudge'); setTimeout(function(){ a.classList.remove('nudge'); }, 600); });
     
    6066  });
    6167})();
     68}
  • src/assets/js/mod/download.js

    rda84110 ra8364ee  
    77import { pageData } from './lib.js';
    88
     9// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     10// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     11export function init() { run(); }
     12
     13function run() {
    914        // Auto-start de download (zelfde-origin attachment-link).
    1015        setTimeout(function(){ try { window.location.href = (pageData().fileUrl || ''); } catch(e){} }, 600);
    11      
     16}
  • src/assets/js/mod/news.js

    rda84110 ra8364ee  
    66
    77import { pageData } from './lib.js';
     8
     9// De twee gedelegeerde blokken dragen een window-vlag en zijn bij een tweede
     10// init een no-op; de twee SCANNERS (gif-video's, lees-meer) moeten juist wel
     11// elke render opnieuw over de verse elementen lopen (shaer-5s1). Element-
     12// vlaggen (data-gif-wired, data-rm) houden dubbel bedraden tegen.
     13export function init() { run(); }
     14
     15function run() {
    816
    917  (function () {
     
    7785/* Short feed videos (gif/cover loops like an animated cover) autoplay + loop muted like a GIF;
    7886   longer real videos keep their controls. Decided on the actual duration once metadata loads. */
    79 (function(){
    80   document.querySelectorAll('.tl-media-video').forEach(function(v){
    81     if (v.dataset.gifWired) return; v.dataset.gifWired = '1';
    82     var decide = function(){
    83       if (v.duration && v.duration <= 30) {
    84         v.removeAttribute('controls'); v.loop = true; v.muted = true; v.play().catch(function(){});
    85       }
    86     };
    87     if (v.readyState >= 1) decide(); else v.addEventListener('loadedmetadata', decide, { once: true });
    88   });
    89 })();
     87wireGifVideos();
    9088
    9189/* Like/Boost toggle in place — POST via fetch, flip the button, stay on the page (no reload, no banner). */
     
    113111// actually overflows. Runs on every /news render (full load + htmx swap); a per-element flag
    114112// prevents double-wiring.
    115 (function(){
     113wireReadMore();
     114}
     115
     116/* Short feed videos: zie de opmerking bij de aanroep in run(). */
     117function wireGifVideos(){
     118  document.querySelectorAll('.tl-media-video').forEach(function(v){
     119    if (v.dataset.gifWired) return; v.dataset.gifWired = '1';
     120    var decide = function(){
     121      if (v.duration && v.duration <= 30) {
     122        v.removeAttribute('controls'); v.loop = true; v.muted = true; v.play().catch(function(){});
     123      }
     124    };
     125    if (v.readyState >= 1) decide(); else v.addEventListener('loadedmetadata', decide, { once: true });
     126  });
     127}
     128
     129function wireReadMore(){
    116130  var _d = pageData(); var RM = _d.readMore || 'Lees meer', SL = _d.showLess || 'Toon minder';
    117131  document.querySelectorAll('.tl-content:not(.nsfw-media):not([data-rm])').forEach(function(c){
     
    127141    }
    128142  });
    129 })();
     143}
     144
     145// Paginering: items die de feed later binnenhaalt zouden de scanners missen --
     146// init() draait per NAVIGATIE, en een pagineer-swap is er geen. Een keer,
     147// gedelegeerd; op andere pagina's vinden de scanners niets en doen ze niets.
     148document.body.addEventListener('htmx:afterSettle', function () { wireGifVideos(); wireReadMore(); });
  • src/assets/js/mod/paid-gate.js

    rda84110 ra8364ee  
    77import { pageData } from './lib.js';
    88
     9// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     10// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     11export function init() { run(); }
     12
     13function run() {
    914(function () {
    1015  var _d = pageData();
     
    6065  });
    6166})();
     67}
  • src/assets/js/mod/paid-passkey.js

    rda84110 ra8364ee  
    77import { pageData } from './lib.js';
    88
     9// Element-bedrading leeft zo lang als de pagina; de bootstrap roept init()
     10// aan bij elke paginawissel waarop deze module actief is (shaer-5s1).
     11export function init() { run(); }
     12
     13function run() {
    914(function () {
    1015  var _d = pageData();
     
    4045  });
    4146})();
     47}
Note: See TracChangeset for help on using the changeset viewer.