3 changed files with 139 additions and 20 deletions
@ -0,0 +1,75 @@
|
||||
(function (Drupal, once) { |
||||
|
||||
async function getAudioSourceFromNode(url) { |
||||
const res = await fetch(url, { |
||||
headers: { 'X-Requested-With': 'XMLHttpRequest' } |
||||
}); |
||||
|
||||
const html = await res.text(); |
||||
const doc = new DOMParser().parseFromString(html, 'text/html'); |
||||
|
||||
const source = doc.querySelector( |
||||
'audio[data-able-player] source[type="audio/mpeg"]' |
||||
); |
||||
|
||||
const title = |
||||
doc.querySelector( |
||||
'h1.title.page-title span[property="dcterms:title"]' |
||||
)?.textContent.trim() |
||||
|| |
||||
doc.querySelector('meta[property="og:title"]')?.content |
||||
|| |
||||
doc.querySelector('title')?.textContent |
||||
|| |
||||
''; |
||||
|
||||
return { src: source?.src, title }; |
||||
} |
||||
|
||||
function playAbleAudio(src) { |
||||
const audio = document.getElementById('global-able-player'); |
||||
if (!audio) return; |
||||
|
||||
const source = audio.querySelector('source'); |
||||
source.src = src; |
||||
|
||||
audio.load(); |
||||
|
||||
if (audio.ablePlayer) { |
||||
audio.ablePlayer.refreshControls(); |
||||
audio.ablePlayer.playMedia(); |
||||
} else { |
||||
audio.play(); |
||||
} |
||||
|
||||
document.getElementById('global-audio-wrapper') |
||||
?.classList.remove('is-hidden'); |
||||
} |
||||
|
||||
Drupal.behaviors.ablePlayerRemoteLoad = { |
||||
attach(context) { |
||||
once('able-player-fetch', '.js-play-audio-from-node', context) |
||||
.forEach(link => { |
||||
|
||||
link.addEventListener('click', async e => { |
||||
e.preventDefault(); |
||||
|
||||
const { src, title } = await getAudioSourceFromNode(link.href); |
||||
|
||||
if (!src) { |
||||
console.warn('No Able Player audio found on page'); |
||||
return; |
||||
} |
||||
|
||||
playAbleAudio(src); |
||||
|
||||
const titleEl = document.getElementById('global-audio-title'); |
||||
if (titleEl && title) { |
||||
titleEl.textContent = title; |
||||
} |
||||
}); |
||||
}); |
||||
} |
||||
}; |
||||
|
||||
})(Drupal, once); |
||||
Loading…
Reference in new issue