UNPKG

@directus-labs/video-player-interface

Version:

An interface to select and display a video from YouTube, Vimeo or a local file from Directus

2 lines 155 kB
import{defineInterface as e}from"@directus/extensions-sdk";import{defineComponent as t,ref as i,onMounted as r,watch as n,openBlock as s,createElementBlock as o,createBlock as a,resolveDynamicComponent as l,computed as c,resolveComponent as p,resolveDirective as d,Fragment as u,createVNode as h,unref as m,isRef as g,withCtx as f,createCommentVNode as y,withDirectives as b,withModifiers as v}from"vue";import{useI18n as w}from"vue-i18n"; /*! get-video-id v3.5.3 | @license MIT © Michael Wuergler | https://github.com/radiovisual/get-video-id */function _(e){return e.includes("?")&&(e=e.split("?")[0]),e.includes("/")&&(e=e.split("/")[0]),e.includes("&")&&(e=e.split("&")[0]),e}function x(e){let t=e;t=t.replace("-nocookie",""),t=t.replace(/#t=.*$/,""),t=t.replace(/^https?:\/\//,"");const i=/youtube:\/\/|youtu\.be\/|y2u\.be\//g;if(i.test(t)){return _(t.split(i)[1])}const r=/\/shorts\//g;if(r.test(t))return _(t.split(r)[1]);const n=/v=|vi=/g;if(n.test(t)){return _(t.split(n)[1].split("&")[0])}const s=/\/v\/|\/vi\/|\/watch\//g;if(s.test(t)){return _(t.split(s)[1])}const o=/\/an_webp\//g;if(o.test(t)){return _(t.split(o)[1])}const a=/\/e\//g;if(a.test(t)){return _(t.split(a)[1])}const l=/\/embed\//g;if(l.test(t)){return _(t.split(l)[1])}if(/\/user\/([a-zA-Z\d]*)$/g.test(t))return;if(/\/user\/(?!.*videos)/g.test(t)){return _(t.split("/").pop())}const c=/\/attribution_link\?.*v%3D([^%&]*)(%26|&|$)/;if(c.test(t))return _(t.match(c)[1]);const p=/\/live\//g;if(p.test(t)){return _(t.split(p)[1])}}function k(e){let t,i,r=e;r.includes("#")&&([r]=r.split("#")),r.includes("?")&&!r.includes("clip_id=")&&([r]=r.split("?"));const n=/https?:\/\/vimeo\.com\/event\/(\d+)$/.exec(r);if(n&&n[1])return n[1];const s=/https?:\/\/vimeo\.com\/(\d+)/.exec(r);if(s&&s[1])return s[1];const o=["https?://player.vimeo.com/video/[0-9]+$","https?://vimeo.com/channels","groups","album"].join("|");return new RegExp(o,"gim").test(r)?(i=r.split("/"),i&&i.length>0&&(t=i.pop())):/clip_id=/gim.test(r)&&(i=r.split("clip_id="),i&&i.length>0&&([t]=i[1].split("&"))),t}function T(e){const t=/https:\/\/vine\.co\/v\/([a-zA-Z\d]*)\/?/.exec(e);if(t&&t.length>1)return t[1]}function C(e){let t;if(e.includes("embed"))return t=/embed\/(\w{8})/,e.match(t)[1];t=/\/v\/(\w{8})/;const i=e.match(t);return i&&i.length>0?i[1]:void 0}function A(e){const t=(e.includes("embed")?/https:\/\/web\.microsoftstream\.com\/embed\/video\/([a-zA-Z\d-]*)\/?/:/https:\/\/web\.microsoftstream\.com\/video\/([a-zA-Z\d-]*)\/?/).exec(e);if(t&&t.length>1)return t[1]}function S(e){const t=/tiktok\.com(.*)\/video\/(\d+)/gm.exec(e);if(t&&t.length>2)return t[2]}function E(e){const t=/dailymotion\.com(.*)(video)\/([a-zA-Z\d]+)/gm.exec(e);if(t)return t[3];const i=/dai\.ly\/([a-zA-Z\d]+)/gm.exec(e);if(i&&i.length>1)return i[1];const r=/dailymotion\.com(.*)video=([a-zA-Z\d]+)/gm.exec(e);return r&&r.length>2?r[2]:void 0}function P(e){if("string"!=typeof e)throw new TypeError("sanitizeUrl expected a string, got "+typeof e);let t=e;return/<iframe/gi.test(t)&&(t=function(e){if("string"!=typeof e)throw new TypeError("getSrc expected a string");const t=/src="(.*?)"/gm.exec(e);if(t&&t.length>=2)return t[1]}(t)||""),t=t.trim(),t=t.replace("/www.","/"),t}function M(e){if("string"!=typeof e)throw new TypeError("get-video-id expects a string");const t=function(e){if("string"!=typeof e)throw new TypeError("extractGoogleRedirectionUrl expected a string, got "+typeof e);const t=e.trim();if(/\/\/google|www\.google/.test(t))try{const t=new URL(e),i=new URLSearchParams(t.search).get("url");if(i)return decodeURIComponent(i)}catch{return t}return t}(P(e));let i={id:null,service:null};return/youtube|youtu\.be|y2u\.be|i.ytimg\./.test(t)?i={id:x(t),service:"youtube"}:/vimeo/.test(t)?i={id:k(t),service:"vimeo"}:/vine/.test(t)?i={id:T(t),service:"vine"}:/videopress/.test(t)?i={id:C(t),service:"videopress"}:/microsoftstream/.test(t)?i={id:A(t),service:"microsoftstream"}:/tiktok\.com/.test(t)?i={id:S(t),service:"tiktok"}:/(dailymotion\.com|dai\.ly)/.test(t)&&(i={id:E(t),service:"dailymotion"}),i}"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function N(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var I={exports:{}};"object"==typeof navigator&&(I.exports=function(){function e(e,t,i){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var i=e[Symbol.toPrimitive];if(void 0!==i){var r=i.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function t(e,t){for(var i=0;i<t.length;i++){var r=t[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function i(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,r)}return i}function n(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){i(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var s={addCSS:!0,thumbWidth:15,watch:!0},o=function(e){return null!=e?e.constructor:null},a=function(e,t){return!!(e&&t&&e instanceof t)},l=function(e){return null==e},c=function(e){return o(e)===Object},p=function(e){return o(e)===String},d=function(e){return Array.isArray(e)},u=function(e){return a(e,NodeList)},h={nullOrUndefined:l,object:c,number:function(e){return o(e)===Number&&!Number.isNaN(e)},string:p,boolean:function(e){return o(e)===Boolean},function:function(e){return o(e)===Function},array:d,nodeList:u,element:function(e){return a(e,Element)},event:function(e){return a(e,Event)},empty:function(e){return l(e)||(p(e)||d(e)||u(e))&&!e.length||c(e)&&!Object.keys(e).length}};function m(e,t){if(1>t){var i=function(e){var t="".concat(e).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}(t);return parseFloat(e.toFixed(i))}return Math.round(e/t)*t}var g=function(){function e(t,i){(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")})(this,e),h.element(t)?this.element=t:h.string(t)&&(this.element=document.querySelector(t)),h.element(this.element)&&h.empty(this.element.rangeTouch)&&(this.config=n({},s,{},i),this.init())}return function(e,i,r){i&&t(e.prototype,i),r&&t(e,r)}(e,[{key:"init",value:function(){e.enabled&&(this.config.addCSS&&(this.element.style.userSelect="none",this.element.style.webKitUserSelect="none",this.element.style.touchAction="manipulation"),this.listeners(!0),this.element.rangeTouch=this)}},{key:"destroy",value:function(){e.enabled&&(this.config.addCSS&&(this.element.style.userSelect="",this.element.style.webKitUserSelect="",this.element.style.touchAction=""),this.listeners(!1),this.element.rangeTouch=null)}},{key:"listeners",value:function(e){var t=this,i=e?"addEventListener":"removeEventListener";["touchstart","touchmove","touchend"].forEach((function(e){t.element[i](e,(function(e){return t.set(e)}),!1)}))}},{key:"get",value:function(t){if(!e.enabled||!h.event(t))return null;var i,r=t.target,n=t.changedTouches[0],s=parseFloat(r.getAttribute("min"))||0,o=parseFloat(r.getAttribute("max"))||100,a=parseFloat(r.getAttribute("step"))||1,l=r.getBoundingClientRect(),c=100/l.width*(this.config.thumbWidth/2)/100;return 0>(i=100/l.width*(n.clientX-l.left))?i=0:100<i&&(i=100),50>i?i-=(100-2*i)*c:50<i&&(i+=2*(i-50)*c),s+m(i/100*(o-s),a)}},{key:"set",value:function(t){e.enabled&&h.event(t)&&!t.target.disabled&&(t.preventDefault(),t.target.value=this.get(t),function(e,t){if(e&&t){var i=new Event(t,{bubbles:!0});e.dispatchEvent(i)}}(t.target,"touchend"===t.type?"change":"input"))}}],[{key:"setup",value:function(t){var i=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},r=null;if(h.empty(t)||h.string(t)?r=Array.from(document.querySelectorAll(h.string(t)?t:'input[type="range"]')):h.element(t)?r=[t]:h.nodeList(t)?r=Array.from(t):h.array(t)&&(r=t.filter(h.element)),h.empty(r))return null;var o=n({},s,{},i);if(h.string(t)&&o.watch){var a=new MutationObserver((function(i){Array.from(i).forEach((function(i){Array.from(i.addedNodes).forEach((function(i){h.element(i)&&function(e,t){return function(){return Array.from(document.querySelectorAll(t)).includes(this)}.call(e,t)}(i,t)&&new e(i,o)}))}))}));a.observe(document.body,{childList:!0,subtree:!0})}return r.map((function(t){return new e(t,i)}))}},{key:"enabled",get:function(){return"ontouchstart"in document.documentElement}}]),e}();const f=e=>null!=e?e.constructor:null,y=(e,t)=>Boolean(e&&t&&e instanceof t),b=e=>null==e,v=e=>f(e)===Object,w=e=>f(e)===String,_=e=>"function"==typeof e,x=e=>Array.isArray(e),k=e=>y(e,NodeList),T=e=>b(e)||(w(e)||x(e)||k(e))&&!e.length||v(e)&&!Object.keys(e).length;var C={nullOrUndefined:b,object:v,number:e=>f(e)===Number&&!Number.isNaN(e),string:w,boolean:e=>f(e)===Boolean,function:_,array:x,weakMap:e=>y(e,WeakMap),nodeList:k,element:e=>null!==e&&"object"==typeof e&&1===e.nodeType&&"object"==typeof e.style&&"object"==typeof e.ownerDocument,textNode:e=>f(e)===Text,event:e=>y(e,Event),keyboardEvent:e=>y(e,KeyboardEvent),cue:e=>y(e,window.TextTrackCue)||y(e,window.VTTCue),track:e=>y(e,TextTrack)||!b(e)&&w(e.kind),promise:e=>y(e,Promise)&&_(e.then),url:e=>{if(y(e,window.URL))return!0;if(!w(e))return!1;let t=e;e.startsWith("http://")&&e.startsWith("https://")||(t=`http://${e}`);try{return!T(new URL(t).hostname)}catch(e){return!1}},empty:T};const A=(()=>{const e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find((t=>void 0!==e.style[t]));return!!C.string(i)&&t[i]})();function S(e,t){setTimeout((()=>{try{e.hidden=!0,e.offsetHeight,e.hidden=!1}catch(e){}}),t)}var E={isIE:Boolean(window.document.documentMode),isEdge:/Edge/g.test(navigator.userAgent),isWebKit:"WebkitAppearance"in document.documentElement.style&&!/Edge/g.test(navigator.userAgent),isIPhone:/iPhone|iPod/gi.test(navigator.userAgent)&&navigator.maxTouchPoints>1,isIPadOS:"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1,isIos:/iPad|iPhone|iPod/gi.test(navigator.userAgent)&&navigator.maxTouchPoints>1};function P(e,t){return t.split(".").reduce(((e,t)=>e&&e[t]),e)}function M(e={},...t){if(!t.length)return e;const i=t.shift();return C.object(i)?(Object.keys(i).forEach((t=>{C.object(i[t])?(Object.keys(e).includes(t)||Object.assign(e,{[t]:{}}),M(e[t],i[t])):Object.assign(e,{[t]:i[t]})})),M(e,...t)):e}function N(e,t){const i=e.length?e:[e];Array.from(i).reverse().forEach(((e,i)=>{const r=i>0?t.cloneNode(!0):t,n=e.parentNode,s=e.nextSibling;r.appendChild(e),s?n.insertBefore(r,s):n.appendChild(r)}))}function I(e,t){C.element(e)&&!C.empty(t)&&Object.entries(t).filter((([,e])=>!C.nullOrUndefined(e))).forEach((([t,i])=>e.setAttribute(t,i)))}function L(e,t,i){const r=document.createElement(e);return C.object(t)&&I(r,t),C.string(i)&&(r.innerText=i),r}function z(e,t,i,r){C.element(t)&&t.appendChild(L(e,i,r))}function $(e){C.nodeList(e)||C.array(e)?Array.from(e).forEach($):C.element(e)&&C.element(e.parentNode)&&e.parentNode.removeChild(e)}function O(e){if(!C.element(e))return;let{length:t}=e.childNodes;for(;t>0;)e.removeChild(e.lastChild),t-=1}function j(e,t){return C.element(t)&&C.element(t.parentNode)&&C.element(e)?(t.parentNode.replaceChild(e,t),e):null}function D(e,t){if(!C.string(e)||C.empty(e))return{};const i={},r=M({},t);return e.split(",").forEach((e=>{const t=e.trim(),n=t.replace(".",""),s=t.replace(/[[\]]/g,"").split("="),[o]=s,a=s.length>1?s[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":C.string(r.class)?i.class=`${r.class} ${n}`:i.class=n;break;case"#":i.id=t.replace("#","");break;case"[":i[o]=a}})),M(r,i)}function q(e,t){if(!C.element(e))return;let i=t;C.boolean(i)||(i=!e.hidden),e.hidden=i}function R(e,t,i){if(C.nodeList(e))return Array.from(e).map((e=>R(e,t,i)));if(C.element(e)){let r="toggle";return void 0!==i&&(r=i?"add":"remove"),e.classList[r](t),e.classList.contains(t)}return!1}function H(e,t){return C.element(e)&&e.classList.contains(t)}function V(e,t){const{prototype:i}=Element;return(i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)}).call(e,t)}function F(e){return this.elements.container.querySelectorAll(e)}function U(e){return this.elements.container.querySelector(e)}function B(e=null,t=!1){C.element(e)&&e.focus({preventScroll:!0,focusVisible:t})}const W={"audio/ogg":"vorbis","audio/wav":"1","video/webm":"vp8, vorbis","video/mp4":"avc1.42E01E, mp4a.40.2","video/ogg":"theora"},Y={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check(e,t){const i=Y[e]||"html5"!==t;return{api:i,ui:i&&Y.rangeInput}},pip:!(E.isIPhone||!C.function(L("video").webkitSetPresentationMode)&&(!document.pictureInPictureEnabled||L("video").disablePictureInPicture)),airplay:C.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime(e){if(C.empty(e))return!1;const[t]=e.split("/");let i=e;if(!this.isHTML5||t!==this.type)return!1;Object.keys(W).includes(i)&&(i+=`; codecs="${W[e]}"`);try{return Boolean(i&&this.media.canPlayType(i).replace(/no/,""))}catch(e){return!1}},textTracks:"textTracks"in document.createElement("video"),rangeInput:(()=>{const e=document.createElement("input");return e.type="range","range"===e.type})(),touch:"ontouchstart"in document.documentElement,transitions:!1!==A,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},K=(()=>{let e=!1;try{const t=Object.defineProperty({},"passive",{get:()=>(e=!0,null)});window.addEventListener("test",null,t),window.removeEventListener("test",null,t)}catch(e){}return e})();function X(e,t,i,r=!1,n=!0,s=!1){if(!e||!("addEventListener"in e)||C.empty(t)||!C.function(i))return;const o=t.split(" ");let a=s;K&&(a={passive:n,capture:s}),o.forEach((t=>{this&&this.eventListeners&&r&&this.eventListeners.push({element:e,type:t,callback:i,options:a}),e[r?"addEventListener":"removeEventListener"](t,i,a)}))}function Q(e,t="",i,r=!0,n=!1){X.call(this,e,t,i,!0,r,n)}function J(e,t="",i,r=!0,n=!1){X.call(this,e,t,i,!1,r,n)}function G(e,t="",i,r=!0,n=!1){const s=(...o)=>{J(e,t,s,r,n),i.apply(this,o)};X.call(this,e,t,s,!0,r,n)}function Z(e,t="",i=!1,r={}){if(!C.element(e)||C.empty(t))return;const n=new CustomEvent(t,{bubbles:i,detail:{...r,plyr:this}});e.dispatchEvent(n)}function ee(){this&&this.eventListeners&&(this.eventListeners.forEach((e=>{const{element:t,type:i,callback:r,options:n}=e;t.removeEventListener(i,r,n)})),this.eventListeners=[])}function te(){return new Promise((e=>this.ready?setTimeout(e,0):Q.call(this,this.elements.container,"ready",e))).then((()=>{}))}function ie(e){C.promise(e)&&e.then(null,(()=>{}))}function re(e){return C.array(e)?e.filter(((t,i)=>e.indexOf(t)===i)):e}function ne(e,t){return C.array(e)&&e.length?e.reduce(((e,i)=>Math.abs(i-t)<Math.abs(e-t)?i:e)):null}function se(e){return!(!window||!window.CSS)&&window.CSS.supports(e)}const oe=[[1,1],[4,3],[3,4],[5,4],[4,5],[3,2],[2,3],[16,10],[10,16],[16,9],[9,16],[21,9],[9,21],[32,9],[9,32]].reduce(((e,[t,i])=>({...e,[t/i]:[t,i]})),{});function ae(e){return!!(C.array(e)||C.string(e)&&e.includes(":"))&&(C.array(e)?e:e.split(":")).map(Number).every(C.number)}function le(e){if(!C.array(e)||!e.every(C.number))return null;const[t,i]=e,r=(e,t)=>0===t?e:r(t,e%t),n=r(t,i);return[t/n,i/n]}function ce(e){const t=e=>ae(e)?e.split(":").map(Number):null;let i=t(e);if(null===i&&(i=t(this.config.ratio)),null===i&&!C.empty(this.embed)&&C.array(this.embed.ratio)&&({ratio:i}=this.embed),null===i&&this.isHTML5){const{videoWidth:e,videoHeight:t}=this.media;i=[e,t]}return le(i)}function pe(e){if(!this.isVideo)return{};const{wrapper:t}=this.elements,i=ce.call(this,e);if(!C.array(i))return{};const[r,n]=le(i),s=100/r*n;if(se(`aspect-ratio: ${r}/${n}`)?t.style.aspectRatio=`${r}/${n}`:t.style.paddingBottom=`${s}%`,this.isVimeo&&!this.config.vimeo.premium&&this.supported.ui){const e=100/this.media.offsetWidth*parseInt(window.getComputedStyle(this.media).paddingBottom,10),i=(e-s)/(e/50);this.fullscreen.active?t.style.paddingBottom=null:this.media.style.transform=`translateY(-${i}%)`}else this.isHTML5&&t.classList.add(this.config.classNames.videoFixedRatio);return{padding:s,ratio:i}}function de(e,t,i=.05){const r=e/t,n=ne(Object.keys(oe),r);return Math.abs(n-r)<=i?oe[n]:[e,t]}const ue={getSources(){return this.isHTML5?Array.from(this.media.querySelectorAll("source")).filter((e=>{const t=e.getAttribute("type");return!!C.empty(t)||Y.mime.call(this,t)})):[]},getQualityOptions(){return this.config.quality.forced?this.config.quality.options:ue.getSources.call(this).map((e=>Number(e.getAttribute("size")))).filter(Boolean)},setup(){if(!this.isHTML5)return;const e=this;e.options.speed=e.config.speed.options,C.empty(this.config.ratio)||pe.call(e),Object.defineProperty(e.media,"quality",{get(){const t=ue.getSources.call(e).find((t=>t.getAttribute("src")===e.source));return t&&Number(t.getAttribute("size"))},set(t){if(e.quality!==t){if(e.config.quality.forced&&C.function(e.config.quality.onChange))e.config.quality.onChange(t);else{const i=ue.getSources.call(e).find((e=>Number(e.getAttribute("size"))===t));if(!i)return;const{currentTime:r,paused:n,preload:s,readyState:o,playbackRate:a}=e.media;e.media.src=i.getAttribute("src"),("none"!==s||o)&&(e.once("loadedmetadata",(()=>{e.speed=a,e.currentTime=r,n||ie(e.play())})),e.media.load())}Z.call(e,e.media,"qualitychange",!1,{quality:t})}}})},cancelRequests(){this.isHTML5&&($(ue.getSources.call(this)),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}};function he(e,...t){return C.empty(e)?e:e.toString().replace(/{(\d+)}/g,((e,i)=>t[i].toString()))}const me=(e="",t="",i="")=>e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString()),ge=(e="")=>e.toString().replace(/\w\S*/g,(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()));function fe(e=""){let t=e.toString();return t=function(e=""){let t=e.toString();return t=me(t,"-"," "),t=me(t,"_"," "),t=ge(t),me(t," ","")}(t),t.charAt(0).toLowerCase()+t.slice(1)}function ye(e){const t=document.createElement("div");return t.appendChild(e),t.innerHTML}const be={pip:"PIP",airplay:"AirPlay",html5:"HTML5",vimeo:"Vimeo",youtube:"YouTube"},ve={get(e="",t={}){if(C.empty(e)||C.empty(t))return"";let i=P(t.i18n,e);if(C.empty(i))return Object.keys(be).includes(e)?be[e]:"";const r={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(r).forEach((([e,t])=>{i=me(i,e,t)})),i}};class we{constructor(t){e(this,"get",(e=>{if(!we.supported||!this.enabled)return null;const t=window.localStorage.getItem(this.key);if(C.empty(t))return null;const i=JSON.parse(t);return C.string(e)&&e.length?i[e]:i})),e(this,"set",(e=>{if(!we.supported||!this.enabled)return;if(!C.object(e))return;let t=this.get();C.empty(t)&&(t={}),M(t,e);try{window.localStorage.setItem(this.key,JSON.stringify(t))}catch(e){}})),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}static get supported(){try{if(!("localStorage"in window))return!1;const e="___test";return window.localStorage.setItem(e,e),window.localStorage.removeItem(e),!0}catch(e){return!1}}}function _e(e,t="text"){return new Promise(((i,r)=>{try{const r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",(()=>{if("text"===t)try{i(JSON.parse(r.responseText))}catch(e){i(r.responseText)}else i(r.response)})),r.addEventListener("error",(()=>{throw new Error(r.status)})),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){r(e)}}))}function xe(e,t){if(!C.string(e))return;const i="cache",r=C.string(t);let n=!1;const s=()=>null!==document.getElementById(t),o=(e,t)=>{e.innerHTML=t,r&&s()||document.body.insertAdjacentElement("afterbegin",e)};if(!r||!s()){const s=we.supported,a=document.createElement("div");if(a.setAttribute("hidden",""),r&&a.setAttribute("id",t),s){const e=window.localStorage.getItem(`${i}-${t}`);if(n=null!==e,n){const t=JSON.parse(e);o(a,t.content)}}_e(e).then((e=>{if(!C.empty(e)){if(s)try{window.localStorage.setItem(`${i}-${t}`,JSON.stringify({content:e}))}catch(e){}o(a,e)}})).catch((()=>{}))}}const ke=e=>Math.trunc(e/60/60%60,10),Te=e=>Math.trunc(e/60%60,10),Ce=e=>Math.trunc(e%60,10);function Ae(e=0,t=!1,i=!1){if(!C.number(e))return Ae(void 0,t,i);const r=e=>`0${e}`.slice(-2);let n=ke(e);const s=Te(e),o=Ce(e);return n=t||n>0?`${n}:`:"",`${i&&e>0?"-":""}${n}${r(s)}:${r(o)}`}const Se={getIconUrl(){const e=new URL(this.config.iconUrl,window.location),t=window.location.host?window.location.host:window.top.location.host,i=e.host!==t||E.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:i}},findElements(){try{return this.elements.controls=U.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:F.call(this,this.config.selectors.buttons.play),pause:U.call(this,this.config.selectors.buttons.pause),restart:U.call(this,this.config.selectors.buttons.restart),rewind:U.call(this,this.config.selectors.buttons.rewind),fastForward:U.call(this,this.config.selectors.buttons.fastForward),mute:U.call(this,this.config.selectors.buttons.mute),pip:U.call(this,this.config.selectors.buttons.pip),airplay:U.call(this,this.config.selectors.buttons.airplay),settings:U.call(this,this.config.selectors.buttons.settings),captions:U.call(this,this.config.selectors.buttons.captions),fullscreen:U.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=U.call(this,this.config.selectors.progress),this.elements.inputs={seek:U.call(this,this.config.selectors.inputs.seek),volume:U.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:U.call(this,this.config.selectors.display.buffer),currentTime:U.call(this,this.config.selectors.display.currentTime),duration:U.call(this,this.config.selectors.display.duration)},C.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},createIcon(e,t){const i="http://www.w3.org/2000/svg",r=Se.getIconUrl.call(this),n=`${r.cors?"":r.url}#${this.config.iconPrefix}`,s=document.createElementNS(i,"svg");I(s,M(t,{"aria-hidden":"true",focusable:"false"}));const o=document.createElementNS(i,"use"),a=`${n}-${e}`;return"href"in o&&o.setAttributeNS("http://www.w3.org/1999/xlink","href",a),o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",a),s.appendChild(o),s},createLabel(e,t={}){const i=ve.get(e,this.config);return L("span",{...t,class:[t.class,this.config.classNames.hidden].filter(Boolean).join(" ")},i)},createBadge(e){if(C.empty(e))return null;const t=L("span",{class:this.config.classNames.menu.value});return t.appendChild(L("span",{class:this.config.classNames.menu.badge},e)),t},createButton(e,t){const i=M({},t);let r=fe(e);const n={element:"button",toggle:!1,label:null,icon:null,labelPressed:null,iconPressed:null};switch(["element","icon","label"].forEach((e=>{Object.keys(i).includes(e)&&(n[e]=i[e],delete i[e])})),"button"!==n.element||Object.keys(i).includes("type")||(i.type="button"),Object.keys(i).includes("class")?i.class.split(" ").some((e=>e===this.config.classNames.control))||M(i,{class:`${i.class} ${this.config.classNames.control}`}):i.class=this.config.classNames.control,e){case"play":n.toggle=!0,n.label="play",n.labelPressed="pause",n.icon="play",n.iconPressed="pause";break;case"mute":n.toggle=!0,n.label="mute",n.labelPressed="unmute",n.icon="volume",n.iconPressed="muted";break;case"captions":n.toggle=!0,n.label="enableCaptions",n.labelPressed="disableCaptions",n.icon="captions-off",n.iconPressed="captions-on";break;case"fullscreen":n.toggle=!0,n.label="enterFullscreen",n.labelPressed="exitFullscreen",n.icon="enter-fullscreen",n.iconPressed="exit-fullscreen";break;case"play-large":i.class+=` ${this.config.classNames.control}--overlaid`,r="play",n.label="play",n.icon="play";break;default:C.empty(n.label)&&(n.label=r),C.empty(n.icon)&&(n.icon=e)}const s=L(n.element);return n.toggle?(s.appendChild(Se.createIcon.call(this,n.iconPressed,{class:"icon--pressed"})),s.appendChild(Se.createIcon.call(this,n.icon,{class:"icon--not-pressed"})),s.appendChild(Se.createLabel.call(this,n.labelPressed,{class:"label--pressed"})),s.appendChild(Se.createLabel.call(this,n.label,{class:"label--not-pressed"}))):(s.appendChild(Se.createIcon.call(this,n.icon)),s.appendChild(Se.createLabel.call(this,n.label))),M(i,D(this.config.selectors.buttons[r],i)),I(s,i),"play"===r?(C.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(s)):this.elements.buttons[r]=s,s},createRange(e,t){const i=L("input",M(D(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-label":ve.get(e,this.config),"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,Se.updateRangeFill.call(this,i),g.setup(i),i},createProgress(e,t){const i=L("progress",M(D(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"progressbar","aria-hidden":!0},t));if("volume"!==e){i.appendChild(L("span",null,"0"));const t={played:"played",buffer:"buffered"}[e],r=t?ve.get(t,this.config):"";i.innerText=`% ${r.toLowerCase()}`}return this.elements.display[e]=i,i},createTime(e,t){const i=D(this.config.selectors.display[e],t),r=L("div",M(i,{class:`${i.class?i.class:""} ${this.config.classNames.display.time} `.trim(),"aria-label":ve.get(e,this.config),role:"timer"}),"00:00");return this.elements.display[e]=r,r},bindMenuItemShortcuts(e,t){Q.call(this,e,"keydown keyup",(i=>{if(![" ","ArrowUp","ArrowDown","ArrowRight"].includes(i.key))return;if(i.preventDefault(),i.stopPropagation(),"keydown"===i.type)return;const r=V(e,'[role="menuitemradio"]');if(!r&&[" ","ArrowRight"].includes(i.key))Se.showMenuPanel.call(this,t,!0);else{let t;" "!==i.key&&("ArrowDown"===i.key||r&&"ArrowRight"===i.key?(t=e.nextElementSibling,C.element(t)||(t=e.parentNode.firstElementChild)):(t=e.previousElementSibling,C.element(t)||(t=e.parentNode.lastElementChild)),B.call(this,t,!0))}}),!1),Q.call(this,e,"keyup",(e=>{"Return"===e.key&&Se.focusFirstMenuItem.call(this,null,!0)}))},createMenuItem({value:e,list:t,type:i,title:r,badge:n=null,checked:s=!1}){const o=D(this.config.selectors.inputs[i]),a=L("button",M(o,{type:"button",role:"menuitemradio",class:`${this.config.classNames.control} ${o.class?o.class:""}`.trim(),"aria-checked":s,value:e})),l=L("span");l.innerHTML=r,C.element(n)&&l.appendChild(n),a.appendChild(l),Object.defineProperty(a,"checked",{enumerable:!0,get:()=>"true"===a.getAttribute("aria-checked"),set(e){e&&Array.from(a.parentNode.children).filter((e=>V(e,'[role="menuitemradio"]'))).forEach((e=>e.setAttribute("aria-checked","false"))),a.setAttribute("aria-checked",e?"true":"false")}}),this.listeners.bind(a,"click keyup",(t=>{if(!C.keyboardEvent(t)||" "===t.key){switch(t.preventDefault(),t.stopPropagation(),a.checked=!0,i){case"language":this.currentTrack=Number(e);break;case"quality":this.quality=e;break;case"speed":this.speed=parseFloat(e)}Se.showMenuPanel.call(this,"home",C.keyboardEvent(t))}}),i,!1),Se.bindMenuItemShortcuts.call(this,a,i),t.appendChild(a)},formatTime(e=0,t=!1){return C.number(e)?Ae(e,ke(this.duration)>0,t):e},updateTimeDisplay(e=null,t=0,i=!1){C.element(e)&&C.number(t)&&(e.innerText=Se.formatTime(t,i))},updateVolume(){this.supported.ui&&(C.element(this.elements.inputs.volume)&&Se.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),C.element(this.elements.buttons.mute)&&(this.elements.buttons.mute.pressed=this.muted||0===this.volume))},setRange(e,t=0){C.element(e)&&(e.value=t,Se.updateRangeFill.call(this,e))},updateProgress(e){if(!this.supported.ui||!C.event(e))return;let t=0;const i=(e,t)=>{const i=C.number(t)?t:0,r=C.element(e)?e:this.elements.display.buffer;if(C.element(r)){r.value=i;const e=r.getElementsByTagName("span")[0];C.element(e)&&(e.childNodes[0].nodeValue=i)}};if(e)switch(e.type){case"timeupdate":case"seeking":case"seeked":r=this.currentTime,n=this.duration,t=0===r||0===n||Number.isNaN(r)||Number.isNaN(n)?0:(r/n*100).toFixed(2),"timeupdate"===e.type&&Se.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":i(this.elements.display.buffer,100*this.buffered)}var r,n},updateRangeFill(e){const t=C.event(e)?e.target:e;if(C.element(t)&&"range"===t.getAttribute("type")){if(V(t,this.config.selectors.inputs.seek)){t.setAttribute("aria-valuenow",this.currentTime);const e=Se.formatTime(this.currentTime),i=Se.formatTime(this.duration),r=ve.get("seekLabel",this.config);t.setAttribute("aria-valuetext",r.replace("{currentTime}",e).replace("{duration}",i))}else if(V(t,this.config.selectors.inputs.volume)){const e=100*t.value;t.setAttribute("aria-valuenow",e),t.setAttribute("aria-valuetext",`${e.toFixed(1)}%`)}else t.setAttribute("aria-valuenow",t.value);(E.isWebKit||E.isIPadOS)&&t.style.setProperty("--value",t.value/t.max*100+"%")}},updateSeekTooltip(e){var t,i;if(!this.config.tooltips.seek||!C.element(this.elements.inputs.seek)||!C.element(this.elements.display.seekTooltip)||0===this.duration)return;const r=this.elements.display.seekTooltip,n=`${this.config.classNames.tooltip}--visible`,s=e=>R(r,n,e);if(this.touch)return void s(!1);let o=0;const a=this.elements.progress.getBoundingClientRect();if(C.event(e))o=100/a.width*(e.pageX-a.left);else{if(!H(r,n))return;o=parseFloat(r.style.left,10)}o<0?o=0:o>100&&(o=100);const l=this.duration/100*o;r.innerText=Se.formatTime(l);const c=null===(t=this.config.markers)||void 0===t||null===(i=t.points)||void 0===i?void 0:i.find((({time:e})=>e===Math.round(l)));c&&r.insertAdjacentHTML("afterbegin",`${c.label}<br>`),r.style.left=`${o}%`,C.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&s("mouseenter"===e.type)},timeUpdate(e){const t=!C.element(this.elements.display.duration)&&this.config.invertTime;Se.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Se.updateProgress.call(this,e)},durationUpdate(){if(!this.supported.ui||!this.config.invertTime&&this.currentTime)return;if(this.duration>=2**32)return q(this.elements.display.currentTime,!0),void q(this.elements.progress,!0);C.element(this.elements.inputs.seek)&&this.elements.inputs.seek.setAttribute("aria-valuemax",this.duration);const e=C.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Se.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Se.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),this.config.markers.enabled&&Se.setMarkers.call(this),Se.updateSeekTooltip.call(this)},toggleMenuButton(e,t){q(this.elements.settings.buttons[e],!t)},updateSetting(e,t,i){const r=this.elements.settings.panels[e];let n=null,s=t;if("captions"===e)n=this.currentTrack;else{if(n=C.empty(i)?this[e]:i,C.empty(n)&&(n=this.config[e].default),!C.empty(this.options[e])&&!this.options[e].includes(n))return void this.debug.warn(`Unsupported value of '${n}' for ${e}`);if(!this.config[e].options.includes(n))return void this.debug.warn(`Disabled value of '${n}' for ${e}`)}if(C.element(s)||(s=r&&r.querySelector('[role="menu"]')),!C.element(s))return;this.elements.settings.buttons[e].querySelector(`.${this.config.classNames.menu.value}`).innerHTML=Se.getLabel.call(this,e,n);const o=s&&s.querySelector(`[value="${n}"]`);C.element(o)&&(o.checked=!0)},getLabel(e,t){switch(e){case"speed":return 1===t?ve.get("normal",this.config):`${t}&times;`;case"quality":if(C.number(t)){const e=ve.get(`qualityLabel.${t}`,this.config);return e.length?e:`${t}p`}return ge(t);case"captions":return Me.getLabel.call(this);default:return null}},setQualityMenu(e){if(!C.element(this.elements.settings.panels.quality))return;const t="quality",i=this.elements.settings.panels.quality.querySelector('[role="menu"]');C.array(e)&&(this.options.quality=re(e).filter((e=>this.config.quality.options.includes(e))));const r=!C.empty(this.options.quality)&&this.options.quality.length>1;if(Se.toggleMenuButton.call(this,t,r),O(i),Se.checkMenu.call(this),!r)return;const n=e=>{const t=ve.get(`qualityBadge.${e}`,this.config);return t.length?Se.createBadge.call(this,t):null};this.options.quality.sort(((e,t)=>{const i=this.config.quality.options;return i.indexOf(e)>i.indexOf(t)?1:-1})).forEach((e=>{Se.createMenuItem.call(this,{value:e,list:i,type:t,title:Se.getLabel.call(this,"quality",e),badge:n(e)})})),Se.updateSetting.call(this,t,i)},setCaptionsMenu(){if(!C.element(this.elements.settings.panels.captions))return;const e="captions",t=this.elements.settings.panels.captions.querySelector('[role="menu"]'),i=Me.getTracks.call(this),r=Boolean(i.length);if(Se.toggleMenuButton.call(this,e,r),O(t),Se.checkMenu.call(this),!r)return;const n=i.map(((e,i)=>({value:i,checked:this.captions.toggled&&this.currentTrack===i,title:Me.getLabel.call(this,e),badge:e.language&&Se.createBadge.call(this,e.language.toUpperCase()),list:t,type:"language"})));n.unshift({value:-1,checked:!this.captions.toggled,title:ve.get("disabled",this.config),list:t,type:"language"}),n.forEach(Se.createMenuItem.bind(this)),Se.updateSetting.call(this,e,t)},setSpeedMenu(){if(!C.element(this.elements.settings.panels.speed))return;const e="speed",t=this.elements.settings.panels.speed.querySelector('[role="menu"]');this.options.speed=this.options.speed.filter((e=>e>=this.minimumSpeed&&e<=this.maximumSpeed));const i=!C.empty(this.options.speed)&&this.options.speed.length>1;Se.toggleMenuButton.call(this,e,i),O(t),Se.checkMenu.call(this),i&&(this.options.speed.forEach((i=>{Se.createMenuItem.call(this,{value:i,list:t,type:e,title:Se.getLabel.call(this,"speed",i)})})),Se.updateSetting.call(this,e,t))},checkMenu(){const{buttons:e}=this.elements.settings,t=!C.empty(e)&&Object.values(e).some((e=>!e.hidden));q(this.elements.settings.menu,!t)},focusFirstMenuItem(e,t=!1){if(this.elements.settings.popup.hidden)return;let i=e;C.element(i)||(i=Object.values(this.elements.settings.panels).find((e=>!e.hidden)));const r=i.querySelector('[role^="menuitem"]');B.call(this,r,t)},toggleMenu(e){const{popup:t}=this.elements.settings,i=this.elements.buttons.settings;if(!C.element(t)||!C.element(i))return;const{hidden:r}=t;let n=r;if(C.boolean(e))n=e;else if(C.keyboardEvent(e)&&"Escape"===e.key)n=!1;else if(C.event(e)){const r=C.function(e.composedPath)?e.composedPath()[0]:e.target,s=t.contains(r);if(s||!s&&e.target!==i&&n)return}i.setAttribute("aria-expanded",n),q(t,!n),R(this.elements.container,this.config.classNames.menu.open,n),n&&C.keyboardEvent(e)?Se.focusFirstMenuItem.call(this,null,!0):n||r||B.call(this,i,C.keyboardEvent(e))},getMenuSize(e){const t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.removeAttribute("hidden"),e.parentNode.appendChild(t);const i=t.scrollWidth,r=t.scrollHeight;return $(t),{width:i,height:r}},showMenuPanel(e="",t=!1){const i=this.elements.container.querySelector(`#plyr-settings-${this.id}-${e}`);if(!C.element(i))return;const r=i.parentNode,n=Array.from(r.children).find((e=>!e.hidden));if(Y.transitions&&!Y.reducedMotion){r.style.width=`${n.scrollWidth}px`,r.style.height=`${n.scrollHeight}px`;const e=Se.getMenuSize.call(this,i),t=e=>{e.target===r&&["width","height"].includes(e.propertyName)&&(r.style.width="",r.style.height="",J.call(this,r,A,t))};Q.call(this,r,A,t),r.style.width=`${e.width}px`,r.style.height=`${e.height}px`}q(n,!0),q(i,!1),Se.focusFirstMenuItem.call(this,i,t)},setDownloadUrl(){const e=this.elements.buttons.download;C.element(e)&&e.setAttribute("href",this.download)},create(e){const{bindMenuItemShortcuts:t,createButton:i,createProgress:r,createRange:n,createTime:s,setQualityMenu:o,setSpeedMenu:a,showMenuPanel:l}=Se;this.elements.controls=null,C.array(this.config.controls)&&this.config.controls.includes("play-large")&&this.elements.container.appendChild(i.call(this,"play-large"));const c=L("div",D(this.config.selectors.controls.wrapper));this.elements.controls=c;const p={class:"plyr__controls__item"};return re(C.array(this.config.controls)?this.config.controls:[]).forEach((o=>{if("restart"===o&&c.appendChild(i.call(this,"restart",p)),"rewind"===o&&c.appendChild(i.call(this,"rewind",p)),"play"===o&&c.appendChild(i.call(this,"play",p)),"fast-forward"===o&&c.appendChild(i.call(this,"fast-forward",p)),"progress"===o){const t=L("div",{class:`${p.class} plyr__progress__container`}),i=L("div",D(this.config.selectors.progress));if(i.appendChild(n.call(this,"seek",{id:`plyr-seek-${e.id}`})),i.appendChild(r.call(this,"buffer")),this.config.tooltips.seek){const e=L("span",{class:this.config.classNames.tooltip},"00:00");i.appendChild(e),this.elements.display.seekTooltip=e}this.elements.progress=i,t.appendChild(this.elements.progress),c.appendChild(t)}if("current-time"===o&&c.appendChild(s.call(this,"currentTime",p)),"duration"===o&&c.appendChild(s.call(this,"duration",p)),"mute"===o||"volume"===o){let{volume:t}=this.elements;if(C.element(t)&&c.contains(t)||(t=L("div",M({},p,{class:`${p.class} plyr__volume`.trim()})),this.elements.volume=t,c.appendChild(t)),"mute"===o&&t.appendChild(i.call(this,"mute")),"volume"===o&&!E.isIos&&!E.isIPadOS){const i={max:1,step:.05,value:this.config.volume};t.appendChild(n.call(this,"volume",M(i,{id:`plyr-volume-${e.id}`})))}}if("captions"===o&&c.appendChild(i.call(this,"captions",p)),"settings"===o&&!C.empty(this.config.settings)){const r=L("div",M({},p,{class:`${p.class} plyr__menu`.trim(),hidden:""}));r.appendChild(i.call(this,"settings",{"aria-haspopup":!0,"aria-controls":`plyr-settings-${e.id}`,"aria-expanded":!1}));const n=L("div",{class:"plyr__menu__container",id:`plyr-settings-${e.id}`,hidden:""}),s=L("div"),o=L("div",{id:`plyr-settings-${e.id}-home`}),a=L("div",{role:"menu"});o.appendChild(a),s.appendChild(o),this.elements.settings.panels.home=o,this.config.settings.forEach((i=>{const r=L("button",M(D(this.config.selectors.buttons.settings),{type:"button",class:`${this.config.classNames.control} ${this.config.classNames.control}--forward`,role:"menuitem","aria-haspopup":!0,hidden:""}));t.call(this,r,i),Q.call(this,r,"click",(()=>{l.call(this,i,!1)}));const n=L("span",null,ve.get(i,this.config)),o=L("span",{class:this.config.classNames.menu.value});o.innerHTML=e[i],n.appendChild(o),r.appendChild(n),a.appendChild(r);const c=L("div",{id:`plyr-settings-${e.id}-${i}`,hidden:""}),p=L("button",{type:"button",class:`${this.config.classNames.control} ${this.config.classNames.control}--back`});p.appendChild(L("span",{"aria-hidden":!0},ve.get(i,this.config))),p.appendChild(L("span",{class:this.config.classNames.hidden},ve.get("menuBack",this.config))),Q.call(this,c,"keydown",(e=>{"ArrowLeft"===e.key&&(e.preventDefault(),e.stopPropagation(),l.call(this,"home",!0))}),!1),Q.call(this,p,"click",(()=>{l.call(this,"home",!1)})),c.appendChild(p),c.appendChild(L("div",{role:"menu"})),s.appendChild(c),this.elements.settings.buttons[i]=r,this.elements.settings.panels[i]=c})),n.appendChild(s),r.appendChild(n),c.appendChild(r),this.elements.settings.popup=n,this.elements.settings.menu=r}if("pip"===o&&Y.pip&&c.appendChild(i.call(this,"pip",p)),"airplay"===o&&Y.airplay&&c.appendChild(i.call(this,"airplay",p)),"download"===o){const e=M({},p,{element:"a",href:this.download,target:"_blank"});this.isHTML5&&(e.download="");const{download:t}=this.config.urls;!C.url(t)&&this.isEmbed&&M(e,{icon:`logo-${this.provider}`,label:this.provider}),c.appendChild(i.call(this,"download",e))}"fullscreen"===o&&c.appendChild(i.call(this,"fullscreen",p))})),this.isHTML5&&o.call(this,ue.getQualityOptions.call(this)),a.call(this),c},inject(){if(this.config.loadSprite){const e=Se.getIconUrl.call(this);e.cors&&xe(e.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());let e=null;this.elements.controls=null;const t={id:this.id,seektime:this.config.seekTime,title:this.config.title};let i,r=!0;if(C.function(this.config.controls)&&(this.config.controls=this.config.controls.call(this,t)),this.config.controls||(this.config.controls=[]),C.element(this.config.controls)||C.string(this.config.controls)?e=this.config.controls:(e=Se.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:Me.getLabel.call(this)}),r=!1),r&&C.string(this.config.controls)&&(e=(e=>{let i=e;return Object.entries(t).forEach((([e,t])=>{i=me(i,`{${e}}`,t)})),i})(e)),C.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),C.element(i)||(i=this.elements.container),i[C.element(e)?"insertAdjacentElement":"insertAdjacentHTML"]("afterbegin",e),C.element(this.elements.controls)||Se.findElements.call(this),!C.empty(this.elements.buttons)){const e=e=>{const t=this.config.classNames.controlPressed;e.setAttribute("aria-pressed","false"),Object.defineProperty(e,"pressed",{configurable:!0,enumerable:!0,get:()=>H(e,t),set(i=!1){R(e,t,i),e.setAttribute("aria-pressed",i?"true":"false")}})};Object.values(this.elements.buttons).filter(Boolean).forEach((t=>{C.array(t)||C.nodeList(t)?Array.from(t).filter(Boolean).forEach(e):e(t)}))}if(E.isEdge&&S(i),this.config.tooltips.controls){const{classNames:e,selectors:t}=this.config,i=`${t.controls.wrapper} ${t.labels} .${e.hidden}`,r=F.call(this,i);Array.from(r).forEach((e=>{R(e,this.config.classNames.hidden,!1),R(e,this.config.classNames.tooltip,!0)}))}},setMediaMetadata(){try{"mediaSession"in navigator&&(navigator.mediaSession.metadata=new window.MediaMetadata({title:this.config.mediaMetadata.title,artist:this.config.mediaMetadata.artist,album:this.config.mediaMetadata.album,artwork:this.config.mediaMetadata.artwork}))}catch(e){}},setMarkers(){var e,t;if(!this.duration||this.elements.markers)return;const i=null===(e=this.config.markers)||void 0===e||null===(t=e.points)||void 0===t?void 0:t.filter((({time:e})=>e>0&&e<this.duration));if(null==i||!i.length)return;const r=document.createDocumentFragment(),n=document.createDocumentFragment();let s=null;const o=`${this.config.classNames.tooltip}--visible`,a=e=>R(s,o,e);i.forEach((e=>{const t=L("span",{class:this.config.classNames.marker},""),i=e.time/this.duration*100+"%";s&&(t.addEventListener("mouseenter",(()=>{e.label||(s.style.left=i,s.innerHTML=e.label,a(!0))})),t.addEventListener("mouseleave",(()=>{a(!1)}))),t.addEventListener("click",(()=>{this.currentTime=e.time})),t.style.left=i,n.appendChild(t)})),r.appendChild(n),this.config.tooltips.seek||(s=L("span",{class:this.config.classNames.tooltip},""),r.appendChild(s)),this.elements.markers={points:n,tip:s},this.elements.progress.appendChild(r)}};function Ee(e,t=!0){let i=e;if(t){const e=document.createElement("a");e.href=i,i=e.href}try{return new URL(i)}catch(e){return null}}function Pe(e){const t=new URLSearchParams;return C.object(e)&&Object.entries(e).forEach((([e,i])=>{t.set(e,i)})),t}const Me={setup(){if(!this.supported.ui)return;if(!this.isVideo||this.isYouTube||this.isHTML5&&!Y.textTracks)return void(C.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Se.setCaptionsMenu.call(this));var e,t;if(C.element(this.elements.captions)||(this.elements.captions=L("div",D(this.config.selectors.captions)),this.elements.captions.setAttribute("dir","auto"),e=this.elements.captions,t=this.elements.wrapper,C.element(e)&&C.element(t)&&t.parentNode.insertBefore(e,t.nextSibling)),E.isIE&&window.URL){const e=this.media.querySelectorAll("track");Array.from(e).forEach((e=>{const t=e.getAttribute("src"),i=Ee(t);null!==i&&i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&_e(t,"blob").then((t=>{e.setAttribute("src",window.URL.createObjectURL(t))})).catch((()=>{$(e)}))}))}const i=re((navigator.languages||[navigator.language||navigator.userLanguage||"en"]).map((e=>e.split("-")[0])));let r=(this.storage.get("language")||this.config.captions.language||"auto").toLowerCase();"auto"===r&&([r]=i);let n=this.storage.get("captions");if(C.boolean(n)||({active:n}=this.config.captions),Object.assign(this.captions,{toggled:!1,active:n,language:r,languages:i}),this.isHTML5){const e=this.config.captions.update?"addtrack removetrack":"removetrack";Q.call(this,this.media.textTracks,e,Me.update.bind(this))}setTimeout(Me.update.bind(this),0)},update(){const e=Me.getTracks.call(this,!0),{active:t,language:i,meta:r,currentTrackNode:n}=this.captions,s=Boolean(e.find((e=>e.language===i)));this.isHTML5&&this.isVideo&&e.filter((e=>!r.get(e))).forEach((e=>{this.debug.log("Track added",e),r.set(e,{default:"showing"===e.mode}),"showing"===e.mode&&(e.mode="hidden"),Q.call(this,e,"cuechange",(()=>Me.updateCues.call(this)))})),(s&&this.language!==i||!e.includes(n))&&(Me.setLanguage.call(this,i),Me.toggle.call(this,t&&s)),this.elements&&R(this.elements.container,this.config.classNames.captions.enabled,!C.empty(e)),C.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Se.setCaptionsMenu.call(this)},toggle(e,t=!0){if(!this.supported.ui)return;const{toggled:i}=this.captions,r=this.config.classNames.captions.active,n=C.nullOrUndefined(e)?!i:e;if(n!==i){if(t||(this.captions.active=n,this.storage.set({captions:n})),!this.language&&n&&!t){const e=Me.getTracks.call(this),t=Me.findTrack.call(this,[this.captions.language,...this.captions.languages],!0);return this.captions.language=t.language,void Me.set.call(this,e.indexOf(t))}this.elements.buttons.captions&&(this.elements.buttons.captions.pressed=n),R(this.elements.container,r,n),this.captions.toggled=n,Se.updateSetting.call(this,"captions"),Z.call(this,this.media,n?"captionsenabled":"captionsdisabled")}setTimeout((()=>{n&&this.captions.toggled&&(this.captions.currentTrackNode.mode="hidden")}))},set(e,t=!0){const i=Me.getTracks.call(this);if(-1!==e)if(C.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;const r=i[e],{language:n}=r||{};this.captions.currentTrackNode=r,Se.updateSetting.call(this,"captions"),t||(this.captions.language=n,this.storage.set({language:n})),this.isVimeo&&this.embed.enableTextTrack(n),Z.call(this,this.media,"languagechange")}Me.toggle.call(this,!0,t),this.isHTML5&&this.isVideo&&Me.updateCues.call(this)}else this.debug.warn("Track not found",e);else this.debug.warn("Invalid caption argument",e);else Me.toggle.call(this,!1,t)},setLanguage(e,t=!0){if(!C.string(e))return void this.debug.warn("Invalid language argument",e);const i=e.toLowerCase();this.captions.language=i;const r=Me.getTracks.call(this),n=Me.findTrack.call(this,[i]);Me.set.call(this,r.indexOf(n),t)},getTracks(e=!1){return Array.from((this.media||{}).textTracks||[]).filter((t=>!this.isHTML5||e||this.captions.meta.has(t))).filter((e=>["captions","subtitles"].includes(e.kind)))},findTrack(e,t=!1){const i=Me.getTracks.call(this),r=e=>Number((this.captions.meta.get(e)||{}).default),n=Array.from(i).sort(((e,t)=>r(t)-r(e)));let s;return e.every((e=>(s=n.find((t=>t.language===e)),!s))),s||(t?n[0]:void 0)},getCurrentTrack(){return Me.getTracks.call(this)[this.currentTrack]},getLabel(e){let t=e;return!C.track(t)&&Y.textTracks&&this.captions.toggled&&(t=Me.getCurrentTrack.call(this)),C.track(t)?C.empty(t.label)?C.empty(t.language)?ve.get("enabled",this.config):e.language.toUpperCase():t.label:ve.get("disabled",this.config)},updateCues(e){if(!this.supported.ui)return;if(!C.element(this.elements.captions))return void this.debug.warn("No captions element to render to");if(!C.nullOrUndefined(e)&&!Array.isArray(e))return void this.debug.warn("updateCues: Invalid input",e);let t=e;if(!t){const e=Me.getCurrentTrack.call(this);t=Array.from((e||{}).activeCues||[]).map((e=>e.getCueAsHTML())).map(ye)}const i=t.map((e=>e.trim())).join("\n");if(i!==this.elements.captions.innerHTML){O(this.elements.captions);const e=L("span",D(this.config.selectors.caption));e.innerHTML=i,this.elements.captions.appendChild(e),Z.call(this,this.media,"cuechange")}}},Ne={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,playsinline:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:null,clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.7.8/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240],forced:!1,onChange:null},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2,4]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:"auto",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime}s",play:"Play",pause:"Pause",fastForward:"Forward {seektime}s",seek:"Seek",seekLabel:"{currentTime} of