Changeset 6a2abb1 in Klonkt for src/views/shell.ejs


Ignore:
Timestamp:
06/18/2026 03:06:02 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
98ecf51
Parents:
c50f22e
Message:

Fix: colour leaks on back button in hub (htmx history restore does not fire pcmsNav)

On back/forward htmx only restores #pcms-main; the per-site accent/palette (via
HX-Trigger) and the OOB chrome were not refreshed → the colour of the previous
artist remained. New htmx:historyRestore listener re-fetches the partial and
applies accent/palette (by re-dispatching pcmsNav) + the OOB chrome; #pcms-main
is already restored so it is left alone.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/shell.ejs

    rc50f22e r6a2abb1  
    360360    matched.forEach(function(c) { document.body.classList.add(c); });
    361361  });
     362
     363  // Back/forward: htmx herstelt alleen #pcms-main, maar NIET de OOB-chrome of de
     364  // per-site accent/palette (die komen via de HX-Trigger-header, en een history-
     365  // restore vuurt die niet). Zonder dit blijft de kleur van de vorige artiest
     366  // hangen. We halen de partial opnieuw op en passen alleen die twee toe —
     367  // #pcms-main is al hersteld, dus die laten we met rust.
     368  document.body.addEventListener('htmx:historyRestore', function () {
     369    var url = location.pathname + location.search;
     370    var sep = url.indexOf('?') >= 0 ? '&' : '?';
     371    fetch(url + sep + 'partial=1', { headers: { 'HX-Request': 'true' }, credentials: 'same-origin' })
     372      .then(function (r) {
     373        var trig = r.headers.get('HX-Trigger-After-Settle');
     374        if (trig) {
     375          try {
     376            var nav = JSON.parse(trig).pcmsNav;
     377            if (nav) document.body.dispatchEvent(new CustomEvent('pcmsNav', { detail: nav }));
     378          } catch (e) { /* geen/ongeldige trigger */ }
     379        }
     380        return r.text();
     381      })
     382      .then(function (html) {
     383        try {
     384          var fresh = new DOMParser().parseFromString(html, 'text/html').querySelector('#pcms-chrome');
     385          var cur = document.getElementById('pcms-chrome');
     386          if (fresh && cur) cur.replaceWith(fresh);
     387        } catch (e) { /* chrome-update overslaan */ }
     388      })
     389      .catch(function () { /* netwerkfout: laat staan */ });
     390  });
    362391})();
    363392</script>
Note: See TracChangeset for help on using the changeset viewer.