Changeset fa08981 in Klonkt


Ignore:
Timestamp:
06/20/2026 01:52:46 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
8f6225c
Parents:
230e446
Message:

fix(player): scroll-to-track works for site-wide tracks too

Site-wide tracks (PCMS_SITE_TRACKS) were not getting an id → no anchor; and
no postUrl → no jump. Now: id included in the queue; mini-player click uses
postUrl when known, otherwise looks up the post via new endpoint
GET /audio/track/:id/post (newest post with [[track:<id>]]) and jumps +
scrolls to the track. audio-player.js?v=18.

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

Location:
src
Files:
3 edited

Legend:

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

    r230e446 rfa08981  
    592592    const t = queue[currentIndex];
    593593    const isDesktop = window.matchMedia && window.matchMedia('(min-width: 768px)').matches;
    594     if (isDesktop && t && t.postUrl) { goToPost(t.postUrl, t.id); return; }
     594    if (isDesktop && t) {
     595      // 1) Track speelde vanuit een post → die URL kennen we al.
     596      if (t.postUrl) { goToPost(t.postUrl, t.id); return; }
     597      // 2) Site-brede track (geen postUrl) → zoek de post op via de track-id.
     598      if (t.id) {
     599        fetch('/audio/track/' + encodeURIComponent(t.id) + '/post')
     600          .then((r) => (r.ok ? r.json() : null))
     601          .then((d) => { if (d && d.url) goToPost(d.url, t.id); else openSheet(); })
     602          .catch(() => openSheet());
     603        return;
     604      }
     605    }
    595606    openSheet();
    596607  });
     
    831842    if (Array.isArray(window.PCMS_SITE_TRACKS) && window.PCMS_SITE_TRACKS.length) {
    832843      queue = window.PCMS_SITE_TRACKS.map(t => ({
     844        id:     t.id || null,
    833845        url:    t.media_url || t.url,
    834846        title:  t.title  || 'Untitled',
  • src/routes/audio.js

    r230e446 rfa08981  
    141141});
    142142
     143// Welke post bevat deze track? (voor de mini-speler → "spring naar de post +
     144// scroll naar de track".) Pakt de nieuwste gepubliceerde post met [[track:<id>]].
     145router.get('/track/:id/post', (req, res) => {
     146  const id = String(req.params.id || '');
     147  if (!/^[A-Za-z0-9_-]+$/.test(id)) return res.status(400).json({ error: 'bad id' });
     148  const isHub = res.locals.tenancy === 'hub';
     149  const row = db.prepare(`
     150    SELECT p.slug, s.slug AS site_slug
     151    FROM posts p JOIN sites s ON s.id = p.site_id
     152    WHERE p.status = 'published' AND p.content LIKE ?
     153    ORDER BY p.published_at DESC LIMIT 1
     154  `).get('%[[track:' + id + ']]%');
     155  if (!row) return res.status(404).json({ error: 'not found' });
     156  const url = isHub ? `/user/${row.site_slug}/${row.slug}` : `/${row.slug}`;
     157  res.json({ url });
     158});
     159
    143160export default router;
  • src/views/shell.ejs

    r230e446 rfa08981  
    300300     ?v=N — cache-buster: bump bij elke audio-player.js wijziging zodat
    301301     Cloudflare (max-age=1y) niet de oude versie blijft serveren. -->
    302 <script src="/assets/js/audio-player.js?v=17"></script>
     302<script src="/assets/js/audio-player.js?v=18"></script>
    303303<!-- Eigen custom media-embeds (YouTube/SoundCloud/Spotify) via de echte
    304304     player-API's + gedeelde mutual-exclusion registry met de site-speler. -->
Note: See TracChangeset for help on using the changeset viewer.