{"version":3,"sources":["node_modules/.pnpm/custom-event-polyfill@1.0.7/node_modules/custom-event-polyfill/polyfill.js","plyr.polyfilled.mjs","node_modules/.pnpm/rangetouch@2.0.1/node_modules/rangetouch/dist/rangetouch.mjs","node_modules/.pnpm/url-polyfill@1.1.12/node_modules/url-polyfill/url-polyfill.js","src/js/utils/is.js","src/js/utils/animation.js","src/js/utils/browser.js","src/js/utils/objects.js","src/js/utils/elements.js","src/js/support.js","src/js/utils/events.js","src/js/utils/promise.js","src/js/utils/arrays.js","src/js/utils/style.js","src/js/html5.js","src/js/utils/strings.js","src/js/utils/i18n.js","src/js/storage.js","src/js/utils/fetch.js","src/js/utils/load-sprite.js","src/js/utils/time.js","src/js/controls.js","src/js/utils/urls.js","src/js/captions.js","src/js/config/defaults.js","src/js/config/states.js","src/js/config/types.js","src/js/console.js","src/js/fullscreen.js","src/js/utils/load-image.js","src/js/ui.js","src/js/listeners.js","node_modules/.pnpm/loadjs@4.2.0/node_modules/loadjs/dist/loadjs.umd.js","src/js/utils/load-script.js","src/js/plugins/vimeo.js","src/js/plugins/youtube.js","src/js/media.js","src/js/plugins/ads.js","src/js/utils/numbers.js","src/js/plugins/preview-thumbnails.js","src/js/source.js","src/js/plyr.js"],"names":["window","ce","CustomEvent","cancelable","preventDefault","defaultPrevented","Error","e","event","params","evt","origPrevent","bubbles","document","createEvent","initCustomEvent","detail","call","this","Object","defineProperty","get","prototype","Event","commonjsGlobal","globalThis","global","self","createCommonjsModule","fn","module","exports","_defineProperty$1","obj","key","value","_toPropertyKey","enumerable","configurable","writable","_toPrimitive","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","String","Number","arg","_classCallCheck","t","_defineProperties","n","length","r","_createClass","_defineProperty","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","forEach","getOwnPropertyDescriptors","defineProperties","iteratorSupported","iterator","error","checkIfIteratorIsSupported","createIterator","items","next","shift","done","serializeParam","encodeURIComponent","replace","deserializeParam","decodeURIComponent","URLSearchParams","toString","set","entries","checkIfURLSearchParamsSupported","searchString","typeofSearchString","_fromString","_this","name","append","i","entry","hasOwnProperty","proto","_entries","delete","getAll","slice","has","callback","thisArg","values","searchArray","join","polyfillURLSearchParams","sort","a","b","attribute","attributes","split","u","URL","pathname","href","searchParams","checkIfURLIsSupported","_URL","url","base","baseElement","doc","location","toLowerCase","implementation","createHTMLDocument","createElement","head","appendChild","indexOf","err","anchorElement","body","inputElement","type","protocol","test","checkValidity","search","enableSearchUpdate","enableSearchParamsUpdate","methodName","method","attributeName","_anchorElement","linkURLWithAnchorAttribute","_updateSearchParams","origin","expectedPort","addPortToOrigin","port","hostname","password","username","createObjectURL","blob","revokeObjectURL","polyfillURL","getOrigin","setInterval","defaults","addCSS","thumbWidth","watch","matches","Array","from","querySelectorAll","includes","trigger","dispatchEvent","getConstructor","constructor","instanceOf","isNullOrUndefined","isObject","isNumber","isNaN","isString","isBoolean","Boolean","isFunction","Function","isArray","isNodeList","NodeList","isElement","Element","isEvent","isEmpty","is","nullOrUndefined","object","number","string","boolean","function","array","nodeList","element","empty","getDecimalPlaces","concat","match","Math","max","round","parseFloat","toFixed","RangeTouch","querySelector","rangeTouch","config","init","enabled","style","userSelect","webKitUserSelect","touchAction","listeners","target","changedTouches","o","getAttribute","s","c","getBoundingClientRect","width","clientX","left","disabled","MutationObserver","addedNodes","observe","childList","subtree","map","documentElement","isWeakMap","WeakMap","isTextNode","Text","isKeyboardEvent","KeyboardEvent","isCue","TextTrackCue","VTTCue","isTrack","TextTrack","kind","isPromise","Promise","then","nodeType","ownerDocument","isUrl","startsWith","_","weakMap","textNode","keyboardEvent","cue","track","promise","transitionEndEvent","events","WebkitTransition","MozTransition","OTransition","transition","find","repaint","delay","setTimeout","hidden","offsetHeight","isIE","documentMode","isEdge","navigator","userAgent","isWebKit","isIPhone","maxTouchPoints","isIPadOS","platform","isIos","browser","cloneDeep","JSON","parse","stringify","getDeep","path","reduce","extend","sources","source","assign","wrap","elements","wrapper","targets","reverse","index","child","cloneNode","parent","parentNode","sibling","nextSibling","insertBefore","setAttributes","setAttribute","text","innerText","insertAfter","insertElement","removeElement","removeChild","emptyElement","childNodes","lastChild","replaceElement","newChild","oldChild","replaceChild","getAttributesFromSelector","sel","existingAttributes","existing","selector","trim","className","parts","charAt","class","id","toggleHidden","hide","toggleClass","force","classList","contains","hasClass","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","closest","el","parentElement","getElements","container","getElement","setFocus","focusVisible","focus","preventScroll","defaultCodecs","support","audio","video","check","provider","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","playsinline","mime","mediaType","isHTML5","media","canPlayType","textTracks","range","touch","transitions","reducedMotion","matchMedia","supportsPassiveListeners","supported","options","addEventListener","removeEventListener","toggleListener","toggle","passive","capture","eventListeners","on","off","once","onceCallback","args","triggerEvent","plyr","unbindListeners","item","ready","resolve","silencePromise","dedupe","prev","curr","abs","supportsCSS","declaration","CSS","supports","standardRatios","out","x","y","validateAspectRatio","every","reduceAspectRatio","ratio","height","getDivider","w","h","divider","getAspectRatio","embed","videoWidth","videoHeight","setAspectRatio","isVideo","padding","aspectRatio","paddingBottom","isVimeo","vimeo","premium","offsetWidth","parseInt","getComputedStyle","offset","fullscreen","active","transform","add","classNames","videoFixedRatio","roundAspectRatio","tolerance","closestRatio","getViewportSize","clientWidth","innerWidth","clientHeight","innerHeight","html5","getSources","getQualityOptions","quality","forced","setup","player","speed","onChange","currentTime","paused","preload","readyState","playbackRate","src","play","load","cancelRequests","blankVideo","debug","log","generateId","prefix","floor","random","format","getPercentage","current","replaceAll","RegExp","toTitleCase","toUpperCase","toPascalCase","toCamelCase","stripHTML","fragment","createDocumentFragment","innerHTML","firstChild","getHTML","resources","youtube","i18n","seekTime","title","k","v","Storage","store","localStorage","getItem","json","storage","setItem","removeItem","fetch","responseType","reject","request","XMLHttpRequest","responseText","response","status","open","send","loadSprite","hasId","isCached","exists","getElementById","update","data","insertAdjacentElement","useStorage","cached","content","result","catch","getHours","trunc","getMinutes","getSeconds","formatTime","time","displayHours","inverted","hours","mins","secs","controls","getIconUrl","iconUrl","host","top","cors","svg4everybody","findElements","selectors","buttons","pause","restart","rewind","fastForward","mute","settings","captions","progress","inputs","seek","volume","display","buffer","duration","seekTooltip","tooltip","warn","toggleNativeControls","createIcon","namespace","iconPath","iconPrefix","icon","createElementNS","focusable","use","setAttributeNS","createLabel","attr","createBadge","badge","menu","createButton","buttonType","props","label","labelPressed","iconPressed","some","control","button","createRange","min","step","autocomplete","role","updateRangeFill","createProgress","suffixKey","played","suffix","createTime","attrs","bindMenuItemShortcuts","menuItem","stopPropagation","isRadioButton","showMenuPanel","nextElementSibling","firstElementChild","previousElementSibling","lastElementChild","focusFirstMenuItem","createMenuItem","list","checked","flex","children","node","bind","currentTrack","updateTimeDisplay","updateVolume","setRange","muted","pressed","updateProgress","setProgress","val","getElementsByTagName","nodeValue","buffered","percent","setProperty","updateSeekTooltip","_this$config$markers","_this$config$markers$","tooltips","tipElement","visible","show","clientRect","pageX","point","markers","points","insertAdjacentHTML","timeUpdate","invert","invertTime","seeking","durationUpdate","hasDuration","displayDuration","setMarkers","toggleMenuButton","setting","updateSetting","pane","panels","default","getLabel","setQualityMenu","checkMenu","getBadge","sorting","setCaptionsMenu","tracks","getTracks","toggled","language","unshift","setSpeedMenu","minimumSpeed","maximumSpeed","popup","p","firstItem","toggleMenu","composedPath","isMenuItem","getMenuSize","tab","clone","position","opacity","removeAttribute","scrollWidth","scrollHeight","size","restore","propertyName","setDownloadUrl","download","create","defaultAttributes","progressContainer","inner","home","backButton","urls","isEmbed","inject","seektime","addProperty","controlPressed","labels","setMediaMetadata","mediaSession","metadata","MediaMetadata","mediaMetadata","artist","album","artwork","_this$config$markers2","_this$config$markers3","containerFragment","pointsFragment","tipVisible","toggleTip","markerElement","marker","tip","parseUrl","safe","parser","buildUrlParams","isYouTube","languages","userLanguage","trackEvents","meta","currentTrackNode","languageExists","mode","updateCues","setLanguage","activeClass","findTrack","enableTextTrack","sortIsDefault","sorted","getCurrentTrack","cues","activeCues","getCueAsHTML","cueText","caption","autoplay","autopause","toggleInvert","clickToPlay","hideControls","resetOnEnd","disableContextMenu","loop","selected","keyboard","focused","fallback","iosNative","seekLabel","unmute","enableCaptions","disableCaptions","enterFullscreen","exitFullscreen","frameTitle","menuBack","normal","start","end","all","reset","advertisement","qualityBadge","sdk","iframe","googleIMA","editable","embedContainer","poster","posterEnabled","ads","playing","stopped","loading","hover","isTouch","uiSupported","noTransition","previewThumbnails","thumbContainer","thumbContainerShown","imageContainer","timeContainer","scrubbingContainer","scrubbingContainerShown","hash","publisherId","tagUrl","byline","portrait","transparent","customControls","referrerPolicy","rel","showinfo","iv_load_policy","modestbranding","noCookie","inactive","providers","types","getProviderByUrl","noop","Console","console","Fullscreen","scrollPosition","scrollX","scrollY","scrollTo","overflow","viewport","property","hasProperty","cleanupViewport","part","activeElement","first","last","shiftKey","forceFallback","nativeSupported","requestFullscreen","webkitEnterFullscreen","toggleFallback","navigationUI","action","cancelFullScreen","exit","enter","proxy","trapFocus","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","useNative","pre","getRootNode","fullscreenElement","shadowRoot","loadImage","minWidth","image","Image","handler","onload","onerror","naturalWidth","addStyleHook","build","checkPlaying","setTitle","setPoster","togglePoster","enable","backgroundImage","backgroundSize","toggleControls","checkLoading","clearTimeout","timers","controlsElement","recentTouchSeek","lastSeekTime","Date","now","migrateStyles","getPropertyValue","removeProperty","Listeners","handleKey","firstTouch","setGutter","useNativeAspectRatio","maxWidth","margin","viewportWidth","viewportHeight","resized","isAudio","ended","togglePlay","proxyEvents","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","inputEvent","forward","toggleCaptions","rect","currentTarget","hasAttribute","seekTo","loaded","startMove","endMove","startScrubbing","endScrubbing","webkitDirectionInvertedFromDevice","deltaX","deltaY","direction","sign","increaseVolume","lastKey","focusTimer","lastKeyDown","altKey","ctrlKey","metaKey","repeat","increment","decreaseVolume","usingNative","loadjs_umd","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","subscribe","bundleIds","callbackFn","bundleId","depsNotFound","numWaiting","pathsNotFound","publish","q","splice","executeCallbacks","success","loadFile","numTries","isLegacyIECss","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","relList","as","onbeforeload","ev","sheet","cssText","code","loadFiles","paths","loadjs","arg1","arg2","loadFn","returnPromise","deps","isDefined","factory","loadScript","parseId","$2","parseHash","found","assurePlaybackState","hasPlayed","Vimeo","frameParams","hashParam","sidedock","gesture","thumbnail_url","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","setMuted","currentSrc","setLoop","getVideoUrl","getVideoWidth","getVideoHeight","dimensions","setAutopause","state","getVideoTitle","getCurrentTime","getDuration","getTextTracks","strippedCues","getPaused","seconds","getHost","YT","onYouTubeIframeAPIReady","getTitle","videoId","currentId","posterSrc","playerVars","hl","disablekb","cc_load_policy","cc_lang_pref","widget_referrer","onError","message","onPlaybackRateChange","instance","getPlaybackRate","onReady","playVideo","pauseVideo","stopVideo","speeds","getAvailablePlaybackRates","clearInterval","buffering","getVideoLoadedFraction","lastBuffered","onStateChange","unMute","destroy","manager","displayContainer","remove","Ads","google","ima","startSafetyTimer","managerPromise","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","setDisableCustomPlaybackForIOS10Plus","AdDisplayContainer","loader","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","requestAds","AdsRequest","adTagUrl","linearAdSlotWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setAdWillPlayMuted","countdownTimer","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","cuePoints","getCuePoints","AdEvent","onAdEvent","cuePoint","seekElement","cuePercentage","ad","getAd","adData","getAdData","LOADED","pollCountdown","isLinear","STARTED","ALL_ADS_COMPLETED","loadAds","contentComplete","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","LOG","adError","getMessage","cancel","addCuePoints","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","initialized","zIndex","handlers","safetyTimer","AV_PUBLISHERID","AV_CHANNELID","AV_URL","cb","AV_WIDTH","AV_HEIGHT","AV_CDIM2","clamp","parseVtt","vttDataString","processedList","frame","line","startTime","lineSplit","matchTimes","endTime","fitRatio","outer","PreviewThumbnails","getThumbnails","render","determineContainerAutoSizing","sortAndResolve","thumbnails","promises","getThumbnail","thumbnail","frames","urlPrefix","substring","lastIndexOf","tempImage","naturalHeight","_this$player$config$m","_this$player$config$m2","percentage","mousePosX","thumb","showImageAtCurrentTime","toggleThumbContainer","mouseDown","toggleScrubbingContainer","ceil","lastTime","scrubbing","setScrubbingContainerSize","setThumbContainerSizeAndPos","thumbNum","findIndex","hasThumb","qualityIndex","loadedImages","showingThumb","thumbFilename","thumbUrl","currentImageElement","dataset","filename","showImage","removeOldImages","loadingImage","usingSprites","previewImage","showingThumbFilename","newImage","setImageSizeAndOffset","currentImageContainer","preloadNearby","getHigherQuality","currentImage","tagName","removeDelay","deleting","oldThumbFilename","thumbnailsClone","foundOne","newThumbFilename","thumbURL","currentQualityIndex","previewImageHeight","thumbContainerHeight","clearShowing","sizeSpecifiedInCSS","thumbAspectRatio","thumbHeight","setThumbContainerPos","scrubberRect","containerRect","right","clamped","multiplier","lastMouseMoveTime","currentScrubbingImageElement","currentThumbnailImageElement","insertElements","change","crossorigin","Plyr","webkitShowPlaybackTargetPicker","isHidden","hiding","eventName","soft","original","unload","failed","jQuery","truthy","inputIsValid","fauxDuration","realDuration","Infinity","hasAudio","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","setPreviewThumbnails","thumbnailSource","static"],"mappings":"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","file":"plyr.polyfilled.min.mjs","sourcesContent":["// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function() {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', { cancelable: true });\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n } catch (e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {};\n params.bubbles = !!params.bubbles;\n params.cancelable = !!params.cancelable;\n\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(\n event,\n params.bubbles,\n params.cancelable,\n params.detail\n );\n origPrevent = evt.preventDefault;\n evt.preventDefault = function() {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function() {\n return true;\n }\n });\n } catch (e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n }\n})();\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\n(function () {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n var ce = new window.CustomEvent('test', {\n cancelable: true\n });\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n } catch (e) {\n var CustomEvent = function (event, params) {\n var evt, origPrevent;\n params = params || {};\n params.bubbles = !!params.bubbles;\n params.cancelable = !!params.cancelable;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch (e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n }\n})();\n\nvar commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\n(function (global) {\n /**\r\n * Polyfill URLSearchParams\r\n *\r\n * Inspired from : https://github.com/WebReflection/url-search-params/blob/master/src/url-search-params.js\r\n */\n\n var checkIfIteratorIsSupported = function () {\n try {\n return !!Symbol.iterator;\n } catch (error) {\n return false;\n }\n };\n var iteratorSupported = checkIfIteratorIsSupported();\n var createIterator = function (items) {\n var iterator = {\n next: function () {\n var value = items.shift();\n return {\n done: value === void 0,\n value: value\n };\n }\n };\n if (iteratorSupported) {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n return iterator;\n };\n\n /**\r\n * Search param name and values should be encoded according to https://url.spec.whatwg.org/#urlencoded-serializing\r\n * encodeURIComponent() produces the same result except encoding spaces as `%20` instead of `+`.\r\n */\n var serializeParam = function (value) {\n return encodeURIComponent(value).replace(/%20/g, '+');\n };\n var deserializeParam = function (value) {\n return decodeURIComponent(String(value).replace(/\\+/g, ' '));\n };\n var polyfillURLSearchParams = function () {\n var URLSearchParams = function (searchString) {\n Object.defineProperty(this, '_entries', {\n writable: true,\n value: {}\n });\n var typeofSearchString = typeof searchString;\n if (typeofSearchString === 'undefined') ; else if (typeofSearchString === 'string') {\n if (searchString !== '') {\n this._fromString(searchString);\n }\n } else if (searchString instanceof URLSearchParams) {\n var _this = this;\n searchString.forEach(function (value, name) {\n _this.append(name, value);\n });\n } else if (searchString !== null && typeofSearchString === 'object') {\n if (Object.prototype.toString.call(searchString) === '[object Array]') {\n for (var i = 0; i < searchString.length; i++) {\n var entry = searchString[i];\n if (Object.prototype.toString.call(entry) === '[object Array]' || entry.length !== 2) {\n this.append(entry[0], entry[1]);\n } else {\n throw new TypeError('Expected [string, any] as entry at index ' + i + ' of URLSearchParams\\'s input');\n }\n }\n } else {\n for (var key in searchString) {\n if (searchString.hasOwnProperty(key)) {\n this.append(key, searchString[key]);\n }\n }\n }\n } else {\n throw new TypeError('Unsupported input\\'s type for URLSearchParams');\n }\n };\n var proto = URLSearchParams.prototype;\n proto.append = function (name, value) {\n if (name in this._entries) {\n this._entries[name].push(String(value));\n } else {\n this._entries[name] = [String(value)];\n }\n };\n proto.delete = function (name) {\n delete this._entries[name];\n };\n proto.get = function (name) {\n return name in this._entries ? this._entries[name][0] : null;\n };\n proto.getAll = function (name) {\n return name in this._entries ? this._entries[name].slice(0) : [];\n };\n proto.has = function (name) {\n return name in this._entries;\n };\n proto.set = function (name, value) {\n this._entries[name] = [String(value)];\n };\n proto.forEach = function (callback, thisArg) {\n var entries;\n for (var name in this._entries) {\n if (this._entries.hasOwnProperty(name)) {\n entries = this._entries[name];\n for (var i = 0; i < entries.length; i++) {\n callback.call(thisArg, entries[i], name, this);\n }\n }\n }\n };\n proto.keys = function () {\n var items = [];\n this.forEach(function (value, name) {\n items.push(name);\n });\n return createIterator(items);\n };\n proto.values = function () {\n var items = [];\n this.forEach(function (value) {\n items.push(value);\n });\n return createIterator(items);\n };\n proto.entries = function () {\n var items = [];\n this.forEach(function (value, name) {\n items.push([name, value]);\n });\n return createIterator(items);\n };\n if (iteratorSupported) {\n proto[Symbol.iterator] = proto.entries;\n }\n proto.toString = function () {\n var searchArray = [];\n this.forEach(function (value, name) {\n searchArray.push(serializeParam(name) + '=' + serializeParam(value));\n });\n return searchArray.join('&');\n };\n global.URLSearchParams = URLSearchParams;\n };\n var checkIfURLSearchParamsSupported = function () {\n try {\n var URLSearchParams = global.URLSearchParams;\n return new URLSearchParams('?a=1').toString() === 'a=1' && typeof URLSearchParams.prototype.set === 'function' && typeof URLSearchParams.prototype.entries === 'function';\n } catch (e) {\n return false;\n }\n };\n if (!checkIfURLSearchParamsSupported()) {\n polyfillURLSearchParams();\n }\n var proto = global.URLSearchParams.prototype;\n if (typeof proto.sort !== 'function') {\n proto.sort = function () {\n var _this = this;\n var items = [];\n this.forEach(function (value, name) {\n items.push([name, value]);\n if (!_this._entries) {\n _this.delete(name);\n }\n });\n items.sort(function (a, b) {\n if (a[0] < b[0]) {\n return -1;\n } else if (a[0] > b[0]) {\n return +1;\n } else {\n return 0;\n }\n });\n if (_this._entries) {\n // force reset because IE keeps keys index\n _this._entries = {};\n }\n for (var i = 0; i < items.length; i++) {\n this.append(items[i][0], items[i][1]);\n }\n };\n }\n if (typeof proto._fromString !== 'function') {\n Object.defineProperty(proto, '_fromString', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: function (searchString) {\n if (this._entries) {\n this._entries = {};\n } else {\n var keys = [];\n this.forEach(function (value, name) {\n keys.push(name);\n });\n for (var i = 0; i < keys.length; i++) {\n this.delete(keys[i]);\n }\n }\n searchString = searchString.replace(/^\\?/, '');\n var attributes = searchString.split('&');\n var attribute;\n for (var i = 0; i < attributes.length; i++) {\n attribute = attributes[i].split('=');\n this.append(deserializeParam(attribute[0]), attribute.length > 1 ? deserializeParam(attribute[1]) : '');\n }\n }\n });\n }\n\n // HTMLAnchorElement\n})(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : commonjsGlobal);\n(function (global) {\n /**\r\n * Polyfill URL\r\n *\r\n * Inspired from : https://github.com/arv/DOM-URL-Polyfill/blob/master/src/url.js\r\n */\n\n var checkIfURLIsSupported = function () {\n try {\n var u = new global.URL('b', 'http://a');\n u.pathname = 'c d';\n return u.href === 'http://a/c%20d' && u.searchParams;\n } catch (e) {\n return false;\n }\n };\n var polyfillURL = function () {\n var _URL = global.URL;\n var URL = function (url, base) {\n if (typeof url !== 'string') url = String(url);\n if (base && typeof base !== 'string') base = String(base);\n\n // Only create another document if the base is different from current location.\n var doc = document,\n baseElement;\n if (base && (global.location === void 0 || base !== global.location.href)) {\n base = base.toLowerCase();\n doc = document.implementation.createHTMLDocument('');\n baseElement = doc.createElement('base');\n baseElement.href = base;\n doc.head.appendChild(baseElement);\n try {\n if (baseElement.href.indexOf(base) !== 0) throw new Error(baseElement.href);\n } catch (err) {\n throw new Error('URL unable to set base ' + base + ' due to ' + err);\n }\n }\n var anchorElement = doc.createElement('a');\n anchorElement.href = url;\n if (baseElement) {\n doc.body.appendChild(anchorElement);\n anchorElement.href = anchorElement.href; // force href to refresh\n }\n\n var inputElement = doc.createElement('input');\n inputElement.type = 'url';\n inputElement.value = url;\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href) || !inputElement.checkValidity() && !base) {\n throw new TypeError('Invalid URL');\n }\n Object.defineProperty(this, '_anchorElement', {\n value: anchorElement\n });\n\n // create a linked searchParams which reflect its changes on URL\n var searchParams = new global.URLSearchParams(this.search);\n var enableSearchUpdate = true;\n var enableSearchParamsUpdate = true;\n var _this = this;\n ['append', 'delete', 'set'].forEach(function (methodName) {\n var method = searchParams[methodName];\n searchParams[methodName] = function () {\n method.apply(searchParams, arguments);\n if (enableSearchUpdate) {\n enableSearchParamsUpdate = false;\n _this.search = searchParams.toString();\n enableSearchParamsUpdate = true;\n }\n };\n });\n Object.defineProperty(this, 'searchParams', {\n value: searchParams,\n enumerable: true\n });\n var search = void 0;\n Object.defineProperty(this, '_updateSearchParams', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: function () {\n if (this.search !== search) {\n search = this.search;\n if (enableSearchParamsUpdate) {\n enableSearchUpdate = false;\n this.searchParams._fromString(this.search);\n enableSearchUpdate = true;\n }\n }\n }\n });\n };\n var proto = URL.prototype;\n var linkURLWithAnchorAttribute = function (attributeName) {\n Object.defineProperty(proto, attributeName, {\n get: function () {\n return this._anchorElement[attributeName];\n },\n set: function (value) {\n this._anchorElement[attributeName] = value;\n },\n enumerable: true\n });\n };\n ['hash', 'host', 'hostname', 'port', 'protocol'].forEach(function (attributeName) {\n linkURLWithAnchorAttribute(attributeName);\n });\n Object.defineProperty(proto, 'search', {\n get: function () {\n return this._anchorElement['search'];\n },\n set: function (value) {\n this._anchorElement['search'] = value;\n this._updateSearchParams();\n },\n enumerable: true\n });\n Object.defineProperties(proto, {\n 'toString': {\n get: function () {\n var _this = this;\n return function () {\n return _this.href;\n };\n }\n },\n 'href': {\n get: function () {\n return this._anchorElement.href.replace(/\\?$/, '');\n },\n set: function (value) {\n this._anchorElement.href = value;\n this._updateSearchParams();\n },\n enumerable: true\n },\n 'pathname': {\n get: function () {\n return this._anchorElement.pathname.replace(/(^\\/?)/, '/');\n },\n set: function (value) {\n this._anchorElement.pathname = value;\n },\n enumerable: true\n },\n 'origin': {\n get: function () {\n // get expected port from protocol\n var expectedPort = {\n 'http:': 80,\n 'https:': 443,\n 'ftp:': 21\n }[this._anchorElement.protocol];\n // add port to origin if, expected port is different than actual port\n // and it is not empty f.e http://foo:8080\n // 8080 != 80 && 8080 != ''\n var addPortToOrigin = this._anchorElement.port != expectedPort && this._anchorElement.port !== '';\n return this._anchorElement.protocol + '//' + this._anchorElement.hostname + (addPortToOrigin ? ':' + this._anchorElement.port : '');\n },\n enumerable: true\n },\n 'password': {\n // TODO\n get: function () {\n return '';\n },\n set: function (value) {},\n enumerable: true\n },\n 'username': {\n // TODO\n get: function () {\n return '';\n },\n set: function (value) {},\n enumerable: true\n }\n });\n URL.createObjectURL = function (blob) {\n return _URL.createObjectURL.apply(_URL, arguments);\n };\n URL.revokeObjectURL = function (url) {\n return _URL.revokeObjectURL.apply(_URL, arguments);\n };\n global.URL = URL;\n };\n if (!checkIfURLIsSupported()) {\n polyfillURL();\n }\n if (global.location !== void 0 && !('origin' in global.location)) {\n var getOrigin = function () {\n return global.location.protocol + '//' + global.location.hostname + (global.location.port ? ':' + global.location.port : '');\n };\n try {\n Object.defineProperty(global.location, 'origin', {\n get: getOrigin,\n enumerable: true\n });\n } catch (e) {\n setInterval(function () {\n global.location.origin = getOrigin();\n }, 100);\n }\n }\n})(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : commonjsGlobal);\n\nfunction _defineProperty$1(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nfunction _classCallCheck(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction _defineProperties(e, t) {\n for (var n = 0; n < t.length; n++) {\n var r = t[n];\n r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r);\n }\n}\nfunction _createClass(e, t, n) {\n return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e;\n}\nfunction _defineProperty(e, t, n) {\n return t in e ? Object.defineProperty(e, t, {\n value: n,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[t] = n, e;\n}\nfunction ownKeys(e, t) {\n var n = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var r = Object.getOwnPropertySymbols(e);\n t && (r = r.filter(function (t) {\n return Object.getOwnPropertyDescriptor(e, t).enumerable;\n })), n.push.apply(n, r);\n }\n return n;\n}\nfunction _objectSpread2(e) {\n for (var t = 1; t < arguments.length; t++) {\n var n = null != arguments[t] ? arguments[t] : {};\n t % 2 ? ownKeys(Object(n), !0).forEach(function (t) {\n _defineProperty(e, t, n[t]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : ownKeys(Object(n)).forEach(function (t) {\n Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t));\n });\n }\n return e;\n}\nvar defaults$1 = {\n addCSS: !0,\n thumbWidth: 15,\n watch: !0\n};\nfunction matches$1(e, t) {\n return function () {\n return Array.from(document.querySelectorAll(t)).includes(this);\n }.call(e, t);\n}\nfunction trigger(e, t) {\n if (e && t) {\n var n = new Event(t, {\n bubbles: !0\n });\n e.dispatchEvent(n);\n }\n}\nvar getConstructor$1 = function (e) {\n return null != e ? e.constructor : null;\n },\n instanceOf$1 = function (e, t) {\n return !!(e && t && e instanceof t);\n },\n isNullOrUndefined$1 = function (e) {\n return null == e;\n },\n isObject$1 = function (e) {\n return getConstructor$1(e) === Object;\n },\n isNumber$1 = function (e) {\n return getConstructor$1(e) === Number && !Number.isNaN(e);\n },\n isString$1 = function (e) {\n return getConstructor$1(e) === String;\n },\n isBoolean$1 = function (e) {\n return getConstructor$1(e) === Boolean;\n },\n isFunction$1 = function (e) {\n return getConstructor$1(e) === Function;\n },\n isArray$1 = function (e) {\n return Array.isArray(e);\n },\n isNodeList$1 = function (e) {\n return instanceOf$1(e, NodeList);\n },\n isElement$1 = function (e) {\n return instanceOf$1(e, Element);\n },\n isEvent$1 = function (e) {\n return instanceOf$1(e, Event);\n },\n isEmpty$1 = function (e) {\n return isNullOrUndefined$1(e) || (isString$1(e) || isArray$1(e) || isNodeList$1(e)) && !e.length || isObject$1(e) && !Object.keys(e).length;\n },\n is$1 = {\n nullOrUndefined: isNullOrUndefined$1,\n object: isObject$1,\n number: isNumber$1,\n string: isString$1,\n boolean: isBoolean$1,\n function: isFunction$1,\n array: isArray$1,\n nodeList: isNodeList$1,\n element: isElement$1,\n event: isEvent$1,\n empty: isEmpty$1\n };\nfunction getDecimalPlaces(e) {\n var t = \"\".concat(e).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n return t ? Math.max(0, (t[1] ? t[1].length : 0) - (t[2] ? +t[2] : 0)) : 0;\n}\nfunction round(e, t) {\n if (1 > t) {\n var n = getDecimalPlaces(t);\n return parseFloat(e.toFixed(n));\n }\n return Math.round(e / t) * t;\n}\nvar RangeTouch = function () {\n function e(t, n) {\n _classCallCheck(this, e), is$1.element(t) ? this.element = t : is$1.string(t) && (this.element = document.querySelector(t)), is$1.element(this.element) && is$1.empty(this.element.rangeTouch) && (this.config = _objectSpread2({}, defaults$1, {}, n), this.init());\n }\n return _createClass(e, [{\n key: \"init\",\n value: function () {\n 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);\n }\n }, {\n key: \"destroy\",\n value: function () {\n e.enabled && (this.config.addCSS && (this.element.style.userSelect = \"\", this.element.style.webKitUserSelect = \"\", this.element.style.touchAction = \"\"), this.listeners(!1), this.element.rangeTouch = null);\n }\n }, {\n key: \"listeners\",\n value: function (e) {\n var t = this,\n n = e ? \"addEventListener\" : \"removeEventListener\";\n [\"touchstart\", \"touchmove\", \"touchend\"].forEach(function (e) {\n t.element[n](e, function (e) {\n return t.set(e);\n }, !1);\n });\n }\n }, {\n key: \"get\",\n value: function (t) {\n if (!e.enabled || !is$1.event(t)) return null;\n var n,\n r = t.target,\n i = t.changedTouches[0],\n o = parseFloat(r.getAttribute(\"min\")) || 0,\n s = parseFloat(r.getAttribute(\"max\")) || 100,\n u = parseFloat(r.getAttribute(\"step\")) || 1,\n c = r.getBoundingClientRect(),\n a = 100 / c.width * (this.config.thumbWidth / 2) / 100;\n return 0 > (n = 100 / c.width * (i.clientX - c.left)) ? n = 0 : 100 < n && (n = 100), 50 > n ? n -= (100 - 2 * n) * a : 50 < n && (n += 2 * (n - 50) * a), o + round(n / 100 * (s - o), u);\n }\n }, {\n key: \"set\",\n value: function (t) {\n e.enabled && is$1.event(t) && !t.target.disabled && (t.preventDefault(), t.target.value = this.get(t), trigger(t.target, \"touchend\" === t.type ? \"change\" : \"input\"));\n }\n }], [{\n key: \"setup\",\n value: function (t) {\n var n = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : {},\n r = null;\n if (is$1.empty(t) || is$1.string(t) ? r = Array.from(document.querySelectorAll(is$1.string(t) ? t : 'input[type=\"range\"]')) : is$1.element(t) ? r = [t] : is$1.nodeList(t) ? r = Array.from(t) : is$1.array(t) && (r = t.filter(is$1.element)), is$1.empty(r)) return null;\n var i = _objectSpread2({}, defaults$1, {}, n);\n if (is$1.string(t) && i.watch) {\n var o = new MutationObserver(function (n) {\n Array.from(n).forEach(function (n) {\n Array.from(n.addedNodes).forEach(function (n) {\n is$1.element(n) && matches$1(n, t) && new e(n, i);\n });\n });\n });\n o.observe(document.body, {\n childList: !0,\n subtree: !0\n });\n }\n return r.map(function (t) {\n return new e(t, n);\n });\n }\n }, {\n key: \"enabled\",\n get: function () {\n return \"ontouchstart\" in document.documentElement;\n }\n }]), e;\n}();\n\n// ==========================================================================\n// Type checking utils\n// ==========================================================================\n\nconst getConstructor = input => input !== null && typeof input !== 'undefined' ? input.constructor : null;\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\nconst isObject = input => getConstructor(input) === Object;\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\nconst isString = input => getConstructor(input) === String;\nconst isBoolean = input => getConstructor(input) === Boolean;\nconst isFunction = input => typeof input === 'function';\nconst isArray = input => Array.isArray(input);\nconst isWeakMap = input => instanceOf(input, WeakMap);\nconst isNodeList = input => instanceOf(input, NodeList);\nconst isTextNode = input => getConstructor(input) === Text;\nconst isEvent = input => instanceOf(input, Event);\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\nconst isTrack = input => instanceOf(input, TextTrack) || !isNullOrUndefined(input) && isString(input.kind);\nconst isPromise = input => instanceOf(input, Promise) && isFunction(input.then);\nconst isElement = input => input !== null && typeof input === 'object' && input.nodeType === 1 && typeof input.style === 'object' && typeof input.ownerDocument === 'object';\nconst isEmpty = input => isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n }\n\n // Must be string from here\n if (!isString(input)) {\n return false;\n }\n\n // Add the protocol if required\n let string = input;\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (_) {\n return false;\n }\n};\nvar is = {\n nullOrUndefined: isNullOrUndefined,\n object: isObject,\n number: isNumber,\n string: isString,\n boolean: isBoolean,\n function: isFunction,\n array: isArray,\n weakMap: isWeakMap,\n nodeList: isNodeList,\n element: isElement,\n textNode: isTextNode,\n event: isEvent,\n keyboardEvent: isKeyboardEvent,\n cue: isCue,\n track: isTrack,\n promise: isPromise,\n url: isUrl,\n empty: isEmpty\n};\n\n// ==========================================================================\nconst transitionEndEvent = (() => {\n const element = document.createElement('span');\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend'\n };\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n return is.string(type) ? events[type] : false;\n})();\n\n// Force repaint of element\nfunction repaint(element, delay) {\n setTimeout(() => {\n try {\n // eslint-disable-next-line no-param-reassign\n element.hidden = true;\n\n // eslint-disable-next-line no-unused-expressions\n element.offsetHeight;\n\n // eslint-disable-next-line no-param-reassign\n element.hidden = false;\n } catch (_) {\n // Do nothing\n }\n }, delay);\n}\n\n// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\n\nconst isIE = Boolean(window.document.documentMode);\nconst isEdge = /Edge/g.test(navigator.userAgent);\nconst isWebKit = 'WebkitAppearance' in document.documentElement.style && !/Edge/g.test(navigator.userAgent);\nconst isIPhone = /iPhone|iPod/gi.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\n// navigator.platform may be deprecated but this check is still required\nconst isIPadOS = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;\nconst isIos = /iPad|iPhone|iPod/gi.test(navigator.userAgent) && navigator.maxTouchPoints > 1;\nvar browser = {\n isIE,\n isEdge,\n isWebKit,\n isIPhone,\n isIPadOS,\n isIos\n};\n\n// ==========================================================================\n\n// Clone nested objects\nfunction cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n}\n\n// Get a nested value in an object\nfunction getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n}\n\n// Deep extend destination object with N more objects\nfunction extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n const source = sources.shift();\n if (!is.object(source)) {\n return target;\n }\n Object.keys(source).forEach(key => {\n if (is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, {\n [key]: {}\n });\n }\n extend(target[key], source[key]);\n } else {\n Object.assign(target, {\n [key]: source[key]\n });\n }\n });\n return extend(target, ...sources);\n}\n\n// ==========================================================================\n\n// Wrap an element\nfunction wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets).reverse().forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n}\n\n// Set attributes\nfunction setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) return;\n\n // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n Object.entries(attributes).filter(([, value]) => !is.nullOrUndefined(value)).forEach(([key, value]) => element.setAttribute(key, value));\n}\n\n// Create a DocumentFragment\nfunction createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type);\n\n // Set all passed attributes\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n }\n\n // Add text node\n if (is.string(text)) {\n element.innerText = text;\n }\n\n // Return built element\n return element;\n}\n\n// Insert an element after another\nfunction insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) return;\n target.parentNode.insertBefore(element, target.nextSibling);\n}\n\n// Insert a DocumentFragment\nfunction insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) return;\n parent.appendChild(createElement(type, attributes, text));\n}\n\n// Remove element(s)\nfunction removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n element.parentNode.removeChild(element);\n}\n\n// Remove all child elements\nfunction emptyElement(element) {\n if (!is.element(element)) return;\n let {\n length\n } = element.childNodes;\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n}\n\n// Replace element\nfunction replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) return null;\n oldChild.parentNode.replaceChild(newChild, oldChild);\n return newChild;\n}\n\n// Get an attribute object from a string selector\nfunction getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!is.string(sel) || is.empty(sel)) return {};\n const attributes = {};\n const existing = extend({}, existingAttributes);\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n // Get the parts and value\n const parts = stripped.split('=');\n const [key] = parts;\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n // Get the first character\n const start = selector.charAt(0);\n switch (start) {\n case '.':\n // Add to existing classname\n if (is.string(existing.class)) {\n attributes.class = `${existing.class} ${className}`;\n } else {\n attributes.class = className;\n }\n break;\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n case '[':\n // Attribute selector\n attributes[key] = value;\n break;\n }\n });\n return extend(existing, attributes);\n}\n\n// Toggle hidden\nfunction toggleHidden(element, hidden) {\n if (!is.element(element)) return;\n let hide = hidden;\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n }\n\n // eslint-disable-next-line no-param-reassign\n element.hidden = hide;\n}\n\n// Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\nfunction toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n if (is.element(element)) {\n let method = 'toggle';\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n element.classList[method](className);\n return element.classList.contains(className);\n }\n return false;\n}\n\n// Has class name\nfunction hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n}\n\n// Element matches selector\nfunction matches(element, selector) {\n const {\n prototype\n } = Element;\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n const method = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n return method.call(element, selector);\n}\n\n// Closest ancestor element matching selector (also tests element itself)\nfunction closest$1(element, selector) {\n const {\n prototype\n } = Element;\n\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n function closestElement() {\n let el = this;\n do {\n if (matches.matches(el, selector)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n return null;\n }\n const method = prototype.closest || closestElement;\n return method.call(element, selector);\n}\n\n// Find all elements\nfunction getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n}\n\n// Find a single element\nfunction getElement(selector) {\n return this.elements.container.querySelector(selector);\n}\n\n// Set focus and tab focus class\nfunction setFocus(element = null, focusVisible = false) {\n if (!is.element(element)) return;\n\n // Set regular focus\n element.focus({\n preventScroll: true,\n focusVisible\n });\n}\n\n// ==========================================================================\n\n// Default codecs for checking mimetype support\nconst defaultCodecs = {\n 'audio/ogg': 'vorbis',\n 'audio/wav': '1',\n 'video/webm': 'vp8, vorbis',\n 'video/mp4': 'avc1.42E01E, mp4a.40.2',\n 'video/ogg': 'theora'\n};\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n // Check for support\n // Basic functionality vs full UI\n check(type, provider) {\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput;\n return {\n api,\n ui\n };\n },\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n // While iPhone's support picture-in-picture for some apps, seemingly Safari isn't one of them\n // It will throw the following error when trying to enter picture-in-picture\n // `NotSupportedError: The Picture-in-Picture mode is not supported.`\n if (browser.isIPhone) {\n return false;\n }\n\n // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n }\n\n // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\n return false;\n })(),\n // Airplay support\n // Safari only currently\n airplay: is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n playsinline: 'playsInline' in document.createElement('video'),\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(input) {\n if (is.empty(input)) {\n return false;\n }\n const [mediaType] = input.split('/');\n let type = input;\n\n // Verify we're using HTML5 and there's no media type mismatch\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n }\n\n // Add codec if required\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[input]}\"`;\n }\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (_) {\n return false;\n }\n },\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n // Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n // Touch\n // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n touch: 'ontouchstart' in document.documentElement,\n // Detect transitions support\n transitions: transitionEndEvent !== false,\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches\n};\n\n// ==========================================================================\n\n// Check for passive event listener support\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\nconst supportsPassiveListeners = (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n }\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (_) {\n // Do nothing\n }\n return supported;\n})();\n\n// Toggle event listener\nfunction toggleListener(element, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no element, event, or callback\n if (!element || !('addEventListener' in element) || is.empty(event) || !is.function(callback)) {\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (supportsPassiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n if (this && this.eventListeners && toggle) {\n // Cache event listener\n this.eventListeners.push({\n element,\n type,\n callback,\n options\n });\n }\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n}\n\n// Bind event handler\nfunction on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n}\n\n// Unbind event handler\nfunction off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n}\n\n// Bind once-only event handler\nfunction once(element, events = '', callback, passive = true, capture = false) {\n const onceCallback = (...args) => {\n off(element, events, onceCallback, passive, capture);\n callback.apply(this, args);\n };\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n}\n\n// Trigger event\nfunction triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: {\n ...detail,\n plyr: this\n }\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n}\n\n// Unbind all cached event listeners\nfunction unbindListeners() {\n if (this && this.eventListeners) {\n this.eventListeners.forEach(item => {\n const {\n element,\n type,\n callback,\n options\n } = item;\n element.removeEventListener(type, callback, options);\n });\n this.eventListeners = [];\n }\n}\n\n// Run method when / if player is ready\nfunction ready() {\n return new Promise(resolve => this.ready ? setTimeout(resolve, 0) : on.call(this, this.elements.container, 'ready', resolve)).then(() => {});\n}\n\n/**\n * Silence a Promise-like object.\n * This is useful for avoiding non-harmful, but potentially confusing \"uncaught\n * play promise\" rejection error messages.\n * @param {Object} value An object that may or may not be `Promise`-like.\n */\nfunction silencePromise(value) {\n if (is.promise(value)) {\n value.then(null, () => {});\n }\n}\n\n// ==========================================================================\n\n// Remove duplicates in an array\nfunction dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n return array.filter((item, index) => array.indexOf(item) === index);\n}\n\n// Get the closest value in an array\nfunction closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n return array.reduce((prev, curr) => Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev);\n}\n\n// ==========================================================================\n\n// Check support for a CSS declaration\nfunction supportsCSS(declaration) {\n if (!window || !window.CSS) {\n return false;\n }\n return window.CSS.supports(declaration);\n}\n\n// Standard/common aspect ratios\nconst standardRatios = [[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((out, [x, y]) => ({\n ...out,\n [x / y]: [x, y]\n}), {});\n\n// Validate an aspect ratio\nfunction validateAspectRatio(input) {\n if (!is.array(input) && (!is.string(input) || !input.includes(':'))) {\n return false;\n }\n const ratio = is.array(input) ? input : input.split(':');\n return ratio.map(Number).every(is.number);\n}\n\n// Reduce an aspect ratio to it's lowest form\nfunction reduceAspectRatio(ratio) {\n if (!is.array(ratio) || !ratio.every(is.number)) {\n return null;\n }\n const [width, height] = ratio;\n const getDivider = (w, h) => h === 0 ? w : getDivider(h, w % h);\n const divider = getDivider(width, height);\n return [width / divider, height / divider];\n}\n\n// Calculate an aspect ratio\nfunction getAspectRatio(input) {\n const parse = ratio => validateAspectRatio(ratio) ? ratio.split(':').map(Number) : null;\n // Try provided ratio\n let ratio = parse(input);\n\n // Get from config\n if (ratio === null) {\n ratio = parse(this.config.ratio);\n }\n\n // Get from embed\n if (ratio === null && !is.empty(this.embed) && is.array(this.embed.ratio)) {\n ({\n ratio\n } = this.embed);\n }\n\n // Get from HTML5 video\n if (ratio === null && this.isHTML5) {\n const {\n videoWidth,\n videoHeight\n } = this.media;\n ratio = [videoWidth, videoHeight];\n }\n return reduceAspectRatio(ratio);\n}\n\n// Set aspect ratio for responsive container\nfunction setAspectRatio(input) {\n if (!this.isVideo) {\n return {};\n }\n const {\n wrapper\n } = this.elements;\n const ratio = getAspectRatio.call(this, input);\n if (!is.array(ratio)) {\n return {};\n }\n const [x, y] = reduceAspectRatio(ratio);\n const useNative = supportsCSS(`aspect-ratio: ${x}/${y}`);\n const padding = 100 / x * y;\n if (useNative) {\n wrapper.style.aspectRatio = `${x}/${y}`;\n } else {\n wrapper.style.paddingBottom = `${padding}%`;\n }\n\n // For Vimeo we have an extra
to hide the standard controls and UI\n if (this.isVimeo && !this.config.vimeo.premium && this.supported.ui) {\n const height = 100 / this.media.offsetWidth * parseInt(window.getComputedStyle(this.media).paddingBottom, 10);\n const offset = (height - padding) / (height / 50);\n if (this.fullscreen.active) {\n wrapper.style.paddingBottom = null;\n } else {\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n } else if (this.isHTML5) {\n wrapper.classList.add(this.config.classNames.videoFixedRatio);\n }\n return {\n padding,\n ratio\n };\n}\n\n// Round an aspect ratio to closest standard ratio\nfunction roundAspectRatio(x, y, tolerance = 0.05) {\n const ratio = x / y;\n const closestRatio = closest(Object.keys(standardRatios), ratio);\n\n // Check match is within tolerance\n if (Math.abs(closestRatio - ratio) <= tolerance) {\n return standardRatios[closestRatio];\n }\n\n // No match\n return [x, y];\n}\n\n// Get the size of the viewport\n// https://stackoverflow.com/questions/1248081/how-to-get-the-browser-viewport-dimensions\nfunction getViewportSize() {\n const width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\n const height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\n return [width, height];\n}\n\n// ==========================================================================\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return [];\n }\n const sources = Array.from(this.media.querySelectorAll('source'));\n\n // Filter out unsupported sources (if type is specified)\n return sources.filter(source => {\n const type = source.getAttribute('type');\n if (is.empty(type)) {\n return true;\n }\n return support.mime.call(this, type);\n });\n },\n // Get quality levels\n getQualityOptions() {\n // Whether we're forcing all options (e.g. for streaming)\n if (this.config.quality.forced) {\n return this.config.quality.options;\n }\n\n // Get sizes from elements\n return html5.getSources.call(this).map(source => Number(source.getAttribute('size'))).filter(Boolean);\n },\n setup() {\n if (!this.isHTML5) {\n return;\n }\n const player = this;\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set aspect ratio if fixed\n if (!is.empty(this.config.ratio)) {\n setAspectRatio.call(player);\n }\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n const source = sources.find(s => s.getAttribute('src') === player.source);\n\n // Return size, if match is found\n return source && Number(source.getAttribute('size'));\n },\n set(input) {\n if (player.quality === input) {\n return;\n }\n\n // If we're using an external handler...\n if (player.config.quality.forced && is.function(player.config.quality.onChange)) {\n player.config.quality.onChange(input);\n } else {\n // Get sources\n const sources = html5.getSources.call(player);\n // Get first match for requested size\n const source = sources.find(s => Number(s.getAttribute('size')) === input);\n\n // No matching source found\n if (!source) {\n return;\n }\n\n // Get current state\n const {\n currentTime,\n paused,\n preload,\n readyState,\n playbackRate\n } = player.media;\n\n // Set new source\n player.media.src = source.getAttribute('src');\n\n // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.speed = playbackRate;\n player.currentTime = currentTime;\n\n // Resume playing\n if (!paused) {\n silencePromise(player.play());\n }\n });\n\n // Load new source\n player.media.load();\n }\n }\n\n // Trigger change event\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input\n });\n }\n });\n },\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n removeElement(html5.getSources.call(this));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n }\n};\n\n// ==========================================================================\n\n// Generate a random ID\nfunction generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n}\n\n// Format string\nfunction format(input, ...args) {\n if (is.empty(input)) return input;\n return input.toString().replace(/{(\\d+)}/g, (_, i) => args[i].toString());\n}\n\n// Get percentage\nfunction getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n}\n\n// Replace all occurrences of a string in a string\nconst replaceAll = (input = '', find = '', replace = '') => input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n\n// Convert to title case\nconst toTitleCase = (input = '') => input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase());\n\n// Convert string to pascalCase\nfunction toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = toTitleCase(string);\n\n // Convert to pascal case\n return replaceAll(string, ' ', '');\n}\n\n// Convert string to pascalCase\nfunction toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n}\n\n// Remove HTML from a string\nfunction stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n}\n\n// Like outerHTML, but also works for DocumentFragment\nfunction getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n\n// ==========================================================================\n\n// Skip i18n for abbreviations and brand names\nconst resources = {\n pip: 'PIP',\n airplay: 'AirPlay',\n html5: 'HTML5',\n vimeo: 'Vimeo',\n youtube: 'YouTube'\n};\nconst i18n = {\n get(key = '', config = {}) {\n if (is.empty(key) || is.empty(config)) {\n return '';\n }\n let string = getDeep(config.i18n, key);\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n return '';\n }\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title\n };\n Object.entries(replace).forEach(([k, v]) => {\n string = replaceAll(string, k, v);\n });\n return string;\n }\n};\n\nclass Storage {\n constructor(player) {\n _defineProperty$1(this, \"get\", key => {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n const store = window.localStorage.getItem(this.key);\n if (is.empty(store)) {\n return null;\n }\n const json = JSON.parse(store);\n return is.string(key) && key.length ? json[key] : json;\n });\n _defineProperty$1(this, \"set\", object => {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n extend(storage, object);\n\n // Update storage\n try {\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n } catch (_) {\n // Do nothing\n }\n });\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (_) {\n return false;\n }\n }\n}\n\n// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\n\nfunction fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (_) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n request.addEventListener('error', () => {\n throw new Error(request.status);\n });\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n request.send();\n } catch (error) {\n reject(error);\n }\n });\n}\n\n// ==========================================================================\n\n// Load an external SVG sprite\nfunction loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n const exists = () => document.getElementById(id) !== null;\n const update = (container, data) => {\n // eslint-disable-next-line no-param-reassign\n container.innerHTML = data;\n\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject the SVG to the body\n document.body.insertAdjacentElement('afterbegin', container);\n };\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n const useStorage = Storage.supported;\n // Create container\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n }\n\n // Get the sprite\n fetch(url).then(result => {\n if (is.empty(result)) {\n return;\n }\n if (useStorage) {\n try {\n window.localStorage.setItem(`${prefix}-${id}`, JSON.stringify({\n content: result\n }));\n } catch (_) {\n // Do nothing\n }\n }\n update(container, result);\n }).catch(() => {});\n }\n}\n\n// ==========================================================================\n\n// Time helpers\nconst getHours = value => Math.trunc(value / 60 / 60 % 60, 10);\nconst getMinutes = value => Math.trunc(value / 60 % 60, 10);\nconst getSeconds = value => Math.trunc(value % 60, 10);\n\n// Format time to UI friendly string\nfunction formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!is.number(time)) {\n return formatTime(undefined, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n // Breakdown to hours, mins, secs\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n\n// ==========================================================================\n\n// TODO: Don't export a massive object - break down and create class\nconst controls = {\n // Get icon URL\n getIconUrl() {\n const url = new URL(this.config.iconUrl, window.location);\n const host = window.location.host ? window.location.host : window.top.location.host;\n const cors = url.host !== host || browser.isIE && !window.svg4everybody;\n return {\n url: this.config.iconUrl,\n cors\n };\n },\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: getElements.call(this, this.config.selectors.buttons.play),\n pause: getElement.call(this, this.config.selectors.buttons.pause),\n restart: getElement.call(this, this.config.selectors.buttons.restart),\n rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: getElement.call(this, this.config.selectors.buttons.mute),\n pip: getElement.call(this, this.config.selectors.buttons.pip),\n airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n settings: getElement.call(this, this.config.selectors.buttons.settings),\n captions: getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen)\n };\n\n // Progress\n this.elements.progress = getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: getElement.call(this, this.config.selectors.inputs.seek),\n volume: getElement.call(this, this.config.selectors.inputs.volume)\n };\n\n // Display\n this.elements.display = {\n buffer: getElement.call(this, this.config.selectors.display.buffer),\n currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n duration: getElement.call(this, this.config.selectors.display.duration)\n };\n\n // Seek tooltip\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n return false;\n }\n },\n // Create icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.cors ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n // Create \n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(icon, extend(attributes, {\n 'aria-hidden': 'true',\n focusable: 'false'\n }));\n\n // Create the to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n }\n\n // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n\n // Add to \n icon.appendChild(use);\n return icon;\n },\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n const attributes = {\n ...attr,\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ')\n };\n return createElement('span', attributes, text);\n },\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\n const badge = createElement('span', {\n class: this.config.classNames.menu.value\n });\n badge.appendChild(createElement('span', {\n class: this.config.classNames.menu.badge\n }, text));\n return badge;\n },\n // Create a
`);\n }\n\n // Set position\n tipElement.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n controls.updateProgress.call(this, event);\n },\n // Show the duration on metadataloaded or durationchange events\n durationUpdate() {\n // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n if (!this.supported.ui || !this.config.invertTime && this.currentTime) {\n return;\n }\n\n // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n }\n\n // Update ARIA values\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n }\n\n // If there's a spot to display duration\n const hasDuration = is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n if (this.config.markers.enabled) {\n controls.setMarkers.call(this);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panels[setting];\n let value = null;\n let list = container;\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting];\n\n // Get default\n if (is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n }\n\n // Get the list if we need to\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n }\n\n // If there's no list it means it's not been rendered...\n if (!is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n if (is.element(target)) {\n target.checked = true;\n }\n },\n // Translate a value into a nice label\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? i18n.get('normal', this.config) : `${value}×`;\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n if (!label.length) {\n return `${value}p`;\n }\n return label;\n }\n return toTitleCase(value);\n case 'captions':\n return captions.getLabel.call(this);\n default:\n return null;\n }\n },\n // Set the quality menu\n setQualityMenu(options) {\n // Menu required\n if (!is.element(this.elements.settings.panels.quality)) {\n return;\n }\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]');\n\n // Set options if passed and filter based on uniqueness and config\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n if (!label.length) {\n return null;\n }\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality.sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n }).forEach(quality => {\n controls.createMenuItem.call(this, {\n value: quality,\n list,\n type,\n title: controls.getLabel.call(this, 'quality', quality),\n badge: getBadge(quality)\n });\n });\n controls.updateSetting.call(this, type, list);\n },\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.loop)) {\n return;\n }\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n // Show the pane and tab\n toggleHidden(this.elements.settings.buttons.loop, false);\n toggleHidden(this.elements.settings.panels.loop, false);\n // Toggle the pane and tab\n const toggle = !is.empty(this.loop.options);\n controls.toggleMenuButton.call(this, 'loop', toggle);\n // Empty the menu\n emptyElement(list);\n options.forEach(option => {\n const item = createElement('li');\n const button = createElement(\n 'button',\n extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n i18n.get(option, this.config)\n );\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.captions)) {\n return;\n }\n\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n const tracks = captions.getTracks.call(this);\n const toggle = Boolean(tracks.length);\n\n // Toggle the pane and tab\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Generate options data\n const options = tracks.map((track, value) => ({\n value,\n checked: this.captions.toggled && this.currentTrack === value,\n title: captions.getLabel.call(this, track),\n badge: track.language && controls.createBadge.call(this, track.language.toUpperCase()),\n list,\n type: 'language'\n }));\n\n // Add the \"Disabled\" option to turn off captions\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language'\n });\n\n // Generate options\n options.forEach(controls.createMenuItem.bind(this));\n controls.updateSetting.call(this, type, list);\n },\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!is.element(this.elements.settings.panels.speed)) {\n return;\n }\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]');\n\n // Filter out invalid speeds\n this.options.speed = this.options.speed.filter(o => o >= this.minimumSpeed && o <= this.maximumSpeed);\n\n // Toggle the pane and tab\n const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle);\n\n // Empty the menu\n emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Create items\n this.options.speed.forEach(speed => {\n controls.createMenuItem.call(this, {\n value: speed,\n list,\n type,\n title: controls.getLabel.call(this, 'speed', speed)\n });\n });\n controls.updateSetting.call(this, type, list);\n },\n // Check if we need to hide/show the settings menu\n checkMenu() {\n const {\n buttons\n } = this.elements.settings;\n const visible = !is.empty(buttons) && Object.values(buttons).some(button => !button.hidden);\n toggleHidden(this.elements.settings.menu, !visible);\n },\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, focusVisible = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n let target = pane;\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(p => !p.hidden);\n }\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, focusVisible);\n },\n // Show/hide menu\n toggleMenu(input) {\n const {\n popup\n } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!is.element(popup) || !is.element(button)) {\n return;\n }\n\n // True toggle by default\n const {\n hidden\n } = popup;\n let show = hidden;\n if (is.boolean(input)) {\n show = input;\n } else if (is.keyboardEvent(input) && input.key === 'Escape') {\n show = false;\n } else if (is.event(input)) {\n // If Plyr is in a shadowDOM, the event target is set to the component, instead of the\n // Element in the shadowDOM. The path, if available, is complete.\n const target = is.function(input.composedPath) ? input.composedPath()[0] : input.target;\n const isMenuItem = popup.contains(target);\n\n // If the click was inside the menu or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || !isMenuItem && input.target !== button && show) {\n return;\n }\n }\n\n // Set button attributes\n button.setAttribute('aria-expanded', show);\n\n // Show the actual popup\n toggleHidden(popup, !show);\n\n // Add class hook\n toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n // Focus the first item if key interaction\n if (show && is.keyboardEvent(input)) {\n controls.focusFirstMenuItem.call(this, null, true);\n } else if (!show && !hidden) {\n // If closing, re-focus the button\n setFocus.call(this, button, is.keyboardEvent(input));\n }\n },\n // Get the natural size of a menu panel\n getMenuSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.removeAttribute('hidden');\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n removeElement(clone);\n return {\n width,\n height\n };\n },\n // Show a panel in the menu\n showMenuPanel(type = '', focusVisible = false) {\n const target = this.elements.container.querySelector(`#plyr-settings-${this.id}-${type}`);\n\n // Nothing to show, bail\n if (!is.element(target)) {\n return;\n }\n\n // Hide all other panels\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden);\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getMenuSize.call(this, target);\n\n // Restore auto height/width\n const restore = event => {\n // We're only bothered about height and width on the container\n if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n off.call(this, container, transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n on.call(this, container, transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n toggleHidden(current, true);\n\n // Set attributes on target\n toggleHidden(target, false);\n\n // Focus the first item\n controls.focusFirstMenuItem.call(this, target, focusVisible);\n },\n // Set the download URL\n setDownloadUrl() {\n const button = this.elements.buttons.download;\n\n // Bail if no button\n if (!is.element(button)) {\n return;\n }\n\n // Set attribute\n button.setAttribute('href', this.download);\n },\n // Build the default HTML\n create(data) {\n const {\n bindMenuItemShortcuts,\n createButton,\n createProgress,\n createRange,\n createTime,\n setQualityMenu,\n setSpeedMenu,\n showMenuPanel\n } = controls;\n this.elements.controls = null;\n\n // Larger overlaid play button\n if (is.array(this.config.controls) && this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(createButton.call(this, 'play-large'));\n }\n\n // Create the container\n const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n this.elements.controls = container;\n\n // Default item attributes\n const defaultAttributes = {\n class: 'plyr__controls__item'\n };\n\n // Loop through controls in order\n dedupe(is.array(this.config.controls) ? this.config.controls : []).forEach(control => {\n // Restart button\n if (control === 'restart') {\n container.appendChild(createButton.call(this, 'restart', defaultAttributes));\n }\n\n // Rewind button\n if (control === 'rewind') {\n container.appendChild(createButton.call(this, 'rewind', defaultAttributes));\n }\n\n // Play/Pause button\n if (control === 'play') {\n container.appendChild(createButton.call(this, 'play', defaultAttributes));\n }\n\n // Fast forward button\n if (control === 'fast-forward') {\n container.appendChild(createButton.call(this, 'fast-forward', defaultAttributes));\n }\n\n // Progress\n if (control === 'progress') {\n const progressContainer = createElement('div', {\n class: `${defaultAttributes.class} plyr__progress__container`\n });\n const progress = createElement('div', getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n progress.appendChild(createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`\n }));\n\n // Buffer progress\n progress.appendChild(createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = createElement('span', {\n class: this.config.classNames.tooltip\n }, '00:00');\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n this.elements.progress = progress;\n progressContainer.appendChild(this.elements.progress);\n container.appendChild(progressContainer);\n }\n\n // Media current time display\n if (control === 'current-time') {\n container.appendChild(createTime.call(this, 'currentTime', defaultAttributes));\n }\n\n // Media duration display\n if (control === 'duration') {\n container.appendChild(createTime.call(this, 'duration', defaultAttributes));\n }\n\n // Volume controls\n if (control === 'mute' || control === 'volume') {\n let {\n volume\n } = this.elements;\n\n // Create the volume container if needed\n if (!is.element(volume) || !container.contains(volume)) {\n volume = createElement('div', extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__volume`.trim()\n }));\n this.elements.volume = volume;\n container.appendChild(volume);\n }\n\n // Toggle mute button\n if (control === 'mute') {\n volume.appendChild(createButton.call(this, 'mute'));\n }\n\n // Volume range control\n // Ignored on iOS as it's handled globally\n // https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html\n if (control === 'volume' && !browser.isIos && !browser.isIPadOS) {\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume\n };\n\n // Create the volume range slider\n volume.appendChild(createRange.call(this, 'volume', extend(attributes, {\n id: `plyr-volume-${data.id}`\n })));\n }\n }\n\n // Toggle captions button\n if (control === 'captions') {\n container.appendChild(createButton.call(this, 'captions', defaultAttributes));\n }\n\n // Settings button / menu\n if (control === 'settings' && !is.empty(this.config.settings)) {\n const wrapper = createElement('div', extend({}, defaultAttributes, {\n class: `${defaultAttributes.class} plyr__menu`.trim(),\n hidden: ''\n }));\n wrapper.appendChild(createButton.call(this, 'settings', {\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false\n }));\n const popup = createElement('div', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n hidden: ''\n });\n const inner = createElement('div');\n const home = createElement('div', {\n id: `plyr-settings-${data.id}-home`\n });\n\n // Create the menu\n const menu = createElement('div', {\n role: 'menu'\n });\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home;\n\n // Build the menu items\n this.config.settings.forEach(type => {\n // TODO: bundle this with the createMenuItem helper and bindings\n const menuItem = createElement('button', extend(getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n role: 'menuitem',\n 'aria-haspopup': true,\n hidden: ''\n }));\n\n // Bind menu shortcuts for keyboard users\n bindMenuItemShortcuts.call(this, menuItem, type);\n\n // Show menu on click\n on.call(this, menuItem, 'click', () => {\n showMenuPanel.call(this, type, false);\n });\n const flex = createElement('span', null, i18n.get(type, this.config));\n const value = createElement('span', {\n class: this.config.classNames.menu.value\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem);\n\n // Build the panes\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: ''\n });\n\n // Back button\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`\n });\n\n // Visible label\n backButton.appendChild(createElement('span', {\n 'aria-hidden': true\n }, i18n.get(type, this.config)));\n\n // Screen reader label\n backButton.appendChild(createElement('span', {\n class: this.config.classNames.hidden\n }, i18n.get('menuBack', this.config)));\n\n // Go back via keyboard\n on.call(this, pane, 'keydown', event => {\n if (event.key !== 'ArrowLeft') return;\n\n // Prevent seek\n event.preventDefault();\n event.stopPropagation();\n\n // Show the respective menu\n showMenuPanel.call(this, 'home', true);\n }, false);\n\n // Go back via button click\n on.call(this, backButton, 'click', () => {\n showMenuPanel.call(this, 'home', false);\n });\n\n // Add to pane\n pane.appendChild(backButton);\n\n // Menu\n pane.appendChild(createElement('div', {\n role: 'menu'\n }));\n inner.appendChild(pane);\n this.elements.settings.buttons[type] = menuItem;\n this.elements.settings.panels[type] = pane;\n });\n popup.appendChild(inner);\n wrapper.appendChild(popup);\n container.appendChild(wrapper);\n this.elements.settings.popup = popup;\n this.elements.settings.menu = wrapper;\n }\n\n // Picture in picture button\n if (control === 'pip' && support.pip) {\n container.appendChild(createButton.call(this, 'pip', defaultAttributes));\n }\n\n // Airplay button\n if (control === 'airplay' && support.airplay) {\n container.appendChild(createButton.call(this, 'airplay', defaultAttributes));\n }\n\n // Download button\n if (control === 'download') {\n const attributes = extend({}, defaultAttributes, {\n element: 'a',\n href: this.download,\n target: '_blank'\n });\n\n // Set download attribute for HTML5 only\n if (this.isHTML5) {\n attributes.download = '';\n }\n const {\n download\n } = this.config.urls;\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider\n });\n }\n container.appendChild(createButton.call(this, 'download', attributes));\n }\n\n // Toggle fullscreen button\n if (control === 'fullscreen') {\n container.appendChild(createButton.call(this, 'fullscreen', defaultAttributes));\n }\n });\n\n // Set available quality levels\n if (this.isHTML5) {\n setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n setSpeedMenu.call(this);\n return container;\n },\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.cors) {\n loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // Set template properties\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title\n };\n let update = true;\n\n // If function, run it and use output\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n }\n\n // Convert falsy controls to empty array (primarily for empty strings)\n if (!this.config.controls) {\n this.config.controls = [];\n }\n if (is.element(this.config.controls) || is.string(this.config.controls)) {\n // HTMLElement or Non-empty string passed as the option\n container = this.config.controls;\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this)\n // TODO: Looping\n // loop: 'None',\n });\n\n update = false;\n }\n\n // Replace props with their value\n const replace = input => {\n let result = input;\n Object.entries(props).forEach(([key, value]) => {\n result = replaceAll(result, `{${key}}`, value);\n });\n return result;\n };\n\n // Update markup\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n }\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container);\n\n // Find the elements if need be\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n }\n\n // Add pressed property to buttons\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n button.setAttribute('aria-pressed', 'false');\n Object.defineProperty(button, 'pressed', {\n configurable: true,\n enumerable: true,\n get() {\n return hasClass(button, className);\n },\n set(pressed = false) {\n toggleClass(button, className, pressed);\n button.setAttribute('aria-pressed', pressed ? 'true' : 'false');\n }\n });\n };\n\n // Toggle classname when pressed property is set\n Object.values(this.elements.buttons).filter(Boolean).forEach(button => {\n if (is.array(button) || is.nodeList(button)) {\n Array.from(button).filter(Boolean).forEach(addProperty);\n } else {\n addProperty(button);\n }\n });\n }\n\n // Edge sometimes doesn't finish the paint so force a repaint\n if (browser.isEdge) {\n repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const {\n classNames,\n selectors\n } = this.config;\n const selector = `${selectors.controls.wrapper} ${selectors.labels} .${classNames.hidden}`;\n const labels = getElements.call(this, selector);\n Array.from(labels).forEach(label => {\n toggleClass(label, this.config.classNames.hidden, false);\n toggleClass(label, this.config.classNames.tooltip, true);\n });\n }\n },\n // Set media metadata\n setMediaMetadata() {\n try {\n if ('mediaSession' in navigator) {\n navigator.mediaSession.metadata = new window.MediaMetadata({\n title: this.config.mediaMetadata.title,\n artist: this.config.mediaMetadata.artist,\n album: this.config.mediaMetadata.album,\n artwork: this.config.mediaMetadata.artwork\n });\n }\n } catch (_) {\n // Do nothing\n }\n },\n // Add markers\n setMarkers() {\n var _this$config$markers2, _this$config$markers3;\n if (!this.duration || this.elements.markers) return;\n\n // Get valid points\n const points = (_this$config$markers2 = this.config.markers) === null || _this$config$markers2 === void 0 ? void 0 : (_this$config$markers3 = _this$config$markers2.points) === null || _this$config$markers3 === void 0 ? void 0 : _this$config$markers3.filter(({\n time\n }) => time > 0 && time < this.duration);\n if (!(points !== null && points !== void 0 && points.length)) return;\n const containerFragment = document.createDocumentFragment();\n const pointsFragment = document.createDocumentFragment();\n let tipElement = null;\n const tipVisible = `${this.config.classNames.tooltip}--visible`;\n const toggleTip = show => toggleClass(tipElement, tipVisible, show);\n\n // Inject markers to progress container\n points.forEach(point => {\n const markerElement = createElement('span', {\n class: this.config.classNames.marker\n }, '');\n const left = `${point.time / this.duration * 100}%`;\n if (tipElement) {\n // Show on hover\n markerElement.addEventListener('mouseenter', () => {\n if (point.label) return;\n tipElement.style.left = left;\n tipElement.innerHTML = point.label;\n toggleTip(true);\n });\n\n // Hide on leave\n markerElement.addEventListener('mouseleave', () => {\n toggleTip(false);\n });\n }\n markerElement.addEventListener('click', () => {\n this.currentTime = point.time;\n });\n markerElement.style.left = left;\n pointsFragment.appendChild(markerElement);\n });\n containerFragment.appendChild(pointsFragment);\n\n // Inject a tooltip if needed\n if (!this.config.tooltips.seek) {\n tipElement = createElement('span', {\n class: this.config.classNames.tooltip\n }, '');\n containerFragment.appendChild(tipElement);\n }\n this.elements.markers = {\n points: pointsFragment,\n tip: tipElement\n };\n this.elements.progress.appendChild(containerFragment);\n }\n};\n\n// ==========================================================================\n\n/**\n * Parse a string to a URL object\n * @param {String} input - the URL to be parsed\n * @param {Boolean} safe - failsafe parsing\n */\nfunction parseUrl(input, safe = true) {\n let url = input;\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n try {\n return new URL(url);\n } catch (_) {\n return null;\n }\n}\n\n// Convert object to URLSearchParams\nfunction buildUrlParams(input) {\n const params = new URLSearchParams();\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\n }\n return params;\n}\n\n// ==========================================================================\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {\n // Clear menu and hide\n if (is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n return;\n }\n\n // Inject the container\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n this.elements.captions.setAttribute('dir', 'auto');\n insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const url = parseUrl(src);\n if (url !== null && url.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(url.protocol)) {\n fetch(src, 'blob').then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n }).catch(() => {\n removeElement(track);\n });\n }\n });\n }\n\n // Get and set initial data\n // The \"preferred\" options are not realized unless / until the wanted language has a match\n // * languages: Array of user's browser languages.\n // * language: The language preferred by user settings or config\n // * active: The state preferred by user settings or config\n // * toggled: The real captions state\n\n const browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n const languages = dedupe(browserLanguages.map(language => language.split('-')[0]));\n let language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase();\n\n // Use first browser language when language is 'auto'\n if (language === 'auto') {\n [language] = languages;\n }\n let active = this.storage.get('captions');\n if (!is.boolean(active)) {\n ({\n active\n } = this.config.captions);\n }\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages\n });\n\n // Watch changes to textTracks and update captions menu\n if (this.isHTML5) {\n const trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n }\n\n // Update available languages in list next tick (the event must not be triggered before the listeners)\n setTimeout(captions.update.bind(this), 0);\n },\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true);\n // Get the wanted language\n const {\n active,\n language,\n meta,\n currentTrackNode\n } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language));\n\n // Handle tracks (add event listener and \"pseudo\"-default)\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track);\n\n // Attempt to store if the original dom element was \"default\"\n meta.set(track, {\n default: track.mode === 'showing'\n });\n\n // Turn off native caption rendering to avoid double captions\n // Note: mode='hidden' forces a track to download. To ensure every track\n // isn't downloaded at once, only 'showing' tracks should be reassigned\n // eslint-disable-next-line no-param-reassign\n if (track.mode === 'showing') {\n // eslint-disable-next-line no-param-reassign\n track.mode = 'hidden';\n }\n\n // Add event listener for cue changes\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n }\n\n // Update language first time it matches, or if the previous matching track was removed\n if (languageExists && this.language !== language || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n }\n\n // Enable or disable captions based on track length\n if (this.elements) {\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n }\n\n // Update available languages in list\n if (is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n // Toggle captions display\n // Used internally for the toggleCaptions method, with the passive option forced to false\n toggle(input, passive = true) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n const {\n toggled\n } = this.captions; // Current state\n const activeClass = this.config.classNames.captions.active;\n // Get the next state\n // If the method is called without parameter, toggle based on current value\n const active = is.nullOrUndefined(input) ? !toggled : input;\n\n // Update state and trigger event\n if (active !== toggled) {\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.active = active;\n this.storage.set({\n captions: active\n });\n }\n\n // Force language if the call isn't passive and there is no matching language to toggle to\n if (!this.language && active && !passive) {\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [this.captions.language, ...this.captions.languages], true);\n\n // Override user preferences to avoid switching languages if a matching track is added\n this.captions.language = track.language;\n\n // Set caption, but don't store in localStorage as user preference\n captions.set.call(this, tracks.indexOf(track));\n return;\n }\n\n // Toggle button if it's enabled\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n }\n\n // Add class hook\n toggleClass(this.elements.container, activeClass, active);\n this.captions.toggled = active;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // Trigger event (not used internally)\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n // Wait for the call stack to clear before setting mode='hidden'\n // on the active track - forcing the browser to download it\n setTimeout(() => {\n if (active && this.captions.toggled) {\n this.captions.currentTrackNode.mode = 'hidden';\n }\n });\n },\n // Set captions by track index\n // Used internally for the currentTrack setter with the passive option forced to false\n set(index, passive = true) {\n const tracks = captions.getTracks.call(this);\n\n // Disable captions if setting to -1\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const {\n language\n } = track || {};\n\n // Store reference to node for invalidation on remove\n this.captions.currentTrackNode = track;\n\n // Update settings menu\n controls.updateSetting.call(this, 'captions');\n\n // When passive, don't override user preferences\n if (!passive) {\n this.captions.language = language;\n this.storage.set({\n language\n });\n }\n\n // Handle Vimeo captions\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n }\n\n // Trigger event\n triggerEvent.call(this, this.media, 'languagechange');\n }\n\n // Show captions\n captions.toggle.call(this, true, passive);\n if (this.isHTML5 && this.isVideo) {\n // If we change the active track while a cue is already displayed we need to update it\n captions.updateCues.call(this);\n }\n },\n // Set captions by language\n // Used internally for the language setter with the passive option forced to false\n setLanguage(input, passive = true) {\n if (!is.string(input)) {\n this.debug.warn('Invalid language argument', input);\n return;\n }\n // Normalize\n const language = input.toLowerCase();\n this.captions.language = language;\n\n // Set currentTrack\n const tracks = captions.getTracks.call(this);\n const track = captions.findTrack.call(this, [language]);\n captions.set.call(this, tracks.indexOf(track), passive);\n },\n // Get current valid caption tracks\n // If update is false it will also ignore tracks without metadata\n // This is used to \"freeze\" the language options when captions.update is false\n getTracks(update = false) {\n // Handle media or textTracks missing or null\n const tracks = Array.from((this.media || {}).textTracks || []);\n // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n return tracks.filter(track => !this.isHTML5 || update || this.captions.meta.has(track)).filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n const sorted = Array.from(tracks).sort((a, b) => sortIsDefault(b) - sortIsDefault(a));\n let track;\n languages.every(language => {\n track = sorted.find(t => t.language === language);\n return !track; // Break iteration if there is a match\n });\n\n // If no match is found but is required, get first\n return track || (force ? sorted[0] : undefined);\n },\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n return i18n.get('enabled', this.config);\n }\n return i18n.get('disabled', this.config);\n },\n // Update captions using current track's active cues\n // Also optional array argument in case there isn't any track (ex: vimeo)\n updateCues(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n }\n\n // Only accept array or empty input\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n let cues = input;\n\n // Get cues from track\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || []).map(cue => cue.getCueAsHTML()).map(getHTML);\n }\n\n // Set new caption text\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n if (changed) {\n // Empty the container and create a new child element\n emptyElement(this.elements.captions);\n const caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n caption.innerHTML = content;\n this.elements.captions.appendChild(caption);\n\n // Trigger event\n triggerEvent.call(this, this.media, 'cuechange');\n }\n }\n};\n\n// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n // Custom media title\n title: '',\n // Logging to console\n debug: false,\n // Auto play (if supported)\n autoplay: false,\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n // Allow inline playback on iOS\n playsinline: true,\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n // Default volume\n volume: 1,\n muted: false,\n // Pass a custom duration\n duration: null,\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n // Invert the current time to be a countdown\n invertTime: true,\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n // Force an aspect ratio\n // The format must be `'w:h'` (e.g. `'16:9'`)\n ratio: null,\n // Click video container to play/pause\n clickToPlay: true,\n // Auto hide the controls\n hideControls: true,\n // Reset to start when playback ended\n resetOnEnd: false,\n // Disable the standard context menu\n disableContextMenu: true,\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.7.8/plyr.svg',\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n // Quality default\n quality: {\n default: 576,\n // The options to display in the UI, if available for the source media\n options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240],\n forced: false,\n onChange: null\n },\n // Set loops\n loop: {\n active: false\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n // The options to display in the UI, if available for the source media (e.g. Vimeo and YouTube only support 0.5x-4x)\n options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 4]\n },\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false\n },\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true\n },\n // Captions settings\n captions: {\n active: false,\n language: 'auto',\n // Listen to new tracks added after Plyr is initialized.\n // This is needed for streaming captions, but may result in unselectable options\n update: false\n },\n // Fullscreen settings\n fullscreen: {\n enabled: true,\n // Allow fullscreen?\n fallback: true,\n // Fallback using full viewport/window\n iosNative: false // Use the native fullscreen in iOS (disables custom controls)\n // Selector for the fullscreen container so contextual / non-player content can remain visible in fullscreen mode\n // Non-ancestors of the player element will be ignored\n // container: null, // defaults to the player element\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr'\n },\n // Default controls\n controls: ['play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress', 'current-time',\n // 'duration',\n 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay',\n // 'download',\n 'fullscreen'],\n settings: ['captions', 'quality', 'speed'],\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime}s',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime}s',\n seek: 'Seek',\n seekLabel: '{currentTime} of {duration}',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n download: 'Download',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n pip: 'PIP',\n menuBack: 'Go back to previous menu',\n speed: 'Speed',\n normal: 'Normal',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n disabled: 'Disabled',\n enabled: 'Enabled',\n advertisement: 'Ad',\n qualityBadge: {\n 2160: '4K',\n 1440: 'HD',\n 1080: 'HD',\n 720: 'HD',\n 576: 'SD',\n 480: 'SD'\n }\n },\n // URLs\n urls: {\n download: null,\n vimeo: {\n sdk: 'https://player.vimeo.com/api/player.js',\n iframe: 'https://player.vimeo.com/video/{0}?{1}',\n api: 'https://vimeo.com/api/oembed.json?url={0}'\n },\n youtube: {\n sdk: 'https://www.youtube.com/iframe_api',\n api: 'https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}'\n },\n googleIMA: {\n sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'\n }\n },\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n fastForward: null,\n mute: null,\n volume: null,\n captions: null,\n download: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null\n },\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange',\n // Custom events\n 'download', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready',\n // YouTube\n 'statechange',\n // Quality\n 'qualitychange',\n // Ads\n 'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls'\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n fastForward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n download: '[data-plyr=\"download\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]'\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]'\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress__buffer',\n loop: '.plyr__progress__loop',\n // Used later\n volume: '.plyr__volume--display'\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n caption: '.plyr__caption'\n },\n // Class hooks added to the player in different states\n classNames: {\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n videoFixedRatio: 'plyr__video-wrapper--fixed-ratio',\n embedContainer: 'plyr__video-embed__container',\n poster: 'plyr__poster',\n posterEnabled: 'plyr__poster-enabled',\n ads: 'plyr__ads',\n control: 'plyr__control',\n controlPressed: 'plyr__control--pressed',\n playing: 'plyr--playing',\n paused: 'plyr--paused',\n stopped: 'plyr--stopped',\n loading: 'plyr--loading',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n marker: 'plyr__progress__marker',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n display: {\n time: 'plyr__time'\n },\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open'\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active'\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback'\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active'\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active'\n },\n previewThumbnails: {\n // Tooltip thumbs\n thumbContainer: 'plyr__preview-thumb',\n thumbContainerShown: 'plyr__preview-thumb--is-shown',\n imageContainer: 'plyr__preview-thumb__image-container',\n timeContainer: 'plyr__preview-thumb__time-container',\n // Scrubbing\n scrubbingContainer: 'plyr__preview-scrubbing',\n scrubbingContainerShown: 'plyr__preview-scrubbing--is-shown'\n }\n },\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n hash: 'data-plyr-embed-hash'\n }\n },\n // Advertisements plugin\n // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n ads: {\n enabled: false,\n publisherId: '',\n tagUrl: ''\n },\n // Preview Thumbnails plugin\n previewThumbnails: {\n enabled: false,\n src: ''\n },\n // Vimeo plugin\n vimeo: {\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: false,\n // Custom settings from Plyr\n customControls: true,\n referrerPolicy: null,\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/referrerPolicy\n // Whether the owner of the video has a Pro or Business account\n // (which allows us to properly hide controls without CSS hacks, etc)\n premium: false\n },\n // YouTube plugin\n youtube: {\n rel: 0,\n // No related vids\n showinfo: 0,\n // Hide info\n iv_load_policy: 3,\n // Hide annotations\n modestbranding: 1,\n // Hide logos as much as possible (they still show one in the corner when paused)\n // Custom settings from Plyr\n customControls: true,\n noCookie: false // Whether to use an alternative version of YouTube without cookies\n },\n\n // Media Metadata\n mediaMetadata: {\n title: '',\n artist: '',\n album: '',\n artwork: []\n },\n // Markers\n markers: {\n enabled: false,\n points: []\n }\n};\n\n// ==========================================================================\n// Plyr states\n// ==========================================================================\n\nconst pip = {\n active: 'picture-in-picture',\n inactive: 'inline'\n};\n\n// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nconst providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo'\n};\nconst types = {\n audio: 'audio',\n video: 'video'\n};\n\n/**\n * Get provider by URL\n * @param {String} url\n */\nfunction getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n return null;\n}\n\n// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\nclass Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n\nclass Fullscreen {\n constructor(player) {\n _defineProperty$1(this, \"onChange\", () => {\n if (!this.supported) return;\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (is.element(button)) {\n button.pressed = this.active;\n }\n\n // Always trigger events on the plyr / media element (not a fullscreen container) and let them bubble up\n const target = this.target === this.player.media ? this.target : this.player.elements.container;\n // Trigger an event\n triggerEvent.call(this.player, target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n });\n _defineProperty$1(this, \"toggleFallback\", (toggle = false) => {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX ?? 0,\n y: window.scrollY ?? 0\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Force full viewport on iPhone X+\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover';\n\n // Inject the viewport meta if required\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n }\n\n // Check if the property already exists\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n if (!hasProperty) viewport.content += `,${property}`;\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content.split(',').filter(part => part.trim() !== property).join(',');\n }\n }\n\n // Toggle button and fire events\n this.onChange();\n });\n // Trap focus inside container\n _defineProperty$1(this, \"trapFocus\", event => {\n // Bail if iOS/iPadOS, not active, not the tab key\n if (browser.isIos || browser.isIPadOS || !this.active || event.key !== 'Tab') return;\n\n // Get the current focused element\n const focused = document.activeElement;\n const focusable = getElements.call(this.player, 'a[href], button:not(:disabled), input:not(:disabled), [tabindex]');\n const [first] = focusable;\n const last = focusable[focusable.length - 1];\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n });\n // Update UI\n _defineProperty$1(this, \"update\", () => {\n if (this.supported) {\n let mode;\n if (this.forceFallback) mode = 'Fallback (forced)';else if (Fullscreen.nativeSupported) mode = 'Native';else mode = 'Fallback';\n this.player.debug.log(`${mode} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.supported);\n });\n // Make an element fullscreen\n _defineProperty$1(this, \"enter\", () => {\n if (!this.supported) return;\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.requestFullscreen();\n } else {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(true);\n } else if (!this.prefix) {\n this.target.requestFullscreen({\n navigationUI: 'hide'\n });\n } else if (!is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.property}`]();\n }\n });\n // Bail from fullscreen\n _defineProperty$1(this, \"exit\", () => {\n if (!this.supported) return;\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.isVimeo) {\n this.player.embed.exitFullscreen();\n } else {\n this.target.webkitEnterFullscreen();\n }\n silencePromise(this.player.play());\n } else if (!Fullscreen.nativeSupported || this.forceFallback) {\n this.toggleFallback(false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.property}`]();\n }\n });\n // Toggle state\n _defineProperty$1(this, \"toggle\", () => {\n if (!this.active) this.enter();else this.exit();\n });\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property;\n\n // Scroll position\n this.scrollPosition = {\n x: 0,\n y: 0\n };\n\n // Force the use of 'full window/browser' rather than fullscreen\n this.forceFallback = player.config.fullscreen.fallback === 'force';\n\n // Get the fullscreen element\n // Checks container is an ancestor, defaults to null\n this.player.elements.fullscreen = player.config.fullscreen.container && closest$1(this.player.elements.container, player.config.fullscreen.container);\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n on.call(this.player, document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n this.onChange();\n });\n\n // Fullscreen toggle on double click\n on.call(this.player, this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (is.element(this.player.elements.controls) && this.player.elements.controls.contains(event.target)) {\n return;\n }\n this.player.listeners.proxy(event, this.toggle, 'fullscreen');\n });\n\n // Tap focus when in fullscreen\n on.call(this, this.player.elements.container, 'keydown', event => this.trapFocus(event));\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get nativeSupported() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // If we're actually using native\n get useNative() {\n return Fullscreen.nativeSupported && !this.forceFallback;\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) return '';\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = ['webkit', 'moz', 'ms'];\n prefixes.some(pre => {\n if (is.function(document[`${pre}ExitFullscreen`]) || is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n return false;\n });\n return value;\n }\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is supported\n get supported() {\n return [\n // Fullscreen is enabled in config\n this.player.config.fullscreen.enabled,\n // Must be a video\n this.player.isVideo,\n // Either native is supported or fallback enabled\n Fullscreen.nativeSupported || this.player.config.fullscreen.fallback,\n // YouTube has no way to trigger fullscreen, so on devices with no native support, playsinline\n // must be enabled and iosNative fullscreen must be disabled to offer the fullscreen fallback\n !this.player.isYouTube || Fullscreen.nativeSupported || !browser.isIos || this.player.config.playsinline && !this.player.config.fullscreen.iosNative].every(Boolean);\n }\n\n // Get active state\n get active() {\n if (!this.supported) return false;\n\n // Fallback using classname\n if (!Fullscreen.nativeSupported || this.forceFallback) {\n return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n const element = !this.prefix ? this.target.getRootNode().fullscreenElement : this.target.getRootNode()[`${this.prefix}${this.property}Element`];\n return element && element.shadowRoot ? element === this.target.getRootNode().host : element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.fullscreen ?? this.player.elements.container;\n }\n}\n\n// ==========================================================================\n// Load image avoiding xhr/fetch CORS issues\n// Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n// By default it checks if it is at least 1px, but you can add a second argument to change this\n// ==========================================================================\n\nfunction loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\n Object.assign(image, {\n onload: handler,\n onerror: handler,\n src\n });\n });\n}\n\n// ==========================================================================\nconst ui = {\n addStyleHook() {\n toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Setup captions for HTML5\n if (this.isHTML5) {\n captions.setup.call(this);\n }\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset volume display\n controls.updateVolume.call(this);\n\n // Reset time display\n controls.timeUpdate.call(this);\n\n // Reset duration display\n controls.durationUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Check for picture-in-picture support\n toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // Add touch class\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n\n // Assure the poster image is set, if the property was added before the element was created\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\n }\n\n // Manually set the duration if user has overridden it.\n // The event listeners for it doesn't get called if preload is disabled (#701)\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n }\n\n // Media metadata\n if (this.config.mediaMetadata) {\n controls.setMediaMetadata.call(this);\n }\n },\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n }\n\n // If there's a play button, set label\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n if (!is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !is.empty(this.config.title) ? this.config.title : 'video';\n const format = i18n.get('frameTitle', this.config);\n iframe.setAttribute('title', format.replace('{title}', title));\n }\n },\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\n // Set the poster image (async)\n // Used internally for the poster setter, with the passive option forced to false\n setPoster(poster, passive = true) {\n // Don't override if call is passive\n if (passive && this.poster) {\n return Promise.reject(new Error('Poster already set'));\n }\n\n // Set property synchronously to respect the call order\n this.media.setAttribute('data-poster', poster);\n\n // Show the poster\n this.elements.poster.removeAttribute('hidden');\n\n // Wait until ui is ready\n return ready.call(this)\n // Load image\n .then(() => loadImage(poster)).catch(error => {\n // Hide poster on error unless it's been set by another call\n if (poster === this.poster) {\n ui.togglePoster.call(this, false);\n }\n // Rethrow\n throw error;\n }).then(() => {\n // Prevent race conditions\n if (poster !== this.poster) {\n throw new Error('setPoster cancelled by later call to setPoster');\n }\n }).then(() => {\n Object.assign(this.elements.poster.style, {\n backgroundImage: `url('${poster}')`,\n // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n backgroundSize: ''\n });\n ui.togglePoster.call(this, true);\n return poster;\n });\n },\n // Check playing state\n checkPlaying(event) {\n // Class hooks\n toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped);\n\n // Set state\n Array.from(this.elements.buttons.play || []).forEach(target => {\n Object.assign(target, {\n pressed: this.playing\n });\n target.setAttribute('aria-label', i18n.get(this.playing ? 'pause' : 'play', this.config));\n });\n\n // Only update controls on non timeupdate events\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n }\n\n // Toggle controls\n ui.toggleControls.call(this);\n },\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Update controls visibility\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const {\n controls: controlsElement\n } = this.elements;\n if (controlsElement && this.config.hideControls) {\n // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n const recentTouchSeek = this.touch && this.lastSeekTime + 2000 > Date.now();\n\n // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n this.toggleControls(Boolean(force || this.loading || this.paused || controlsElement.pressed || controlsElement.hover || recentTouchSeek));\n }\n },\n // Migrate any custom properties from the media to the parent\n migrateStyles() {\n // Loop through values (as they are the keys when the object is spread 🤔)\n Object.values({\n ...this.media.style\n })\n // We're only fussed about Plyr specific properties\n .filter(key => !is.empty(key) && is.string(key) && key.startsWith('--plyr')).forEach(key => {\n // Set on the container\n this.elements.container.style.setProperty(key, this.media.style.getPropertyValue(key));\n\n // Clean up from media element\n this.media.style.removeProperty(key);\n });\n\n // Remove attribute if empty\n if (is.empty(this.media.style)) {\n this.media.removeAttribute('style');\n }\n }\n};\n\nclass Listeners {\n constructor(_player) {\n // Device is touch enabled\n _defineProperty$1(this, \"firstTouch\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n player.touch = true;\n\n // Add touch class\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n });\n // Global window & document listeners\n _defineProperty$1(this, \"global\", (toggle = true) => {\n const {\n player\n } = this;\n\n // Keyboard shortcuts\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n once.call(player, document.body, 'touchstart', this.firstTouch);\n });\n // Container listeners\n _defineProperty$1(this, \"container\", () => {\n const {\n player\n } = this;\n const {\n config,\n elements,\n timers\n } = player;\n\n // Keyboard shortcuts\n if (!config.keyboard.global && config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Toggle controls on mouse events and entering fullscreen\n on.call(player, elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const {\n controls: controlsElement\n } = elements;\n\n // Remove button states for fullscreen\n if (controlsElement && event.type === 'enterfullscreen') {\n controlsElement.pressed = false;\n controlsElement.hover = false;\n }\n\n // Show, then hide after a timeout unless another control event occurs\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n let delay = 0;\n if (show) {\n ui.toggleControls.call(player, true);\n // Use longer timeout for touch devices\n delay = player.touch ? 3000 : 2000;\n }\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Set new timer to prevent flicker when seeking\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Set a gutter for Vimeo\n const setGutter = () => {\n if (!player.isVimeo || player.config.vimeo.premium) {\n return;\n }\n const target = elements.wrapper;\n const {\n active\n } = player.fullscreen;\n const [videoWidth, videoHeight] = getAspectRatio.call(player);\n const useNativeAspectRatio = supportsCSS(`aspect-ratio: ${videoWidth} / ${videoHeight}`);\n\n // If not active, remove styles\n if (!active) {\n if (useNativeAspectRatio) {\n target.style.width = null;\n target.style.height = null;\n } else {\n target.style.maxWidth = null;\n target.style.margin = null;\n }\n return;\n }\n\n // Determine which dimension will overflow and constrain view\n const [viewportWidth, viewportHeight] = getViewportSize();\n const overflow = viewportWidth / viewportHeight > videoWidth / videoHeight;\n if (useNativeAspectRatio) {\n target.style.width = overflow ? 'auto' : '100%';\n target.style.height = overflow ? '100%' : 'auto';\n } else {\n target.style.maxWidth = overflow ? `${viewportHeight / videoHeight * videoWidth}px` : null;\n target.style.margin = overflow ? '0 auto' : null;\n }\n };\n\n // Handle resizing\n const resized = () => {\n clearTimeout(timers.resized);\n timers.resized = setTimeout(setGutter, 50);\n };\n on.call(player, elements.container, 'enterfullscreen exitfullscreen', event => {\n const {\n target\n } = player.fullscreen;\n\n // Ignore events not from target\n if (target !== elements.container) {\n return;\n }\n\n // If it's not an embed and no ratio specified\n if (!player.isEmbed && is.empty(player.config.ratio)) {\n return;\n }\n\n // Set Vimeo gutter\n setGutter();\n\n // Watch for resizes\n const method = event.type === 'enterfullscreen' ? on : off;\n method.call(player, window, 'resize', resized);\n });\n });\n // Listen for media events\n _defineProperty$1(this, \"media\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n\n // Time change on media\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event));\n\n // Display duration\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(player, event));\n\n // Handle the media finishing\n on.call(player, player.media, 'ended', () => {\n // Show poster on end\n if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n // Restart\n player.restart();\n\n // Call pause otherwise IE11 will start playing the video again\n player.pause();\n }\n });\n\n // Check for buffer progress\n on.call(player, player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(player, event));\n\n // Handle volume changes\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event));\n\n // Handle play/pause\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(player, event));\n\n // Loading state\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event));\n\n // Click video\n if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = getElement.call(player, `.${player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!is.element(wrapper)) {\n return;\n }\n\n // On click play, pause or restart\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper];\n\n // Ignore if click if not container or in video wrapper\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n }\n\n // Touch devices will just show controls (if hidden)\n if (player.touch && player.config.hideControls) {\n return;\n }\n if (player.ended) {\n this.proxy(event, player.restart, 'restart');\n this.proxy(event, () => {\n silencePromise(player.play());\n }, 'play');\n } else {\n this.proxy(event, () => {\n silencePromise(player.togglePlay());\n }, 'play');\n }\n });\n }\n\n // Disable right click\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(player, elements.wrapper, 'contextmenu', event => {\n event.preventDefault();\n }, false);\n }\n\n // Volume change\n on.call(player, player.media, 'volumechange', () => {\n // Save to storage\n player.storage.set({\n volume: player.volume,\n muted: player.muted\n });\n });\n\n // Speed change\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed');\n\n // Save to storage\n player.storage.set({\n speed: player.speed\n });\n });\n\n // Quality change\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n });\n\n // Update download link when ready and if quality changes\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadUrl.call(player);\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(player, player.media, proxyEvents, event => {\n let {\n detail = {}\n } = event;\n\n // Get error details from media\n if (event.type === 'error') {\n detail = player.media.error;\n }\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n });\n // Run default and custom handlers\n _defineProperty$1(this, \"proxy\", (event, defaultHandler, customHandlerKey) => {\n const {\n player\n } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned !== false && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n });\n // Trigger custom and default handlers\n _defineProperty$1(this, \"bind\", (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const {\n player\n } = this;\n const customHandler = player.config.listeners[customHandlerKey];\n const hasCustomHandler = is.function(customHandler);\n on.call(player, element, type, event => this.proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n });\n // Listen for control events\n _defineProperty$1(this, \"controls\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Play/pause toggle\n if (elements.buttons.play) {\n Array.from(elements.buttons.play).forEach(button => {\n this.bind(button, 'click', () => {\n silencePromise(player.togglePlay());\n }, 'play');\n });\n }\n\n // Pause\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart');\n\n // Rewind\n this.bind(elements.buttons.rewind, 'click', () => {\n // Record seek time so we can prevent hiding controls for a few seconds after rewind\n player.lastSeekTime = Date.now();\n player.rewind();\n }, 'rewind');\n\n // Rewind\n this.bind(elements.buttons.fastForward, 'click', () => {\n // Record seek time so we can prevent hiding controls for a few seconds after fast forward\n player.lastSeekTime = Date.now();\n player.forward();\n }, 'fastForward');\n\n // Mute toggle\n this.bind(elements.buttons.mute, 'click', () => {\n player.muted = !player.muted;\n }, 'mute');\n\n // Captions toggle\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions());\n\n // Download\n this.bind(elements.buttons.download, 'click', () => {\n triggerEvent.call(player, player.media, 'download');\n }, 'download');\n\n // Fullscreen toggle\n this.bind(elements.buttons.fullscreen, 'click', () => {\n player.fullscreen.toggle();\n }, 'fullscreen');\n\n // Picture-in-Picture\n this.bind(elements.buttons.pip, 'click', () => {\n player.pip = 'toggle';\n }, 'pip');\n\n // Airplay\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay');\n\n // Settings menu - click toggle\n this.bind(elements.buttons.settings, 'click', event => {\n // Prevent the document click listener closing the menu\n event.stopPropagation();\n event.preventDefault();\n controls.toggleMenu.call(player, event);\n }, null, false); // Can't be passive as we're preventing default\n\n // Settings menu - keyboard toggle\n // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n this.bind(elements.buttons.settings, 'keyup', event => {\n if (![' ', 'Enter'].includes(event.key)) {\n return;\n }\n\n // Because return triggers a click anyway, all we need to do is set focus\n if (event.key === 'Enter') {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n }\n\n // Prevent scroll\n event.preventDefault();\n\n // Prevent playing video (Firefox)\n event.stopPropagation();\n\n // Toggle menu\n controls.toggleMenu.call(player, event);\n }, null, false // Can't be passive as we're preventing default\n );\n\n // Escape closes menu\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.key === 'Escape') {\n controls.toggleMenu.call(player, event);\n }\n });\n\n // Set range input alternative \"value\", which matches the tooltip time (#954)\n this.bind(elements.inputs.seek, 'mousedown mousemove', event => {\n const rect = elements.progress.getBoundingClientRect();\n const percent = 100 / rect.width * (event.pageX - rect.left);\n event.currentTarget.setAttribute('seek-value', percent);\n });\n\n // Pause while seeking\n this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', event => {\n const seek = event.currentTarget;\n const attribute = 'play-on-seeked';\n if (is.keyboardEvent(event) && !['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n return;\n }\n\n // Record seek time so we can prevent hiding controls for a few seconds after seek\n player.lastSeekTime = Date.now();\n\n // Was playing before?\n const play = seek.hasAttribute(attribute);\n // Done seeking\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type);\n\n // If we're done seeking and it was playing, resume playback\n if (play && done) {\n seek.removeAttribute(attribute);\n silencePromise(player.play());\n } else if (!done && player.playing) {\n seek.setAttribute(attribute, '');\n player.pause();\n }\n });\n\n // Fix range inputs on iOS\n // Super weird iOS bug where after you interact with an ,\n // it takes over further interactions on the page. This is a hack\n if (browser.isIos) {\n const inputs = getElements.call(player, 'input[type=\"range\"]');\n Array.from(inputs).forEach(input => this.bind(input, inputEvent, event => repaint(event.target)));\n }\n\n // Seek\n this.bind(elements.inputs.seek, inputEvent, event => {\n const seek = event.currentTarget;\n // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n let seekTo = seek.getAttribute('seek-value');\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n seek.removeAttribute('seek-value');\n player.currentTime = seekTo / seek.max * player.duration;\n }, 'seek');\n\n // Seek tooltip\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(player, event));\n\n // Preview thumbnails plugin\n // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n this.bind(elements.progress, 'mousemove touchmove', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startMove(event);\n }\n });\n\n // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n this.bind(elements.progress, 'mouseleave touchend click', () => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endMove(false, true);\n }\n });\n\n // Show scrubbing preview\n this.bind(elements.progress, 'mousedown touchstart', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startScrubbing(event);\n }\n });\n this.bind(elements.progress, 'mouseup touchend', event => {\n const {\n previewThumbnails\n } = player;\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endScrubbing(event);\n }\n });\n\n // Polyfill for lower fill in for webkit\n if (browser.isWebKit) {\n Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(element => {\n this.bind(element, 'input', event => controls.updateRangeFill.call(player, event.target));\n });\n }\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (player.config.toggleInvert && !is.element(elements.display.duration)) {\n this.bind(elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (player.currentTime === 0) {\n return;\n }\n player.config.invertTime = !player.config.invertTime;\n controls.timeUpdate.call(player);\n });\n }\n\n // Volume\n this.bind(elements.inputs.volume, inputEvent, event => {\n player.volume = event.target.value;\n }, 'volume');\n\n // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n });\n\n // Also update controls.hover state for any non-player children of fullscreen element (as above)\n if (elements.fullscreen) {\n Array.from(elements.fullscreen.children).filter(c => !c.contains(elements.container)).forEach(child => {\n this.bind(child, 'mouseenter mouseleave', event => {\n if (elements.controls) {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n }\n });\n });\n }\n\n // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n });\n\n // Show controls when they receive focus (e.g., when using keyboard tab key)\n this.bind(elements.controls, 'focusin', () => {\n const {\n config,\n timers\n } = player;\n\n // Skip transition to prevent focus from scrolling the parent element\n toggleClass(elements.controls, config.classNames.noTransition, true);\n\n // Toggle\n ui.toggleControls.call(player, true);\n\n // Restore transition\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0);\n\n // Delay a little more for mouse users\n const delay = this.touch ? 3000 : 4000;\n\n // Clear timer\n clearTimeout(timers.controls);\n\n // Hide again after delay\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n });\n\n // Mouse wheel for volume\n this.bind(elements.inputs.volume, 'wheel', event => {\n // Detect \"natural\" scroll - supported on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n // Get delta from event. Invert if `inverted` is true\n const [x, y] = [event.deltaX, -event.deltaY].map(value => inverted ? -value : value);\n // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y);\n\n // Change the volume by 2%\n player.increaseVolume(direction / 50);\n\n // Don't break page scrolling at max and min\n const {\n volume\n } = player.media;\n if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {\n event.preventDefault();\n }\n }, 'volume', false);\n });\n this.player = _player;\n this.lastKey = null;\n this.focusTimer = null;\n this.lastKeyDown = null;\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n const {\n key,\n type,\n altKey,\n ctrlKey,\n metaKey,\n shiftKey\n } = event;\n const pressed = type === 'keydown';\n const repeat = pressed && key === this.lastKey;\n\n // Bail if a modifier key is set\n if (altKey || ctrlKey || metaKey || shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the key for whatever reason\n if (!key) {\n return;\n }\n\n // Seek by increment\n const seekByIncrement = increment => {\n // Divide the max duration into 10th's and times by the number value\n player.currentTime = player.duration / 10 * increment;\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = document.activeElement;\n if (is.element(focused)) {\n const {\n editable\n } = player.config.selectors;\n const {\n seek\n } = elements.inputs;\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n if (event.key === ' ' && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n }\n\n // Which keys should we prevent default\n const preventDefault = [' ', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'c', 'f', 'k', 'l', 'm'];\n\n // If the key is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(key)) {\n event.preventDefault();\n event.stopPropagation();\n }\n switch (key) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9':\n if (!repeat) {\n seekByIncrement(parseInt(key, 10));\n }\n break;\n case ' ':\n case 'k':\n if (!repeat) {\n silencePromise(player.togglePlay());\n }\n break;\n case 'ArrowUp':\n player.increaseVolume(0.1);\n break;\n case 'ArrowDown':\n player.decreaseVolume(0.1);\n break;\n case 'm':\n if (!repeat) {\n player.muted = !player.muted;\n }\n break;\n case 'ArrowRight':\n player.forward();\n break;\n case 'ArrowLeft':\n player.rewind();\n break;\n case 'f':\n player.fullscreen.toggle();\n break;\n case 'c':\n if (!repeat) {\n player.toggleCaptions();\n }\n break;\n case 'l':\n player.loop = !player.loop;\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (key === 'Escape' && !player.fullscreen.usingNative && player.fullscreen.active) {\n player.fullscreen.toggle();\n }\n\n // Store last key for next cycle\n this.lastKey = key;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n}\n\nvar loadjs_umd = createCommonjsModule(function (module, exports) {\n (function (root, factory) {\n {\n module.exports = factory();\n }\n })(commonjsGlobal, function () {\n /**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\n var devnull = function () {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n /**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\n function subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n }\n\n /**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\n function publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n }\n\n /**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\n function executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {\n success: args\n };\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);else (args.success || devnull)(args);\n }\n\n /**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\n function loadFile(path, callbackFn, args, numTries) {\n var doc = document,\n async = args.async,\n maxTries = (args.numRetries || 0) + 1,\n beforeCallbackFn = args.before || devnull,\n pathname = path.replace(/[\\?|#].*$/, ''),\n pathStripped = path.replace(/^(css|img)!/, ''),\n isLegacyIECss,\n e;\n numTries = numTries || 0;\n if (/(^css!|\\.css$)/.test(pathname)) {\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped;\n\n // tag IE9+\n isLegacyIECss = 'hideFocus' in e;\n\n // use preload in IE Edge (to detect load errors)\n if (isLegacyIECss && e.relList) {\n isLegacyIECss = 0;\n e.rel = 'preload';\n e.as = 'style';\n }\n } else if (/(^img!|\\.(png|gif|jpg|svg|webp)$)/.test(pathname)) {\n // image\n e = doc.createElement('img');\n e.src = pathStripped;\n } else {\n // javascript\n e = doc.createElement('script');\n e.src = path;\n e.async = async === undefined ? true : async;\n }\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0];\n\n // treat empty stylesheets as failures to get around lack of onerror\n // support in IE9-11\n if (isLegacyIECss) {\n try {\n if (!e.sheet.cssText.length) result = 'e';\n } catch (x) {\n // sheets objects created from load errors don't allow access to\n // `cssText` (unless error is Code:18 SecurityError)\n if (x.code != 18) result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n } else if (e.rel == 'preload' && e.as == 'style') {\n // activate preloaded stylesheets\n return e.rel = 'stylesheet'; // jshint ignore:line\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n }\n\n /**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\n function loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function (path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);else return;\n }\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i = 0; i < x; i++) loadFile(paths[i], fn, args);\n }\n\n /**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n * callback or (3) object literal with success/error arguments, numRetries,\n * etc.\n * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n * literal with success/error arguments, numRetries, etc.\n */\n function loadjs(paths, arg1, arg2) {\n var bundleId, args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n function loadFn(resolve, reject) {\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // resolve Promise\n if (resolve) {\n executeCallbacks({\n success: resolve,\n error: reject\n }, pathsNotFound);\n }\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n }\n if (args.returnPromise) return new Promise(loadFn);else loadFn();\n }\n\n /**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\n loadjs.ready = function ready(deps, args) {\n // subscribe to bundle load event\n subscribe(deps, function (depsNotFound) {\n // execute callbacks\n executeCallbacks(args, depsNotFound);\n });\n return loadjs;\n };\n\n /**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\n loadjs.done = function done(bundleId) {\n publish(bundleId, []);\n };\n\n /**\n * Reset loadjs dependencies statuses\n */\n loadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n };\n\n /**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\n loadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n };\n\n // export\n return loadjs;\n });\n});\n\n// ==========================================================================\nfunction loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs_umd(url, {\n success: resolve,\n error: reject\n });\n });\n}\n\n// ==========================================================================\n\n// Parse Vimeo ID from URL\nfunction parseId$1(url) {\n if (is.empty(url)) {\n return null;\n }\n if (is.number(Number(url))) {\n return url;\n }\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Try to extract a hash for private videos from the URL\nfunction parseHash(url) {\n /* This regex matches a hexadecimal hash if given in any of these forms:\n * - [https://player.]vimeo.com/video/{id}/{hash}[?params]\n * - [https://player.]vimeo.com/video/{id}?h={hash}[¶ms]\n * - [https://player.]vimeo.com/video/{id}?[params]&h={hash}\n * - video/{id}/{hash}\n * If matched, the hash is available in capture group 4\n */\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+)(\\?.*&*h=|\\/)+([\\d,a-f]+)/;\n const found = url.match(regex);\n return found && found.length === 5 ? found[4] : null;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState$1(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\nconst vimeo = {\n setup() {\n const player = this;\n\n // Add embed class for responsive\n toggleClass(player.elements.wrapper, player.config.classNames.embed, true);\n\n // Set speed options from config\n player.options.speed = player.config.speed.options;\n\n // Set intial ratio\n setAspectRatio.call(player);\n\n // Load the SDK if not already\n if (!is.object(window.Vimeo)) {\n loadScript(player.config.urls.vimeo.sdk).then(() => {\n vimeo.ready.call(player);\n }).catch(error => {\n player.debug.warn('Vimeo SDK (player.js) failed to load', error);\n });\n } else {\n vimeo.ready.call(player);\n }\n },\n // API Ready\n ready() {\n const player = this;\n const config = player.config.vimeo;\n const {\n premium,\n referrerPolicy,\n ...frameParams\n } = config;\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n let hash = '';\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id);\n // hash can also be set as attribute on the
\n hash = player.media.getAttribute(player.config.attributes.embed.hash);\n } else {\n hash = parseHash(source);\n }\n const hashParam = hash ? {\n h: hash\n } : {};\n\n // If the owner has a pro or premium account then we can hide controls etc\n if (premium) {\n Object.assign(frameParams, {\n controls: false,\n sidedock: false\n });\n }\n\n // Get Vimeo params for the iframe\n const params = buildUrlParams({\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n muted: player.muted,\n gesture: 'media',\n playsinline: player.config.playsinline,\n // hash has to be added to iframe-URL\n ...hashParam,\n ...frameParams\n });\n const id = parseId$1(source);\n // Build an iframe\n const iframe = createElement('iframe');\n const src = format(player.config.urls.vimeo.iframe, id, params);\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allow', ['autoplay', 'fullscreen', 'picture-in-picture', 'encrypted-media', 'accelerometer', 'gyroscope'].join('; '));\n\n // Set the referrer policy if required\n if (!is.empty(referrerPolicy)) {\n iframe.setAttribute('referrerPolicy', referrerPolicy);\n }\n\n // Inject the package\n if (premium || !config.customControls) {\n iframe.setAttribute('data-poster', player.poster);\n player.media = replaceElement(iframe, player.media);\n } else {\n const wrapper = createElement('div', {\n class: player.config.classNames.embedContainer,\n 'data-poster': player.poster\n });\n wrapper.appendChild(iframe);\n player.media = replaceElement(wrapper, player.media);\n }\n\n // Get poster image\n if (!config.customControls) {\n fetch(format(player.config.urls.vimeo.api, src)).then(response => {\n if (is.empty(response) || !response.thumbnail_url) {\n return;\n }\n\n // Set and show poster\n ui.setPoster.call(player, response.thumbnail_url).catch(() => {});\n });\n }\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe, {\n autopause: player.config.autopause,\n muted: player.muted\n });\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n assurePlaybackState$1.call(player, true);\n return player.embed.play();\n };\n player.media.pause = () => {\n assurePlaybackState$1.call(player, false);\n return player.embed.pause();\n };\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let {\n currentTime\n } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\n\n // Get current paused state and volume etc\n const {\n embed,\n media,\n paused,\n volume\n } = player;\n const restorePause = paused && !embed.hasPlayed;\n\n // Set seeking state and trigger event\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking');\n\n // If paused, mute until seek is complete\n Promise.resolve(restorePause && embed.setVolume(0))\n // Seek\n .then(() => embed.setCurrentTime(time))\n // Restore paused\n .then(() => restorePause && embed.pause())\n // Restore volume\n .then(() => restorePause && embed.setVolume(volume)).catch(() => {\n // Do nothing\n });\n }\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n triggerEvent.call(player, player.media, 'ratechange');\n }).catch(() => {\n // Cannot set Playback Rate, Video is probably not on Pro account\n player.options.speed = [1];\n });\n }\n });\n\n // Volume\n let {\n volume\n } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n }\n });\n\n // Muted\n let {\n muted\n } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : false;\n player.embed.setMuted(toggle ? true : player.config.muted).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n }\n });\n\n // Loop\n let {\n loop\n } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = is.boolean(input) ? input : player.config.loop.active;\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n }\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n controls.setDownloadUrl.call(player);\n }).catch(error => {\n this.debug.warn(error);\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n }\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n }\n });\n\n // Set aspect ratio based on video size\n Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(dimensions => {\n const [width, height] = dimensions;\n player.embed.ratio = roundAspectRatio(width, height);\n setAspectRatio.call(this);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n player.embed.on('cuechange', ({\n cues = []\n }) => {\n const strippedCues = cues.map(cue => stripHTML(cue.text));\n captions.updateCues.call(player, strippedCues);\n });\n player.embed.on('loaded', () => {\n // Assure state and events are updated on autoplay\n player.embed.getPaused().then(paused => {\n assurePlaybackState$1.call(player, !paused);\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n if (is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n player.embed.on('bufferstart', () => {\n triggerEvent.call(player, player.media, 'waiting');\n });\n player.embed.on('bufferend', () => {\n triggerEvent.call(player, player.media, 'playing');\n });\n player.embed.on('play', () => {\n assurePlaybackState$1.call(player, true);\n triggerEvent.call(player, player.media, 'playing');\n });\n player.embed.on('pause', () => {\n assurePlaybackState$1.call(player, false);\n });\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n triggerEvent.call(player, player.media, 'timeupdate');\n });\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n triggerEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n triggerEvent.call(player, player.media, 'seeked');\n });\n player.embed.on('ended', () => {\n player.media.paused = true;\n triggerEvent.call(player, player.media, 'ended');\n });\n player.embed.on('error', detail => {\n player.media.error = detail;\n triggerEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n if (config.customControls) {\n setTimeout(() => ui.build.call(player), 0);\n }\n }\n};\n\n// ==========================================================================\n\n// Parse YouTube ID from URL\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n}\n\n// Set playback state and trigger change (only on actual change)\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\nfunction getHost(config) {\n if (config.noCookie) {\n return 'https://www.youtube-nocookie.com';\n }\n if (window.location.protocol === 'http:') {\n return 'http://www.youtube.com';\n }\n\n // Use YouTube's default\n return undefined;\n}\nconst youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Setup API\n if (is.object(window.YT) && is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Reference current global callback\n const callback = window.onYouTubeIframeAPIReady;\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n // Call global callback if set\n if (is.function(callback)) {\n callback();\n }\n youtube.ready.call(this);\n };\n\n // Load the SDK\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n }\n },\n // Get the media title\n getTitle(videoId) {\n const url = format(this.config.urls.youtube.api, videoId);\n fetch(url).then(data => {\n if (is.object(data)) {\n const {\n title,\n height,\n width\n } = data;\n\n // Set title\n this.config.title = title;\n ui.setTitle.call(this);\n\n // Set aspect ratio\n this.embed.ratio = roundAspectRatio(width, height);\n }\n setAspectRatio.call(this);\n }).catch(() => {\n // Set aspect ratio\n setAspectRatio.call(this);\n });\n },\n // API ready\n ready() {\n const player = this;\n const config = player.config.youtube;\n // Ignore already setup (race condition)\n const currentId = player.media && player.media.getAttribute('id');\n if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from
if needed\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the