Changeset 2b52bfb in Klonkt


Ignore:
Timestamp:
06/14/2026 04:07:28 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
89d6536
Parents:
942028f
Message:

audio: mobile — back button closes the now-playing sheet (history pushState/popstate)

On mobile, openSheet pushes a history entry; the phone's back button (popstate)
then closes the sheet first instead of navigating away. UI close (X/swipe/backdrop/
Esc) pops the entry itself via history.back() so the balance stays correct. Gated
on isMobileView() (desktop unchanged). audio-player.js ?v=7 -> ?v=8.

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

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/assets/js/audio-player.js

    r942028f r2b52bfb  
    496496  // 7. Sheet expand/close + drag-down-to-close
    497497  // ============================================================
     498  // Back-knop sluit de sheet op mobiel: bij openen pushen we een history-entry,
     499  // zodat de telefoon-terugknop (popstate) eerst de sheet sluit i.p.v. de pagina
     500  // te verlaten. We balanceren 'm bij een UI-sluiting via history.back().
     501  let sheetHistoryPushed = false;
     502
    498503  function openSheet() {
     504    if (sheet.classList.contains('is-open')) return;
    499505    sheet.classList.add('is-open');
    500506    sheet.setAttribute('aria-hidden', 'false');
    501507    document.body.classList.add('audio-sheet-locked');
    502   }
    503   function closeSheet() {
     508    if (isMobileView()) {
     509      try { history.pushState({ pcmsSheet: true }, ''); sheetHistoryPushed = true; } catch (e) {}
     510    }
     511  }
     512  function closeSheet(fromPopstate) {
     513    if (!sheet.classList.contains('is-open')) return;
    504514    sheet.classList.remove('is-open');
    505515    sheet.setAttribute('aria-hidden', 'true');
     
    507517    sheetPanel.style.removeProperty('--pcms-drag-y');
    508518    sheetBackdrop.style.removeProperty('--pcms-sheet-progress');
    509   }
     519    // UI-sluiting (X / swipe / backdrop / Esc): pop onze eigen history-entry zodat
     520    // de volgende terug-knop weer normaal navigeert. Bij een popstate-sluiting
     521    // (de terug-knop zelf) is de entry al gepopt.
     522    const wasPushed = sheetHistoryPushed;
     523    sheetHistoryPushed = false;
     524    if (wasPushed && !fromPopstate) { try { history.back(); } catch (e) {} }
     525  }
     526  window.addEventListener('popstate', () => {
     527    if (sheet.classList.contains('is-open')) closeSheet(true);
     528  });
    510529  expandTrigger.addEventListener('click', openSheet);
    511   sheetClose.addEventListener('click', closeSheet);
    512   sheetBackdrop.addEventListener('click', closeSheet);
     530  sheetClose.addEventListener('click', () => closeSheet());
     531  sheetBackdrop.addEventListener('click', () => closeSheet());
    513532  document.addEventListener('keydown', (e) => {
    514533    if (e.key === 'Escape' && sheet.classList.contains('is-open')) closeSheet();
  • src/views/shell.ejs

    r942028f r2b52bfb  
    277277     ?v=N — cache-buster: bump bij elke audio-player.js wijziging zodat
    278278     Cloudflare (max-age=1y) niet de oude versie blijft serveren. -->
    279 <script src="/assets/js/audio-player.js?v=7"></script>
     279<script src="/assets/js/audio-player.js?v=8"></script>
    280280<% if (site && site.enable_audio_player && audioTracks && audioTracks.length > 0) { %>
    281281  <script>window.PCMS_SITE_TRACKS = <%- JSON.stringify(audioTracks) %>;</script>
Note: See TracChangeset for help on using the changeset viewer.