vlitejs
Version:
vLitejs is a fast and lightweight Javascript library for customizing video and audio player in Javascript with a minimalist theme (HTML5, Youtube, Vimeo, Dailymotion)
8 lines (7 loc) • 3.41 kB
JavaScript
/*!
* @license MIT
* @name vlitejs
* @version 7.4.0
* @copyright 2025 Yoriiis
*/
class e{constructor({player:e}){this.providers=["html5"],this.types=["video"],this.player=e,this.airPlayAvailable=window.WebKitPlaybackTargetAvailabilityEvent instanceof Function,this.onWebKitPlaybackTargetAvailabilityChanged=this.onWebKitPlaybackTargetAvailabilityChanged.bind(this),this.onWebKitCurrentPlaybackTargetWirelessChanged=this.onWebKitCurrentPlaybackTargetWirelessChanged.bind(this),this.onClickOnAirPlayButton=this.onClickOnAirPlayButton.bind(this),this.onEnterFullscreen=this.onEnterFullscreen.bind(this),this.onExitFullscreen=this.onExitFullscreen.bind(this)}init(){this.airPlayAvailable&&this.addEvents()}addEvents(){this.render(),this.airPlayButton=this.player.elements.container.querySelector(".v-airPlayButton"),!this.player.isFullScreen&&this.addAirPlayEvents(),this.player.media.addEventListener("webkitcurrentplaybacktargetiswirelesschanged",this.onWebKitCurrentPlaybackTargetWirelessChanged),this.airPlayButton.addEventListener("click",this.onClickOnAirPlayButton),this.player.on("enterfullscreen",this.onEnterFullscreen),this.player.on("exitfullscreen",this.onExitFullscreen)}render(){const e=this.player.elements.container.querySelector(".v-controlBar"),t=this.player.elements.container.querySelector(".v-fullscreenButton"),i='<button class="v-airPlayButton v-controlButton" hidden><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M488 32H88C39.47 32 0 71.47 0 120v208c0 48.5 39.47 88 88 88 13.25 0 24-10.75 24-24s-10.7-24-24-24c-22.06 0-40-17.94-40-40V120c0-22.06 17.94-40 40-40h400c22.06 0 40 17.94 40 40v208c0 22.06-17.94 40-40 40-13.25 0-24 10.75-24 24s10.8 24 24 24c48.53 0 88-39.47 88-88V120c0-48.53-39.5-88-88-88zM321.9 286.1c-18.62-18.75-49.13-18.75-67.88 0l-112 112C112 428.2 133.3 480 176 480h223.9c42.63 0 64.25-51.77 33.88-81.9l-111.88-112zM176 431.1l111.1-112 112 112H176z"/></svg></button>';e&&(t?t.insertAdjacentHTML("beforebegin",i):e.insertAdjacentHTML("beforeend",i))}addAirPlayEvents(){this.player.media.addEventListener("webkitplaybacktargetavailabilitychanged",this.onWebKitPlaybackTargetAvailabilityChanged)}removeAirPlayEvents(){this.player.media.removeEventListener("webkitplaybacktargetavailabilitychanged",this.onWebKitPlaybackTargetAvailabilityChanged)}onWebKitPlaybackTargetAvailabilityChanged(e){switch(e.availability){case"available":this.airPlayButton.removeAttribute("hidden");break;case"not-available":this.airPlayButton.setAttribute("hidden","")}}onClickOnAirPlayButton(e){e.preventDefault(),this.player.media.webkitShowPlaybackTargetPicker()}onEnterFullscreen(){this.removeAirPlayEvents()}onExitFullscreen(){this.addAirPlayEvents()}onWebKitCurrentPlaybackTargetWirelessChanged(){this.player.media.webkitCurrentPlaybackTargetIsWireless?(this.player.dispatchEvent("airplaysessionstarted"),this.airPlayButton.classList.add("v-active")):(this.player.dispatchEvent("airplaysessionended"),this.airPlayButton.classList.remove("v-active"),this.player.pause())}destroy(){this.removeAirPlayEvents(),this.player.media.removeEventListener("webkitcurrentplaybacktargetiswirelesschanged",this.onWebKitCurrentPlaybackTargetWirelessChanged),this.airPlayButton.removeEventListener("click",this.onClickOnAirPlayButton),this.player.off("enterfullscreen",this.onEnterFullscreen),this.player.off("exitfullscreen",this.onExitFullscreen)}}export{e as default};