Changeset 230e446 in Klonkt
- Timestamp:
- 06/20/2026 01:38:16 AM (3 months ago)
- Branches:
- main
- Children:
- fa08981
- Parents:
- d188736
- Location:
- src
- Files:
-
- 4 edited
-
assets/css/style.css (modified) (1 diff)
-
assets/js/audio-player.js (modified) (1 diff)
-
services/AudioEmbedService.js (modified) (2 diffs)
-
views/shell.ejs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/assets/css/style.css
rd188736 r230e446 2819 2819 border-color: var(--accent, #c2410c); 2820 2820 background: color-mix(in srgb, var(--accent, #c2410c) 5%, var(--paper-2, transparent)); 2821 } 2822 /* Korte highlight wanneer je via de mini-speler naar deze track springt. */ 2823 .post-audio-track.pat-flash { 2824 animation: patFlash 1.6s ease-out; 2825 } 2826 @keyframes patFlash { 2827 0%, 30% { border-color: var(--accent, #c2410c); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent, #c2410c) 35%, transparent); } 2828 100% { box-shadow: 0 0 0 0 transparent; } 2821 2829 } 2822 2830 .post-audio-track .pat-play { -
src/assets/js/audio-player.js
rd188736 r230e446 566 566 // via htmx zodat de audio blijft spelen. Geen post bekend → val terug op de sheet. 567 567 // - MOBIEL: altijd de uitgebreide speler-sheet openen (huidig gedrag). 568 function goToPost(url) { 568 function scrollToTrack(trackId) { 569 if (!trackId) { window.scrollTo(0, 0); return; } 570 const el = document.getElementById('track-' + trackId); 571 if (!el) { window.scrollTo(0, 0); return; } 572 el.scrollIntoView({ block: 'center', behavior: 'smooth' }); 573 el.classList.add('pat-flash'); 574 setTimeout(() => el.classList.remove('pat-flash'), 1600); 575 } 576 function goToPost(url, trackId) { 577 const hash = trackId ? ('#track-' + trackId) : ''; 569 578 if (window.htmx && url.charAt(0) === '/') { 570 579 try { 571 window.htmx.ajax('GET', url, { target: '#pcms-main', swap: 'innerHTML' }); 572 history.pushState({}, '', url); 573 window.scrollTo(0, 0); 580 const p = window.htmx.ajax('GET', url, { target: '#pcms-main', swap: 'innerHTML' }); 581 history.pushState({}, '', url + hash); 582 // Na de swap naar de track scrollen (klein uitstel zodat de globale 583 // afterSwap-top-scroll eerst is geweest); val terug op top als niet gevonden. 584 const go = () => setTimeout(() => scrollToTrack(trackId), 60); 585 if (p && typeof p.then === 'function') p.then(go); else setTimeout(go, 150); 574 586 return; 575 587 } catch (e) { /* val terug op volledige navigatie */ } 576 588 } 577 location.href = url ;589 location.href = url + hash; 578 590 } 579 591 expandTrigger.addEventListener('click', () => { 580 592 const t = queue[currentIndex]; 581 593 const isDesktop = window.matchMedia && window.matchMedia('(min-width: 768px)').matches; 582 if (isDesktop && t && t.postUrl) { goToPost(t.postUrl ); return; }594 if (isDesktop && t && t.postUrl) { goToPost(t.postUrl, t.id); return; } 583 595 openSheet(); 584 596 }); -
src/services/AudioEmbedService.js
rd188736 r230e446 248 248 if (!t || !t.url) return match; 249 249 const trackJson = JSON.stringify({ 250 id, 250 251 url: t.url, 251 252 title: t.title || 'Untitled', … … 258 259 const dataAttr = trackJson 259 260 .replace(/&/g, '&').replace(/'/g, ''').replace(/</g, '<'); 260 return `<div class="post-audio-track" data-pcms-track-url="${urlH}" data-pcms-track='${dataAttr}'> 261 // id="track-<id>" = anker zodat de mini-speler hierheen kan scrollen. 262 return `<div class="post-audio-track" id="track-${id}" data-pcms-track-id="${id}" data-pcms-track-url="${urlH}" data-pcms-track='${dataAttr}'> 261 263 <button type="button" class="pat-play" aria-label="Play ${titleH}"> 262 264 <svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M8 4l12 8-12 8z"/></svg> -
src/views/shell.ejs
rd188736 r230e446 163 163 164 164 <!-- v9 stylesheet (full palette system) --> 165 <link rel="stylesheet" href="/assets/css/style.css?v=1 5">165 <link rel="stylesheet" href="/assets/css/style.css?v=16"> 166 166 167 167 <!-- Audio player styles: loaded on every page so the mini-player works … … 300 300 ?v=N — cache-buster: bump bij elke audio-player.js wijziging zodat 301 301 Cloudflare (max-age=1y) niet de oude versie blijft serveren. --> 302 <script src="/assets/js/audio-player.js?v=1 6"></script>302 <script src="/assets/js/audio-player.js?v=17"></script> 303 303 <!-- Eigen custom media-embeds (YouTube/SoundCloud/Spotify) via de echte 304 304 player-API's + gedeelde mutual-exclusion registry met de site-speler. -->
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)