{"version":3,"sources":["node_modules/custom-event-polyfill/polyfill.js","plyr.polyfilled.mjs","node_modules/rangetouch/dist/rangetouch.mjs","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/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","enumerable","configurable","writable","_classCallCheck","t","TypeError","_defineProperties","n","length","r","_createClass","_defineProperty","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread2","arguments","forEach","getOwnPropertyDescriptors","defineProperties","checkIfIteratorIsSupported","iteratorSupported","Symbol","iterator","error","createIterator","items","next","shift","done","serializeParam","encodeURIComponent","replace","deserializeParam","decodeURIComponent","String","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","doc","baseElement","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","Number","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","input","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","undefined","repaint","delay","setTimeout","hidden","offsetHeight","browser","isIE","documentMode","isEdge","navigator","userAgent","isWebkit","isIPhone","platform","isIos","maxTouchPoints","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","tabFocus","focus","preventScroll","classNames","defaultCodecs","support","audio","video","check","provider","playsinline","canPlayInline","api","ui","rangeInput","pip","webkitSetPresentationMode","pictureInPictureEnabled","disablePictureInPicture","airplay","WebKitPlaybackTargetAvailabilityEvent","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","ratio","every","reduceAspectRatio","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","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","native","requestFullscreen","webkitEnterFullscreen","toggleFallback","navigationUI","webkitExitFullscreen","action","cancelFullScreen","exit","enter","proxy","trapFocus","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","usingNative","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","timeStamp","focusTimer","lastKeyDown","removeCurrent","wasKeyDown","handleKey","firstTouch","setTabFocus","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","altKey","ctrlKey","metaKey","repeat","increment","decreaseVolume","loadjs_umd","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","subscribe","bundleIds","callbackFn","depsNotFound","bundleId","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","regex","found","assurePlaybackState","hasPlayed","Vimeo","frameParams","hashParam","sidedock","gesture","thumbnail_url","Player","disableTextTrack","stop","restorePause","setVolume","setCurrentTime","setPlaybackRate","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","targetRatio","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","tabindex","inputIsValid","fauxDuration","realDuration","Infinity","hasAudio","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","updateStorage","requestPictureInPicture","exitPictureInPicture","webkitPresentationMode","pictureInPictureElement","setPreviewThumbnails","thumbnailSource","static","inline"],"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// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n(function () {\n if (typeof window === 'undefined') {\n return;\n }\n\n try {\n var ce = new window.CustomEvent('test', {\n cancelable: true\n });\n ce.preventDefault();\n\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\n evt.preventDefault = function () {\n origPrevent.call(this);\n\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\n return evt;\n };\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 var checkIfIteratorIsSupported = function () {\n try {\n return !!Symbol.iterator;\n } catch (error) {\n return false;\n }\n };\n\n var iteratorSupported = checkIfIteratorIsSupported();\n\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\n if (iteratorSupported) {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n\n return iterator;\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\n\n var serializeParam = function (value) {\n return encodeURIComponent(value).replace(/%20/g, '+');\n };\n\n var deserializeParam = function (value) {\n return decodeURIComponent(String(value).replace(/\\+/g, ' '));\n };\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\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\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\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\n var proto = URLSearchParams.prototype;\n\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\n proto.delete = function (name) {\n delete this._entries[name];\n };\n\n proto.get = function (name) {\n return name in this._entries ? this._entries[name][0] : null;\n };\n\n proto.getAll = function (name) {\n return name in this._entries ? this._entries[name].slice(0) : [];\n };\n\n proto.has = function (name) {\n return name in this._entries;\n };\n\n proto.set = function (name, value) {\n this._entries[name] = [String(value)];\n };\n\n proto.forEach = function (callback, thisArg) {\n var entries;\n\n for (var name in this._entries) {\n if (this._entries.hasOwnProperty(name)) {\n entries = this._entries[name];\n\n for (var i = 0; i < entries.length; i++) {\n callback.call(thisArg, entries[i], name, this);\n }\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\n proto.values = function () {\n var items = [];\n this.forEach(function (value) {\n items.push(value);\n });\n return createIterator(items);\n };\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\n if (iteratorSupported) {\n proto[Symbol.iterator] = proto.entries;\n }\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\n global.URLSearchParams = URLSearchParams;\n };\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\n if (!checkIfURLSearchParamsSupported()) {\n polyfillURLSearchParams();\n }\n\n var proto = global.URLSearchParams.prototype;\n\n if (typeof proto.sort !== 'function') {\n proto.sort = function () {\n var _this = this;\n\n var items = [];\n this.forEach(function (value, name) {\n items.push([name, value]);\n\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\n if (_this._entries) {\n // force reset because IE keeps keys index\n _this._entries = {};\n }\n\n for (var i = 0; i < items.length; i++) {\n this.append(items[i][0], items[i][1]);\n }\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\n for (var i = 0; i < keys.length; i++) {\n this.delete(keys[i]);\n }\n }\n\n searchString = searchString.replace(/^\\?/, '');\n var attributes = searchString.split('&');\n var attribute;\n\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 } // HTMLAnchorElement\n\n})(typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : commonjsGlobal);\n\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 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\n var polyfillURL = function () {\n var _URL = global.URL;\n\n var URL = function (url, base) {\n if (typeof url !== 'string') url = String(url);\n if (base && typeof base !== 'string') base = String(base); // Only create another document if the base is different from current location.\n\n var doc = document,\n baseElement;\n\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\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\n var anchorElement = doc.createElement('a');\n anchorElement.href = url;\n\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\n if (anchorElement.protocol === ':' || !/:/.test(anchorElement.href) || !inputElement.checkValidity() && !base) {\n throw new TypeError('Invalid URL');\n }\n\n Object.defineProperty(this, '_anchorElement', {\n value: anchorElement\n }); // create a linked searchParams which reflect its changes on URL\n\n var searchParams = new global.URLSearchParams(this.search);\n var enableSearchUpdate = true;\n var enableSearchParamsUpdate = true;\n\n var _this = this;\n\n ['append', 'delete', 'set'].forEach(function (methodName) {\n var method = searchParams[methodName];\n\n searchParams[methodName] = function () {\n method.apply(searchParams, arguments);\n\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\n if (enableSearchParamsUpdate) {\n enableSearchUpdate = false;\n\n this.searchParams._fromString(this.search);\n\n enableSearchUpdate = true;\n }\n }\n }\n });\n };\n\n var proto = URL.prototype;\n\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\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\n this._updateSearchParams();\n },\n enumerable: true\n });\n Object.defineProperties(proto, {\n 'toString': {\n get: function () {\n var _this = this;\n\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\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]; // 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\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\n URL.createObjectURL = function (blob) {\n return _URL.createObjectURL.apply(_URL, arguments);\n };\n\n URL.revokeObjectURL = function (url) {\n return _URL.revokeObjectURL.apply(_URL, arguments);\n };\n\n global.URL = URL;\n };\n\n if (!checkIfURLIsSupported()) {\n polyfillURL();\n }\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\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 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\n return obj;\n}\n\nfunction _classCallCheck(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n}\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}\n\nfunction _createClass(e, t, n) {\n return t && _defineProperties(e.prototype, t), n && _defineProperties(e, n), e;\n}\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}\n\nfunction ownKeys(e, t) {\n var n = Object.keys(e);\n\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\n return n;\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\n return e;\n}\n\nvar defaults$1 = {\n addCSS: !0,\n thumbWidth: 15,\n watch: !0\n};\n\nfunction matches$1(e, t) {\n return function () {\n return Array.from(document.querySelectorAll(t)).includes(this);\n }.call(e, t);\n}\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}\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};\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}\n\nfunction round(e, t) {\n if (1 > t) {\n var n = getDecimalPlaces(t);\n return parseFloat(e.toFixed(n));\n }\n\n return Math.round(e / t) * t;\n}\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\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\n var i = _objectSpread2({}, defaults$1, {}, n);\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\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// ==========================================================================\nconst getConstructor = input => input !== null && typeof input !== 'undefined' ? input.constructor : null;\n\nconst instanceOf = (input, constructor) => Boolean(input && constructor && input instanceof constructor);\n\nconst isNullOrUndefined = input => input === null || typeof input === 'undefined';\n\nconst isObject = input => getConstructor(input) === Object;\n\nconst isNumber = input => getConstructor(input) === Number && !Number.isNaN(input);\n\nconst isString = input => getConstructor(input) === String;\n\nconst isBoolean = input => getConstructor(input) === Boolean;\n\nconst isFunction = input => getConstructor(input) === Function;\n\nconst isArray = input => Array.isArray(input);\n\nconst isWeakMap = input => instanceOf(input, WeakMap);\n\nconst isNodeList = input => instanceOf(input, NodeList);\n\nconst isTextNode = input => getConstructor(input) === Text;\n\nconst isEvent = input => instanceOf(input, Event);\n\nconst isKeyboardEvent = input => instanceOf(input, KeyboardEvent);\n\nconst isCue = input => instanceOf(input, window.TextTrackCue) || instanceOf(input, window.VTTCue);\n\nconst isTrack = input => instanceOf(input, TextTrack) || !isNullOrUndefined(input) && isString(input.kind);\n\nconst isPromise = input => instanceOf(input, Promise) && isFunction(input.then);\n\nconst isElement = input => input !== null && typeof input === 'object' && input.nodeType === 1 && typeof input.style === 'object' && typeof input.ownerDocument === 'object';\n\nconst isEmpty = input => isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;\n\nconst isUrl = input => {\n // Accept a URL object\n if (instanceOf(input, window.URL)) {\n return true;\n } // Must be string from here\n\n\n if (!isString(input)) {\n return false;\n } // Add the protocol if required\n\n\n let string = input;\n\n if (!input.startsWith('http://') || !input.startsWith('https://')) {\n string = `http://${input}`;\n }\n\n try {\n return !isEmpty(new URL(string).hostname);\n } catch (_) {\n return false;\n }\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})(); // Force repaint of element\n\nfunction repaint(element, delay) {\n setTimeout(() => {\n try {\n // eslint-disable-next-line no-param-reassign\n element.hidden = true; // eslint-disable-next-line no-unused-expressions\n\n element.offsetHeight; // eslint-disable-next-line no-param-reassign\n\n element.hidden = false;\n } catch (_) {// Do nothing\n }\n }, delay);\n}\n\n// ==========================================================================\n// Browser sniffing\n// Unfortunately, due to mixed support, UA sniffing is required\n// ==========================================================================\nconst browser = {\n isIE: Boolean(window.document.documentMode),\n isEdge: window.navigator.userAgent.includes('Edge'),\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1 || /(iPad|iPhone|iPod)/gi.test(navigator.platform)\n};\n\n// ==========================================================================\n\nfunction cloneDeep(object) {\n return JSON.parse(JSON.stringify(object));\n} // Get a nested value in an object\n\nfunction getDeep(object, path) {\n return path.split('.').reduce((obj, key) => obj && obj[key], object);\n} // Deep extend destination object with N more objects\n\nfunction extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!is.object(source)) {\n return target;\n }\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\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\nfunction wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements]; // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n\n Array.from(targets).reverse().forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper; // Cache the current parent and sibling.\n\n const parent = element.parentNode;\n const sibling = element.nextSibling; // Wrap the element (is automatically removed from its current\n // parent).\n\n child.appendChild(element); // 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\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n} // Set attributes\n\nfunction setAttributes(element, attributes) {\n if (!is.element(element) || is.empty(attributes)) {\n return;\n } // Assume null and undefined attributes should be left out,\n // Setting them would otherwise convert them to \"null\" and \"undefined\"\n\n\n Object.entries(attributes).filter(([, value]) => !is.nullOrUndefined(value)).forEach(([key, value]) => element.setAttribute(key, value));\n} // Create a DocumentFragment\n\nfunction createElement(type, attributes, text) {\n // Create a new \n const element = document.createElement(type); // Set all passed attributes\n\n if (is.object(attributes)) {\n setAttributes(element, attributes);\n } // Add text node\n\n\n if (is.string(text)) {\n element.innerText = text;\n } // Return built element\n\n\n return element;\n} // Inaert an element after another\n\nfunction insertAfter(element, target) {\n if (!is.element(element) || !is.element(target)) {\n return;\n }\n\n target.parentNode.insertBefore(element, target.nextSibling);\n} // Insert a DocumentFragment\n\nfunction insertElement(type, parent, attributes, text) {\n if (!is.element(parent)) {\n return;\n }\n\n parent.appendChild(createElement(type, attributes, text));\n} // Remove element(s)\n\nfunction removeElement(element) {\n if (is.nodeList(element) || is.array(element)) {\n Array.from(element).forEach(removeElement);\n return;\n }\n\n if (!is.element(element) || !is.element(element.parentNode)) {\n return;\n }\n\n element.parentNode.removeChild(element);\n} // Remove all child elements\n\nfunction emptyElement(element) {\n if (!is.element(element)) {\n return;\n }\n\n let {\n length\n } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n} // Replace element\n\nfunction replaceElement(newChild, oldChild) {\n if (!is.element(oldChild) || !is.element(oldChild.parentNode) || !is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n return newChild;\n} // Get an attribute object from a string selector\n\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 if (!is.string(sel) || is.empty(sel)) {\n return {};\n }\n\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, ''); // Get the parts and value\n\n const parts = stripped.split('=');\n const [key] = parts;\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : ''; // Get the first character\n\n const start = selector.charAt(0);\n\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\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n break;\n }\n });\n return extend(existing, attributes);\n} // Toggle hidden\n\nfunction toggleHidden(element, hidden) {\n if (!is.element(element)) {\n return;\n }\n\n let hide = hidden;\n\n if (!is.boolean(hide)) {\n hide = !element.hidden;\n } // eslint-disable-next-line no-param-reassign\n\n\n element.hidden = hide;\n} // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n\nfunction toggleClass(element, className, force) {\n if (is.nodeList(element)) {\n return Array.from(element).map(e => toggleClass(e, className, force));\n }\n\n if (is.element(element)) {\n let method = 'toggle';\n\n if (typeof force !== 'undefined') {\n method = force ? 'add' : 'remove';\n }\n\n element.classList[method](className);\n return element.classList.contains(className);\n }\n\n return false;\n} // Has class name\n\nfunction hasClass(element, className) {\n return is.element(element) && element.classList.contains(className);\n} // Element matches selector\n\nfunction matches(element, selector) {\n const {\n prototype\n } = Element;\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const method = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n return method.call(element, selector);\n} // Closest ancestor element matching selector (also tests element itself)\n\nfunction closest$1(element, selector) {\n const {\n prototype\n } = Element; // https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n\n function closestElement() {\n let el = this;\n\n do {\n if (matches.matches(el, selector)) return el;\n el = el.parentElement || el.parentNode;\n } while (el !== null && el.nodeType === 1);\n\n return null;\n }\n\n const method = prototype.closest || closestElement;\n return method.call(element, selector);\n} // Find all elements\n\nfunction getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n} // Find a single element\n\nfunction getElement(selector) {\n return this.elements.container.querySelector(selector);\n} // Set focus and tab focus class\n\nfunction setFocus(element = null, tabFocus = false) {\n if (!is.element(element)) {\n return;\n } // Set regular focus\n\n\n element.focus({\n preventScroll: true\n }); // If we want to mimic keyboard focus via tab\n\n if (tabFocus) {\n toggleClass(element, this.config.classNames.tabFocus);\n }\n}\n\n// ==========================================================================\n\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}; // Check for feature support\n\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n const api = support[type] || provider !== 'html5';\n const ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n return {\n api,\n ui\n };\n },\n\n // Picture-in-picture support\n // Safari & Chrome only currently\n pip: (() => {\n if (browser.isIPhone) {\n return false;\n } // Safari\n // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n\n\n if (is.function(createElement('video').webkitSetPresentationMode)) {\n return true;\n } // Chrome\n // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n\n\n if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n return true;\n }\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\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\n const [mediaType] = input.split('/');\n let type = input; // Verify we're using HTML5 and there's no media type mismatch\n\n if (!this.isHTML5 || mediaType !== this.type) {\n return false;\n } // Add codec if required\n\n\n if (Object.keys(defaultCodecs).includes(type)) {\n type += `; codecs=\"${defaultCodecs[input]}\"`;\n }\n\n try {\n return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n } catch (_) {\n return false;\n }\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// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n// https://www.youtube.com/watch?v=NPM6172J22g\n\nconst supportsPassiveListeners = (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n }\n\n });\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (_) {// Do nothing\n }\n\n return supported;\n})(); // Toggle event listener\n\n\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 } // Allow multiple events\n\n\n const events = event.split(' '); // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n\n let options = capture; // If passive events listeners are supported\n\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 } // If a single node is passed, bind the event listener\n\n\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\n element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n} // Bind event handler\n\nfunction on(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, true, passive, capture);\n} // Unbind event handler\n\nfunction off(element, events = '', callback, passive = true, capture = false) {\n toggleListener.call(this, element, events, callback, false, passive, capture);\n} // Bind once-only event handler\n\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\n toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n} // Trigger event\n\nfunction triggerEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!is.element(element) || is.empty(type)) {\n return;\n } // Create and dispatch the event\n\n\n const event = new CustomEvent(type, {\n bubbles,\n detail: { ...detail,\n plyr: this\n }\n }); // Dispatch the event\n\n element.dispatchEvent(event);\n} // Unbind all cached event listeners\n\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} // Run method when / if player is ready\n\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 */\n\nfunction silencePromise(value) {\n if (is.promise(value)) {\n value.then(null, () => {});\n }\n}\n\n// ==========================================================================\n\nfunction dedupe(array) {\n if (!is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n} // Get the closest value in an array\n\nfunction closest(array, value) {\n if (!is.array(array) || !array.length) {\n return null;\n }\n\n return array.reduce((prev, curr) => Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev);\n}\n\n// ==========================================================================\n\nfunction supportsCSS(declaration) {\n if (!window || !window.CSS) {\n return false;\n }\n\n return window.CSS.supports(declaration);\n} // Standard/common aspect ratios\n\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]) => ({ ...out,\n [x / y]: [x, y]\n}), {}); // Validate an aspect ratio\n\nfunction validateAspectRatio(input) {\n if (!is.array(input) && (!is.string(input) || !input.includes(':'))) {\n return false;\n }\n\n const ratio = is.array(input) ? input : input.split(':');\n return ratio.map(Number).every(is.number);\n} // Reduce an aspect ratio to it's lowest form\n\nfunction reduceAspectRatio(ratio) {\n if (!is.array(ratio) || !ratio.every(is.number)) {\n return null;\n }\n\n const [width, height] = ratio;\n\n const getDivider = (w, h) => h === 0 ? w : getDivider(h, w % h);\n\n const divider = getDivider(width, height);\n return [width / divider, height / divider];\n} // Calculate an aspect ratio\n\nfunction getAspectRatio(input) {\n const parse = ratio => validateAspectRatio(ratio) ? ratio.split(':').map(Number) : null; // Try provided ratio\n\n\n let ratio = parse(input); // Get from config\n\n if (ratio === null) {\n ratio = parse(this.config.ratio);\n } // Get from embed\n\n\n if (ratio === null && !is.empty(this.embed) && is.array(this.embed.ratio)) {\n ({\n ratio\n } = this.embed);\n } // Get from HTML5 video\n\n\n if (ratio === null && this.isHTML5) {\n const {\n videoWidth,\n videoHeight\n } = this.media;\n ratio = [videoWidth, videoHeight];\n }\n\n return reduceAspectRatio(ratio);\n} // Set aspect ratio for responsive container\n\nfunction setAspectRatio(input) {\n if (!this.isVideo) {\n return {};\n }\n\n const {\n wrapper\n } = this.elements;\n const ratio = getAspectRatio.call(this, input);\n\n if (!is.array(ratio)) {\n return {};\n }\n\n const [x, y] = reduceAspectRatio(ratio);\n const useNative = supportsCSS(`aspect-ratio: ${x}/${y}`);\n const padding = 100 / x * y;\n\n if (useNative) {\n wrapper.style.aspectRatio = `${x}/${y}`;\n } else {\n wrapper.style.paddingBottom = `${padding}%`;\n } // For Vimeo we have an extra
to hide the standard controls and UI\n\n\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\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\n return {\n padding,\n ratio\n };\n} // Round an aspect ratio to closest standard ratio\n\nfunction roundAspectRatio(x, y, tolerance = 0.05) {\n const ratio = x / y;\n const closestRatio = closest(Object.keys(standardRatios), ratio); // Check match is within tolerance\n\n if (Math.abs(closestRatio - ratio) <= tolerance) {\n return standardRatios[closestRatio];\n } // No match\n\n\n return [x, y];\n} // Get the size of the viewport\n// https://stackoverflow.com/questions/1248081/how-to-get-the-browser-viewport-dimensions\n\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\n const sources = Array.from(this.media.querySelectorAll('source')); // Filter out unsupported sources (if type is specified)\n\n return sources.filter(source => {\n const type = source.getAttribute('type');\n\n if (is.empty(type)) {\n return true;\n }\n\n return support.mime.call(this, type);\n });\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 } // Get sizes from elements\n\n\n return html5.getSources.call(this).map(source => Number(source.getAttribute('size'))).filter(Boolean);\n },\n\n setup() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this; // Set speed options from config\n\n player.options.speed = player.config.speed.options; // Set aspect ratio if fixed\n\n if (!is.empty(this.config.ratio)) {\n setAspectRatio.call(player);\n } // Quality\n\n\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); // Return size, if match is found\n\n return source && Number(source.getAttribute('size'));\n },\n\n set(input) {\n if (player.quality === input) {\n return;\n } // If we're using an external handler...\n\n\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); // Get first match for requested size\n\n const source = sources.find(s => Number(s.getAttribute('size')) === input); // No matching source found\n\n if (!source) {\n return;\n } // Get current state\n\n\n const {\n currentTime,\n paused,\n preload,\n readyState,\n playbackRate\n } = player.media; // Set new source\n\n player.media.src = source.getAttribute('src'); // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n\n if (preload !== 'none' || readyState) {\n // Restore time\n player.once('loadedmetadata', () => {\n player.speed = playbackRate;\n player.currentTime = currentTime; // Resume playing\n\n if (!paused) {\n silencePromise(player.play());\n }\n }); // Load new source\n\n player.media.load();\n }\n } // Trigger change event\n\n\n triggerEvent.call(player, player.media, 'qualitychange', false, {\n quality: input\n });\n }\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 } // Remove child sources\n\n\n removeElement(html5.getSources.call(this)); // 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\n this.media.setAttribute('src', this.config.blankVideo); // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n\n this.media.load(); // Debugging\n\n this.debug.log('Cancelled network requests');\n }\n\n};\n\n// ==========================================================================\n\nfunction generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n} // Format string\n\nfunction format(input, ...args) {\n if (is.empty(input)) return input;\n return input.toString().replace(/{(\\d+)}/g, (match, i) => args[i].toString());\n} // Get percentage\n\nfunction getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n\n return (current / max * 100).toFixed(2);\n} // Replace all occurrences of a string in a string\n\nconst replaceAll = (input = '', find = '', replace = '') => input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString()); // Convert to title case\n\nconst toTitleCase = (input = '') => input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.slice(1).toLowerCase()); // Convert string to pascalCase\n\nfunction toPascalCase(input = '') {\n let string = input.toString(); // Convert kebab case\n\n string = replaceAll(string, '-', ' '); // Convert snake case\n\n string = replaceAll(string, '_', ' '); // Convert to title case\n\n string = toTitleCase(string); // Convert to pascal case\n\n return replaceAll(string, ' ', '');\n} // Convert string to pascalCase\n\nfunction toCamelCase(input = '') {\n let string = input.toString(); // Convert to pascal case\n\n string = toPascalCase(string); // Convert first character to lowercase\n\n return string.charAt(0).toLowerCase() + string.slice(1);\n} // Remove HTML from a string\n\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} // Like outerHTML, but also works for DocumentFragment\n\nfunction getHTML(element) {\n const wrapper = document.createElement('div');\n wrapper.appendChild(element);\n return wrapper.innerHTML;\n}\n\n// ==========================================================================\n\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\n let string = getDeep(config.i18n, key);\n\n if (is.empty(string)) {\n if (Object.keys(resources).includes(key)) {\n return resources[key];\n }\n\n return '';\n }\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};\n\nclass Storage {\n constructor(player) {\n _defineProperty$1(this, \"get\", key => {\n if (!Storage.supported || !this.enabled) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n return is.string(key) && key.length ? json[key] : json;\n });\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 } // Can only store objectst\n\n\n if (!is.object(object)) {\n return;\n } // Get current storage\n\n\n let storage = this.get(); // Default to empty object\n\n if (is.empty(storage)) {\n storage = {};\n } // Update the working copy of the values\n\n\n extend(storage, object); // Update storage\n\n try {\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n } catch (_) {// Do nothing\n }\n });\n\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n } // Check for actual support (see if we can use it)\n\n\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test'; // 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\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// ==========================================================================\n// Fetch wrapper\n// Using XHR to avoid issues with older browsers\n// ==========================================================================\nfunction fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest(); // Check for CORS support\n\n if (!('withCredentials' in request)) {\n return;\n }\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); // Set the required response type\n\n request.responseType = responseType;\n request.send();\n } catch (error) {\n reject(error);\n }\n });\n}\n\n// ==========================================================================\n\nfunction loadSprite(url, id) {\n if (!is.string(url)) {\n return;\n }\n\n const prefix = 'cache';\n const hasId = is.string(id);\n let isCached = false;\n\n const exists = () => document.getElementById(id) !== null;\n\n const update = (container, data) => {\n // eslint-disable-next-line no-param-reassign\n container.innerHTML = data; // Check again incase of race condition\n\n if (hasId && exists()) {\n return;\n } // Inject the SVG to the body\n\n\n document.body.insertAdjacentElement('afterbegin', container);\n }; // Only load once if ID set\n\n\n if (!hasId || !exists()) {\n const useStorage = Storage.supported; // Create container\n\n const container = document.createElement('div');\n container.setAttribute('hidden', '');\n\n if (hasId) {\n container.setAttribute('id', id);\n } // Check in cache\n\n\n if (useStorage) {\n const cached = window.localStorage.getItem(`${prefix}-${id}`);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n update(container, data.content);\n }\n } // Get the sprite\n\n\n fetch(url).then(result => {\n if (is.empty(result)) {\n return;\n }\n\n if (useStorage) {\n try {\n window.localStorage.setItem(`${prefix}-${id}`, JSON.stringify({\n content: result\n }));\n } catch (_) {// Do nothing\n }\n }\n\n update(container, result);\n }).catch(() => {});\n }\n}\n\n// ==========================================================================\n\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); // Format time to UI friendly string\n\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 } // Format time component to add leading zero\n\n\n const format = value => `0${value}`.slice(-2); // Breakdown to hours, mins, secs\n\n\n let hours = getHours(time);\n const mins = getMinutes(time);\n const secs = getSeconds(time); // Do we need to display hours?\n\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n } // Render\n\n\n return `${inverted && time > 0 ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n}\n\n// ==========================================================================\n\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\n // Find the UI controls\n findElements() {\n try {\n this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper); // Buttons\n\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 }; // Progress\n\n this.elements.progress = getElement.call(this, this.config.selectors.progress); // Inputs\n\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 }; // Display\n\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 }; // Seek tooltip\n\n if (is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\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); // Restore native video controls\n\n this.toggleNativeControls(true);\n return false;\n }\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}`; // Create \n\n const icon = document.createElementNS(namespace, 'svg');\n setAttributes(icon, extend(attributes, {\n 'aria-hidden': 'true',\n focusable: 'false'\n })); // Create the to reference sprite\n\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`; // 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\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n\n\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path); // Add to \n\n icon.appendChild(use);\n return icon;\n },\n\n // Create hidden text label\n createLabel(key, attr = {}) {\n const text = i18n.get(key, this.config);\n const attributes = { ...attr,\n class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ')\n };\n return createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (is.empty(text)) {\n return null;\n }\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\n // Create a
`);\n } // Set position\n\n\n tipElement.style.left = `${percent}%`; // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n\n if (is.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\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; // Duration\n\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert); // Ignore updates while seeking\n\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n } // Playing progress\n\n\n controls.updateProgress.call(this, event);\n },\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 } // 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\n\n if (this.duration >= 2 ** 32) {\n toggleHidden(this.elements.display.currentTime, true);\n toggleHidden(this.elements.progress, true);\n return;\n } // Update ARIA values\n\n\n if (is.element(this.elements.inputs.seek)) {\n this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n } // If there's a spot to display duration\n\n\n const hasDuration = is.element(this.elements.display.duration); // If there's only one time display, display duration there\n\n if (!hasDuration && this.config.displayDuration && this.paused) {\n controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n } // If there's a duration element, update content\n\n\n if (hasDuration) {\n controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n if (this.config.markers.enabled) {\n controls.setMarkers.call(this);\n } // Update the tooltip (if visible)\n\n\n controls.updateSeekTooltip.call(this);\n },\n\n // Hide/show a tab\n toggleMenuButton(setting, toggle) {\n toggleHidden(this.elements.settings.buttons[setting], !toggle);\n },\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\n if (setting === 'captions') {\n value = this.currentTrack;\n } else {\n value = !is.empty(input) ? input : this[setting]; // Get default\n\n if (is.empty(value)) {\n value = this.config[setting].default;\n } // Unsupported value\n\n\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 } // Disabled value\n\n\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n } // Get the list if we need to\n\n\n if (!is.element(list)) {\n list = pane && pane.querySelector('[role=\"menu\"]');\n } // If there's no list it means it's not been rendered...\n\n\n if (!is.element(list)) {\n return;\n } // Update the label\n\n\n const label = this.elements.settings.buttons[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value); // Find the radio option and check it\n\n const target = list && list.querySelector(`[value=\"${value}\"]`);\n\n if (is.element(target)) {\n target.checked = true;\n }\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\n case 'quality':\n if (is.number(value)) {\n const label = i18n.get(`qualityLabel.${value}`, this.config);\n\n if (!label.length) {\n return `${value}p`;\n }\n\n return label;\n }\n\n return toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\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\n const type = 'quality';\n const list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]'); // Set options if passed and filter based on uniqueness and config\n\n if (is.array(options)) {\n this.options.quality = dedupe(options).filter(quality => this.config.quality.options.includes(quality));\n } // Toggle the pane and tab\n\n\n const toggle = !is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n emptyElement(list); // Check if we need to toggle the parent\n\n controls.checkMenu.call(this); // If we're hiding, nothing more to do\n\n if (!toggle) {\n return;\n } // Get the badge HTML for HD, 4K etc\n\n\n const getBadge = quality => {\n const label = i18n.get(`qualityBadge.${quality}`, this.config);\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n }; // Sort options by the config and then render options\n\n\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\n // Set the looping options\n\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 // Get current selected caption language\n // TODO: rework this to user the getter in the API?\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 } // TODO: Captions or language? Currently it's mixed\n\n\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); // Toggle the pane and tab\n\n controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n emptyElement(list); // Check if we need to toggle the parent\n\n controls.checkMenu.call(this); // If there's no captions, bail\n\n if (!toggle) {\n return;\n } // Generate options data\n\n\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 })); // Add the \"Disabled\" option to turn off captions\n\n options.unshift({\n value: -1,\n checked: !this.captions.toggled,\n title: i18n.get('disabled', this.config),\n list,\n type: 'language'\n }); // Generate options\n\n options.forEach(controls.createMenuItem.bind(this));\n controls.updateSetting.call(this, type, list);\n },\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\n const type = 'speed';\n const list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]'); // Filter out invalid speeds\n\n this.options.speed = this.options.speed.filter(o => o >= this.minimumSpeed && o <= this.maximumSpeed); // Toggle the pane and tab\n\n const toggle = !is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n emptyElement(list); // Check if we need to toggle the parent\n\n controls.checkMenu.call(this); // If we're hiding, nothing more to do\n\n if (!toggle) {\n return;\n } // Create items\n\n\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\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\n // Focus the first menu item in a given (or visible) menu\n focusFirstMenuItem(pane, tabFocus = false) {\n if (this.elements.settings.popup.hidden) {\n return;\n }\n\n let target = pane;\n\n if (!is.element(target)) {\n target = Object.values(this.elements.settings.panels).find(p => !p.hidden);\n }\n\n const firstItem = target.querySelector('[role^=\"menuitem\"]');\n setFocus.call(this, firstItem, tabFocus);\n },\n\n // Show/hide menu\n toggleMenu(input) {\n const {\n popup\n } = this.elements.settings;\n const button = this.elements.buttons.settings; // Menu and button are required\n\n if (!is.element(popup) || !is.element(button)) {\n return;\n } // True toggle by default\n\n\n const {\n hidden\n } = popup;\n let show = hidden;\n\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); // 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\n if (isMenuItem || !isMenuItem && input.target !== button && show) {\n return;\n }\n } // Set button attributes\n\n\n button.setAttribute('aria-expanded', show); // Show the actual popup\n\n toggleHidden(popup, !show); // Add class hook\n\n toggleClass(this.elements.container, this.config.classNames.menu.open, show); // Focus the first item if key interaction\n\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\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'); // Append to parent so we get the \"real\" size\n\n tab.parentNode.appendChild(clone); // Get the sizes before we remove\n\n const width = clone.scrollWidth;\n const height = clone.scrollHeight; // Remove from the DOM\n\n removeElement(clone);\n return {\n width,\n height\n };\n },\n\n // Show a panel in the menu\n showMenuPanel(type = '', tabFocus = false) {\n const target = this.elements.container.querySelector(`#plyr-settings-${this.id}-${type}`); // Nothing to show, bail\n\n if (!is.element(target)) {\n return;\n } // Hide all other panels\n\n\n const container = target.parentNode;\n const current = Array.from(container.children).find(node => !node.hidden); // If we can do fancy animations, we'll animate the height/width\n\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`; // Get potential sizes\n\n const size = controls.getMenuSize.call(this, target); // Restore auto height/width\n\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 } // Revert back to auto\n\n\n container.style.width = '';\n container.style.height = ''; // Only listen once\n\n off.call(this, container, transitionEndEvent, restore);\n }; // Listen for the transition finishing and restore auto height/width\n\n\n on.call(this, container, transitionEndEvent, restore); // Set dimensions to target\n\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n } // Set attributes on current tab\n\n\n toggleHidden(current, true); // Set attributes on target\n\n toggleHidden(target, false); // Focus the first item\n\n controls.focusFirstMenuItem.call(this, target, tabFocus);\n },\n\n // Set the download URL\n setDownloadUrl() {\n const button = this.elements.buttons.download; // Bail if no button\n\n if (!is.element(button)) {\n return;\n } // Set attribute\n\n\n button.setAttribute('href', this.download);\n },\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; // Larger overlaid play button\n\n if (is.array(this.config.controls) && this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(createButton.call(this, 'play-large'));\n } // Create the container\n\n\n const container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n this.elements.controls = container; // Default item attributes\n\n const defaultAttributes = {\n class: 'plyr__controls__item'\n }; // Loop through controls in order\n\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 } // Rewind button\n\n\n if (control === 'rewind') {\n container.appendChild(createButton.call(this, 'rewind', defaultAttributes));\n } // Play/Pause button\n\n\n if (control === 'play') {\n container.appendChild(createButton.call(this, 'play', defaultAttributes));\n } // Fast forward button\n\n\n if (control === 'fast-forward') {\n container.appendChild(createButton.call(this, 'fast-forward', defaultAttributes));\n } // Progress\n\n\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)); // Seek range slider\n\n progress.appendChild(createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`\n })); // Buffer progress\n\n progress.appendChild(createProgress.call(this, 'buffer')); // TODO: Add loop display indicator\n // Seek tooltip\n\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\n this.elements.progress = progress;\n progressContainer.appendChild(this.elements.progress);\n container.appendChild(progressContainer);\n } // Media current time display\n\n\n if (control === 'current-time') {\n container.appendChild(createTime.call(this, 'currentTime', defaultAttributes));\n } // Media duration display\n\n\n if (control === 'duration') {\n container.appendChild(createTime.call(this, 'duration', defaultAttributes));\n } // Volume controls\n\n\n if (control === 'mute' || control === 'volume') {\n let {\n volume\n } = this.elements; // Create the volume container if needed\n\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 } // Toggle mute button\n\n\n if (control === 'mute') {\n volume.appendChild(createButton.call(this, 'mute'));\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\n\n if (control === 'volume' && !browser.isIos) {\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume\n }; // Create the volume range slider\n\n volume.appendChild(createRange.call(this, 'volume', extend(attributes, {\n id: `plyr-volume-${data.id}`\n })));\n }\n } // Toggle captions button\n\n\n if (control === 'captions') {\n container.appendChild(createButton.call(this, 'captions', defaultAttributes));\n } // Settings button / menu\n\n\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 }); // Create the menu\n\n const menu = createElement('div', {\n role: 'menu'\n });\n home.appendChild(menu);\n inner.appendChild(home);\n this.elements.settings.panels.home = home; // Build the menu items\n\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 })); // Bind menu shortcuts for keyboard users\n\n bindMenuItemShortcuts.call(this, menuItem, type); // Show menu on click\n\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 }); // Speed contains HTML entities\n\n value.innerHTML = data[type];\n flex.appendChild(value);\n menuItem.appendChild(flex);\n menu.appendChild(menuItem); // Build the panes\n\n const pane = createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n hidden: ''\n }); // Back button\n\n const backButton = createElement('button', {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`\n }); // Visible label\n\n backButton.appendChild(createElement('span', {\n 'aria-hidden': true\n }, i18n.get(type, this.config))); // Screen reader label\n\n backButton.appendChild(createElement('span', {\n class: this.config.classNames.hidden\n }, i18n.get('menuBack', this.config))); // Go back via keyboard\n\n on.call(this, pane, 'keydown', event => {\n if (event.key !== 'ArrowLeft') return; // Prevent seek\n\n event.preventDefault();\n event.stopPropagation(); // Show the respective menu\n\n showMenuPanel.call(this, 'home', true);\n }, false); // Go back via button click\n\n on.call(this, backButton, 'click', () => {\n showMenuPanel.call(this, 'home', false);\n }); // Add to pane\n\n pane.appendChild(backButton); // Menu\n\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 } // Picture in picture button\n\n\n if (control === 'pip' && support.pip) {\n container.appendChild(createButton.call(this, 'pip', defaultAttributes));\n } // Airplay button\n\n\n if (control === 'airplay' && support.airplay) {\n container.appendChild(createButton.call(this, 'airplay', defaultAttributes));\n } // Download button\n\n\n if (control === 'download') {\n const attributes = extend({}, defaultAttributes, {\n element: 'a',\n href: this.download,\n target: '_blank'\n }); // Set download attribute for HTML5 only\n\n if (this.isHTML5) {\n attributes.download = '';\n }\n\n const {\n download\n } = this.config.urls;\n\n if (!is.url(download) && this.isEmbed) {\n extend(attributes, {\n icon: `logo-${this.provider}`,\n label: this.provider\n });\n }\n\n container.appendChild(createButton.call(this, 'download', attributes));\n } // Toggle fullscreen button\n\n\n if (control === 'fullscreen') {\n container.appendChild(createButton.call(this, 'fullscreen', defaultAttributes));\n }\n }); // Set available quality levels\n\n if (this.isHTML5) {\n setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n setSpeedMenu.call(this);\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this); // Only load external sprite using AJAX\n\n if (icon.cors) {\n loadSprite(icon.url, 'sprite-plyr');\n }\n } // Create a unique ID\n\n\n this.id = Math.floor(Math.random() * 10000); // Null by default\n\n let container = null;\n this.elements.controls = null; // Set template properties\n\n const props = {\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title\n };\n let update = true; // If function, run it and use output\n\n if (is.function(this.config.controls)) {\n this.config.controls = this.config.controls.call(this, props);\n } // Convert falsy controls to empty array (primarily for empty strings)\n\n\n if (!this.config.controls) {\n this.config.controls = [];\n }\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) // TODO: Looping\n // loop: 'None',\n\n });\n update = false;\n } // Replace props with their value\n\n\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 }; // Update markup\n\n\n if (update) {\n if (is.string(this.config.controls)) {\n container = replace(container);\n }\n } // Controls container\n\n\n let target; // Inject to custom location\n\n if (is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n } // Inject into the container by default\n\n\n if (!is.element(target)) {\n target = this.elements.container;\n } // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n\n\n const insertMethod = is.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n target[insertMethod]('afterbegin', container); // Find the elements if need be\n\n if (!is.element(this.elements.controls)) {\n controls.findElements.call(this);\n } // Add pressed property to buttons\n\n\n if (!is.empty(this.elements.buttons)) {\n const addProperty = button => {\n const className = this.config.classNames.controlPressed;\n Object.defineProperty(button, 'pressed', {\n enumerable: true,\n\n get() {\n return hasClass(button, className);\n },\n\n set(pressed = false) {\n toggleClass(button, className, pressed);\n }\n\n });\n }; // Toggle classname when pressed property is set\n\n\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 } // Edge sometimes doesn't finish the paint so force a repaint\n\n\n if (browser.isEdge) {\n repaint(target);\n } // Setup tooltips\n\n\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\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 (_) {// Do nothing\n }\n },\n\n // Add markers\n setMarkers() {\n var _this$config$markers2, _this$config$markers3;\n\n if (!this.duration || this.elements.markers) return; // Get valid points\n\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\n const toggleTip = show => toggleClass(tipElement, tipVisible, show); // Inject markers to progress container\n\n\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\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 }); // Hide on leave\n\n markerElement.addEventListener('mouseleave', () => {\n toggleTip(false);\n });\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); // Inject a tooltip if needed\n\n if (!this.config.tooltips.seek) {\n tipElement = createElement('span', {\n class: this.config.classNames.tooltip\n }, '');\n containerFragment.appendChild(tipElement);\n }\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 */\n\nfunction parseUrl(input, safe = true) {\n let url = input;\n\n if (safe) {\n const parser = document.createElement('a');\n parser.href = url;\n url = parser.href;\n }\n\n try {\n return new URL(url);\n } catch (_) {\n return null;\n }\n} // Convert object to URLSearchParams\n\nfunction buildUrlParams(input) {\n const params = new URLSearchParams();\n\n if (is.object(input)) {\n Object.entries(input).forEach(([key, value]) => {\n params.set(key, value);\n });\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 } // Only Vimeo and HTML5 video supported at this point\n\n\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\n return;\n } // Inject the container\n\n\n if (!is.element(this.elements.captions)) {\n this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n insertAfter(this.elements.captions, this.elements.wrapper);\n } // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n\n\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\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 } // 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\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(); // Use first browser language when language is 'auto'\n\n if (language === 'auto') {\n [language] = languages;\n }\n\n let active = this.storage.get('captions');\n\n if (!is.boolean(active)) {\n ({\n active\n } = this.config.captions);\n }\n\n Object.assign(this.captions, {\n toggled: false,\n active,\n language,\n languages\n }); // Watch changes to textTracks and update captions menu\n\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 } // Update available languages in list next tick (the event must not be triggered before the listeners)\n\n\n setTimeout(captions.update.bind(this), 0);\n },\n\n // Update available language options in settings based on tracks\n update() {\n const tracks = captions.getTracks.call(this, true); // Get the wanted language\n\n const {\n active,\n language,\n meta,\n currentTrackNode\n } = this.captions;\n const languageExists = Boolean(tracks.find(track => track.language === language)); // Handle tracks (add event listener and \"pseudo\"-default)\n\n if (this.isHTML5 && this.isVideo) {\n tracks.filter(track => !meta.get(track)).forEach(track => {\n this.debug.log('Track added', track); // Attempt to store if the original dom element was \"default\"\n\n meta.set(track, {\n default: track.mode === 'showing'\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\n if (track.mode === 'showing') {\n // eslint-disable-next-line no-param-reassign\n track.mode = 'hidden';\n } // Add event listener for cue changes\n\n\n on.call(this, track, 'cuechange', () => captions.updateCues.call(this));\n });\n } // Update language first time it matches, or if the previous matching track was removed\n\n\n if (languageExists && this.language !== language || !tracks.includes(currentTrackNode)) {\n captions.setLanguage.call(this, language);\n captions.toggle.call(this, active && languageExists);\n } // Enable or disable captions based on track length\n\n\n if (this.elements) {\n toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is.empty(tracks));\n } // Update available languages in list\n\n\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\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\n const {\n toggled\n } = this.captions; // Current state\n\n const activeClass = this.config.classNames.captions.active; // Get the next state\n // If the method is called without parameter, toggle based on current value\n\n const active = is.nullOrUndefined(input) ? !toggled : input; // Update state and trigger event\n\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 } // Force language if the call isn't passive and there is no matching language to toggle to\n\n\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); // Override user preferences to avoid switching languages if a matching track is added\n\n this.captions.language = track.language; // Set caption, but don't store in localStorage as user preference\n\n captions.set.call(this, tracks.indexOf(track));\n return;\n } // Toggle button if it's enabled\n\n\n if (this.elements.buttons.captions) {\n this.elements.buttons.captions.pressed = active;\n } // Add class hook\n\n\n toggleClass(this.elements.container, activeClass, active);\n this.captions.toggled = active; // Update settings menu\n\n controls.updateSetting.call(this, 'captions'); // Trigger event (not used internally)\n\n triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n } // Wait for the call stack to clear before setting mode='hidden'\n // on the active track - forcing the browser to download it\n\n\n setTimeout(() => {\n if (active && this.captions.toggled) {\n this.captions.currentTrackNode.mode = 'hidden';\n }\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); // Disable captions if setting to -1\n\n if (index === -1) {\n captions.toggle.call(this, false, passive);\n return;\n }\n\n if (!is.number(index)) {\n this.debug.warn('Invalid caption argument', index);\n return;\n }\n\n if (!(index in tracks)) {\n this.debug.warn('Track not found', index);\n return;\n }\n\n if (this.captions.currentTrack !== index) {\n this.captions.currentTrack = index;\n const track = tracks[index];\n const {\n language\n } = track || {}; // Store reference to node for invalidation on remove\n\n this.captions.currentTrackNode = track; // Update settings menu\n\n controls.updateSetting.call(this, 'captions'); // When passive, don't override user preferences\n\n if (!passive) {\n this.captions.language = language;\n this.storage.set({\n language\n });\n } // Handle Vimeo captions\n\n\n if (this.isVimeo) {\n this.embed.enableTextTrack(language);\n } // Trigger event\n\n\n triggerEvent.call(this, this.media, 'languagechange');\n } // Show captions\n\n\n captions.toggle.call(this, true, passive);\n\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\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 } // Normalize\n\n\n const language = input.toLowerCase();\n this.captions.language = language; // Set currentTrack\n\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\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 || []); // 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\n return tracks.filter(track => !this.isHTML5 || update || this.captions.meta.has(track)).filter(track => ['captions', 'subtitles'].includes(track.kind));\n },\n\n // Match tracks based on languages and get the first\n findTrack(languages, force = false) {\n const tracks = captions.getTracks.call(this);\n\n const sortIsDefault = track => Number((this.captions.meta.get(track) || {}).default);\n\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 }); // If no match is found but is required, get first\n\n return track || (force ? sorted[0] : undefined);\n },\n\n // Get the current track\n getCurrentTrack() {\n return captions.getTracks.call(this)[this.currentTrack];\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!is.track(currentTrack) && support.textTracks && this.captions.toggled) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (is.track(currentTrack)) {\n if (!is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!is.empty(currentTrack.language)) {\n return track.language.toUpperCase();\n }\n\n return i18n.get('enabled', this.config);\n }\n\n return i18n.get('disabled', this.config);\n },\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\n if (!is.element(this.elements.captions)) {\n this.debug.warn('No captions element to render to');\n return;\n } // Only accept array or empty input\n\n\n if (!is.nullOrUndefined(input) && !Array.isArray(input)) {\n this.debug.warn('updateCues: Invalid input', input);\n return;\n }\n\n let cues = input; // Get cues from track\n\n if (!cues) {\n const track = captions.getCurrentTrack.call(this);\n cues = Array.from((track || {}).activeCues || []).map(cue => cue.getCueAsHTML()).map(getHTML);\n } // Set new caption text\n\n\n const content = cues.map(cueText => cueText.trim()).join('\\n');\n const changed = content !== this.elements.captions.innerHTML;\n\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); // Trigger event\n\n triggerEvent.call(this, this.media, 'cuechange');\n }\n }\n\n};\n\n// ==========================================================================\n// Plyr default config\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 (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\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.2/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 // 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', // 'restart',\n // 'rewind',\n 'play', // 'fast-forward',\n 'progress', 'current-time', // 'duration',\n 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', // '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: [// 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', // Custom events\n 'download', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready', // YouTube\n 'statechange', // Quality\n 'qualitychange', // 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 isIos: 'plyr--is-ios',\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 tabFocus: 'plyr__tab-focus',\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// ==========================================================================\nconst pip = {\n active: 'picture-in-picture',\n inactive: 'inline'\n};\n\n// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\nconst providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo'\n};\nconst types = {\n audio: 'audio',\n video: 'video'\n};\n/**\n * Get provider by URL\n * @param {String} url\n */\n\nfunction getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n } // Vimeo\n\n\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n}\n\n// ==========================================================================\n// Console wrapper\n// ==========================================================================\nconst noop = () => {};\n\nclass Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\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\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\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}\n\nclass Fullscreen {\n constructor(player) {\n _defineProperty$1(this, \"onChange\", () => {\n if (!this.enabled) {\n return;\n } // Update toggle button\n\n\n const button = this.player.elements.buttons.fullscreen;\n\n if (is.element(button)) {\n button.pressed = this.active;\n } // Always trigger events on the plyr / media element (not a fullscreen container) and let them bubble up\n\n\n const target = this.target === this.player.media ? this.target : this.player.elements.container; // Trigger an event\n\n triggerEvent.call(this.player, target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n });\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 } // Toggle scroll\n\n\n document.body.style.overflow = toggle ? 'hidden' : ''; // Toggle class hook\n\n toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle); // Force full viewport on iPhone X+\n\n if (browser.isIos) {\n let viewport = document.head.querySelector('meta[name=\"viewport\"]');\n const property = 'viewport-fit=cover'; // Inject the viewport meta if required\n\n if (!viewport) {\n viewport = document.createElement('meta');\n viewport.setAttribute('name', 'viewport');\n } // Check if the property already exists\n\n\n const hasProperty = is.string(viewport.content) && viewport.content.includes(property);\n\n if (toggle) {\n this.cleanupViewport = !hasProperty;\n\n if (!hasProperty) {\n viewport.content += `,${property}`;\n }\n } else if (this.cleanupViewport) {\n viewport.content = viewport.content.split(',').filter(part => part.trim() !== property).join(',');\n }\n } // Toggle button and fire events\n\n\n this.onChange();\n });\n\n _defineProperty$1(this, \"trapFocus\", event => {\n // Bail if iOS, not active, not the tab key\n if (browser.isIos || !this.active || event.key !== 'Tab') {\n return;\n } // Get the current focused element\n\n\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\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\n _defineProperty$1(this, \"update\", () => {\n if (this.enabled) {\n let mode;\n\n if (this.forceFallback) {\n mode = 'Fallback (forced)';\n } else if (Fullscreen.native) {\n mode = 'Native';\n } else {\n mode = 'Fallback';\n }\n\n this.player.debug.log(`${mode} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n } // Add styling hook to show button\n\n\n toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n });\n\n _defineProperty$1(this, \"enter\", () => {\n if (!this.enabled) {\n return;\n } // iOS native fullscreen doesn't need the request step\n\n\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.native || 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\n _defineProperty$1(this, \"exit\", () => {\n if (!this.enabled) {\n return;\n } // iOS native fullscreen\n\n\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n silencePromise(this.player.play());\n } else if (!Fullscreen.native || 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\n _defineProperty$1(this, \"toggle\", () => {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n });\n\n // Keep reference to parent\n this.player = player; // Get prefix\n\n this.prefix = Fullscreen.prefix;\n this.property = Fullscreen.property; // Scroll position\n\n this.scrollPosition = {\n x: 0,\n y: 0\n }; // Force the use of 'full window/browser' rather than fullscreen\n\n this.forceFallback = player.config.fullscreen.fallback === 'force'; // Get the fullscreen element\n // Checks container is an ancestor, defaults to null\n\n this.player.elements.fullscreen = player.config.fullscreen.container && closest$1(this.player.elements.container, player.config.fullscreen.container); // Register event listeners\n // Handle event (incase user presses escape etc)\n\n on.call(this.player, document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n this.onChange();\n }); // Fullscreen toggle on double click\n\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\n this.player.listeners.proxy(event, this.toggle, 'fullscreen');\n }); // Tap focus when in fullscreen\n\n on.call(this, this.player.elements.container, 'keydown', event => this.trapFocus(event)); // Update the UI\n\n this.update(); // this.toggle = this.toggle.bind(this);\n } // Determine if native supported\n\n\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n } // If we're actually using native\n\n\n get usingNative() {\n return Fullscreen.native && !this.forceFallback;\n } // Get the prefix for handlers\n\n\n static get prefix() {\n // No prefix\n if (is.function(document.exitFullscreen)) {\n return '';\n } // Check for fullscreen support by vendor prefix\n\n\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\n return false;\n });\n return value;\n }\n\n static get property() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n } // Determine if fullscreen is enabled\n\n\n get enabled() {\n return (Fullscreen.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n } // Get active state\n\n\n get active() {\n if (!this.enabled) {\n return false;\n } // Fallback using classname\n\n\n if (!Fullscreen.native || this.forceFallback) {\n return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\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 } // Get target element\n\n\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// ==========================================================================\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// ==========================================================================\nfunction loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(image);\n };\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\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\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling?\n this.listeners.media(); // Don't setup interface if no support\n\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`); // Restore native controls\n\n ui.toggleNativeControls.call(this, true); // Bail\n\n return;\n } // Inject custom controls if not present\n\n\n if (!is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this); // Re-attach control listeners\n\n this.listeners.controls();\n } // Remove native controls\n\n\n ui.toggleNativeControls.call(this); // Setup captions for HTML5\n\n if (this.isHTML5) {\n captions.setup.call(this);\n } // Reset volume\n\n\n this.volume = null; // Reset mute state\n\n this.muted = null; // Reset loop state\n\n this.loop = null; // Reset quality setting\n\n this.quality = null; // Reset speed\n\n this.speed = null; // Reset volume display\n\n controls.updateVolume.call(this); // Reset time display\n\n controls.timeUpdate.call(this); // Reset duration display\n\n controls.durationUpdate.call(this); // Update the UI\n\n ui.checkPlaying.call(this); // Check for picture-in-picture support\n\n toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo); // Check for airplay support\n\n toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5); // Add iOS class\n\n toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos); // Add touch class\n\n toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch); // Ready for API calls\n\n this.ready = true; // Ready event at end of execution stack\n\n setTimeout(() => {\n triggerEvent.call(this, this.media, 'ready');\n }, 0); // Set the title\n\n ui.setTitle.call(this); // Assure the poster image is set, if the property was added before the element was created\n\n if (this.poster) {\n ui.setPoster.call(this, this.poster, false).catch(() => {});\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\n\n if (this.config.duration) {\n controls.durationUpdate.call(this);\n } // Media metadata\n\n\n if (this.config.mediaMetadata) {\n controls.setMediaMetadata.call(this);\n }\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); // If there's a media title set, use that for the label\n\n if (is.string(this.config.title) && !is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n } // If there's a play button, set label\n\n\n Array.from(this.elements.buttons.play || []).forEach(button => {\n button.setAttribute('aria-label', label);\n }); // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n\n if (this.isEmbed) {\n const iframe = getElement.call(this, 'iframe');\n\n if (!is.element(iframe)) {\n return;\n } // Default to media type\n\n\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\n // Toggle poster\n togglePoster(enable) {\n toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n },\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 } // Set property synchronously to respect the call order\n\n\n this.media.setAttribute('data-poster', poster); // Show the poster\n\n this.elements.poster.removeAttribute('hidden'); // Wait until ui is ready\n\n return ready.call(this) // 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 } // Rethrow\n\n\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\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); // Set state\n\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 }); // Only update controls on non timeupdate events\n\n if (is.event(event) && event.type === 'timeupdate') {\n return;\n } // Toggle controls\n\n\n ui.toggleControls.call(this);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = ['stalled', 'waiting'].includes(event.type); // Clear timer\n\n clearTimeout(this.timers.loading); // Timer to prevent flicker when seeking\n\n this.timers.loading = setTimeout(() => {\n // Update progress bar loading class state\n toggleClass(this.elements.container, this.config.classNames.loading, this.loading); // Update controls visibility\n\n ui.toggleControls.call(this);\n }, this.loading ? 250 : 0);\n },\n\n // Toggle controls based on state and `force` argument\n toggleControls(force) {\n const {\n controls: controlsElement\n } = this.elements;\n\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(); // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n\n this.toggleControls(Boolean(force || this.loading || this.paused || controlsElement.pressed || controlsElement.hover || recentTouchSeek));\n }\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({ ...this.media.style\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)); // Clean up from media element\n\n this.media.style.removeProperty(key);\n }); // Remove attribute if empty\n\n if (is.empty(this.media.style)) {\n this.media.removeAttribute('style');\n }\n }\n\n};\n\nclass Listeners {\n constructor(_player) {\n _defineProperty$1(this, \"firstTouch\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n player.touch = true; // Add touch class\n\n toggleClass(elements.container, player.config.classNames.isTouch, true);\n });\n\n _defineProperty$1(this, \"setTabFocus\", event => {\n const {\n player\n } = this;\n const {\n elements\n } = player;\n const {\n key,\n type,\n timeStamp\n } = event;\n clearTimeout(this.focusTimer); // Ignore any key other than tab\n\n if (type === 'keydown' && key !== 'Tab') {\n return;\n } // Store reference to event timeStamp\n\n\n if (type === 'keydown') {\n this.lastKeyDown = timeStamp;\n } // Remove current classes\n\n\n const removeCurrent = () => {\n const className = player.config.classNames.tabFocus;\n const current = getElements.call(player, `.${className}`);\n toggleClass(current, className, false);\n }; // Determine if a key was pressed to trigger this event\n\n\n const wasKeyDown = timeStamp - this.lastKeyDown <= 20; // Ignore focus events if a key was pressed prior\n\n if (type === 'focus' && !wasKeyDown) {\n return;\n } // Remove all current\n\n\n removeCurrent(); // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n\n if (type !== 'focusout') {\n this.focusTimer = setTimeout(() => {\n const focused = document.activeElement; // Ignore if current focus element isn't inside the player\n\n if (!elements.container.contains(focused)) {\n return;\n }\n\n toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n }, 10);\n }\n });\n\n _defineProperty$1(this, \"global\", (toggle = true) => {\n const {\n player\n } = this; // Keyboard shortcuts\n\n if (player.config.keyboard.global) {\n toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n } // Click anywhere closes menu\n\n\n toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle); // Detect touch by events\n\n once.call(player, document.body, 'touchstart', this.firstTouch); // Tab focus detection\n\n toggleListener.call(player, document.body, 'keydown focus blur focusout', this.setTabFocus, toggle, false, true);\n });\n\n _defineProperty$1(this, \"container\", () => {\n const {\n player\n } = this;\n const {\n config,\n elements,\n timers\n } = player; // Keyboard shortcuts\n\n if (!config.keyboard.global && config.keyboard.focused) {\n on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n } // Toggle controls on mouse events and entering fullscreen\n\n\n on.call(player, elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', event => {\n const {\n controls: controlsElement\n } = elements; // Remove button states for fullscreen\n\n if (controlsElement && event.type === 'enterfullscreen') {\n controlsElement.pressed = false;\n controlsElement.hover = false;\n } // Show, then hide after a timeout unless another control event occurs\n\n\n const show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n let delay = 0;\n\n if (show) {\n ui.toggleControls.call(player, true); // Use longer timeout for touch devices\n\n delay = player.touch ? 3000 : 2000;\n } // Clear timer\n\n\n clearTimeout(timers.controls); // Set new timer to prevent flicker when seeking\n\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n }); // Set a gutter for Vimeo\n\n const setGutter = () => {\n if (!player.isVimeo || player.config.vimeo.premium) {\n return;\n }\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}`); // If not active, remove styles\n\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\n return;\n } // Determine which dimension will overflow and constrain view\n\n\n const [viewportWidth, viewportHeight] = getViewportSize();\n const overflow = viewportWidth / viewportHeight > videoWidth / videoHeight;\n\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 }; // Handle resizing\n\n\n const resized = () => {\n clearTimeout(timers.resized);\n timers.resized = setTimeout(setGutter, 50);\n };\n\n on.call(player, elements.container, 'enterfullscreen exitfullscreen', event => {\n const {\n target\n } = player.fullscreen; // Ignore events not from target\n\n if (target !== elements.container) {\n return;\n } // If it's not an embed and no ratio specified\n\n\n if (!player.isEmbed && is.empty(player.config.ratio)) {\n return;\n } // Set Vimeo gutter\n\n\n setGutter(); // Watch for resizes\n\n const method = event.type === 'enterfullscreen' ? on : off;\n method.call(player, window, 'resize', resized);\n });\n });\n\n _defineProperty$1(this, \"media\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player; // Time change on media\n\n on.call(player, player.media, 'timeupdate seeking seeked', event => controls.timeUpdate.call(player, event)); // Display duration\n\n on.call(player, player.media, 'durationchange loadeddata loadedmetadata', event => controls.durationUpdate.call(player, event)); // Handle the media finishing\n\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(); // Call pause otherwise IE11 will start playing the video again\n\n player.pause();\n }\n }); // Check for buffer progress\n\n on.call(player, player.media, 'progress playing seeking seeked', event => controls.updateProgress.call(player, event)); // Handle volume changes\n\n on.call(player, player.media, 'volumechange', event => controls.updateVolume.call(player, event)); // Handle play/pause\n\n on.call(player, player.media, 'playing play pause ended emptied timeupdate', event => ui.checkPlaying.call(player, event)); // Loading state\n\n on.call(player, player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(player, event)); // Click video\n\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}`); // Bail if there's no wrapper (this should never happen)\n\n if (!is.element(wrapper)) {\n return;\n } // On click play, pause or restart\n\n\n on.call(player, elements.container, 'click', event => {\n const targets = [elements.container, wrapper]; // Ignore if click if not container or in video wrapper\n\n if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n return;\n } // Touch devices will just show controls (if hidden)\n\n\n if (player.touch && player.config.hideControls) {\n return;\n }\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 } // Disable right click\n\n\n if (player.supported.ui && player.config.disableContextMenu) {\n on.call(player, elements.wrapper, 'contextmenu', event => {\n event.preventDefault();\n }, false);\n } // Volume change\n\n\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 }); // Speed change\n\n on.call(player, player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(player, 'speed'); // Save to storage\n\n player.storage.set({\n speed: player.speed\n });\n }); // Quality change\n\n on.call(player, player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n }); // Update download link when ready and if quality changes\n\n on.call(player, player.media, 'ready qualitychange', () => {\n controls.setDownloadUrl.call(player);\n }); // Proxy events to container\n // Bubble up key events for Edge\n\n const proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n on.call(player, player.media, proxyEvents, event => {\n let {\n detail = {}\n } = event; // Get error details from media\n\n if (event.type === 'error') {\n detail = player.media.error;\n }\n\n triggerEvent.call(player, elements.container, event.type, true, detail);\n });\n });\n\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; // Execute custom handler\n\n if (hasCustomHandler) {\n returned = customHandler.call(player, event);\n } // Only call default handler if not prevented in custom handler\n\n\n if (returned !== false && is.function(defaultHandler)) {\n defaultHandler.call(player, event);\n }\n });\n\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\n _defineProperty$1(this, \"controls\", () => {\n const {\n player\n } = this;\n const {\n elements\n } = player; // IE doesn't support input event, so we fallback to change\n\n const inputEvent = browser.isIE ? 'change' : 'input'; // Play/pause toggle\n\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 } // Pause\n\n\n this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind\n\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'); // Rewind\n\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'); // Mute toggle\n\n this.bind(elements.buttons.mute, 'click', () => {\n player.muted = !player.muted;\n }, 'mute'); // Captions toggle\n\n this.bind(elements.buttons.captions, 'click', () => player.toggleCaptions()); // Download\n\n this.bind(elements.buttons.download, 'click', () => {\n triggerEvent.call(player, player.media, 'download');\n }, 'download'); // Fullscreen toggle\n\n this.bind(elements.buttons.fullscreen, 'click', () => {\n player.fullscreen.toggle();\n }, 'fullscreen'); // Picture-in-Picture\n\n this.bind(elements.buttons.pip, 'click', () => {\n player.pip = 'toggle';\n }, 'pip'); // Airplay\n\n this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay'); // Settings menu - click toggle\n\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 // 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\n this.bind(elements.buttons.settings, 'keyup', event => {\n if (!['Space', 'Enter'].includes(event.key)) {\n return;\n } // Because return triggers a click anyway, all we need to do is set focus\n\n\n if (event.key === 'Enter') {\n controls.focusFirstMenuItem.call(player, null, true);\n return;\n } // Prevent scroll\n\n\n event.preventDefault(); // Prevent playing video (Firefox)\n\n event.stopPropagation(); // Toggle menu\n\n controls.toggleMenu.call(player, event);\n }, null, false // Can't be passive as we're preventing default\n ); // Escape closes menu\n\n this.bind(elements.settings.menu, 'keydown', event => {\n if (event.key === 'Escape') {\n controls.toggleMenu.call(player, event);\n }\n }); // Set range input alternative \"value\", which matches the tooltip time (#954)\n\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 }); // Pause while seeking\n\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\n if (is.keyboardEvent(event) && !['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n return;\n } // Record seek time so we can prevent hiding controls for a few seconds after seek\n\n\n player.lastSeekTime = Date.now(); // Was playing before?\n\n const play = seek.hasAttribute(attribute); // Done seeking\n\n const done = ['mouseup', 'touchend', 'keyup'].includes(event.type); // If we're done seeking and it was playing, resume playback\n\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 }); // 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\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 } // Seek\n\n\n this.bind(elements.inputs.seek, inputEvent, event => {\n const seek = event.currentTarget; // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n\n let seekTo = seek.getAttribute('seek-value');\n\n if (is.empty(seekTo)) {\n seekTo = seek.value;\n }\n\n seek.removeAttribute('seek-value');\n player.currentTime = seekTo / seek.max * player.duration;\n }, 'seek'); // Seek tooltip\n\n this.bind(elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(player, event)); // Preview thumbnails plugin\n // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n\n this.bind(elements.progress, 'mousemove touchmove', event => {\n const {\n previewThumbnails\n } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.startMove(event);\n }\n }); // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n\n this.bind(elements.progress, 'mouseleave touchend click', () => {\n const {\n previewThumbnails\n } = player;\n\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endMove(false, true);\n }\n }); // Show scrubbing preview\n\n this.bind(elements.progress, 'mousedown touchstart', event => {\n const {\n previewThumbnails\n } = player;\n\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\n if (previewThumbnails && previewThumbnails.loaded) {\n previewThumbnails.endScrubbing(event);\n }\n }); // Polyfill for lower fill in for webkit\n\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 } // Current time invert\n // Only if one time element is used for both currentTime and duration\n\n\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\n player.config.invertTime = !player.config.invertTime;\n controls.timeUpdate.call(player);\n });\n } // Volume\n\n\n this.bind(elements.inputs.volume, inputEvent, event => {\n player.volume = event.target.value;\n }, 'volume'); // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n\n this.bind(elements.controls, 'mouseenter mouseleave', event => {\n elements.controls.hover = !player.touch && event.type === 'mouseenter';\n }); // Also update controls.hover state for any non-player children of fullscreen element (as above)\n\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 } // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n\n\n this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n }); // Show controls when they receive focus (e.g., when using keyboard tab key)\n\n this.bind(elements.controls, 'focusin', () => {\n const {\n config,\n timers\n } = player; // Skip transition to prevent focus from scrolling the parent element\n\n toggleClass(elements.controls, config.classNames.noTransition, true); // Toggle\n\n ui.toggleControls.call(player, true); // Restore transition\n\n setTimeout(() => {\n toggleClass(elements.controls, config.classNames.noTransition, false);\n }, 0); // Delay a little more for mouse users\n\n const delay = this.touch ? 3000 : 4000; // Clear timer\n\n clearTimeout(timers.controls); // Hide again after delay\n\n timers.controls = setTimeout(() => ui.toggleControls.call(player, false), delay);\n }); // Mouse wheel for volume\n\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; // Get delta from event. Invert if `inverted` is true\n\n const [x, y] = [event.deltaX, -event.deltaY].map(value => inverted ? -value : value); // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n\n const direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y); // Change the volume by 2%\n\n player.increaseVolume(direction / 50); // Don't break page scrolling at max and min\n\n const {\n volume\n } = player.media;\n\n if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {\n event.preventDefault();\n }\n }, 'volume', false);\n });\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.setTabFocus = this.setTabFocus.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n } // Handle key presses\n\n\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; // Bail if a modifier key is set\n\n if (altKey || ctrlKey || metaKey || shiftKey) {\n return;\n } // If the event is bubbled from the media element\n // Firefox doesn't get the key for whatever reason\n\n\n if (!key) {\n return;\n } // Seek by increment\n\n\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 }; // Handle the key on keydown\n // Reset on keyup\n\n\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\n if (is.element(focused)) {\n const {\n editable\n } = player.config.selectors;\n const {\n seek\n } = elements.inputs;\n\n if (focused !== seek && matches(focused, editable)) {\n return;\n }\n\n if (event.key === 'Space' && matches(focused, 'button, [role^=\"menuitem\"]')) {\n return;\n }\n } // Which keys should we prevent default\n\n\n const preventDefault = ['Space', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'c', 'f', 'k', 'l', 'm']; // If the key is found prevent default (e.g. prevent scrolling for arrows)\n\n if (preventDefault.includes(key)) {\n event.preventDefault();\n event.stopPropagation();\n }\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\n break;\n\n case 'Space':\n case 'k':\n if (!repeat) {\n silencePromise(player.togglePlay());\n }\n\n break;\n\n case 'ArrowUp':\n player.increaseVolume(0.1);\n break;\n\n case 'ArrowDown':\n player.decreaseVolume(0.1);\n break;\n\n case 'm':\n if (!repeat) {\n player.muted = !player.muted;\n }\n\n break;\n\n case 'ArrowRight':\n player.forward();\n break;\n\n case 'ArrowLeft':\n player.rewind();\n break;\n\n case 'f':\n player.fullscreen.toggle();\n break;\n\n case 'c':\n if (!repeat) {\n player.toggleCaptions();\n }\n\n break;\n\n case 'l':\n player.loop = !player.loop;\n break;\n } // Escape is handle natively when in full screen\n // So we only need to worry about non native\n\n\n if (key === 'Escape' && !player.fullscreen.usingNative && player.fullscreen.active) {\n player.fullscreen.toggle();\n } // Store last key for next cycle\n\n\n this.lastKey = key;\n } else {\n this.lastKey = null;\n }\n } // Toggle menu\n\n\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n } // Device is touch enabled\n\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 var devnull = function () {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n /**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\n\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; // define callback function\n\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n }; // register callback\n\n\n while (i--) {\n bundleId = bundleIds[i]; // execute callback if in result cache\n\n r = bundleResultCache[bundleId];\n\n if (r) {\n fn(bundleId, r);\n continue;\n } // add to callback queue\n\n\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\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\n\n function publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n var q = bundleCallbackQueue[bundleId]; // cache result\n\n bundleResultCache[bundleId] = pathsNotFound; // exit if queue is empty\n\n if (!q) return; // empty callback queue\n\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\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\n\n function executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {\n success: args\n }; // success and error callbacks\n\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);else (args.success || devnull)(args);\n }\n /**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\n\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\n if (/(^css!|\\.css$)/.test(pathname)) {\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; // tag IE9+\n\n isLegacyIECss = 'hideFocus' in e; // use preload in IE Edge (to detect load errors)\n\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\n e.onload = e.onerror = e.onbeforeload = function (ev) {\n var result = ev.type[0]; // treat empty stylesheets as failures to get around lack of onerror\n // support in IE9-11\n\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 } // handle retries in case of load failure\n\n\n if (result == 'e') {\n // increment counter\n numTries += 1; // exit function and try again\n\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 } // execute callback\n\n\n callbackFn(path, result, ev.defaultPrevented);\n }; // add to document (unless callback returns `false`)\n\n\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n }\n /**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\n\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; // define callback function\n\n fn = function (path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path); // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n }; // load scripts\n\n\n for (i = 0; i < x; i++) loadFile(paths[i], fn, args);\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\n\n function loadjs(paths, arg1, arg2) {\n var bundleId, args; // bundleId (if string)\n\n if (arg1 && arg1.trim) bundleId = arg1; // args (default is {})\n\n args = (bundleId ? arg2 : arg1) || {}; // throw error if bundle is already defined\n\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n function loadFn(resolve, reject) {\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound); // resolve Promise\n\n if (resolve) {\n executeCallbacks({\n success: resolve,\n error: reject\n }, pathsNotFound);\n } // publish bundle load event\n\n\n publish(bundleId, pathsNotFound);\n }, args);\n }\n\n if (args.returnPromise) return new Promise(loadFn);else loadFn();\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\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 * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\n\n\n loadjs.done = function done(bundleId) {\n publish(bundleId, []);\n };\n /**\n * Reset loadjs dependencies statuses\n */\n\n\n loadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n };\n /**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\n\n\n loadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n }; // export\n\n\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\nfunction parseId$1(url) {\n if (is.empty(url)) {\n return null;\n }\n\n if (is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n} // Try to extract a hash for private videos from the URL\n\n\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} // Set playback state and trigger change (only on actual change)\n\n\nfunction assurePlaybackState$1(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nconst vimeo = {\n setup() {\n const player = this; // Add embed class for responsive\n\n toggleClass(player.elements.wrapper, player.config.classNames.embed, true); // Set speed options from config\n\n player.options.speed = player.config.speed.options; // Set intial ratio\n\n setAspectRatio.call(player); // Load the SDK if not already\n\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\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; // Get the source URL or ID\n\n let source = player.media.getAttribute('src');\n let hash = ''; // Get from
if needed\n\n if (is.empty(source)) {\n source = player.media.getAttribute(player.config.attributes.embed.id); // hash can also be set as attribute on the
\n\n hash = player.media.getAttribute(player.config.attributes.embed.hash);\n } else {\n hash = parseHash(source);\n }\n\n const hashParam = hash ? {\n h: hash\n } : {}; // If the owner has a pro or premium account then we can hide controls etc\n\n if (premium) {\n Object.assign(frameParams, {\n controls: false,\n sidedock: false\n });\n } // Get Vimeo params for the iframe\n\n\n const params = buildUrlParams({\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n muted: player.muted,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n // hash has to be added to iframe-URL\n ...hashParam,\n ...frameParams\n });\n const id = parseId$1(source); // Build an iframe\n\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('; ')); // Set the referrer policy if required\n\n if (!is.empty(referrerPolicy)) {\n iframe.setAttribute('referrerPolicy', referrerPolicy);\n } // Inject the package\n\n\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 } // Get poster image\n\n\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 } // Set and show poster\n\n\n ui.setPoster.call(player, response.thumbnail_url).catch(() => {});\n });\n } // Setup instance\n // https://github.com/vimeo/player.js\n\n\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; // Disable native text track rendering\n\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n } // Create a faux HTML5 API using the Vimeo API\n\n\n player.media.play = () => {\n assurePlaybackState$1.call(player, true);\n return player.embed.play();\n };\n\n player.media.pause = () => {\n assurePlaybackState$1.call(player, false);\n return player.embed.pause();\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n }; // Seeking\n\n\n let {\n currentTime\n } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n\n set(time) {\n // Vimeo will automatically play on seek if the video hasn't been played before\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; // Set seeking state and trigger event\n\n media.seeking = true;\n triggerEvent.call(player, media, 'seeking'); // If paused, mute until seek is complete\n\n Promise.resolve(restorePause && embed.setVolume(0)) // Seek\n .then(() => embed.setCurrentTime(time)) // Restore paused\n .then(() => restorePause && embed.pause()) // Restore volume\n .then(() => restorePause && embed.setVolume(volume)).catch(() => {// Do nothing\n });\n }\n\n }); // Playback speed\n\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\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 }); // Volume\n\n let {\n volume\n } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n }\n\n }); // Muted\n\n let {\n muted\n } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n\n set(input) {\n const toggle = is.boolean(input) ? input : false;\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n triggerEvent.call(player, player.media, 'volumechange');\n });\n }\n\n }); // Loop\n\n let {\n loop\n } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\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 }); // Source\n\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 }); // Ended\n\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n }\n\n }); // Set aspect ratio based on video size\n\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 }); // Set autopause\n\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n }); // Get title\n\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n }); // Get current time\n\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n triggerEvent.call(player, player.media, 'timeupdate');\n }); // Get duration\n\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n triggerEvent.call(player, player.media, 'durationchange');\n }); // Get captions\n\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\n if (!paused) {\n triggerEvent.call(player, player.media, 'playing');\n }\n });\n\n if (is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element; // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n\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'); // Check all loaded\n\n if (parseInt(data.percent, 10) === 1) {\n triggerEvent.call(player, player.media, 'canplaythrough');\n } // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n\n\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 }); // Rebuild UI\n\n if (config.customControls) {\n setTimeout(() => ui.build.call(player), 0);\n }\n }\n\n};\n\n// ==========================================================================\n\nfunction parseId(url) {\n if (is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n} // Set playback state and trigger change (only on actual change)\n\n\nfunction assurePlaybackState(play) {\n if (play && !this.embed.hasPlayed) {\n this.embed.hasPlayed = true;\n }\n\n if (this.media.paused === play) {\n this.media.paused = !play;\n triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n }\n}\n\nfunction getHost(config) {\n if (config.noCookie) {\n return 'https://www.youtube-nocookie.com';\n }\n\n if (window.location.protocol === 'http:') {\n return 'http://www.youtube.com';\n } // Use YouTube's default\n\n\n return undefined;\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n toggleClass(this.elements.wrapper, this.config.classNames.embed, true); // Setup API\n\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; // Set callback to process queue\n\n window.onYouTubeIframeAPIReady = () => {\n // Call global callback if set\n if (is.function(callback)) {\n callback();\n }\n\n youtube.ready.call(this);\n }; // Load the SDK\n\n\n loadScript(this.config.urls.youtube.sdk).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\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; // Set title\n\n this.config.title = title;\n ui.setTitle.call(this); // Set aspect ratio\n\n this.embed.ratio = roundAspectRatio(width, height);\n }\n\n setAspectRatio.call(this);\n }).catch(() => {\n // Set aspect ratio\n setAspectRatio.call(this);\n });\n },\n\n // API ready\n ready() {\n const player = this;\n const config = player.config.youtube; // Ignore already setup (race condition)\n\n const currentId = player.media && player.media.getAttribute('id');\n\n if (!is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n } // Get the source URL or ID\n\n\n let source = player.media.getAttribute('src'); // Get from
if needed\n\n if (is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n } // Replace the