@@ -115,13 +115,16 @@ <h1 class="main-title">David KRK</h1>
115115 </ div >
116116
117117
118- <!-- Slider "player‑widget" (optionnel) -->
119- < section class ="mt-8 mb-8 player-container ">
120- < iframe title ="Mixcloud player " width ="100% " height ="120 "
121- loading ="lazy "
122- style ="border:0; "
123- src ="https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&hide_artwork=1&feed=%2FDavidKRK%2Fdavid-krk-life-good-techno-ep3%2F "
124- allow ="autoplay; encrypted-media; fullscreen; idle-detection; speaker-selection; web-share "> </ iframe >
118+ < section class ="player-load-wrapper " aria-labelledby ="mixcloud-player-trigger ">
119+ < button type ="button " id ="mixcloud-player-trigger " class ="player-load-btn " aria-controls ="mixcloud-player-container " aria-expanded ="false " aria-describedby ="mixcloud-player-note ">
120+ Charger le lecteur Mixcloud
121+ </ button >
122+ < p id ="mixcloud-player-note " class ="player-load-note "> Le lecteur externe se charge à la demande pour accélérer l’affichage de la page.</ p >
123+ < p id ="mixcloud-player-status " class ="visually-hidden " role ="status " aria-live ="polite "> </ p >
124+ < div id ="mixcloud-player-container " class ="player-container " hidden > </ div >
125+ < noscript >
126+ < p class ="player-load-note "> < a href ="https://www.mixcloud.com/DavidKRK/ " target ="_blank " rel ="noopener noreferrer "> Listen on Mixcloud</ a > </ p >
127+ </ noscript >
125128 </ section >
126129 </ main >
127130
@@ -154,8 +157,85 @@ <h1 class="main-title">David KRK</h1>
154157
155158 < script >
156159 document . addEventListener ( 'DOMContentLoaded' , ( ) => {
160+ const mixcloudPlayerTrigger = document . getElementById ( 'mixcloud-player-trigger' ) ;
161+ const mixcloudPlayerNote = document . getElementById ( 'mixcloud-player-note' ) ;
162+ const mixcloudPlayerStatus = document . getElementById ( 'mixcloud-player-status' ) ;
163+ const mixcloudPlayerContainer = document . getElementById ( 'mixcloud-player-container' ) ;
157164 const langBtns = document . querySelectorAll ( '.language-btn' ) ;
158165 const langContents = document . querySelectorAll ( '.lang-content' ) ;
166+ let mixcloudPlayerLoaded = false ;
167+
168+ const langContent = {
169+ fr : {
170+ player_button : 'Charger le lecteur Mixcloud' ,
171+ player_loaded : 'Lecteur Mixcloud chargé' ,
172+ player_note : 'Le lecteur externe se charge à la demande pour accélérer l’affichage de la page.' ,
173+ player_status : 'Le lecteur Mixcloud est maintenant chargé.'
174+ } ,
175+ en : {
176+ player_button : 'Load Mixcloud player' ,
177+ player_loaded : 'Mixcloud player loaded' ,
178+ player_note : 'The external player loads on demand to speed up page rendering.' ,
179+ player_status : 'The Mixcloud player is now loaded.'
180+ } ,
181+ es : {
182+ player_button : 'Cargar el reproductor de Mixcloud' ,
183+ player_loaded : 'Reproductor de Mixcloud cargado' ,
184+ player_note : 'El reproductor externo se carga bajo demanda para acelerar la visualización de la página.' ,
185+ player_status : 'El reproductor de Mixcloud ya está cargado.'
186+ } ,
187+ eu : {
188+ player_button : 'Kargatu Mixcloud erreproduzitzailea' ,
189+ player_loaded : 'Mixcloud erreproduzitzailea kargatuta' ,
190+ player_note : 'Kanpoko erreproduzitzailea eskatu ahala kargatzen da orria azkarrago erakusteko.' ,
191+ player_status : 'Mixcloud erreproduzitzailea kargatuta dago orain.'
192+ } ,
193+ ar : {
194+ player_button : 'تحميل مشغل Mixcloud' ,
195+ player_loaded : 'تم تحميل مشغل Mixcloud' ,
196+ player_note : 'يتم تحميل المشغل الخارجي عند الطلب لتسريع عرض الصفحة.' ,
197+ player_status : 'تم الآن تحميل مشغل Mixcloud.'
198+ } ,
199+ uk : {
200+ player_button : 'Завантажити плеєр Mixcloud' ,
201+ player_loaded : 'Плеєр Mixcloud завантажено' ,
202+ player_note : 'Зовнішній плеєр завантажується на вимогу, щоб пришвидшити показ сторінки.' ,
203+ player_status : 'Плеєр Mixcloud тепер завантажено.'
204+ }
205+ } ;
206+
207+ function loadMixcloudPlayer ( ) {
208+ if ( mixcloudPlayerLoaded || ! mixcloudPlayerTrigger || ! mixcloudPlayerContainer ) {
209+ return ;
210+ }
211+
212+ const t = langContent [ document . documentElement . lang ] || langContent . fr ;
213+
214+ mixcloudPlayerLoaded = true ;
215+ mixcloudPlayerContainer . hidden = false ;
216+
217+ const iframe = document . createElement ( 'iframe' ) ;
218+ iframe . title = 'Mixcloud player' ;
219+ iframe . width = '100%' ;
220+ iframe . height = '120' ;
221+ iframe . style . border = '0' ;
222+ iframe . src = 'https://player-widget.mixcloud.com/widget/iframe/?hide_cover=1&hide_artwork=1&feed=%2FDavidKRK%2Fdavid-krk-life-good-techno-ep3%2F' ;
223+ iframe . allow = 'autoplay; encrypted-media; fullscreen; idle-detection; speaker-selection; web-share' ;
224+
225+ mixcloudPlayerContainer . appendChild ( iframe ) ;
226+
227+ mixcloudPlayerTrigger . setAttribute ( 'aria-expanded' , 'true' ) ;
228+ mixcloudPlayerTrigger . disabled = true ;
229+ mixcloudPlayerTrigger . textContent = t . player_loaded ;
230+ mixcloudPlayerTrigger . setAttribute ( 'aria-label' , t . player_loaded ) ;
231+ if ( mixcloudPlayerStatus ) {
232+ mixcloudPlayerStatus . textContent = t . player_status ;
233+ }
234+ }
235+
236+ if ( mixcloudPlayerTrigger ) {
237+ mixcloudPlayerTrigger . addEventListener ( 'click' , loadMixcloudPlayer ) ;
238+ }
159239
160240 function switchLanguage ( lang ) {
161241 langContents . forEach ( content => {
@@ -178,6 +258,15 @@ <h1 class="main-title">David KRK</h1>
178258 // Update document language and text direction for accessibility and RTL support
179259 document . documentElement . lang = lang ;
180260 document . documentElement . dir = ( lang === 'ar' ) ? 'rtl' : 'ltr' ;
261+
262+ const t = langContent [ lang ] || langContent . fr ;
263+ if ( mixcloudPlayerTrigger ) {
264+ const playerLabel = mixcloudPlayerLoaded ? t . player_loaded : t . player_button ;
265+ mixcloudPlayerTrigger . textContent = playerLabel ;
266+ mixcloudPlayerTrigger . setAttribute ( 'aria-label' , playerLabel ) ;
267+ }
268+ if ( mixcloudPlayerNote ) mixcloudPlayerNote . textContent = t . player_note ;
269+ if ( mixcloudPlayerStatus ) mixcloudPlayerStatus . textContent = mixcloudPlayerLoaded ? t . player_status : '' ;
181270 }
182271
183272 langBtns . forEach ( btn => {
0 commit comments