2022-01-01 19:14:57 +00:00
const video = document . getElementById ( 'video' )
const item _title = document . getElementById ( 'item_title' )
const audio = document . getElementById ( 'audio' )
const audio _title = document . getElementById ( 'audio_title' )
const modal = document . getElementById ( 'modal' )
2022-01-01 23:06:00 +00:00
const download _button = document . getElementById ( 'download_button' )
// -- HELPERS -- //
const getHash = ( ) => window . location . hash . substring ( 1 )
const getVideoDataById = ( id ) => {
const el = document . getElementById ( id )
if ( el ) {
return el . dataset
}
return false
}
const isModalActive = ( ) => modal . classList . contains ( 'is-active' )
const toggleButton = ( id , force ) => document . getElementById ( id ) ? document . getElementById ( id ) . toggleAttribute ( 'disabled' , force ) : alert ( 'That button does not exist' )
// -- MODAL -- //
const swapData = ( { video _url , video _width , video _height , desc , video _download , music _title , music _url } ) => {
video . src = video _url
video . width = video _width
video . height = video _height
item _title . innerText = desc
download _button . href = video _download
audio _title . innerText = music _title
audio . src = music _url
}
const showModal = ( id ) => {
const dataset = getVideoDataById ( id )
if ( dataset ) {
swapData ( dataset )
2022-01-01 19:14:57 +00:00
modal . classList . toggle ( 'is-active' )
video . play ( )
2022-01-01 23:06:00 +00:00
}
2022-01-01 19:14:57 +00:00
}
const hideModel = ( ) => {
2022-01-01 23:06:00 +00:00
video . pause ( )
audio . pause ( )
video . currentTime = 0
modal . classList . toggle ( 'is-active' )
toggleButton ( 'back-button' , false )
toggleButton ( 'next-button' , false )
history . pushState ( '' , document . title , window . location . pathname + window . location . search )
2022-01-01 19:14:57 +00:00
}
2022-01-01 23:06:00 +00:00
const getPrevOrNext = ( forward ) => {
const hash = getHash ( )
if ( hash ) {
const el = document . getElementById ( hash )
if ( el ) {
if ( forward ) {
return el . parentElement . nextElementSibling ? el . parentElement . nextElementSibling . children [ 0 ] : null
}
return el . parentElement . previousElementSibling ? el . parentElement . previousElementSibling . children [ 0 ] : null
}
}
return null
}
2022-01-01 19:14:57 +00:00
2022-01-01 23:06:00 +00:00
const moveVideo = ( forward ) => {
// Re-enable buttons
toggleButton ( 'back-button' , false )
toggleButton ( 'next-button' , false )
const new _el = getPrevOrNext ( forward )
if ( new _el ) {
window . location . hash = new _el . id
} else {
// Max reached, disable buttons depending on direction
if ( forward ) {
toggleButton ( 'next-button' , true )
} else {
toggleButton ( 'back-button' , true )
}
}
2022-01-01 19:14:57 +00:00
}
2022-01-01 23:06:00 +00:00
// EVENTS //
const hashChange = ( ) => {
if ( window . location . hash ) {
const hash = getHash ( )
if ( hash ) {
// Check first if the modal is already active
if ( isModalActive ( ) ) {
// If it is, get hash video id and swap data
const dataset = getVideoDataById ( hash )
if ( dataset ) {
swapData ( dataset )
video . play ( )
}
} else {
showModal ( hash )
}
}
}
}
document . getElementById ( 'modal-background' ) . addEventListener ( 'click' , hideModel , false )
document . getElementById ( 'modal-close' ) . addEventListener ( 'click' , hideModel , false )
document . getElementById ( 'back-button' ) . addEventListener ( 'click' , ( ) => moveVideo ( false ) )
document . getElementById ( 'next-button' ) . addEventListener ( 'click' , ( ) => moveVideo ( true ) )
window . addEventListener ( 'hashchange' , hashChange , false )
hashChange ( )