Changeset ddecd9a in Klonkt for src/assets/js


Ignore:
Timestamp:
06/14/2026 10:17:23 PM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
102d2f0
Parents:
a1c8cb8
Message:

feat: audio player three layouts — desktop mini-only, tablet/auto full-player

  • Desktop (>=1200px): NO full player anymore; the expand trigger opens nothing (JS guard) and doesn't look clickable. Mini player only.
  • Tablet/auto (768-1199px): new large, full-screen, button-friendly full-player variant (large cover + large controls) for tablets + tablet-in-the-car. Opens on tap and auto-opens on a fresh queue.
  • Phone (<768px): unchanged fullscreen sheet (breakpoint 720->768).
  • Cache busters: audio-player.js v9->v10, audio.css (new) v2.

Note: real Android Auto requires a native app; this is the web tablet/car variant.

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

File:
1 edited

Legend:

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

    ra1c8cb8 rddecd9a  
    327327  // (@media max-width:719.98px). On wider/desktop widths the sheet is a centered
    328328  // panel, so we do NOT auto-open it there.
    329   function isMobileView() {
    330     return window.matchMedia('(max-width: 719.98px)').matches;
    331   }
     329  // Drie weergaves (Robin 2026-06-15): telefoon (<768) = fullscreen sheet;
     330  // tablet/auto (768–1199) = grote landscape full-player (tablet + tablet-in-de-
     331  // auto); desktop (≥1200) = alleen mini-speler, GEEN full player. matchMedia
     332  // zodat dit exact de CSS-breekpunten volgt.
     333  function playerTier() {
     334    if (window.matchMedia('(min-width: 1200px)').matches) return 'desktop';
     335    if (window.matchMedia('(min-width: 768px)').matches) return 'tablet';
     336    return 'phone';
     337  }
     338  function hasFullPlayer() { return playerTier() !== 'desktop'; }
     339  function isMobileView() { return playerTier() === 'phone'; }
    332340
    333341  function setQueue(tracks, startIdx, opts) {
     
    341349    // niet bij next/prev of de site-pre-seed — zodat een sheet die de gebruiker
    342350    // bewust sloot niet vanzelf terugkomt.
    343     if (isMobileView()) openSheet();
     351    if (hasFullPlayer()) openSheet();
    344352  }
    345353
     
    502510
    503511  function openSheet() {
     512    if (!hasFullPlayer()) return; // desktop (≥1200): geen full player, alleen mini-speler
    504513    if (sheet.classList.contains('is-open')) return;
    505514    sheet.classList.add('is-open');
    506515    sheet.setAttribute('aria-hidden', 'false');
    507516    document.body.classList.add('audio-sheet-locked');
    508     if (isMobileView()) {
    509       try { history.pushState({ pcmsSheet: true }, ''); sheetHistoryPushed = true; } catch (e) {}
    510     }
     517    // Telefoon + tablet: history-entry zodat de terug-knop eerst de sheet sluit.
     518    try { history.pushState({ pcmsSheet: true }, ''); sheetHistoryPushed = true; } catch (e) {}
    511519  }
    512520  function closeSheet(fromPopstate) {
     
    532540  document.addEventListener('keydown', (e) => {
    533541    if (e.key === 'Escape' && sheet.classList.contains('is-open')) closeSheet();
     542  });
     543  // Naar desktop-breedte (≥1200) gesleept terwijl de full player open is? Sluiten —
     544  // op desktop bestaat de full player niet.
     545  window.addEventListener('resize', () => {
     546    if (!hasFullPlayer() && sheet.classList.contains('is-open')) closeSheet();
    534547  });
    535548
Note: See TracChangeset for help on using the changeset viewer.