Changeset a8364ee in Klonkt for src/assets/js/mod/news.js


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@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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(); });
Note: See TracChangeset for help on using the changeset viewer.