summaryrefslogtreecommitdiff
path: root/frontend/site/audio/audio.player.js
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2021-03-17 18:11:26 +0100
committerJules Laplace <julescarbon@gmail.com>2021-03-17 18:11:26 +0100
commitd165a0727e42349d935ab3ee287242f1e5029742 (patch)
treeb4fa68209127efdd4eb46c82eaef280535692611 /frontend/site/audio/audio.player.js
parent92566ba17f5e921d5bff1f3fb4e4b0d92ca4fd39 (diff)
frontend. export/view button. interactivity sanity check
Diffstat (limited to 'frontend/site/audio/audio.player.js')
-rw-r--r--frontend/site/audio/audio.player.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/frontend/site/audio/audio.player.js b/frontend/site/audio/audio.player.js
new file mode 100644
index 0000000..9a2d783
--- /dev/null
+++ b/frontend/site/audio/audio.player.js
@@ -0,0 +1,43 @@
+export default class AudioPlayer {
+ players = {}
+
+ play({ item, restart, loop }) {
+ return new Promise((resolve, reject) => {
+ const { id, url } = item
+ if (id in players) {
+ if (restart) {
+ players[id].currentTime = 0
+ players[id].play()
+ return resolve()
+ }
+ return reject()
+ }
+ const player = document.createElement('audio')
+ const handleEnded = () => {
+ unbind()
+ resolve()
+ }
+ const handleError = (error) => {
+ console.error(error)
+ unbind()
+ reject(error)
+ }
+ const bind = () => {
+ player.addEventListener('ended', handleEnded)
+ player.addEventListener('error', handleError)
+ this.players[id] = player
+ }
+ const unbind = () => {
+ player.removeEventListener('ended', handleEnded)
+ player.removeEventListener('error', handleError)
+ delete this.players[id]
+ }
+ const start = () => {
+ player.src = url
+ player.play()
+ }
+ bind()
+ start()
+ })
+ }
+}