diff options
-rw-r--r-- | dist/plyr.js | 9 | ||||
-rw-r--r-- | dist/plyr.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.min.js | 2 | ||||
-rw-r--r-- | dist/plyr.min.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.js | 9 | ||||
-rw-r--r-- | dist/plyr.polyfilled.js.map | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.min.js | 2 | ||||
-rw-r--r-- | dist/plyr.polyfilled.min.js.map | 2 | ||||
-rw-r--r-- | src/js/controls.js | 3 | ||||
-rw-r--r-- | src/js/listeners.js | 2 |
10 files changed, 22 insertions, 13 deletions
diff --git a/dist/plyr.js b/dist/plyr.js index fe62e7d4..dece9c4f 100644 --- a/dist/plyr.js +++ b/dist/plyr.js @@ -2975,7 +2975,8 @@ var controls = { // Create <svg> var icon = document.createElementNS(namespace, 'svg'); utils.setAttributes(icon, utils.extend(attributes, { - role: 'presentation' + role: 'presentation', + focusable: 'false' })); // Create the <use> to reference sprite @@ -3194,7 +3195,9 @@ var controls = { var progress = utils.createElement('progress', utils.extend(utils.getAttributesFromSelector(this.config.selectors.display[type]), { min: 0, max: 100, - value: 0 + value: 0, + role: 'presentation', + 'aria-hidden': true }, attributes)); // Create the label inside @@ -4511,7 +4514,7 @@ var Listeners = function () { // Disable right click if (this.player.supported.ui && this.player.config.disableContextMenu) { - utils.on(this.player.media, 'contextmenu', function (event) { + utils.on(this.player.elements.wrapper, 'contextmenu', function (event) { event.preventDefault(); }, false); } diff --git a/dist/plyr.js.map b/dist/plyr.js.map index 603f2fab..c782ae44 100644 --- a/dist/plyr.js.map +++ b/dist/plyr.js.map @@ -1 +1 @@ -{"version":3,"sources":["types.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","support.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["providers","types","defaults","navigator","language","userLanguage","split","define","this","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","id","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","boolean","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","ready","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","lang","default","unshift","values","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","create","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","mapQualityUnit","mapQualityUnits","levels","level","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","wrap","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["types.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","support.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["providers","types","defaults","navigator","language","userLanguage","split","define","this","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","id","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","boolean","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","ready","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","lang","default","unshift","values","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","create","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","mapQualityUnit","mapQualityUnits","levels","level","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","wrap","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/dist/plyr.min.js b/dist/plyr.min.js index bea06b8a..455276cc 100644 --- a/dist/plyr.min.js +++ b/dist/plyr.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e={html5:"html5",youtube:"youtube",vimeo:"vimeo"},t={audio:"audio",video:"video"},i={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.2.0/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}};"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var n,s,a=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function l(t,i,n,s){var a,r,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(r=o.createElement("link")).rel="stylesheet",r.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(r=o.createElement("img")).src=p:((r=o.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in r)try{r.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return l(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,r)&&o.head.appendChild(r)}function r(e,i,n){var r,o;if(i&&i.trim&&(r=i),o=(r?n:i)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,r=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<r;s++)l(e[s],n,i)}(e,function(e){a(o,e),s(r,e)},o)}return r.ready=function(e,t){return function(e,t){var s,a,l,r=[],o=(e=e.push?e:[e]).length,c=o;for(s=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?s(a,l):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),r},r.done=function(e){s(e,[])},r.reset=function(){t={},i={},n={}},r.isDefined=function(e){return e in t},r},e.exports=i()}(n={exports:{}},n.exports),n.exports),l=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},c=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var l,r=e[Symbol.iterator]();!(n=(l=r.next()).done)&&(i.push(l.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&r.return&&r.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e){return new Promise(function(t,i){a(e,{success:t,error:i})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=document.createElement("div");if(u.toggleHidden(s,!0),i&&s.setAttribute("id",t),d.storage){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var l=JSON.parse(a);return void r.call(s,l.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(d.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r.call(s,e))}).catch(function(){})}}function r(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.element(e)&&u.is.element(e.parentNode)&&(u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=c(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),l=a[0],r=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[l]=r}}),i},toggleClass:function(e,t,i){if(u.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){u.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),duration:u.getElement.call(this,this.config.selectors.display.duration),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var l=t.split(" "),r=a;d.passiveListeners&&(r={passive:s,capture:a}),l.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,r)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:u.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),l=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(l)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),u.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(t){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(t)?e.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(t)?e.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=c(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),l=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||l);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||l);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(s=document.createElement("input"),s.type="range","range"===s.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p=function(){},h=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];l(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return r(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):p}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):p}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):p}}]),e}(),m=u.getBrowser();function g(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),m.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function f(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),g.call(this)}var y=function(){function e(t){var i=this;l(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){g.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return r(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(m.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():f.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(m.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else f.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return m.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),v=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=c(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},b={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&T.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(b.getTracks.call(this)));var i=b.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}b.setLanguage.call(this),b.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&T.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){b.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return b.setCue.call(e,t)}),t.mode="hidden"});var t=b.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&b.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=b.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=u.getElement.call(this,"track[default]")),i)||(i=c(t,1)[0]);return i},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=b.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?v("enabled",this.config):e.language.toUpperCase():t.label:v("disabled",this.config)},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===b.getCurrentTrack.call(this)&&(u.is.cue(n)?b.setText.call(this,n.getCueAsHTML()):b.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}},k={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(T.inject.call(this),this.listeners.controls()),u.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),b.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,k.updateVolume.call(this),k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this))},setTitle:function(){var e=v("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;u.is.empty(this.config.title)||this.config.title;t.setAttribute("title",v("frameTitle",this.config))}},checkPlaying:function(){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),u.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(u.toggleClass(this.elements.container,this.config.classNames.loading,!1),u.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){u.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,T.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=u.is.number(t)?t:0,n=u.is.element(e)?e:this.elements.display.buffer;if(u.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];u.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){if(this.supported.ui&&u.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":k.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.textContent=u.formatTime(t,n,i)}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),T.updateSeekTooltip.call(this)}}},w={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=w.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=w.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=w.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,l=e.playing;e.media.src=s[0].getAttribute("src"),e.media.load(),l&&e.play(),e.currentTime=a,u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(w.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},E=u.getBrowser(),T={updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),E.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||E.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=T.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),l=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",l):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l),s.appendChild(a),s},createLabel:function(e,t){var i=v(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,l=void 0,r=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,l="play",o="pause",r="play",c="pause";break;case"mute":a=!0,l="mute",o="unmute",r="volume",c="muted";break;case"captions":a=!0,l="enableCaptions",o="disableCaptions",r="captions-off",c="captions-on";break;case"fullscreen":a=!0,l="enterFullscreen",o="exitFullscreen",r="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",l="play",r="play";break;default:l=s,r=e}return a?(i.appendChild(T.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(T.createIcon.call(this,r,{class:"icon--not-pressed"})),i.appendChild(T.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(T.createLabel.call(this,l,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=v(l,this.config)):(i.appendChild(T.createIcon.call(this,r)),i.appendChild(T.createLabel.call(this,l))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},v(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,T.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=v("played",this.config);break;case"buffer":n=v("buffered",this.config)}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.createElement("div",{class:"plyr__time"});return t.appendChild(u.createElement("span",{class:this.config.classNames.hidden},v(e,this.config))),t.appendChild(u.createElement("span",u.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],l=u.createElement("li"),r=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{"aria-hidden":!0});r.appendChild(o),r.appendChild(c),r.insertAdjacentHTML("beforeend",n),u.is.element(s)&&r.appendChild(s),l.appendChild(r),t.appendChild(l)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.inputs.seek.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];u.toggleHidden(i,!t),u.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(T.toggleTab.call(this,"quality",n),T.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=T.getLabel.call(t,"quality",e);T.createMenuItem.call(t,e,i,"quality",n,function(e){var i="";switch(e){case 2160:i="4K";break;case 1440:case 1080:case 720:i="HD";break;case 576:i="SD"}return i.length?T.createBadge.call(t,i):null}(e))}),T.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?v("normal",this.config):t+"×";case"quality":return u.is.number(t)?t+"p":u.toTitleCase(t);case"captions":return b.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=T.getLabel.call(this,e,s);var l=a&&a.querySelector('input[value="'+s+'"]');u.is.element(l)&&(l.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=b.getTracks.call(this).length;if(T.toggleTab.call(this,"captions",i),u.emptyElement(t),T.checkMenu.call(this),i){var n=b.getTracks.call(this).map(function(t){return{language:u.is.empty(t.language)?"enabled":t.language,label:b.getLabel.call(e,t)}});n.unshift({language:"",label:v("disabled",this.config)}),n.forEach(function(i){T.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?T.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=n.map(function(e){return e.language}),T.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(T.toggleTab.call(this,"speed",i),T.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.toggleHidden(this.elements.settings.tabs.speed,!1),u.toggleHidden(this.elements.settings.panes.speed,!1),u.emptyElement(n),this.options.speed.forEach(function(e){var i=T.getLabel.call(t,"speed",e);T.createMenuItem.call(t,e,n,"speed",i)}),T.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(t.setAttribute("aria-hidden",!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(u.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),l=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){l.style.width=a.scrollWidth+"px",l.style.height=a.scrollHeight+"px";var r=T.getTabSize.call(this,s);u.on(l,u.transitionEndEvent,function e(t){t.target===l&&["width","height"].includes(t.propertyName)&&(l.style.width="",l.style.height="",u.off(l,u.transitionEndEvent,e))}),l.style.width=r.width+"px",l.style.height=r.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(T.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(T.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(T.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(T.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=T.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(T.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(T.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(T.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(T.createButton.call(this,"mute")),this.config.controls.includes("volume")){var l=u.createElement("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume},o=T.createRange.call(this,"volume",u.extend(r,{id:"plyr-volume-"+e.id}));l.appendChild(o.label),l.appendChild(o.input),this.elements.volume=l,i.appendChild(l)}if(this.config.controls.includes("captions")&&i.appendChild(T.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(T.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),h=u.createElement("div"),m=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),v(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),h.appendChild(m),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},v(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),h.appendChild(n),t.elements.settings.panes[i]=n}),p.appendChild(h),c.appendChild(p),i.appendChild(c),this.elements.settings.form=p,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(T.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(T.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(T.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(T.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&T.setQualityMenu.call(this,w.getQualityOptions.call(this)),T.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=T.getIconUrl.call(this);t.absolute&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=u.is.string(this.config.controls)||u.is.element(this.config.controls)?this.config.controls:u.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):T.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:b.getLabel.call(this)});var n=void 0;if(u.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),u.is.element(n)||(n=this.elements.container),u.is.element(i)?n.appendChild(i):i&&n.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||u.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(n),this.config.tooltips.controls){var s=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},C=u.getBrowser(),A=function(){function e(t){l(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return r(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){T.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&u.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),u.on(this.player.media,"progress playing",function(t){return k.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return k.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied",function(t){return k.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.media,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){T.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){T.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){T.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){T.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=C.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e.player.config.listeners[a],o=u.is.function(r);u.on(t,n,function(e){return i(e,s,a)},l&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){T.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),u.matches(t.target,e.player.config.selectors.inputs.language)?i(t,function(){e.player.language=t.target.value},"language"):u.matches(t.target,e.player.config.selectors.inputs.quality)?i(t,function(){e.player.quality=t.target.value},"quality"):u.matches(t.target,e.player.config.selectors.inputs.speed)?i(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):T.showTab.call(e.player,t)}),n(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,k.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),C.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){T.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return T.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),S=function(){function e(t){l(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return r(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),N=function(){function e(t){var i=this;l(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&u.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return r(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=v("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}();function x(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var P={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),P.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?P.ready.call(this):(u.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){P.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;P.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){var n=e.media.paused;e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t),n&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return x(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(x(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&u.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&u.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),T.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return x(e)}))));break;case 2:e.media.paused=!0,u.dispatchEvent.call(e,e.media,"pause")}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},L={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),L.setAspectRatio.call(this),u.is.object(window.Vimeo)?L.ready.call(this):u.loadScript(this.config.urls.vimeo.api).then(function(){L.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=u.parseVimeoId(s),l=u.createElement("iframe"),r="https://player.vimeo.com/video/"+a+"?"+n;l.setAttribute("src",r),l.setAttribute("allowfullscreen",""),l.setAttribute("allowtransparency",""),l.setAttribute("allow","autoplay");var o=u.createElement("div");o.appendChild(l),t.media=u.replaceElement(o,t.media),t.embed=new window.Vimeo.Player(l),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.media.paused;t.media.seeking=!0,u.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&T.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);L.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,b.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),b.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&u.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked"),u.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},M=u.getBrowser(),I={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),u.toggleClass(this.elements.container,this.config.classNames.isIos,M.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":P.setup.call(this);break;case"vimeo":L.setup.call(this)}else this.isHTML5&&(k.setTitle.call(this),w.extend.call(this));else this.debug.warn("No media element found!")}},q={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(t){var i=this;u.is.object(t)&&"sources"in t&&t.sources.length?(w.cancelRequests.call(this),this.destroy.call(this,function(){switch(i.options.quality=[],u.removeElement(i.media),i.media=null,u.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=t.type,i.provider=u.is.empty(t.sources[0].provider)?e.html5:t.sources[0].provider,i.supported=d.check(i.type,i.provider,i.config.playsinline),i.provider+":"+i.type){case"html5:video":i.media=u.createElement("video");break;case"html5:audio":i.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=u.createElement("div",{src:t.sources[0].src})}i.elements.container.appendChild(i.media),u.is.boolean(t.autoplay)&&(i.config.autoplay=t.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in t&&i.media.setAttribute("poster",t.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.playsinline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&q.insertElements.call(i,"source",t.sources),i.config.title=t.title,I.setup.call(i),i.isHTML5&&("tracks"in t&&q.insertElements.call(i,"track",t.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function n(s,a){var r=this;if(l(this,n),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=s,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},i,a||{},function(){try{return JSON.parse(r.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new h(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){setTimeout(function(){var e=r.media.cloneNode(!0);e.getAttribute("autoplay")&&e.pause(),r.elements.original=e},0);var o=this.media.tagName.toLowerCase(),c=null,p=null,m=null;switch(o){case"div":if(c=this.media.querySelector("iframe"),u.is.element(c)){if(p=c.getAttribute("src"),this.provider=u.getProviderByUrl(p),this.elements.container=this.media,this.media=c,this.elements.container.className="",m=u.getUrlParams(p),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(e).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=t.video;break;case"video":case"audio":this.type=o,this.provider=e.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new A(this),this.storage=new S(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),k.addStyleHook.call(this),I.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){r.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new y(this),this.ads=new N(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return r(n,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(u.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(!u.is.boolean(e))if(u.is.event(e)){s="enterfullscreen"===e.type;n=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(i=2e3),this.touch||"focusin"!==e.type||(i=3e3,u.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else n=u.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),n||this.paused||this.loading){if(u.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&u.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){u.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(u.hasClass(t.elements.container,t.config.classNames.hideControls)||u.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),u.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(u.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!u.is.empty(t.config.settings)&&T.toggleMenu.call(t,!1))))},i))}}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===e.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===e.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===e.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===t.video)}},{key:"isAudio",get:function(){return Boolean(this.type===t.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;u.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)&&0!==t||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){q.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?u.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e))if(u.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,b.setText.call(this,null),b.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}}]),n}()}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e={html5:"html5",youtube:"youtube",vimeo:"vimeo"},t={audio:"audio",video:"video"},i={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.2.0/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}};"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var n,s,a=(function(e,t){var i;i=function(){var e=function(){},t={},i={},n={};function s(e,t){if(e){var s=n[e];if(i[e]=t,s)for(;s.length;)s[0](e,t),s.splice(0,1)}}function a(t,i){t.call&&(t={success:t}),i.length?(t.error||e)(i):(t.success||e)(t)}function l(t,i,n,s){var a,r,o=document,c=n.async,u=(n.numRetries||0)+1,d=n.before||e,p=t.replace(/^(css|img)!/,"");s=s||0,/(^css!|\.css$)/.test(t)?(a=!0,(r=o.createElement("link")).rel="stylesheet",r.href=p):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(r=o.createElement("img")).src=p:((r=o.createElement("script")).src=t,r.async=void 0===c||c),r.onload=r.onerror=r.onbeforeload=function(e){var o=e.type[0];if(a&&"hideFocus"in r)try{r.sheet.cssText.length||(o="e")}catch(e){o="e"}if("e"==o&&(s+=1)<u)return l(t,i,n,s);i(t,o,e.defaultPrevented)},!1!==d(t,r)&&o.head.appendChild(r)}function r(e,i,n){var r,o;if(i&&i.trim&&(r=i),o=(r?n:i)||{},r){if(r in t)throw"LoadJS";t[r]=!0}!function(e,t,i){var n,s,a=(e=e.push?e:[e]).length,r=a,o=[];for(n=function(e,i,n){if("e"==i&&o.push(e),"b"==i){if(!n)return;o.push(e)}--a||t(o)},s=0;s<r;s++)l(e[s],n,i)}(e,function(e){a(o,e),s(r,e)},o)}return r.ready=function(e,t){return function(e,t){var s,a,l,r=[],o=(e=e.push?e:[e]).length,c=o;for(s=function(e,i){i.length&&r.push(e),--c||t(r)};o--;)a=e[o],(l=i[a])?s(a,l):(n[a]=n[a]||[]).push(s)}(e,function(e){a(t,e)}),r},r.done=function(e){s(e,[])},r.reset=function(){t={},i={},n={}},r.isDefined=function(e){return e in t},r},e.exports=i()}(n={exports:{}},n.exports),n.exports),l=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},c=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var l,r=e[Symbol.iterator]();!(n=(l=r.next()).done)&&(i.push(l.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&r.return&&r.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e){return new Promise(function(t,i){a(e,{success:t,error:i})})},loadSprite:function(e,t){if(u.is.string(e)){var i=u.is.string(t),n=function(){return document.querySelectorAll("#"+t).length};if(!i||!n()){var s=document.createElement("div");if(u.toggleHidden(s,!0),i&&s.setAttribute("id",t),d.storage){var a=window.localStorage.getItem("cache-"+t);if(null!==a){var l=JSON.parse(a);return void r.call(s,l.content)}}u.fetch(e).then(function(e){u.is.empty(e)||(d.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),r.call(s,e))}).catch(function(){})}}function r(e){i&&n()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return u.is.object(t)&&u.setAttributes(n,t),u.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(u.createElement(e,i,n))},removeElement:function(e){u.is.element(e)&&u.is.element(e.parentNode)&&(u.is.nodeList(e)||u.is.array(e)?Array.from(e).forEach(u.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return u.is.element(t)&&u.is.element(t.parentNode)&&u.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){u.is.element(e)&&!u.is.empty(t)&&Object.entries(t).forEach(function(t){var i=c(t,2),n=i[0],s=i[1];e.setAttribute(n,s)})},getAttributesFromSelector:function(e,t){if(!u.is.string(e)||u.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),l=a[0],r=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":u.is.object(n)&&u.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[l]=r}}),i},toggleClass:function(e,t,i){if(u.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return u.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){u.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=u.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:u.getElements.call(this,this.config.selectors.buttons.play),pause:u.getElement.call(this,this.config.selectors.buttons.pause),restart:u.getElement.call(this,this.config.selectors.buttons.restart),rewind:u.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:u.getElement.call(this,this.config.selectors.buttons.fastForward),mute:u.getElement.call(this,this.config.selectors.buttons.mute),pip:u.getElement.call(this,this.config.selectors.buttons.pip),airplay:u.getElement.call(this,this.config.selectors.buttons.airplay),settings:u.getElement.call(this,this.config.selectors.buttons.settings),captions:u.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:u.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=u.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:u.getElement.call(this,this.config.selectors.inputs.seek),volume:u.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:u.getElement.call(this,this.config.selectors.display.buffer),duration:u.getElement.call(this,this.config.selectors.display.duration),currentTime:u.getElement.call(this,this.config.selectors.display.currentTime)},u.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(u.is.element(e)){var i=u.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=u.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?u.on(this.elements.container,"keydown",a,!1):u.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3],s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!u.is.empty(e)&&!u.is.empty(t)&&u.is.function(i))if(u.is.nodeList(e)||u.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&u.toggleListener.call(null,e,t,i,n,s,a)});else{var l=t.split(" "),r=a;d.passiveListeners&&(r={passive:s,capture:a}),l.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,r)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!0,n,s)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments[2],n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],s=arguments.length>4&&void 0!==arguments[4]&&arguments[4];u.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(u.is.element(e)&&!u.is.empty(t)){var s=new CustomEvent(t,{bubbles:i,detail:Object.assign({},n,{plyr:u.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(u.is.array(e)||u.is.nodeList(e))Array.from(e).forEach(function(e){return u.toggleState(e,t)});else if(u.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=u.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!u.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),l=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(l)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),i.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=u.replaceAll(e,"-"," "),e=u.replaceAll(e,"_"," "),e=u.toTitleCase(e),u.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=u.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return u.is.object(s)?(Object.keys(s).forEach(function(t){u.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),u.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),u.extend.apply(u,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},dedupe:function(e){return u.is.array(e)?e.filter(function(t,i){return e.indexOf(t)===i}):e},closest:function(e,t){return u.is.array(e)&&e.length?e.reduce(function(e,i){return Math.abs(i-t)<Math.abs(e-t)?i:e}):null},getProviderByUrl:function(t){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(t)?e.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(t)?e.vimeo:null},parseYouTubeId:function(e){if(u.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(u.is.empty(e))return null;if(u.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=c(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return u.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!u.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){u.toggleHidden(e,!0),e.offsetHeight,u.toggleHidden(e,!1)},0)}},d={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=u.getBrowser(),l=a.isIPhone&&i&&d.playsinline;switch(t+":"+e){case"html5:video":s=(n=d.video)&&d.rangeInput&&(!a.isIPhone||l);break;case"html5:audio":s=(n=d.audio)&&d.rangeInput;break;case"youtube:video":case"vimeo:video":n=!0,s=d.rangeInput&&(!a.isIPhone||l);break;default:s=(n=d.audio&&d.video)&&d.rangeInput}return{api:n,ui:s}},pip:!u.getBrowser().isIPhone&&u.is.function(u.createElement("video").webkitSetPresentationMode),airplay:u.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!u.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(s=document.createElement("input"),s.type="range","range"===s.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==u.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},p=function(){},h=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];l(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return r(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):p}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):p}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):p}}]),e}(),m=u.getBrowser();function g(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;u.is.element(e)&&u.toggleState(e,this.active),u.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),m.isIos||u.trapFocus.call(this.player,this.target,this.active)}}function f(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",u.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),g.call(this)}var y=function(){function e(t){var i=this;l(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},u.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){g.call(i)}),u.on(this.player.elements.container,"dblclick",function(e){i.player.elements.controls.contains(e.target)||i.toggle()}),this.update()}return r(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),u.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(m.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?u.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():f.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(m.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!u.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else f.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:u.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return m.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(u.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!u.is.function(document[t+"ExitFullscreen"])&&!u.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),v=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(u.is.empty(e)||u.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var i=t.i18n[e],n={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(n).forEach(function(e){var t=c(e,2),n=t[0],s=t[1];i=u.replaceAll(i,n,s)}),i},b={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(u.is.empty(e)||(this.captions.language=e),u.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!u.is.boolean(this.captions.active)){var t=this.storage.get("captions");u.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!d.textTracks)u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&T.setCaptionsMenu.call(this);else{u.is.element(this.elements.captions)||(this.elements.captions=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.captions)),u.insertAfter(this.elements.captions,this.elements.wrapper)),u.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!u.is.empty(b.getTracks.call(this)));var i=b.getTracks.call(this);if(!u.is.empty(i)){if(u.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=u.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&u.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){u.removeElement(e)})})}b.setLanguage.call(this),b.show.call(this),u.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&T.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){b.getTracks.call(this).forEach(function(t){u.on(t,"cuechange",function(t){return b.setCue.call(e,t)}),t.mode="hidden"});var t=b.getCurrentTrack.call(this);u.is.track(t)&&Array.from(t.activeCues||[]).length&&b.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return u.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=b.getTracks.call(this);if(!t.length)return null;var i=t.find(function(t){return t.language.toLowerCase()===e.language});(i||(i=u.getElement.call(this,"track[default]")),i)||(i=c(t,1)[0]);return i},getLabel:function(e){var t=e;return!u.is.track(t)&&d.textTracks&&this.captions.active&&(t=b.getCurrentTrack.call(this)),u.is.track(t)?u.is.empty(t.label)?u.is.empty(t.language)?v("enabled",this.config):e.language.toUpperCase():t.label:v("disabled",this.config)},setCue:function(e){var t=u.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===b.getCurrentTrack.call(this)&&(u.is.cue(n)?b.setText.call(this,n.getCueAsHTML()):b.setText.call(this,null),u.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(u.is.element(this.elements.captions)){var t=u.createElement("span");u.emptyElement(this.elements.captions);var i=u.is.nullOrUndefined(e)?"":e;u.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");u.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(u.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),u.toggleState(this.elements.buttons.captions,!0))}},k={addStyleHook:function(){u.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),u.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);u.is.element(this.elements.controls)||(T.inject.call(this),this.listeners.controls()),u.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),b.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,k.updateVolume.call(this),k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){u.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this))},setTitle:function(){var e=v("play",this.config);if(u.is.string(this.config.title)&&!u.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),u.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=u.getElement.call(this,"iframe");if(!u.is.element(t))return;u.is.empty(this.config.title)||this.config.title;t.setAttribute("title",v("frameTitle",this.config))}},checkPlaying:function(){u.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),u.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){u.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(u.toggleClass(this.elements.container,this.config.classNames.loading,!1),u.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){u.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(u.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),u.is.element(this.elements.buttons.mute)&&u.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;u.is.element(e)&&(e.value=t,T.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=u.is.number(t)?t:0,n=u.is.element(e)?e:this.elements.display.buffer;if(u.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];u.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){if(this.supported.ui&&u.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=u.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":k.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(u.is.element(e)&&u.is.number(t)){var n=u.getHours(this.duration)>0;e.textContent=u.formatTime(t,n,i)}},timeUpdate:function(e){var t=!u.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=u.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),T.updateSeekTooltip.call(this)}}},w={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=w.getSources.call(this);if(u.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!u.is.empty(e.getAttribute("size"))});return u.is.empty(t)?null:u.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=w.getSources.call(e);if(u.is.empty(t))return null;var i=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return u.is.empty(i)?null:Number(i[0].getAttribute("size"))},set:function(t){var i=w.getSources.call(e);if(!u.is.empty(i)){var n=Array.from(i).filter(function(e){return Number(e.getAttribute("size"))===t});if(!u.is.empty(n)){var s=n.filter(function(t){return d.mime.call(e,t.getAttribute("type"))});if(!u.is.empty(s)){u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var a=e.currentTime,l=e.playing;e.media.src=s[0].getAttribute("src"),e.media.load(),l&&e.play(),e.currentTime=a,u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(u.removeElement(w.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},E=u.getBrowser(),T={updateRangeFill:function(e){var t=u.is.event(e)?e.target:e;u.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),E.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||E.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=T.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");u.setAttributes(s,u.extend(t,{role:"presentation",focusable:"false"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),l=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",l):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",l),s.appendChild(a),s},createLabel:function(e,t){var i=v(e,this.config),n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,u.createElement("span",n,i)},createBadge:function(e){if(u.is.empty(e))return null;var t=u.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(u.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=u.createElement("button"),n=Object.assign({},t),s=u.toCamelCase(e),a=!1,l=void 0,r=void 0,o=void 0,c=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,e){case"play":a=!0,l="play",o="pause",r="play",c="pause";break;case"mute":a=!0,l="mute",o="unmute",r="volume",c="muted";break;case"captions":a=!0,l="enableCaptions",o="disableCaptions",r="captions-off",c="captions-on";break;case"fullscreen":a=!0,l="enterFullscreen",o="exitFullscreen",r="enter-fullscreen",c="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",l="play",r="play";break;default:l=s,r=e}return a?(i.appendChild(T.createIcon.call(this,c,{class:"icon--pressed"})),i.appendChild(T.createIcon.call(this,r,{class:"icon--not-pressed"})),i.appendChild(T.createLabel.call(this,o,{class:"label--pressed"})),i.appendChild(T.createLabel.call(this,l,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=v(l,this.config)):(i.appendChild(T.createIcon.call(this,r)),i.appendChild(T.createLabel.call(this,l))),u.extend(n,u.getAttributesFromSelector(this.config.selectors.buttons[s],n)),u.setAttributes(i,n),"play"===s?(u.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=u.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},v(e,this.config)),n=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=n,T.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=u.createElement("progress",u.extend(u.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){i.appendChild(u.createElement("span",null,"0"));var n="";switch(e){case"played":n=v("played",this.config);break;case"buffer":n=v("buffered",this.config)}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=u.createElement("div",{class:"plyr__time"});return t.appendChild(u.createElement("span",{class:this.config.classNames.hidden},v(e,this.config))),t.appendChild(u.createElement("span",u.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],l=u.createElement("li"),r=u.createElement("label",{class:this.config.classNames.control}),o=u.createElement("input",u.extend(u.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),c=u.createElement("span",{"aria-hidden":!0});r.appendChild(o),r.appendChild(c),r.insertAdjacentHTML("beforeend",n),u.is.element(s)&&r.appendChild(s),l.appendChild(r),t.appendChild(l)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&u.is.element(this.elements.inputs.seek)&&u.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var i=0,n=this.elements.inputs.seek.getBoundingClientRect(),s=this.config.classNames.tooltip+"--visible",a=function(e){u.toggleClass(t.elements.display.seekTooltip,s,e)};if(this.touch)a(!1);else{if(u.is.event(e))i=100/n.width*(e.pageX-n.left);else{if(!u.hasClass(this.elements.display.seekTooltip,s))return;i=parseFloat(this.elements.display.seekTooltip.style.left,10)}i<0?i=0:i>100&&(i=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*i),this.elements.display.seekTooltip.style.left=i+"%",u.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&a("mouseenter"===e.type)}}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];u.toggleHidden(i,!t),u.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this;if(u.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");u.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var n=!u.is.empty(this.options.quality)&&this.options.quality.length>1;if(T.toggleTab.call(this,"quality",n),T.checkMenu.call(this),n){u.emptyElement(i);this.options.quality.sort(function(e,i){var n=t.config.quality.options;return n.indexOf(e)>n.indexOf(i)?1:-1}).forEach(function(e){var n=T.getLabel.call(t,"quality",e);T.createMenuItem.call(t,e,i,"quality",n,function(e){var i="";switch(e){case 2160:i="4K";break;case 1440:case 1080:case 720:i="HD";break;case 576:i="SD"}return i.length?T.createBadge.call(t,i):null}(e))}),T.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?v("normal",this.config):t+"×";case"quality":return u.is.number(t)?t+"p":u.toTitleCase(t);case"captions":return b.getLabel.call(this);default:return null}},updateSetting:function(e,t,i){var n=this.elements.settings.panes[e],s=null,a=t;switch(e){case"captions":s=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(s=u.is.empty(i)?this[e]:i,u.is.empty(s)&&(s=this.config[e].default),!u.is.empty(this.options[e])&&!this.options[e].includes(s))return void this.debug.warn("Unsupported value of '"+s+"' for "+e);if(!this.config[e].options.includes(s))return void this.debug.warn("Disabled value of '"+s+"' for "+e)}if(u.is.element(a)||(a=n&&n.querySelector("ul")),u.is.element(a)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=T.getLabel.call(this,e,s);var l=a&&a.querySelector('input[value="'+s+'"]');u.is.element(l)&&(l.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=b.getTracks.call(this).length;if(T.toggleTab.call(this,"captions",i),u.emptyElement(t),T.checkMenu.call(this),i){var n=b.getTracks.call(this).map(function(t){return{language:u.is.empty(t.language)?"enabled":t.language,label:b.getLabel.call(e,t)}});n.unshift({language:"",label:v("disabled",this.config)}),n.forEach(function(i){T.createMenuItem.call(e,i.language,t,"language",i.label,"enabled"!==i.language?T.createBadge.call(e,i.language.toUpperCase()):null,i.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=n.map(function(e){return e.language}),T.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&u.is.element(this.elements.settings.panes.speed)){u.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var i=!u.is.empty(this.options.speed)&&this.options.speed.length>1;if(T.toggleTab.call(this,"speed",i),T.checkMenu.call(this),i){var n=this.elements.settings.panes.speed.querySelector("ul");u.toggleHidden(this.elements.settings.tabs.speed,!1),u.toggleHidden(this.elements.settings.panes.speed,!1),u.emptyElement(n),this.options.speed.forEach(function(e){var i=T.getLabel.call(t,"speed",e);T.createMenuItem.call(t,e,n,"speed",i)}),T.updateSetting.call(this,"speed",n)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!u.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});u.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings;if(u.is.element(t)&&u.is.element(i)){var n=u.is.boolean(e)?e:u.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(u.is.event(e)){var s=u.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}u.is.element(i)&&i.setAttribute("aria-expanded",n),u.is.element(t)&&(t.setAttribute("aria-hidden",!n),u.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return u.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(u.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),l=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),d.transitions&&!d.reducedMotion){l.style.width=a.scrollWidth+"px",l.style.height=a.scrollHeight+"px";var r=T.getTabSize.call(this,s);u.on(l,u.transitionEndEvent,function e(t){t.target===l&&["width","height"].includes(t.propertyName)&&(l.style.width="",l.style.height="",u.off(l,u.transitionEndEvent,e))}),l.style.width=r.width+"px",l.style.height=r.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(u.is.empty(this.config.controls))return null;var i=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(T.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(T.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(T.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(T.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=u.createElement("div",u.getAttributesFromSelector(this.config.selectors.progress)),s=T.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(T.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=u.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(T.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(T.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(T.createButton.call(this,"mute")),this.config.controls.includes("volume")){var l=u.createElement("div",{class:"plyr__volume"}),r={max:1,step:.05,value:this.config.volume},o=T.createRange.call(this,"volume",u.extend(r,{id:"plyr-volume-"+e.id}));l.appendChild(o.label),l.appendChild(o.input),this.elements.volume=l,i.appendChild(l)}if(this.config.controls.includes("captions")&&i.appendChild(T.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!u.is.empty(this.config.settings)){var c=u.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(T.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var p=u.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),h=u.createElement("div"),m=u.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=u.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=u.createElement("li",{role:"tab",hidden:""}),s=u.createElement("button",u.extend(u.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),v(i,t.config)),a=u.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),h.appendChild(m),this.config.settings.forEach(function(i){var n=u.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=u.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},v(i,t.config));n.appendChild(s);var a=u.createElement("ul");n.appendChild(a),h.appendChild(n),t.elements.settings.panes[i]=n}),p.appendChild(h),c.appendChild(p),i.appendChild(c),this.elements.settings.form=p,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&d.pip&&i.appendChild(T.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&d.airplay&&i.appendChild(T.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(T.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(T.createButton.call(this,"play-large")),this.elements.controls=i,this.isHTML5&&T.setQualityMenu.call(this,w.getQualityOptions.call(this)),T.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=T.getIconUrl.call(this);t.absolute&&u.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=u.is.string(this.config.controls)||u.is.element(this.config.controls)?this.config.controls:u.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):T.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:b.getLabel.call(this)});var n=void 0;if(u.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),u.is.element(n)||(n=this.elements.container),u.is.element(i)?n.appendChild(i):i&&n.insertAdjacentHTML("beforeend",i),u.is.element(this.elements.controls)||u.findElements.call(this),window.navigator.userAgent.includes("Edge")&&u.repaint(n),this.config.tooltips.controls){var s=u.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){u.toggleClass(t,e.config.classNames.hidden,!1),u.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},C=u.getBrowser(),A=function(){function e(t){l(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return r(e,[{key:"handleKey",value:function(e){var t=this,i=e.keyCode?e.keyCode:e.which,n="keydown"===e.type,s=n&&i===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&u.is.number(i)){if(n){var a=u.getFocusElement();if(u.is.element(a)&&u.matches(a,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(e.preventDefault(),e.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:s||(t.player.currentTime=t.player.duration/10*(i-48));break;case 32:case 75:s||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:s||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:s||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===i&&this.player.fullscreen.toggle(),this.lastKey=i}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){T.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,u.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),u.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&u.toggleListener(window,"keydown keyup",this.handleKey,e,!1),u.toggleListener(document.body,"click",this.toggleMenu,e),u.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&u.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),u.on(this.player.elements.container,"focusout",function(t){u.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),u.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){u.toggleClass(u.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&u.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(u.on(this.player.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e.player,t)}),u.on(this.player.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e.player,t)}),u.on(this.player.media,"loadeddata",function(){u.toggleHidden(e.player.elements.volume,!e.player.hasAudio),u.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),u.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),u.on(this.player.media,"progress playing",function(t){return k.updateProgress.call(e.player,t)}),u.on(this.player.media,"volumechange",function(t){return k.updateVolume.call(e.player,t)}),u.on(this.player.media,"playing play pause ended emptied",function(t){return k.checkPlaying.call(e.player,t)}),u.on(this.player.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e.player,t)}),u.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=u.getElement.call(this.player,"."+this.player.config.classNames.video);if(!u.is.element(t))return;u.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&u.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),u.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),u.on(this.player.media,"ratechange",function(){T.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),u.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),u.on(this.player.media,"qualitychange",function(t){T.updateSetting.call(e.player,"quality",null,t.detail.quality)}),u.on(this.player.media,"languagechange",function(){T.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),u.on(this.player.media,"captionsenabled captionsdisabled",function(){T.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),u.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.player.media.error),u.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:"controls",value:function(){var e=this,t=C.isIE?"change":"input",i=function(t,i,n){var s=e.player.config.listeners[n],a=!0;u.is.function(s)&&(a=s.call(e.player,t)),a&&u.is.function(i)&&i.call(e.player,t)},n=function(t,n,s,a){var l=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],r=e.player.config.listeners[a],o=u.is.function(r);u.on(t,n,function(e){return i(e,s,a)},l&&!o)};n(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),n(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),n(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),n(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),n(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),n(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),n(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),n(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),n(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),n(this.player.elements.buttons.settings,"click",function(t){T.toggleMenu.call(e.player,t)}),n(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),u.matches(t.target,e.player.config.selectors.inputs.language)?i(t,function(){e.player.language=t.target.value},"language"):u.matches(t.target,e.player.config.selectors.inputs.quality)?i(t,function(){e.player.quality=t.target.value},"quality"):u.matches(t.target,e.player.config.selectors.inputs.speed)?i(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):T.showTab.call(e.player,t)}),n(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!u.is.element(this.player.elements.display.duration)&&n(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,k.timeUpdate.call(e.player))}),n(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),C.isWebkit&&n(u.getElements.call(this.player,'input[type="range"]'),"input",function(t){T.updateRangeFill.call(e.player,t.target)}),n(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return T.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(n(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),n(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),n(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),n(this.player.elements.inputs.volume,"wheel",function(t){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.player.decreaseVolume(.02),n=-1):(e.player.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.player.increaseVolume(.02),n=1):(e.player.decreaseVolume(.02),n=-1)),(1===n&&e.player.media.volume<1||-1===n&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),S=function(){function e(t){l(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return r(e,[{key:"get",value:function(t){if(!e.supported)return null;var i=window.localStorage.getItem(this.key);if(u.is.empty(i))return null;var n=JSON.parse(i);return u.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&u.is.object(t)){var i=this.get();u.is.empty(i)&&(i={}),u.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),N=function(){function e(t){var i=this;l(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&u.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){i.on("loaded",e),i.on("error",t)}),this.load()}return r(e,[{key:"load",value:function(){var e=this;this.enabled&&(u.is.object(window.google)&&u.is.object(window.google.ima)?this.ready():u.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=u.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl=this.tagUrl,i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=u.formatTime(Math.max(e.manager.getRemainingTime(),0)),i=v("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),u.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var i=t.player.elements.progress;if(u.is.element(i)){var n=100/t.player.duration*e,s=u.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){var i="ads"+e.replace(/_/g,"").toLowerCase();u.dispatchEvent.call(t.player,t.player.media,i)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),s(e.type),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:s(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:s(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:s(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:s(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;u.is.empty(e.cuePoints)||e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,i=arguments.length,n=Array(i>1?i-1:0),s=1;s<i;s++)n[s-1]=arguments[s];var a=this.events[e];u.is.array(a)&&a.forEach(function(e){u.is.function(e)&&e.apply(t,n)})}},{key:"on",value:function(e,t){return u.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){u.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+u.buildUrlParams(e)}}]),e}();function x(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var P={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),P.setAspectRatio.call(this),u.is.object(window.YT)&&u.is.function(window.YT.Player)?P.ready.call(this):(u.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){P.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(u.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(u.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(u.is.string(n)&&!u.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";u.fetch(s).then(function(e){u.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(u.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");u.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=u.parseYouTubeId(i),s=u.generateId(e.provider),a=u.createElement("div",{id:s});e.media=u.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!u.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,u.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){u.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),u.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;P.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){var n=e.media.paused;e.media.seeking=!0,u.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t),n&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return x(i.getPlaybackQuality())},set:function(t){var n=t;i.setPlaybackQuality(x(n)),u.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:n})}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),u.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=u.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),u.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),u.dispatchEvent.call(e,e.media,"timeupdate"),u.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&u.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),u.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i,n=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:u.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=n.getVideoLoadedFraction(),u.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):u.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&u.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&u.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,u.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){u.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),u.dispatchEvent.call(e,e.media,"durationchange")),T.setQualityMenu.call(e,(i=n.getAvailableQualityLevels(),u.is.empty(i)?i:u.dedupe(i.map(function(e){return x(e)}))));break;case 2:e.media.paused=!0,u.dispatchEvent.call(e,e.media,"pause")}u.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},L={setup:function(){var e=this;u.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),L.setAspectRatio.call(this),u.is.object(window.Vimeo)?L.ready.call(this):u.loadScript(this.config.urls.vimeo.api).then(function(){L.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=u.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=i+"%",this.supported.ui){var n=(240-i)/4.8;this.media.style.transform="translateY(-"+n+"%)"}},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},n=u.buildUrlParams(i),s=t.media.getAttribute("src");u.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=u.parseVimeoId(s),l=u.createElement("iframe"),r="https://player.vimeo.com/video/"+a+"?"+n;l.setAttribute("src",r),l.setAttribute("allowfullscreen",""),l.setAttribute("allowtransparency",""),l.setAttribute("allow","autoplay");var o=u.createElement("div");o.appendChild(l),t.media=u.replaceElement(o,t.media),t.embed=new window.Vimeo.Player(l),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var i=t.media.paused;t.media.seeking=!0,u.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,u.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&T.setSpeedMenu.call(t,[])})}});var p=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return p},set:function(e){t.embed.setVolume(e).then(function(){p=e,u.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return h},set:function(e){var i=!!u.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){h=i,u.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=u.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=u.getAspectRatio(t[0],t[1]);L.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,b.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=u.stripHTML(e.cues[0].text)),b.setText.call(t,i)}),t.embed.on("loaded",function(){u.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&u.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,u.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,u.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,u.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&u.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,u.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,u.dispatchEvent.call(t,t.media,"seeked"),u.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,u.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,u.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},M=u.getBrowser(),I={setup:function(){if(this.media)if(u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),u.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&u.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(u.toggleClass(this.elements.container,this.config.classNames.pip.supported,d.pip&&this.isHTML5&&this.isVideo),u.toggleClass(this.elements.container,this.config.classNames.airplay.supported,d.airplay&&this.isHTML5),u.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),u.toggleClass(this.elements.container,this.config.classNames.isIos,M.isIos),u.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=u.createElement("div",{class:this.config.classNames.video}),u.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":P.setup.call(this);break;case"vimeo":L.setup.call(this)}else this.isHTML5&&(k.setTitle.call(this),w.extend.call(this));else this.debug.warn("No media element found!")}},q={insertElements:function(e,t){var i=this;u.is.string(t)?u.insertElement(e,this.media,{src:t}):u.is.array(t)&&t.forEach(function(t){u.insertElement(e,i.media,t)})},change:function(t){var i=this;u.is.object(t)&&"sources"in t&&t.sources.length?(w.cancelRequests.call(this),this.destroy.call(this,function(){switch(i.options.quality=[],u.removeElement(i.media),i.media=null,u.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=t.type,i.provider=u.is.empty(t.sources[0].provider)?e.html5:t.sources[0].provider,i.supported=d.check(i.type,i.provider,i.config.playsinline),i.provider+":"+i.type){case"html5:video":i.media=u.createElement("video");break;case"html5:audio":i.media=u.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=u.createElement("div",{src:t.sources[0].src})}i.elements.container.appendChild(i.media),u.is.boolean(t.autoplay)&&(i.config.autoplay=t.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in t&&i.media.setAttribute("poster",t.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.playsinline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&q.insertElements.call(i,"source",t.sources),i.config.title=t.title,I.setup.call(i),i.isHTML5&&("tracks"in t&&q.insertElements.call(i,"track",t.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function n(s,a){var r=this;if(l(this,n),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=d.touch,this.media=s,u.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||u.is.nodeList(this.media)||u.is.array(this.media))&&(this.media=this.media[0]),this.config=u.extend({},i,a||{},function(){try{return JSON.parse(r.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new h(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",d),!u.is.nullOrUndefined(this.media)&&u.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(d.check().api){setTimeout(function(){var e=r.media.cloneNode(!0);e.getAttribute("autoplay")&&e.pause(),r.elements.original=e},0);var o=this.media.tagName.toLowerCase(),c=null,p=null,m=null;switch(o){case"div":if(c=this.media.querySelector("iframe"),u.is.element(c)){if(p=c.getAttribute("src"),this.provider=u.getProviderByUrl(p),this.elements.container=this.media,this.media=c,this.elements.container.className="",m=u.getUrlParams(p),!u.is.empty(m)){var g=["1","true"];g.includes(m.autoplay)&&(this.config.autoplay=!0),g.includes(m.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=g.includes(m.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(u.is.empty(this.provider)||!Object.keys(e).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=t.video;break;case"video":case"audio":this.type=o,this.provider=e.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=d.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new A(this),this.storage=new S(this),this.media.plyr=this,u.is.element(this.elements.container)||(this.elements.container=u.createElement("div"),u.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),k.addStyleHook.call(this),I.setup.call(this),this.config.debug&&u.on(this.elements.container,this.config.events.join(" "),function(e){r.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new y(this),this.ads=new N(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return r(n,[{key:"play",value:function(){return u.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&u.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(u.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():u.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(u.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(u.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(u.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(u.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=u.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,u.toggleState(this.elements.buttons.captions,this.captions.active),u.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),u.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){d.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(u.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(!u.is.boolean(e))if(u.is.event(e)){s="enterfullscreen"===e.type;n=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(i=2e3),this.touch||"focusin"!==e.type||(i=3e3,u.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else n=u.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),n||this.paused||this.loading){if(u.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&u.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){u.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(u.hasClass(t.elements.container,t.config.classNames.hideControls)||u.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),u.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(u.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!u.is.empty(t.config.settings)&&T.toggleMenu.call(t,!1))))},i))}}},{key:"on",value:function(e,t){u.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){u.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(u.removeElement(t.elements.buttons.play),u.removeElement(t.elements.captions),u.removeElement(t.elements.controls),u.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),u.is.function(e)&&e()):(t.listeners.clear(),u.replaceElement(t.elements.original,t.elements.container),u.dispatchEvent.call(t,t.elements.original,"destroyed",!0),u.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&u.is.function(this.embed.destroy)&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}}},{key:"supports",value:function(e){return d.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===e.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===e.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===e.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===t.video)}},{key:"isAudio",get:function(){return Boolean(this.type===t.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;u.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return u.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;u.is.string(t)&&(t=Number(t)),u.is.number(t)||(t=this.storage.get("volume")),u.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!u.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;u.is.boolean(t)||(t=this.storage.get("muted")),u.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;u.is.number(e)&&(t=e),u.is.number(t)||(t=this.storage.get("speed")),u.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(u.is.empty(e)||(t=Number(e)),u.is.number(t)&&0!==t||(t=this.storage.get("quality")),u.is.number(t)||(t=this.config.quality.selected),u.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var i=u.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+i+" instead"),t=i}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=u.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){q.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?u.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=u.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(u.is.string(e))if(u.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,b.setText.call(this,null),b.setLanguage.call(this),u.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(d.pip){var n=u.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return d.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return d.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return u.loadSprite(e,t)}}]),n}()}); //# sourceMappingURL=plyr.min.js.map diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map index a1d881ae..35a18be1 100644 --- a/dist/plyr.min.js.map +++ b/dist/plyr.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["types.js","defaults.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["providers","types","defaults","navigator","language","userLanguage","split","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","utils","input","this","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","response","Error","statusText","open","send","id","is","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","empty","setItem","stringify","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","key","_ref2","value","sel","existingAttributes","existing","s","selector","className","parts","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","boolean","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","match","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","toggleClass","fallback","Fullscreen","name","_this","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","list","checked","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","lang","default","unshift","_this4","values","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","create","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setInterval","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","handler","_this11","Date","now","base","buildUrlParams","mapQualityUnit","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","levels","getAvailableQualityLevels","level","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","wrap","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"uLAIA,IAAaA,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCRLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACGC,UAAUC,UAAYD,UAAUE,cAAcC,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BA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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["types.js","defaults.js","support.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["providers","types","defaults","navigator","language","userLanguage","split","range","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","length","splice","executeCallbacks","args","depsNotFound","call","success","error","loadFile","path","callbackFn","numTries","isCss","e","doc","document","async","maxTries","numRetries","beforeCallbackFn","before","pathStripped","replace","test","createElement","rel","href","src","undefined","onload","onerror","onbeforeload","ev","result","type","sheet","cssText","x","defaultPrevented","head","appendChild","loadjs","paths","arg1","arg2","trim","fn","i","numWaiting","push","loadFiles","ready","deps","bundleIds","r","subscribe","done","reset","isDefined","module","exports","utils","input","this","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","array","nodeList","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","response","Error","statusText","open","send","id","is","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","empty","setItem","stringify","catch","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","Math","floor","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","_ref","key","_ref2","value","sel","existingAttributes","existing","s","selector","className","parts","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","boolean","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toString","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","filter","item","indexOf","reduce","prev","curr","abs","youtube","vimeo","match","$2","parser","search","startsWith","parseUrl","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","y","overflow","toggleClass","fallback","Fullscreen","name","_this","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","exit","enter","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","list","checked","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","sort","a","b","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","lang","default","unshift","_this4","values","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","create","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","global","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","setInterval","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","init","start","adError","zIndex","_this10","destroy","handlers","handler","_this11","Date","now","base","buildUrlParams","mapQualityUnit","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","levels","getAvailableQualityLevels","level","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","wrap","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"uLAIA,IAAaA,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SCRLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACGC,UAAUC,UAAYD,UAAUE,cAAcC,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BA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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js index f13fb8f1..001067de 100644 --- a/dist/plyr.polyfilled.js +++ b/dist/plyr.polyfilled.js @@ -8909,7 +8909,8 @@ var controls = { // Create <svg> var icon = document.createElementNS(namespace, 'svg'); utils.setAttributes(icon, utils.extend(attributes, { - role: 'presentation' + role: 'presentation', + focusable: 'false' })); // Create the <use> to reference sprite @@ -9128,7 +9129,9 @@ var controls = { var progress = utils.createElement('progress', utils.extend(utils.getAttributesFromSelector(this.config.selectors.display[type]), { min: 0, max: 100, - value: 0 + value: 0, + role: 'presentation', + 'aria-hidden': true }, attributes)); // Create the label inside @@ -10445,7 +10448,7 @@ var Listeners = function () { // Disable right click if (this.player.supported.ui && this.player.config.disableContextMenu) { - utils.on(this.player.media, 'contextmenu', function (event) { + utils.on(this.player.elements.wrapper, 'contextmenu', function (event) { event.preventDefault(); }, false); } diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map index 17202465..99714b5f 100644 --- a/dist/plyr.polyfilled.js.map +++ b/dist/plyr.polyfilled.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","types.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","support.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["document","require$$0","require$$1","require$$2","dP","global","min","shared","DESCRIPTORS","toIndex","$typed","arrayFill","redefineAll","fails","SPECIES","buffer","VIEW","$export","TAG","IE_PROTO","PROTOTYPE","ITERATOR","speciesConstructor","ArrayProto","create","descriptor","getPrototypeOf","addToUnscopables","pIE","LIBRARY","require$$3","require$$4","ctx","require$$7","anInstance","require$$8","require$$9","hide","require$$10","require$$11","toInteger","require$$12","toLength","require$$13","toAbsoluteIndex","require$$15","toPrimitive","require$$16","has","require$$17","classof","require$$18","isObject","require$$19","toObject","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","uid","require$$26","wks","require$$27","require$$28","require$$29","require$$30","require$$31","Iterators","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","setSpecies","meta","$iterDetect","createArrayMethod","id","$has","assign","gOPD","getProto","Reflect","gOPN","process","Promise","TypeError","isNode","newPromiseCapability","newPromiseCapabilityModule","require$$5","require$$6","toString","$GOPD","$DP","gOPNExt","ObjectProto","USE_NATIVE","$fails","$defineProperty","$keys","$getOwnPropertyDescriptor","isRegExp","MATCH","$find","KEY","forced","floor","log1p","sign","$expm1","abs","exp","isEnum","navigator","wrap","i","NAME","this","CustomEvent","providers","types","defaults","language","userLanguage","split","define","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","boolean","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","ready","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","lang","default","unshift","values","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","mapQualityUnit","mapQualityUnits","levels","level","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\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 bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","types.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","support.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js","plyr.polyfilled.js"],"names":["document","require$$0","require$$1","require$$2","dP","global","min","shared","DESCRIPTORS","toIndex","$typed","arrayFill","redefineAll","fails","SPECIES","buffer","VIEW","$export","TAG","IE_PROTO","PROTOTYPE","ITERATOR","speciesConstructor","ArrayProto","create","descriptor","getPrototypeOf","addToUnscopables","pIE","LIBRARY","require$$3","require$$4","ctx","require$$7","anInstance","require$$8","require$$9","hide","require$$10","require$$11","toInteger","require$$12","toLength","require$$13","toAbsoluteIndex","require$$15","toPrimitive","require$$16","has","require$$17","classof","require$$18","isObject","require$$19","toObject","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","uid","require$$26","wks","require$$27","require$$28","require$$29","require$$30","require$$31","Iterators","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","setSpecies","meta","$iterDetect","createArrayMethod","id","$has","assign","gOPD","getProto","Reflect","gOPN","process","Promise","TypeError","isNode","newPromiseCapability","newPromiseCapabilityModule","require$$5","require$$6","toString","$GOPD","$DP","gOPNExt","ObjectProto","USE_NATIVE","$fails","$defineProperty","$keys","$getOwnPropertyDescriptor","isRegExp","MATCH","$find","KEY","forced","floor","log1p","sign","$expm1","abs","exp","isEnum","navigator","wrap","i","NAME","this","CustomEvent","providers","types","defaults","language","userLanguage","split","define","utils","input","instanceof","window","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","is","prefix","hasId","isCached","exists","querySelectorAll","injectSprite","data","innerHTML","body","insertBefore","childNodes","container","createElement","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","call","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","elements","wrapper","targets","from","reverse","forEach","element","index","child","cloneNode","parent","parentNode","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","entries","key","value","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","error","debug","warn","toggleNativeControls","focused","activeElement","focusable","first","last","trap","event","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","boolean","current","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","find","RegExp","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","source","shift","extend","filter","item","indexOf","reduce","prev","curr","youtube","vimeo","regex","$2","parser","href","search","startsWith","parseUrl","hashes","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","undefined","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","name","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","cancelFullScreen","exitFullscreen","action","enter","exit","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","i18n","seekTime","title","stored","get","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","src","track","hostname","location","protocol","createObjectURL","blob","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","ready","setTitle","isEmbed","iframe","stopped","paused","toggleControls","loading","timers","setTimeout","failed","networkState","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","push","suffix","list","checked","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","touch","pageX","left","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","getBadge","createBadge","sort","a","b","sorting","getLabel","createMenuItem","updateSetting","lang","default","unshift","values","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","findElements","repaint","labels","Listeners","lastKey","handleKey","toggleMenu","firstTouch","code","which","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","set","concat","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","hasCustomHandler","returned","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","Storage","store","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","setInterval","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","zIndex","destroy","args","handlers","handler","apply","Date","now","base","buildUrlParams","mapQualityUnit","mapQualityUnits","levels","level","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","insertElement","attribute","cancelRequests","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","showEvents","delayEvents","noTransition","toggled","soft","done","clear","unload","readyState","targetTime","end","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","inline","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\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 bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js index 4661a455..a5af2617 100644 --- a/dist/plyr.polyfilled.min.js +++ b/dist/plyr.polyfilled.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=Object.freeze({default:n,__moduleExports:n}),r=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),o=r.version,s=Object.freeze({default:r,__moduleExports:r,version:o}),a=function(e){return"object"==typeof e?null!==e:"function"==typeof e},l=Object.freeze({default:a,__moduleExports:a}),c=l&&a||l,u=function(e){if(!c(e))throw TypeError(e+" is not an object!");return e},d=Object.freeze({default:u,__moduleExports:u}),f=function(e){try{return!!e()}catch(e){return!0}},h=Object.freeze({default:f,__moduleExports:f}),p=h&&f||h,g=!p(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),m=Object.freeze({default:g,__moduleExports:g}),y=i&&n||i,v=y.document,b=c(v)&&c(v.createElement),E=function(e){return b?v.createElement(e):{}},w=Object.freeze({default:E,__moduleExports:E}),_=m&&g||m,k=w&&E||w,T=!_&&!p(function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a}),S=Object.freeze({default:T,__moduleExports:T}),x=function(e,t){if(!c(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!c(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},A=Object.freeze({default:x,__moduleExports:x}),O=d&&u||d,C=S&&T||S,j=A&&x||A,P=Object.defineProperty,M=_?Object.defineProperty:function(e,t,n){if(O(e),t=j(t,!0),O(n),C)try{return P(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},L={f:M},N=Object.freeze({default:L,__moduleExports:L,f:M}),I=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},F=Object.freeze({default:I,__moduleExports:I}),z=N&&L||N,R=F&&I||F,q=_?function(e,t,n){return z.f(e,t,R(1,n))}:function(e,t,n){return e[t]=n,e},V=Object.freeze({default:q,__moduleExports:q}),B={}.hasOwnProperty,D=function(e,t){return B.call(e,t)},U=Object.freeze({default:D,__moduleExports:D}),H=0,W=Math.random(),Y=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+W).toString(36))},G=Object.freeze({default:Y,__moduleExports:Y}),K=V&&q||V,Q=U&&D||U,J=G&&Y||G,$=s&&r||s,X=t(function(e){var t=J("src"),n=Function.toString,i=(""+n).split("toString");$.inspectSource=function(e){return n.call(e)},(e.exports=function(e,n,r,o){var s="function"==typeof r;s&&(Q(r,"name")||K(r,"name",n)),e[n]!==r&&(s&&(Q(r,t)||K(r,t,e[n]?""+e[n]:i.join(String(n)))),e===y?e[n]=r:o?e[n]?e[n]=r:K(e,n,r):(delete e[n],K(e,n,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||n.call(this)})}),Z=Object.freeze({default:X,__moduleExports:X}),ee=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},te=Object.freeze({default:ee,__moduleExports:ee}),ne=te&&ee||te,ie=function(e,t,n){if(ne(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},re=Object.freeze({default:ie,__moduleExports:ie}),oe=Z&&X||Z,se=re&&ie||re,ae=function(e,t,n){var i,r,o,s,a=e&ae.F,l=e&ae.G,c=e&ae.S,u=e&ae.P,d=e&ae.B,f=l?y:c?y[t]||(y[t]={}):(y[t]||{}).prototype,h=l?$:$[t]||($[t]={}),p=h.prototype||(h.prototype={});for(i in l&&(n=t),n)o=((r=!a&&f&&void 0!==f[i])?f:n)[i],s=d&&r?se(o,y):u&&"function"==typeof o?se(Function.call,o):o,f&&oe(f,i,o,e&ae.U),h[i]!=o&&K(h,i,s),u&&p[i]!=o&&(p[i]=o)};y.core=$,ae.F=1,ae.G=2,ae.S=4,ae.P=8,ae.B=16,ae.W=32,ae.U=64,ae.R=128;for(var le,ce=ae,ue=Object.freeze({default:ce,__moduleExports:ce}),de=J("typed_array"),fe=J("view"),he=!(!y.ArrayBuffer||!y.DataView),pe=he,ge=0,me="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");ge<9;)(le=y[me[ge++]])?(K(le.prototype,de,!0),K(le.prototype,fe,!0)):pe=!1;var ye={ABV:he,CONSTR:pe,TYPED:de,VIEW:fe},ve=ye.ABV,be=ye.CONSTR,Ee=ye.TYPED,we=ye.VIEW,_e=Object.freeze({default:ye,__moduleExports:ye,ABV:ve,CONSTR:be,TYPED:Ee,VIEW:we}),ke=Object.freeze({default:!1,__moduleExports:!1}),Te=function(e,t,n){for(var i in t)oe(e,i,t[i],n);return e},Se=Object.freeze({default:Te,__moduleExports:Te}),xe=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},Ae=Object.freeze({default:xe,__moduleExports:xe}),Oe=Math.ceil,Ce=Math.floor,je=function(e){return isNaN(e=+e)?0:(e>0?Ce:Oe)(e)},Pe=Object.freeze({default:je,__moduleExports:je}),Me=Pe&&je||Pe,Le=Math.min,Ne=function(e){return e>0?Le(Me(e),9007199254740991):0},Ie=Object.freeze({default:Ne,__moduleExports:Ne}),Fe=Ie&&Ne||Ie,ze=function(e){if(void 0===e)return 0;var t=Me(e),n=Fe(t);if(t!==n)throw RangeError("Wrong length!");return n},Re=Object.freeze({default:ze,__moduleExports:ze}),qe={}.toString,Ve=function(e){return qe.call(e).slice(8,-1)},Be=Object.freeze({default:Ve,__moduleExports:Ve}),De=Be&&Ve||Be,Ue=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==De(e)?e.split(""):Object(e)},He=Object.freeze({default:Ue,__moduleExports:Ue}),We=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Ye=Object.freeze({default:We,__moduleExports:We}),Ge=He&&Ue||He,Ke=Ye&&We||Ye,Qe=function(e){return Ge(Ke(e))},Je=Object.freeze({default:Qe,__moduleExports:Qe}),$e=Math.max,Xe=Math.min,Ze=function(e,t){return(e=Me(e))<0?$e(e+t,0):Xe(e,t)},et=Object.freeze({default:Ze,__moduleExports:Ze}),tt=Je&&Qe||Je,nt=et&&Ze||et,it=function(e){return function(t,n,i){var r,o=tt(t),s=Fe(o.length),a=nt(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},rt=Object.freeze({default:it,__moduleExports:it}),ot=y["__core-js_shared__"]||(y["__core-js_shared__"]={}),st=function(e){return ot[e]||(ot[e]={})},at=Object.freeze({default:st,__moduleExports:st}),lt=at&&st||at,ct=lt("keys"),ut=function(e){return ct[e]||(ct[e]=J(e))},dt=Object.freeze({default:ut,__moduleExports:ut}),ft=rt&&it||rt,ht=dt&&ut||dt,pt=ft(!1),gt=ht("IE_PROTO"),mt=function(e,t){var n,i=tt(e),r=0,o=[];for(n in i)n!=gt&&Q(i,n)&&o.push(n);for(;t.length>r;)Q(i,n=t[r++])&&(~pt(o,n)||o.push(n));return o},yt=Object.freeze({default:mt,__moduleExports:mt}),vt="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),bt=Object.freeze({default:vt,__moduleExports:vt}),Et=yt&&mt||yt,wt=bt&&vt||bt,_t=wt.concat("length","prototype"),kt=Object.getOwnPropertyNames||function(e){return Et(e,_t)},Tt={f:kt},St=Object.freeze({default:Tt,__moduleExports:Tt,f:kt}),xt=function(e){return Object(Ke(e))},At=Object.freeze({default:xt,__moduleExports:xt}),Ot=At&&xt||At,Ct=function(e){for(var t=Ot(this),n=Fe(t.length),i=arguments.length,r=nt(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:nt(o,n);s>r;)t[r++]=e;return t},jt=Object.freeze({default:Ct,__moduleExports:Ct}),Pt=t(function(e){var t=lt("wks"),n=y.Symbol,i="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=i&&n[e]||(i?n:J)("Symbol."+e))}).store=t}),Mt=Object.freeze({default:Pt,__moduleExports:Pt}),Lt=Mt&&Pt||Mt,Nt=z.f,It=Lt("toStringTag"),Ft=function(e,t,n){e&&!Q(e=n?e:e.prototype,It)&&Nt(e,It,{configurable:!0,value:t})},zt=Object.freeze({default:Ft,__moduleExports:Ft}),Rt=ke,qt=_e&&ye||_e,Vt=Se&&Te||Se,Bt=Ae&&xe||Ae,Dt=Re&&ze||Re,Ut=St&&Tt||St,Ht=jt&&Ct||jt,Wt=zt&&Ft||zt,Yt=t(function(e,t){var n=Ut.f,i=z.f,r="prototype",o="Wrong index!",s=y.ArrayBuffer,a=y.DataView,l=y.Math,c=y.RangeError,u=y.Infinity,d=s,f=l.abs,h=l.pow,g=l.floor,m=l.log,v=l.LN2,b=_?"_b":"buffer",E=_?"_l":"byteLength",w=_?"_o":"byteOffset";function k(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,d=23===t?h(2,-24)-h(2,-77):0,p=0,y=e<0||0===e&&1/e<0?1:0;for((e=f(e))!=e||e===u?(r=e!=e?1:0,i=l):(i=g(m(e)/v),e*(o=h(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?d/o:d*h(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*h(2,t),i+=c):(r=e*h(2,c-1)*h(2,t),i=0));t>=8;s[p++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[p++]=255&i,i/=256,a-=8);return s[--p]|=128*y,s}function T(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],d=127&c;for(c>>=7;a>0;d=256*d+e[l],l--,a-=8);for(i=d&(1<<-a)-1,d>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===d)d=1-s;else{if(d===o)return i?NaN:c?-u:u;i+=h(2,t),d-=s}return(c?-1:1)*i*h(2,d-t)}function S(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function x(e){return[255&e]}function A(e){return[255&e,e>>8&255]}function O(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function C(e){return k(e,52,8)}function j(e){return k(e,23,4)}function P(e,t,n){i(e[r],t,{get:function(){return this[n]}})}function M(e,t,n,i){var r=Dt(+n);if(r+t>e[E])throw c(o);var s=e[b]._b,a=r+e[w],l=s.slice(a,a+t);return i?l:l.reverse()}function L(e,t,n,i,r,s){var a=Dt(+n);if(a+t>e[E])throw c(o);for(var l=e[b]._b,u=a+e[w],d=i(+r),f=0;f<t;f++)l[u+f]=d[s?f:t-f-1]}if(qt.ABV){if(!p(function(){s(1)})||!p(function(){new s(-1)})||p(function(){return new s,new s(1.5),new s(NaN),"ArrayBuffer"!=s.name})){for(var N,I=(s=function(e){return Bt(this,s),new d(Dt(e))})[r]=d[r],F=n(d),R=0;F.length>R;)(N=F[R++])in s||K(s,N,d[N]);Rt||(I.constructor=s)}var q=new a(new s(2)),V=a[r].setInt8;q.setInt8(0,2147483648),q.setInt8(1,2147483649),!q.getInt8(0)&&q.getInt8(1)||Vt(a[r],{setInt8:function(e,t){V.call(this,e,t<<24>>24)},setUint8:function(e,t){V.call(this,e,t<<24>>24)}},!0)}else s=function(e){Bt(this,s,"ArrayBuffer");var t=Dt(e);this._b=Ht.call(new Array(t),0),this[E]=t},a=function(e,t,n){Bt(this,a,"DataView"),Bt(e,s,"DataView");var i=e[E],r=Me(t);if(r<0||r>i)throw c("Wrong offset!");if(r+(n=void 0===n?i-r:Fe(n))>i)throw c("Wrong length!");this[b]=e,this[w]=r,this[E]=n},_&&(P(s,"byteLength","_l"),P(a,"buffer","_b"),P(a,"byteLength","_l"),P(a,"byteOffset","_o")),Vt(a[r],{getInt8:function(e){return M(this,1,e)[0]<<24>>24},getUint8:function(e){return M(this,1,e)[0]},getInt16:function(e){var t=M(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=M(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return S(M(this,4,e,arguments[1]))},getUint32:function(e){return S(M(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return T(M(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return T(M(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){L(this,1,e,x,t)},setUint8:function(e,t){L(this,1,e,x,t)},setInt16:function(e,t){L(this,2,e,A,t,arguments[2])},setUint16:function(e,t){L(this,2,e,A,t,arguments[2])},setInt32:function(e,t){L(this,4,e,O,t,arguments[2])},setUint32:function(e,t){L(this,4,e,O,t,arguments[2])},setFloat32:function(e,t){L(this,4,e,j,t,arguments[2])},setFloat64:function(e,t){L(this,8,e,C,t,arguments[2])}});Wt(s,"ArrayBuffer"),Wt(a,"DataView"),K(a[r],qt.VIEW,!0),t.ArrayBuffer=s,t.DataView=a}),Gt=Object.freeze({default:Yt,__moduleExports:Yt}),Kt=Lt("species"),Qt=function(e,t){var n,i=O(e).constructor;return void 0===i||void 0==(n=O(i)[Kt])?t:ne(n)},Jt=Object.freeze({default:Qt,__moduleExports:Qt}),$t=Lt("species"),Xt=function(e){var t=y[e];_&&t&&!t[$t]&&z.f(t,$t,{configurable:!0,get:function(){return this}})},Zt=Object.freeze({default:Xt,__moduleExports:Xt}),en=ue&&ce||ue,tn=Gt&&Yt||Gt,nn=Jt&&Qt||Jt,rn=Zt&&Xt||Zt,on=y.ArrayBuffer,sn=tn.ArrayBuffer,an=tn.DataView,ln=qt.ABV&&on.isView,cn=sn.prototype.slice,un=qt.VIEW;en(en.G+en.W+en.F*(on!==sn),{ArrayBuffer:sn}),en(en.S+en.F*!qt.CONSTR,"ArrayBuffer",{isView:function(e){return ln&&ln(e)||c(e)&&un in e}}),en(en.P+en.U+en.F*p(function(){return!new sn(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==cn&&void 0===t)return cn.call(O(this),e);for(var n=O(this).byteLength,i=nt(e,n),r=nt(void 0===t?n:t,n),o=new(nn(this,sn))(Fe(r-i)),s=new an(this),a=new an(o),l=0;i<r;)a.setUint8(l++,s.getUint8(i++));return o}}),rn("ArrayBuffer");var dn=Lt("toStringTag"),fn="Arguments"==De(function(){return arguments}()),hn=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),dn))?n:fn?De(t):"Object"==(i=De(t))&&"function"==typeof t.callee?"Arguments":i},pn=Object.freeze({default:hn,__moduleExports:hn}),gn={},mn=Object.freeze({default:gn,__moduleExports:gn}),yn=mn&&gn||mn,vn=Lt("iterator"),bn=Array.prototype,En=function(e){return void 0!==e&&(yn.Array===e||bn[vn]===e)},wn=Object.freeze({default:En,__moduleExports:En}),_n=Object.keys||function(e){return Et(e,wt)},kn=Object.freeze({default:_n,__moduleExports:_n}),Tn=kn&&_n||kn,Sn=_?Object.defineProperties:function(e,t){O(e);for(var n,i=Tn(t),r=i.length,o=0;r>o;)z.f(e,n=i[o++],t[n]);return e},xn=Object.freeze({default:Sn,__moduleExports:Sn}),An=y.document,On=An&&An.documentElement,Cn=Object.freeze({default:On,__moduleExports:On}),jn=xn&&Sn||xn,Pn=Cn&&On||Cn,Mn=ht("IE_PROTO"),Ln=function(){},Nn=function(){var e,t=k("iframe"),n=wt.length;for(t.style.display="none",Pn.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Nn=e.F;n--;)delete Nn.prototype[wt[n]];return Nn()},In=Object.create||function(e,t){var n;return null!==e?(Ln.prototype=O(e),n=new Ln,Ln.prototype=null,n[Mn]=e):n=Nn(),void 0===t?n:jn(n,t)},Fn=Object.freeze({default:In,__moduleExports:In}),zn=ht("IE_PROTO"),Rn=Object.prototype,qn=Object.getPrototypeOf||function(e){return e=Ot(e),Q(e,zn)?e[zn]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Rn:null},Vn=Object.freeze({default:qn,__moduleExports:qn}),Bn=pn&&hn||pn,Dn=Lt("iterator"),Un=$.getIteratorMethod=function(e){if(void 0!=e)return e[Dn]||e["@@iterator"]||yn[Bn(e)]},Hn=Object.freeze({default:Un,__moduleExports:Un}),Wn=Array.isArray||function(e){return"Array"==De(e)},Yn=Object.freeze({default:Wn,__moduleExports:Wn}),Gn=Yn&&Wn||Yn,Kn=Lt("species"),Qn=function(e){var t;return Gn(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Gn(t.prototype)||(t=void 0),c(t)&&null===(t=t[Kn])&&(t=void 0)),void 0===t?Array:t},Jn=Object.freeze({default:Qn,__moduleExports:Qn}),$n=Jn&&Qn||Jn,Xn=function(e,t){return new($n(e))(t)},Zn=Object.freeze({default:Xn,__moduleExports:Xn}),ei=Zn&&Xn||Zn,ti=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||ei;return function(t,c,u){for(var d,f,h=Ot(t),p=Ge(h),g=se(c,u,3),m=Fe(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((a||y in p)&&(f=g(d=p[y],y,h),e))if(n)v[y]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return y;case 2:v.push(d)}else if(o)return!1;return s?-1:r||o?o:v}},ni=Object.freeze({default:ti,__moduleExports:ti}),ii=Lt("unscopables"),ri=Array.prototype;void 0==ri[ii]&&K(ri,ii,{});var oi=function(e){ri[ii][e]=!0},si=Object.freeze({default:oi,__moduleExports:oi}),ai=function(e,t){return{value:t,done:!!e}},li=Object.freeze({default:ai,__moduleExports:ai}),ci=Fn&&In||Fn,ui={};K(ui,Lt("iterator"),function(){return this});var di=function(e,t,n){e.prototype=ci(ui,{next:R(1,n)}),Wt(e,t+" Iterator")},fi=Object.freeze({default:di,__moduleExports:di}),hi=fi&&di||fi,pi=Vn&&qn||Vn,gi=Lt("iterator"),mi=!([].keys&&"next"in[].keys()),yi=function(){return this},vi=function(e,t,n,i,r,o,s){hi(n,t,i);var a,l,c,u=function(e){if(!mi&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,g=p[gi]||p["@@iterator"]||r&&p[r],m=!mi&&g||u(r),y=r?f?u("entries"):m:void 0,v="Array"==t&&p.entries||g;if(v&&(c=pi(v.call(new e)))!==Object.prototype&&c.next&&(Wt(c,d,!0),Rt||Q(c,gi)||K(c,gi,yi)),f&&g&&"values"!==g.name&&(h=!0,m=function(){return g.call(this)}),Rt&&!s||!mi&&!h&&p[gi]||K(p,gi,m),yn[t]=m,yn[d]=yi,r)if(a={values:f?m:u("values"),keys:o?m:u("keys"),entries:y},s)for(l in a)l in p||oe(p,l,a[l]);else en(en.P+en.F*(mi||h),t,a);return a},bi=Object.freeze({default:vi,__moduleExports:vi}),Ei=si&&oi||si,wi=li&&ai||li,_i=bi&&vi||bi,ki=_i(Array,"Array",function(e,t){this._t=tt(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,wi(1)):wi(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");yn.Arguments=yn.Array,Ei("keys"),Ei("values"),Ei("entries");var Ti=Object.freeze({default:ki,__moduleExports:ki}),Si=Lt("iterator"),xi=!1;try{[7][Si]().return=function(){xi=!0}}catch(e){}var Ai=function(e,t){if(!t&&!xi)return!1;var n=!1;try{var i=[7],r=i[Si]();r.next=function(){return{done:n=!0}},i[Si]=function(){return r},e(i)}catch(e){}return n},Oi=Object.freeze({default:Ai,__moduleExports:Ai}),Ci=[].copyWithin||function(e,t){var n=Ot(this),i=Fe(n.length),r=nt(e,i),o=nt(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:nt(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ji=Object.freeze({default:Ci,__moduleExports:Ci}),Pi={}.propertyIsEnumerable,Mi={f:Pi},Li=Object.freeze({default:Mi,__moduleExports:Mi,f:Pi}),Ni=Li&&Mi||Li,Ii=Object.getOwnPropertyDescriptor,Fi=_?Ii:function(e,t){if(e=tt(e),t=j(t,!0),C)try{return Ii(e,t)}catch(e){}if(Q(e,t))return R(!Ni.f.call(e,t),e[t])},zi={f:Fi},Ri=Object.freeze({default:zi,__moduleExports:zi,f:Fi}),qi=wn&&En||wn,Vi=Hn&&Un||Hn,Bi=ni&&ti||ni,Di=Ti&&ki||Ti,Ui=Oi&&Ai||Oi,Hi=ji&&Ci||ji,Wi=Ri&&zi||Ri,Yi=t(function(e){if(_){var t=Rt,n=y,i=p,r=en,o=qt,s=tn,a=se,l=Bt,u=R,d=K,f=Vt,h=Me,g=Fe,m=Dt,v=nt,b=j,E=Q,w=Bn,k=c,T=Ot,S=qi,x=ci,A=pi,O=Ut.f,C=Vi,P=J,M=Lt,L=Bi,N=ft,I=nn,F=Di,q=yn,V=Ui,B=rn,D=Ht,U=Hi,H=z,W=Wi,Y=H.f,G=W.f,$=n.RangeError,X=n.TypeError,Z=n.Uint8Array,ee=Array.prototype,te=s.ArrayBuffer,ne=s.DataView,ie=L(0),re=L(2),oe=L(3),ae=L(4),le=L(5),ce=L(6),ue=N(!0),de=N(!1),fe=F.values,he=F.keys,pe=F.entries,ge=ee.lastIndexOf,me=ee.reduce,ye=ee.reduceRight,ve=ee.join,be=ee.sort,Ee=ee.slice,we=ee.toString,_e=ee.toLocaleString,ke=M("iterator"),Te=M("toStringTag"),Se=P("typed_constructor"),xe=P("def_constructor"),Ae=o.CONSTR,Oe=o.TYPED,Ce=o.VIEW,je=L(1,function(e,t){return ze(I(e,e[xe]),t)}),Pe=i(function(){return 1===new Z(new Uint16Array([1]).buffer)[0]}),Le=!!Z&&!!Z.prototype.set&&i(function(){new Z(1).set({})}),Ne=function(e,t){var n=h(e);if(n<0||n%t)throw $("Wrong offset!");return n},Ie=function(e){if(k(e)&&Oe in e)return e;throw X(e+" is not a typed array!")},ze=function(e,t){if(!(k(e)&&Se in e))throw X("It is not a typed array constructor!");return new e(t)},Re=function(e,t){return qe(I(e,e[xe]),t)},qe=function(e,t){for(var n=0,i=t.length,r=ze(e,i);i>n;)r[n]=t[n++];return r},Ve=function(e,t,n){Y(e,t,{get:function(){return this._d[n]}})},Be=function(e){var t,n,i,r,o,s,l=T(e),c=arguments.length,u=c>1?arguments[1]:void 0,d=void 0!==u,f=C(l);if(void 0!=f&&!S(f)){for(s=f.call(l),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);l=i}for(d&&c>2&&(u=a(u,arguments[2],2)),t=0,n=g(l.length),r=ze(this,n);n>t;t++)r[t]=d?u(l[t],t):l[t];return r},De=function(){for(var e=0,t=arguments.length,n=ze(this,t);t>e;)n[e]=arguments[e++];return n},Ue=!!Z&&i(function(){_e.call(new Z(1))}),He=function(){return _e.apply(Ue?Ee.call(Ie(this)):Ie(this),arguments)},We={copyWithin:function(e,t){return U.call(Ie(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ae(Ie(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return D.apply(Ie(this),arguments)},filter:function(e){return Re(this,re(Ie(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return le(Ie(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ce(Ie(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){ie(Ie(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return de(Ie(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return ue(Ie(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ve.apply(Ie(this),arguments)},lastIndexOf:function(e){return ge.apply(Ie(this),arguments)},map:function(e){return je(Ie(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return me.apply(Ie(this),arguments)},reduceRight:function(e){return ye.apply(Ie(this),arguments)},reverse:function(){for(var e,t=Ie(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return oe(Ie(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return be.call(Ie(this),e)},subarray:function(e,t){var n=Ie(this),i=n.length,r=v(e,i);return new(I(n,n[xe]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,g((void 0===t?i:v(t,i))-r))}},Ye=function(e,t){return Re(this,Ee.call(Ie(this),e,t))},Ge=function(e){Ie(this);var t=Ne(arguments[1],1),n=this.length,i=T(e),r=g(i.length),o=0;if(r+t>n)throw $("Wrong length!");for(;o<r;)this[t+o]=i[o++]},Ke={entries:function(){return pe.call(Ie(this))},keys:function(){return he.call(Ie(this))},values:function(){return fe.call(Ie(this))}},Qe=function(e,t){return k(e)&&e[Oe]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Je=function(e,t){return Qe(e,t=b(t,!0))?u(2,e[t]):G(e,t)},$e=function(e,t,n){return!(Qe(e,t=b(t,!0))&&k(n)&&E(n,"value"))||E(n,"get")||E(n,"set")||n.configurable||E(n,"writable")&&!n.writable||E(n,"enumerable")&&!n.enumerable?Y(e,t,n):(e[t]=n.value,e)};Ae||(W.f=Je,H.f=$e),r(r.S+r.F*!Ae,"Object",{getOwnPropertyDescriptor:Je,defineProperty:$e}),i(function(){we.call({})})&&(we=_e=function(){return ve.call(this)});var Xe=f({},We);f(Xe,Ke),d(Xe,ke,Ke.values),f(Xe,{slice:Ye,set:Ge,constructor:function(){},toString:we,toLocaleString:He}),Ve(Xe,"buffer","b"),Ve(Xe,"byteOffset","o"),Ve(Xe,"byteLength","l"),Ve(Xe,"length","e"),Y(Xe,Te,{get:function(){return this[Oe]}}),e.exports=function(e,s,a,c){var u=e+((c=!!c)?"Clamped":"")+"Array",f="get"+e,h="set"+e,p=n[u],y=p||{},v=p&&A(p),b=!p||!o.ABV,E={},_=p&&p.prototype,T=function(e,t){Y(e,t,{get:function(){return function(e,t){var n=e._d;return n.v[f](t*s+n.o,Pe)}(this,t)},set:function(e){return function(e,t,n){var i=e._d;c&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[h](t*s+i.o,n,Pe)}(this,t,e)},enumerable:!0})};b?(p=a(function(e,t,n,i){l(e,p,u,"_d");var r,o,a,c,f=0,h=0;if(k(t)){if(!(t instanceof te||"ArrayBuffer"==(c=w(t))||"SharedArrayBuffer"==c))return Oe in t?qe(p,t):Be.call(p,t);r=t,h=Ne(n,s);var y=t.byteLength;if(void 0===i){if(y%s)throw $("Wrong length!");if((o=y-h)<0)throw $("Wrong length!")}else if((o=g(i)*s)+h>y)throw $("Wrong length!");a=o/s}else a=m(t),r=new te(o=a*s);for(d(e,"_d",{b:r,o:h,l:o,e:a,v:new ne(r)});f<a;)T(e,f++)}),_=p.prototype=x(Xe),d(_,"constructor",p)):i(function(){p(1)})&&i(function(){new p(-1)})&&V(function(e){new p,new p(null),new p(1.5),new p(e)},!0)||(p=a(function(e,t,n,i){var r;return l(e,p,u),k(t)?t instanceof te||"ArrayBuffer"==(r=w(t))||"SharedArrayBuffer"==r?void 0!==i?new y(t,Ne(n,s),i):void 0!==n?new y(t,Ne(n,s)):new y(t):Oe in t?qe(p,t):Be.call(p,t):new y(m(t))}),ie(v!==Function.prototype?O(y).concat(O(v)):O(y),function(e){e in p||d(p,e,y[e])}),p.prototype=_,t||(_.constructor=p));var S=_[ke],C=!!S&&("values"==S.name||void 0==S.name),j=Ke.values;d(p,Se,!0),d(_,Oe,u),d(_,Ce,!0),d(_,xe,p),(c?new p(1)[Te]==u:Te in _)||Y(_,Te,{get:function(){return u}}),E[u]=p,r(r.G+r.W+r.F*(p!=y),E),r(r.S,u,{BYTES_PER_ELEMENT:s}),r(r.S+r.F*i(function(){y.of.call(p,1)}),u,{from:Be,of:De}),"BYTES_PER_ELEMENT"in _||d(_,"BYTES_PER_ELEMENT",s),r(r.P,u,We),B(u),r(r.P+r.F*Le,u,{set:Ge}),r(r.P+r.F*!C,u,Ke),t||_.toString==we||(_.toString=we),r(r.P+r.F*i(function(){new p(1).slice()}),u,{slice:Ye}),r(r.P+r.F*(i(function(){return[1,2].toLocaleString()!=new p([1,2]).toLocaleString()})||!i(function(){_.toLocaleString.call([1,2])})),u,{toLocaleString:He}),q[u]=C?S:j,t||C||d(_,ke,j)}}else e.exports=function(){}}),Gi=Object.freeze({default:Yi,__moduleExports:Yi}),Ki=Gi&&Yi||Gi;Ki("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),Ki("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var Qi=function(e,t,n,i){try{return i?t(O(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&O(r.call(e)),t}},Ji=Object.freeze({default:Qi,__moduleExports:Qi}),$i=Ji&&Qi||Ji,Xi=t(function(e){var t={},n={},i=e.exports=function(e,i,r,o,s){var a,l,c,u,d=s?function(){return e}:Vi(e),f=se(r,o,i?2:1),h=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(qi(d)){for(a=Fe(e.length);a>h;h++)if((u=i?f(O(l=e[h])[0],l[1]):f(e[h]))===t||u===n)return u}else for(c=d.call(e);!(l=c.next()).done;)if((u=$i(c,f,l.value,i))===t||u===n)return u};i.BREAK=t,i.RETURN=n}),Zi=Object.freeze({default:Xi,__moduleExports:Xi}),er=t(function(e){var t=J("meta"),n=z.f,i=0,r=Object.isExtensible||function(){return!0},o=!p(function(){return r(Object.preventExtensions({}))}),s=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},a=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!c(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!Q(e,t)){if(!r(e))return"F";if(!n)return"E";s(e)}return e[t].i},getWeak:function(e,n){if(!Q(e,t)){if(!r(e))return!0;if(!n)return!1;s(e)}return e[t].w},onFreeze:function(e){return o&&a.NEED&&r(e)&&!Q(e,t)&&s(e),e}}}),tr=er.KEY,nr=er.NEED,ir=er.fastKey,rr=er.getWeak,or=er.onFreeze,sr=Object.freeze({default:er,__moduleExports:er,KEY:tr,NEED:nr,fastKey:ir,getWeak:rr,onFreeze:or}),ar=function(e,t){if(!c(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},lr=Object.freeze({default:ar,__moduleExports:ar}),cr=Zi&&Xi||Zi,ur=sr&&er||sr,dr=lr&&ar||lr,fr=z.f,hr=ur.fastKey,pr=_?"_s":"size",gr=function(e,t){var n,i=hr(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},mr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=ci(null),e._f=void 0,e._l=void 0,e[pr]=0,void 0!=o&&cr(o,n,e[i],e)});return Vt(r.prototype,{clear:function(){for(var e=dr(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[pr]=0},delete:function(e){var n=dr(this,t),i=gr(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[pr]--}return!!i},forEach:function(e){dr(this,t);for(var n,i=se(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!gr(dr(this,t),e)}}),_&&fr(r.prototype,"size",{get:function(){return dr(this,t)[pr]}}),r},def:function(e,t,n){var i,r,o=gr(e,t);return o?o.v=n:(e._l=o={i:r=hr(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[pr]++,"F"!==r&&(e._i[r]=o)),e},getEntry:gr,setStrong:function(e,t,n){_i(e,t,function(e,n){this._t=dr(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?wi(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,wi(1))},n?"entries":"values",!n,!0),rn(t)}},yr=mr.getConstructor,vr=mr.def,br=mr.getEntry,Er=mr.setStrong,wr=Object.freeze({default:mr,__moduleExports:mr,getConstructor:yr,def:vr,getEntry:br,setStrong:Er}),_r=function(e,t){if(O(e),!c(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},kr={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=se(Function.call,Wi.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return _r(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:_r},Tr=kr.set,Sr=kr.check,xr=Object.freeze({default:kr,__moduleExports:kr,set:Tr,check:Sr}),Ar=xr&&kr||xr,Or=Ar.set,Cr=function(e,t,n){var i,r=t.constructor;return r!==n&&"function"==typeof r&&(i=r.prototype)!==n.prototype&&c(i)&&Or&&Or(e,i),e},jr=Object.freeze({default:Cr,__moduleExports:Cr}),Pr=jr&&Cr||jr,Mr=function(e,t,n,i,r,o){var s=y[e],a=s,l=r?"set":"add",u=a&&a.prototype,d={},f=function(e){var t=u[e];oe(u,e,"delete"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return o&&!c(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof a&&(o||u.forEach&&!p(function(){(new a).entries().next()}))){var h=new a,g=h[l](o?{}:-0,1)!=h,m=p(function(){h.has(1)}),v=Ui(function(e){new a(e)}),b=!o&&p(function(){for(var e=new a,t=5;t--;)e[l](t,t);return!e.has(-0)});v||((a=t(function(t,n){Bt(t,a,e);var i=Pr(new s,t,a);return void 0!=n&&cr(n,r,i[l],i),i})).prototype=u,u.constructor=a),(m||b)&&(f("delete"),f("has"),r&&f("get")),(b||g)&&f(l),o&&u.clear&&delete u.clear}else a=i.getConstructor(t,e,r,l),Vt(a.prototype,n),ur.NEED=!0;return Wt(a,e),d[e]=a,en(en.G+en.W+en.F*(a!=s),d),o||i.setStrong(a,e,r),a},Lr=Object.freeze({default:Mr,__moduleExports:Mr}),Nr=wr&&mr||wr,Ir=Lr&&Mr||Lr,Fr=(Ir("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Nr.getEntry(dr(this,"Map"),e);return t&&t.v},set:function(e,t){return Nr.def(dr(this,"Map"),0===e?0:e,t)}},Nr,!0),Ir("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Nr.def(dr(this,"Set"),e=0===e?0:e,e)}},Nr),Object.getOwnPropertySymbols),zr={f:Fr},Rr=Object.freeze({default:zr,__moduleExports:zr,f:Fr}),qr=Rr&&zr||Rr,Vr=Object.assign,Br=!Vr||p(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Vr({},e)[n]||Object.keys(Vr({},t)).join("")!=i})?function(e,t){for(var n=Ot(e),i=arguments.length,r=1,o=qr.f,s=Ni.f;i>r;)for(var a,l=Ge(arguments[r++]),c=o?Tn(l).concat(o(l)):Tn(l),u=c.length,d=0;u>d;)s.call(l,a=c[d++])&&(n[a]=l[a]);return n}:Vr,Dr=Object.freeze({default:Br,__moduleExports:Br}),Ur=ur.getWeak,Hr=Bi(5),Wr=Bi(6),Yr=0,Gr=function(e){return e._l||(e._l=new Kr)},Kr=function(){this.a=[]},Qr=function(e,t){return Hr(e.a,function(e){return e[0]===t})};Kr.prototype={get:function(e){var t=Qr(this,e);if(t)return t[1]},has:function(e){return!!Qr(this,e)},set:function(e,t){var n=Qr(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Wr(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Jr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=Yr++,e._l=void 0,void 0!=o&&cr(o,n,e[i],e)});return Vt(r.prototype,{delete:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Gr(dr(this,t)).delete(e):n&&Q(n,this._i)&&delete n[this._i]},has:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Gr(dr(this,t)).has(e):n&&Q(n,this._i)}}),r},def:function(e,t,n){var i=Ur(O(t),!0);return!0===i?Gr(e).set(t,n):i[e._i]=n,e},ufstore:Gr},$r=Jr.getConstructor,Xr=Jr.def,Zr=Jr.ufstore,eo=Object.freeze({default:Jr,__moduleExports:Jr,getConstructor:$r,def:Xr,ufstore:Zr}),to=Dr&&Br||Dr,no=eo&&Jr||eo;t(function(e){var t,n=Bi(0),i=ur.getWeak,r=Object.isExtensible,o=no.ufstore,s={},a=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},l={get:function(e){if(c(e)){var t=i(e);return!0===t?o(dr(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return no.def(dr(this,"WeakMap"),e,t)}},u=e.exports=Ir("WeakMap",a,l,no,!0,!0);p(function(){return 7!=(new u).set((Object.freeze||Object)(s),7).get(s)})&&(t=no.getConstructor(a,"WeakMap"),to(t.prototype,l),ur.NEED=!0,n(["delete","has","get","set"],function(e){var n=u.prototype,i=n[e];oe(n,e,function(n,o){if(c(n)&&!r(n)){this._f||(this._f=new t);var s=this._f[e](n,o);return"set"==e?this:s}return i.call(this,n,o)})}))});Ir("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return no.def(dr(this,"WeakSet"),e,!0)}},no,!1,!0);var io=(y.Reflect||{}).apply,ro=Function.apply;en(en.S+en.F*!p(function(){io(function(){})}),"Reflect",{apply:function(e,t,n){var i=ne(e),r=O(n);return io?io(i,t,r):ro.call(i,t,r)}});var oo=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},so=Object.freeze({default:oo,__moduleExports:oo}),ao=so&&oo||so,lo=[].slice,co={},uo=Function.bind||function(e){var t=ne(this),n=lo.call(arguments,1),i=function(){var r=n.concat(lo.call(arguments));return this instanceof i?function(e,t,n){if(!(t in co)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";co[t]=Function("F,a","return new F("+i.join(",")+")")}return co[t](e,n)}(t,r.length,r):ao(t,r,e)};return c(t.prototype)&&(i.prototype=t.prototype),i},fo=Object.freeze({default:uo,__moduleExports:uo}),ho=fo&&uo||fo,po=(y.Reflect||{}).construct,go=p(function(){function e(){}return!(po(function(){},[],e)instanceof e)}),mo=!p(function(){po(function(){})});en(en.S+en.F*(go||mo),"Reflect",{construct:function(e,t){ne(e),O(t);var n=arguments.length<3?e:ne(arguments[2]);if(mo&&!go)return po(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(ho.apply(e,i))}var r=n.prototype,o=ci(c(r)?r:Object.prototype),s=Function.apply.call(e,o,t);return c(s)?s:o}}),en(en.S+en.F*p(function(){Reflect.defineProperty(z.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){O(e),t=j(t,!0),O(n);try{return z.f(e,t,n),!0}catch(e){return!1}}});var yo=Wi.f;en(en.S,"Reflect",{deleteProperty:function(e,t){var n=yo(O(e),t);return!(n&&!n.configurable)&&delete e[t]}}),en(en.S,"Reflect",{get:function e(t,n){var i,r,o=arguments.length<3?t:arguments[2];return O(t)===o?t[n]:(i=Wi.f(t,n))?Q(i,"value")?i.value:void 0!==i.get?i.get.call(o):void 0:c(r=pi(t))?e(r,n,o):void 0}}),en(en.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return Wi.f(O(e),t)}}),en(en.S,"Reflect",{getPrototypeOf:function(e){return pi(O(e))}}),en(en.S,"Reflect",{has:function(e,t){return t in e}});var vo=Object.isExtensible;en(en.S,"Reflect",{isExtensible:function(e){return O(e),!vo||vo(e)}});var bo=y.Reflect,Eo=bo&&bo.ownKeys||function(e){var t=Ut.f(O(e)),n=qr.f;return n?t.concat(n(e)):t},wo=Object.freeze({default:Eo,__moduleExports:Eo}),_o=wo&&Eo||wo;en(en.S,"Reflect",{ownKeys:_o});var ko=Object.preventExtensions;en(en.S,"Reflect",{preventExtensions:function(e){O(e);try{return ko&&ko(e),!0}catch(e){return!1}}}),en(en.S,"Reflect",{set:function e(t,n,i){var r,o,s=arguments.length<4?t:arguments[3],a=Wi.f(O(t),n);if(!a){if(c(o=pi(t)))return e(o,n,i,s);a=R(0)}return Q(a,"value")?!(!1===a.writable||!c(s)||((r=Wi.f(s,n)||R(0)).value=i,z.f(s,n,r),0)):void 0!==a.set&&(a.set.call(s,i),!0)}}),Ar&&en(en.S,"Reflect",{setPrototypeOf:function(e,t){Ar.check(e,t);try{return Ar.set(e,t),!0}catch(e){return!1}}});var To,So,xo,Ao=y.process,Oo=y.setImmediate,Co=y.clearImmediate,jo=y.MessageChannel,Po=y.Dispatch,Mo=0,Lo={},No=function(){var e=+this;if(Lo.hasOwnProperty(e)){var t=Lo[e];delete Lo[e],t()}},Io=function(e){No.call(e.data)};Oo&&Co||(Oo=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return Lo[++Mo]=function(){ao("function"==typeof e?e:Function(e),t)},To(Mo),Mo},Co=function(e){delete Lo[e]},"process"==De(Ao)?To=function(e){Ao.nextTick(se(No,e,1))}:Po&&Po.now?To=function(e){Po.now(se(No,e,1))}:jo?(xo=(So=new jo).port2,So.port1.onmessage=Io,To=se(xo.postMessage,xo,1)):y.addEventListener&&"function"==typeof postMessage&&!y.importScripts?(To=function(e){y.postMessage(e+"","*")},y.addEventListener("message",Io,!1)):To="onreadystatechange"in k("script")?function(e){Pn.appendChild(k("script")).onreadystatechange=function(){Pn.removeChild(this),No.call(e)}}:function(e){setTimeout(se(No,e,1),0)});var Fo={set:Oo,clear:Co},zo=Fo.set,Ro=Fo.clear,qo=Object.freeze({default:Fo,__moduleExports:Fo,set:zo,clear:Ro}),Vo=qo&&Fo||qo,Bo=Vo.set,Do=y.MutationObserver||y.WebKitMutationObserver,Uo=y.process,Ho=y.Promise,Wo="process"==De(Uo),Yo=function(){var e,t,n,i=function(){var i,r;for(Wo&&(i=Uo.domain)&&i.exit();e;){r=e.fn,e=e.next;try{r()}catch(i){throw e?n():t=void 0,i}}t=void 0,i&&i.enter()};if(Wo)n=function(){Uo.nextTick(i)};else if(!Do||y.navigator&&y.navigator.standalone)if(Ho&&Ho.resolve){var r=Ho.resolve();n=function(){r.then(i)}}else n=function(){Bo.call(y,i)};else{var o=!0,s=document.createTextNode("");new Do(i).observe(s,{characterData:!0}),n=function(){s.data=o=!o}}return function(i){var r={fn:i,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}},Go=Object.freeze({default:Yo,__moduleExports:Yo});var Ko,Qo,Jo,$o,Xo=function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=ne(t),this.reject=ne(n)}(e)},Zo={f:Xo},es=Object.freeze({default:Zo,__moduleExports:Zo,f:Xo}),ts=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},ns=Object.freeze({default:ts,__moduleExports:ts}),is=es&&Zo||es,rs=function(e,t){if(O(e),c(t)&&t.constructor===e)return t;var n=is.f(e);return(0,n.resolve)(t),n.promise},os=Object.freeze({default:rs,__moduleExports:rs}),ss=Go&&Yo||Go,as=ns&&ts||ns,ls=os&&rs||os,cs=Vo.set,us=ss(),ds=y.TypeError,fs=y.process,hs=y.Promise,ps="process"==Bn(fs),gs=function(){},ms=Qo=is.f,ys=!!function(){try{var e=hs.resolve(1),t=(e.constructor={})[Lt("species")]=function(e){e(gs,gs)};return(ps||"function"==typeof PromiseRejectionEvent)&&e.then(gs)instanceof t}catch(e){}}(),vs=function(e){var t;return!(!c(e)||"function"!=typeof(t=e.then))&&t},bs=function(e,t){if(!e._n){e._n=!0;var n=e._c;us(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&_s(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(ds("Promise-chain cycle")):(o=vs(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&Es(e)})}},Es=function(e){cs.call(y,function(){var t,n,i,r=e._v,o=ws(e);if(o&&(t=as(function(){ps?fs.emit("unhandledRejection",r,e):(n=y.onunhandledrejection)?n({promise:e,reason:r}):(i=y.console)&&i.error&&i.error("Unhandled promise rejection",r)}),e._h=ps||ws(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},ws=function(e){return 1!==e._h&&0===(e._a||e._c).length},_s=function(e){cs.call(y,function(){var t;ps?fs.emit("rejectionHandled",e):(t=y.onrejectionhandled)&&t({promise:e,reason:e._v})})},ks=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),bs(t,!0))},Ts=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw ds("Promise can't be resolved itself");(t=vs(e))?us(function(){var i={_w:n,_d:!1};try{t.call(e,se(Ts,i,1),se(ks,i,1))}catch(e){ks.call(i,e)}}):(n._v=e,n._s=1,bs(n,!1))}catch(e){ks.call({_w:n,_d:!1},e)}}};ys||(hs=function(e){Bt(this,hs,"Promise","_h"),ne(e),Ko.call(this);try{e(se(Ts,this,1),se(ks,this,1))}catch(e){ks.call(this,e)}},(Ko=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=Vt(hs.prototype,{then:function(e,t){var n=ms(nn(this,hs));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=ps?fs.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&bs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Jo=function(){var e=new Ko;this.promise=e,this.resolve=se(Ts,e,1),this.reject=se(ks,e,1)},is.f=ms=function(e){return e===hs||e===$o?new Jo(e):Qo(e)}),en(en.G+en.W+en.F*!ys,{Promise:hs}),Wt(hs,"Promise"),rn("Promise"),$o=$.Promise,en(en.S+en.F*!ys,"Promise",{reject:function(e){var t=ms(this);return(0,t.reject)(e),t.promise}}),en(en.S+en.F*(Rt||!ys),"Promise",{resolve:function(e){return ls(Rt&&this===$o?hs:this,e)}}),en(en.S+en.F*!(ys&&Ui(function(e){hs.all(e).catch(gs)})),"Promise",{all:function(e){var t=this,n=ms(t),i=n.resolve,r=n.reject,o=as(function(){var n=[],o=0,s=1;cr(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=ms(t),i=n.reject,r=as(function(){cr(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Ss=Lt,xs={f:Ss},As=Object.freeze({default:xs,__moduleExports:xs,f:Ss}),Os=As&&xs||As,Cs=z.f,js=function(e){var t=$.Symbol||($.Symbol=Rt?{}:y.Symbol||{});"_"==e.charAt(0)||e in t||Cs(t,e,{value:Os.f(e)})},Ps=Object.freeze({default:js,__moduleExports:js}),Ms=function(e){var t=Tn(e),n=qr.f;if(n)for(var i,r=n(e),o=Ni.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t},Ls=Object.freeze({default:Ms,__moduleExports:Ms}),Ns=Ut.f,Is={}.toString,Fs="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],zs=function(e){return Fs&&"[object Window]"==Is.call(e)?function(e){try{return Ns(e)}catch(e){return Fs.slice()}}(e):Ns(tt(e))},Rs={f:zs},qs=Object.freeze({default:Rs,__moduleExports:Rs,f:zs}),Vs=Ps&&js||Ps,Bs=Ls&&Ms||Ls,Ds=qs&&Rs||qs,Us=ur.KEY,Hs=Wi.f,Ws=z.f,Ys=Ds.f,Gs=y.Symbol,Ks=y.JSON,Qs=Ks&&Ks.stringify,Js=Lt("_hidden"),$s=Lt("toPrimitive"),Xs={}.propertyIsEnumerable,Zs=lt("symbol-registry"),ea=lt("symbols"),ta=lt("op-symbols"),na=Object.prototype,ia="function"==typeof Gs,ra=y.QObject,oa=!ra||!ra.prototype||!ra.prototype.findChild,sa=_&&p(function(){return 7!=ci(Ws({},"a",{get:function(){return Ws(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Hs(na,t);i&&delete na[t],Ws(e,t,n),i&&e!==na&&Ws(na,t,i)}:Ws,aa=function(e){var t=ea[e]=ci(Gs.prototype);return t._k=e,t},la=ia&&"symbol"==typeof Gs.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Gs},ca=function(e,t,n){return e===na&&ca(ta,t,n),O(e),t=j(t,!0),O(n),Q(ea,t)?(n.enumerable?(Q(e,Js)&&e[Js][t]&&(e[Js][t]=!1),n=ci(n,{enumerable:R(0,!1)})):(Q(e,Js)||Ws(e,Js,R(1,{})),e[Js][t]=!0),sa(e,t,n)):Ws(e,t,n)},ua=function(e,t){O(e);for(var n,i=Bs(t=tt(t)),r=0,o=i.length;o>r;)ca(e,n=i[r++],t[n]);return e},da=function(e){var t=Xs.call(this,e=j(e,!0));return!(this===na&&Q(ea,e)&&!Q(ta,e))&&(!(t||!Q(this,e)||!Q(ea,e)||Q(this,Js)&&this[Js][e])||t)},fa=function(e,t){if(e=tt(e),t=j(t,!0),e!==na||!Q(ea,t)||Q(ta,t)){var n=Hs(e,t);return!n||!Q(ea,t)||Q(e,Js)&&e[Js][t]||(n.enumerable=!0),n}},ha=function(e){for(var t,n=Ys(tt(e)),i=[],r=0;n.length>r;)Q(ea,t=n[r++])||t==Js||t==Us||i.push(t);return i},pa=function(e){for(var t,n=e===na,i=Ys(n?ta:tt(e)),r=[],o=0;i.length>o;)!Q(ea,t=i[o++])||n&&!Q(na,t)||r.push(ea[t]);return r};ia||(oe((Gs=function(){if(this instanceof Gs)throw TypeError("Symbol is not a constructor!");var e=J(arguments.length>0?arguments[0]:void 0),t=function(n){this===na&&t.call(ta,n),Q(this,Js)&&Q(this[Js],e)&&(this[Js][e]=!1),sa(this,e,R(1,n))};return _&&oa&&sa(na,e,{configurable:!0,set:t}),aa(e)}).prototype,"toString",function(){return this._k}),Wi.f=fa,z.f=ca,Ut.f=Ds.f=ha,Ni.f=da,qr.f=pa,_&&!Rt&&oe(na,"propertyIsEnumerable",da,!0),Os.f=function(e){return aa(Lt(e))}),en(en.G+en.W+en.F*!ia,{Symbol:Gs});for(var ga="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ma=0;ga.length>ma;)Lt(ga[ma++]);for(var ya=Tn(Lt.store),va=0;ya.length>va;)Vs(ya[va++]);en(en.S+en.F*!ia,"Symbol",{for:function(e){return Q(Zs,e+="")?Zs[e]:Zs[e]=Gs(e)},keyFor:function(e){if(!la(e))throw TypeError(e+" is not a symbol!");for(var t in Zs)if(Zs[t]===e)return t},useSetter:function(){oa=!0},useSimple:function(){oa=!1}}),en(en.S+en.F*!ia,"Object",{create:function(e,t){return void 0===t?ci(e):ua(ci(e),t)},defineProperty:ca,defineProperties:ua,getOwnPropertyDescriptor:fa,getOwnPropertyNames:ha,getOwnPropertySymbols:pa}),Ks&&en(en.S+en.F*(!ia||p(function(){var e=Gs();return"[null]"!=Qs([e])||"{}"!=Qs({a:e})||"{}"!=Qs(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],r=1;arguments.length>r;)i.push(arguments[r++]);if(n=t=i[1],(c(t)||void 0!==e)&&!la(e))return Gn(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!la(t))return t}),i[1]=t,Qs.apply(Ks,i)}}),Gs.prototype[$s]||K(Gs.prototype,$s,Gs.prototype.valueOf),Wt(Gs,"Symbol"),Wt(Math,"Math",!0),Wt(y.JSON,"JSON",!0);var ba=function(e,t){var n=($.Object||{})[e]||Object[e],i={};i[e]=t(n),en(en.S+en.F*p(function(){n(1)}),"Object",i)},Ea=Object.freeze({default:ba,__moduleExports:ba}),wa=Ea&&ba||Ea,_a=ur.onFreeze;wa("freeze",function(e){return function(t){return e&&c(t)?e(_a(t)):t}});var ka=ur.onFreeze;wa("seal",function(e){return function(t){return e&&c(t)?e(ka(t)):t}});var Ta=ur.onFreeze;wa("preventExtensions",function(e){return function(t){return e&&c(t)?e(Ta(t)):t}}),wa("isFrozen",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isSealed",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isExtensible",function(e){return function(t){return!!c(t)&&(!e||e(t))}});var Sa=Wi.f;wa("getOwnPropertyDescriptor",function(){return function(e,t){return Sa(tt(e),t)}}),wa("getPrototypeOf",function(){return function(e){return pi(Ot(e))}}),wa("keys",function(){return function(e){return Tn(Ot(e))}}),wa("getOwnPropertyNames",function(){return Ds.f}),en(en.S+en.F,"Object",{assign:to});var xa=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},Aa=Object.freeze({default:xa,__moduleExports:xa}),Oa=Aa&&xa||Aa;en(en.S,"Object",{is:Oa});var Ca=z.f,ja=Function.prototype,Pa=/^\s*function ([^ (]*)/;"name"in ja||_&&Ca(ja,"name",{configurable:!0,get:function(){try{return(""+this).match(Pa)[1]}catch(e){return""}}}),en(en.S,"String",{raw:function(e){for(var t=tt(e.raw),n=Fe(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Ma=String.fromCharCode,La=String.fromCodePoint;en(en.S+en.F*(!!La&&1!=La.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],nt(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Ma(t):Ma(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Na=function(e){return function(t,n){var i,r,o=String(Ke(t)),s=Me(n),a=o.length;return s<0||s>=a?e?"":void 0:(i=o.charCodeAt(s))<55296||i>56319||s+1===a||(r=o.charCodeAt(s+1))<56320||r>57343?e?o.charAt(s):i:e?o.slice(s,s+2):r-56320+(i-55296<<10)+65536}},Ia=Object.freeze({default:Na,__moduleExports:Na}),Fa=(Ia&&Na||Ia)(!1);en(en.P,"String",{codePointAt:function(e){return Fa(this,e)}});var za=function(e){var t=String(Ke(this)),n="",i=Me(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n},Ra=Object.freeze({default:za,__moduleExports:za}),qa=Ra&&za||Ra;en(en.P,"String",{repeat:qa});var Va=Lt("match"),Ba=function(e){var t;return c(e)&&(void 0!==(t=e[Va])?!!t:"RegExp"==De(e))},Da=Object.freeze({default:Ba,__moduleExports:Ba}),Ua=Da&&Ba||Da,Ha=function(e,t,n){if(Ua(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(Ke(e))},Wa=Object.freeze({default:Ha,__moduleExports:Ha}),Ya=Lt("match"),Ga=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Ya]=!1,!"/./"[e](t)}catch(e){}}return!0},Ka=Object.freeze({default:Ga,__moduleExports:Ga}),Qa=Wa&&Ha||Wa,Ja=Ka&&Ga||Ka,$a="".startsWith;en(en.P+en.F*Ja("startsWith"),"String",{startsWith:function(e){var t=Qa(this,e,"startsWith"),n=Fe(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return $a?$a.call(t,i,n):t.slice(n,n+i.length)===i}});var Xa="".endsWith;en(en.P+en.F*Ja("endsWith"),"String",{endsWith:function(e){var t=Qa(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=Fe(t.length),r=void 0===n?i:Math.min(Fe(n),i),o=String(e);return Xa?Xa.call(t,o,r):t.slice(r-o.length,r)===o}});en(en.P+en.F*Ja("includes"),"String",{includes:function(e){return!!~Qa(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});var Za=function(){var e=O(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},el=Object.freeze({default:Za,__moduleExports:Za}),tl=el&&Za||el;_&&"g"!=/./g.flags&&z.f(RegExp.prototype,"flags",{configurable:!0,get:tl});var nl=function(e,t,n){var i=Lt(e),r=n(Ke,i,""[e]),o=r[0],s=r[1];p(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(oe(String.prototype,e,o),K(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))},il=Object.freeze({default:nl,__moduleExports:nl}),rl=il&&nl||il;rl("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),rl("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("split",2,function(e,t,n){var i=Ua,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(s||(a=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||f.push(""):f.push(n.slice(p)),f.length>g?f.slice(0,g):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var ol=function(e,t,n){t in e?z.f(e,t,R(0,n)):e[t]=n},sl=Object.freeze({default:ol,__moduleExports:ol}),al=sl&&ol||sl;en(en.S+en.F*!Ui(function(e){}),"Array",{from:function(e){var t,n,i,r,o=Ot(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=Vi(o);if(c&&(l=se(l,a>2?arguments[2]:void 0,2)),void 0==d||s==Array&&qi(d))for(n=new s(t=Fe(o.length));t>u;u++)al(n,u,c?l(o[u],u):o[u]);else for(r=d.call(o),n=new s;!(i=r.next()).done;u++)al(n,u,c?$i(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),en(en.S+en.F*p(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)al(n,e,arguments[e++]);return n.length=t,n}}),en(en.P,"Array",{copyWithin:Hi}),Ei("copyWithin");var ll=Bi(5),cl=!0;"find"in[]&&Array(1).find(function(){cl=!1}),en(en.P+en.F*cl,"Array",{find:function(e){return ll(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("find");var ul=Bi(6),dl=!0;"findIndex"in[]&&Array(1).findIndex(function(){dl=!1}),en(en.P+en.F*dl,"Array",{findIndex:function(e){return ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("findIndex"),en(en.P,"Array",{fill:Ht}),Ei("fill");var fl=y.isFinite;en(en.S,"Number",{isFinite:function(e){return"number"==typeof e&&fl(e)}});var hl=Math.floor,pl=function(e){return!c(e)&&isFinite(e)&&hl(e)===e},gl=Object.freeze({default:pl,__moduleExports:pl}),ml=gl&&pl||gl;en(en.S,"Number",{isInteger:ml});var yl=Math.abs;en(en.S,"Number",{isSafeInteger:function(e){return ml(e)&&yl(e)<=9007199254740991}}),en(en.S,"Number",{isNaN:function(e){return e!=e}}),en(en.S,"Number",{EPSILON:Math.pow(2,-52)}),en(en.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),en(en.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var vl=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},bl=Object.freeze({default:vl,__moduleExports:vl}),El=bl&&vl||bl,wl=Math.sqrt,_l=Math.acosh;en(en.S+en.F*!(_l&&710==Math.floor(_l(Number.MAX_VALUE))&&_l(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:El(e-1+wl(e-1)*wl(e+1))}});var kl=Math.asinh;en(en.S+en.F*!(kl&&1/kl(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var Tl=Math.atanh;en(en.S+en.F*!(Tl&&1/Tl(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var Sl=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1},xl=Object.freeze({default:Sl,__moduleExports:Sl}),Al=xl&&Sl||xl;en(en.S,"Math",{cbrt:function(e){return Al(e=+e)*Math.pow(Math.abs(e),1/3)}}),en(en.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var Ol=Math.exp;en(en.S,"Math",{cosh:function(e){return(Ol(e=+e)+Ol(-e))/2}});var Cl=Math.expm1,jl=!Cl||Cl(10)>22025.465794806718||Cl(10)<22025.465794806718||-2e-17!=Cl(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:Cl,Pl=Object.freeze({default:jl,__moduleExports:jl}),Ml=Pl&&jl||Pl;en(en.S+en.F*(Ml!=Math.expm1),"Math",{expm1:Ml});var Ll=Math.pow,Nl=Ll(2,-52),Il=Ll(2,-23),Fl=Ll(2,127)*(2-Il),zl=Ll(2,-126),Rl=Math.fround||function(e){var t,n,i=Math.abs(e),r=Al(e);return i<zl?r*(i/zl/Il+1/Nl-1/Nl)*zl*Il:(n=(t=(1+Il/Nl)*i)-(t-i))>Fl||n!=n?r*(1/0):r*n},ql=Object.freeze({default:Rl,__moduleExports:Rl}),Vl=ql&&Rl||ql;en(en.S,"Math",{fround:Vl});var Bl=Math.abs;en(en.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=Bl(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var Dl=Math.imul;en(en.S+en.F*p(function(){return-5!=Dl(4294967295,5)||2!=Dl.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),en(en.S,"Math",{log1p:El}),en(en.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),en(en.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),en(en.S,"Math",{sign:Al});var Ul=Math.exp;en(en.S+en.F*p(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(Ml(e)-Ml(-e))/2:(Ul(e-1)-Ul(-e-1))*(Math.E/2)}});var Hl=Math.exp;en(en.S,"Math",{tanh:function(e){var t=Ml(e=+e),n=Ml(-e);return t==1/0?1:n==1/0?-1:(t-n)/(Hl(e)+Hl(-e))}}),en(en.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var Wl=ft(!0);en(en.P,"Array",{includes:function(e){return Wl(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("includes");var Yl=Ni.f,Gl=function(e){return function(t){for(var n,i=tt(t),r=Tn(i),o=r.length,s=0,a=[];o>s;)Yl.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Kl=Object.freeze({default:Gl,__moduleExports:Gl}),Ql=Kl&&Gl||Kl,Jl=Ql(!1);en(en.S,"Object",{values:function(e){return Jl(e)}});var $l=Ql(!0);en(en.S,"Object",{entries:function(e){return $l(e)}}),en(en.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=tt(e),r=Wi.f,o=_o(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&al(s,t,n);return s}});var Xl=function(e,t,n,i){var r=String(Ke(e)),o=r.length,s=void 0===n?" ":String(n),a=Fe(t);if(a<=o||""==s)return r;var l=a-o,c=qa.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Zl=Object.freeze({default:Xl,__moduleExports:Xl}),ec=y.navigator,tc=ec&&ec.userAgent||"",nc=Object.freeze({default:tc,__moduleExports:tc}),ic=Zl&&Xl||Zl,rc=nc&&tc||nc;en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padStart:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padEnd:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var oc=[].slice,sc=/MSIE .\./.test(rc),ac=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&oc.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};en(en.G+en.B+en.F*sc,{setTimeout:ac(y.setTimeout),setInterval:ac(y.setInterval)}),en(en.G+en.B,{setImmediate:Vo.set,clearImmediate:Vo.clear});for(var lc=Lt("iterator"),cc=Lt("toStringTag"),uc=yn.Array,dc={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},fc=Tn(dc),hc=0;hc<fc.length;hc++){var pc,gc=fc[hc],mc=dc[gc],yc=y[gc],vc=yc&&yc.prototype;if(vc&&(vc[lc]||K(vc,lc,uc),vc[cc]||K(vc,cc,gc),yn[gc]=uc,mc))for(pc in Di)vc[pc]||oe(vc,pc,Di[pc],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},g={};g[s]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(j([])));y&&y!==i&&r.call(y,s)&&(g=y);var v=k.prototype=w.prototype=Object.create(g);_.prototype=v.constructor=k,k.constructor=_,k[l]=_.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===_||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(S.prototype),S.prototype[a]=function(){return this},c.AsyncIterator=S,c.async=function(e,t,n,i){var r=new S(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=j,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;O(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:j(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof w?t:w,o=Object.create(r.prototype),s=new C(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return P()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=x(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=E(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function E(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function w(){}function _(){}function k(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function S(t){function n(e,i,o,s){var a=E(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function x(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,x(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=E(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function j(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:P}}function P(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var bc=new window.CustomEvent("test");if(bc.preventDefault(),!0!==bc.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ec=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ec.prototype=window.Event.prototype,window.CustomEvent=Ec}var wc,_c={html5:"html5",youtube:"youtube",vimeo:"vimeo"},kc={audio:"audio",video:"video"},Tc={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.2.0/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},Sc=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var o,a,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,f=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(a=l.createElement("link")).rel="stylesheet",a.href=f):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(a=l.createElement("img")).src=f:((a=l.createElement("script")).src=t,a.async=void 0===c||c),a.onload=a.onerror=a.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in a)try{a.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return s(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==d(t,a)&&l.head.appendChild(a)}function a(e,n,i){var a,l;if(n&&n.trim&&(a=n),l=(a?i:n)||{},a){if(a in t)throw"LoadJS";t[a]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,a=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<a;r++)s(e[r],i,n)}(e,function(e){o(l,e),r(a,e)},l)}return a.ready=function(e,t){return function(e,t){var r,o,s,a=[],l=(e=e.push?e:[e]).length,c=l;for(r=function(e,n){n.length&&a.push(e),--c||t(a)};l--;)o=e[l],(s=n[o])?r(o,s):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),a},a.done=function(e){r(e,[])},a.reset=function(){t={},n={},i={}},a.isDefined=function(e){return e in t},a},e.exports=n()}),xc=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Ac=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Oc=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Cc=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),jc={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e){return new Promise(function(t,n){Sc(e,{success:t,error:n})})},loadSprite:function(e,t){if(jc.is.string(e)){var n=jc.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=document.createElement("div");if(jc.toggleHidden(r,!0),n&&r.setAttribute("id",t),Pc.storage){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var s=JSON.parse(o);return void a.call(r,s.content)}}jc.fetch(e).then(function(e){jc.is.empty(e)||(Pc.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a.call(r,e))}).catch(function(){})}}function a(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return jc.is.object(t)&&jc.setAttributes(i,t),jc.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(jc.createElement(e,n,i))},removeElement:function(e){jc.is.element(e)&&jc.is.element(e.parentNode)&&(jc.is.nodeList(e)||jc.is.array(e)?Array.from(e).forEach(jc.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return jc.is.element(t)&&jc.is.element(t.parentNode)&&jc.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){jc.is.element(e)&&!jc.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Cc(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!jc.is.string(e)||jc.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":jc.is.object(i)&&jc.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(jc.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return jc.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){jc.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=jc.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:jc.getElements.call(this,this.config.selectors.buttons.play),pause:jc.getElement.call(this,this.config.selectors.buttons.pause),restart:jc.getElement.call(this,this.config.selectors.buttons.restart),rewind:jc.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:jc.getElement.call(this,this.config.selectors.buttons.fastForward),mute:jc.getElement.call(this,this.config.selectors.buttons.mute),pip:jc.getElement.call(this,this.config.selectors.buttons.pip),airplay:jc.getElement.call(this,this.config.selectors.buttons.airplay),settings:jc.getElement.call(this,this.config.selectors.buttons.settings),captions:jc.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:jc.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=jc.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:jc.getElement.call(this,this.config.selectors.inputs.seek),volume:jc.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:jc.getElement.call(this,this.config.selectors.display.buffer),duration:jc.getElement.call(this,this.config.selectors.display.duration),currentTime:jc.getElement.call(this,this.config.selectors.display.currentTime)},jc.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(jc.is.element(e)){var n=jc.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=jc.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?jc.on(this.elements.container,"keydown",o,!1):jc.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!jc.is.empty(e)&&!jc.is.empty(t)&&jc.is.function(n))if(jc.is.nodeList(e)||jc.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&jc.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=o;Pc.passiveListeners&&(a={passive:r,capture:o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];jc.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];jc.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(jc.is.element(e)&&!jc.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:jc.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(jc.is.array(e)||jc.is.nodeList(e))Array.from(e).forEach(function(e){return jc.toggleState(e,t)});else if(jc.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=jc.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!jc.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=jc.replaceAll(e,"-"," "),e=jc.replaceAll(e,"_"," "),e=jc.toTitleCase(e),jc.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=jc.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return jc.is.object(r)?(Object.keys(r).forEach(function(t){jc.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Oc({},t,{})),jc.extend(e[t],r[t])):Object.assign(e,Oc({},t,r[t]))}),jc.extend.apply(jc,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return jc.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},closest:function(e,t){return jc.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?_c.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?_c.vimeo:null},parseYouTubeId:function(e){if(jc.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(jc.is.empty(e))return null;if(jc.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Cc(n,2),r=i[0],o=i[1];return Object.assign(e,Oc({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return jc.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!jc.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){jc.toggleHidden(e,!0),e.offsetHeight,jc.toggleHidden(e,!1)},0)}},Pc={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=jc.getBrowser(),s=o.isIPhone&&n&&Pc.playsinline;switch(t+":"+e){case"html5:video":r=(i=Pc.video)&&Pc.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=Pc.audio)&&Pc.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=Pc.rangeInput&&(!o.isIPhone||s);break;default:r=(i=Pc.audio&&Pc.video)&&Pc.rangeInput}return{api:i,ui:r}},pip:!jc.getBrowser().isIPhone&&jc.is.function(jc.createElement("video").webkitSetPresentationMode),airplay:jc.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!jc.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(wc=document.createElement("input"),wc.type="range","range"===wc.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==jc.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Mc=function(){},Lc=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];xc(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Ac(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Mc}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Mc}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Mc}}]),e}(),Nc=jc.getBrowser();function Ic(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;jc.is.element(e)&&jc.toggleState(e,this.active),jc.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Nc.isIos||jc.trapFocus.call(this.player,this.target,this.active)}}function Fc(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",jc.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),Ic.call(this)}var zc=function(){function e(t){var n=this;xc(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},jc.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){Ic.call(n)}),jc.on(this.player.elements.container,"dblclick",function(e){n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Ac(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),jc.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?jc.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():Fc.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(Nc.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!jc.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else Fc.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:jc.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(jc.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!jc.is.function(document[t+"ExitFullscreen"])&&!jc.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),Rc=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(jc.is.empty(e)||jc.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Cc(e,2),i=t[0],r=t[1];n=jc.replaceAll(n,i,r)}),n},qc={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(jc.is.empty(e)||(this.captions.language=e),jc.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!jc.is.boolean(this.captions.active)){var t=this.storage.get("captions");jc.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!Pc.textTracks)jc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this);else{jc.is.element(this.elements.captions)||(this.elements.captions=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.captions)),jc.insertAfter(this.elements.captions,this.elements.wrapper)),jc.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!jc.is.empty(qc.getTracks.call(this)));var n=qc.getTracks.call(this);if(!jc.is.empty(n)){if(jc.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=jc.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&jc.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){jc.removeElement(e)})})}qc.setLanguage.call(this),qc.show.call(this),jc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){qc.getTracks.call(this).forEach(function(t){jc.on(t,"cuechange",function(t){return qc.setCue.call(e,t)}),t.mode="hidden"});var t=qc.getCurrentTrack.call(this);jc.is.track(t)&&Array.from(t.activeCues||[]).length&&qc.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return jc.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=qc.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=jc.getElement.call(this,"track[default]")),n)||(n=Cc(t,1)[0]);return n},getLabel:function(e){var t=e;return!jc.is.track(t)&&Pc.textTracks&&this.captions.active&&(t=qc.getCurrentTrack.call(this)),jc.is.track(t)?jc.is.empty(t.label)?jc.is.empty(t.language)?Rc("enabled",this.config):e.language.toUpperCase():t.label:Rc("disabled",this.config)},setCue:function(e){var t=jc.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===qc.getCurrentTrack.call(this)&&(jc.is.cue(i)?qc.setText.call(this,i.getCueAsHTML()):qc.setText.call(this,null),jc.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(jc.is.element(this.elements.captions)){var t=jc.createElement("span");jc.emptyElement(this.elements.captions);var n=jc.is.nullOrUndefined(e)?"":e;jc.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");jc.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(jc.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),jc.toggleState(this.elements.buttons.captions,!0))}},Vc={addStyleHook:function(){jc.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),jc.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void Vc.toggleNativeControls.call(this,!0);jc.is.element(this.elements.controls)||(Uc.inject.call(this),this.listeners.controls()),jc.is.element(this.elements.controls)&&(Vc.toggleNativeControls.call(this),qc.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,Vc.updateVolume.call(this),Vc.timeUpdate.call(this),Vc.checkPlaying.call(this),this.ready=!0,setTimeout(function(){jc.dispatchEvent.call(e,e.media,"ready")},0),Vc.setTitle.call(this))},setTitle:function(){var e=Rc("play",this.config);if(jc.is.string(this.config.title)&&!jc.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),jc.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=jc.getElement.call(this,"iframe");if(!jc.is.element(t))return;jc.is.empty(this.config.title)||this.config.title;t.setAttribute("title",Rc("frameTitle",this.config))}},checkPlaying:function(){jc.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),jc.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),jc.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){jc.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(jc.toggleClass(this.elements.container,this.config.classNames.loading,!1),jc.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){jc.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(jc.is.element(this.elements.inputs.volume)&&Vc.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),jc.is.element(this.elements.buttons.mute)&&jc.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;jc.is.element(e)&&(e.value=t,Uc.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=jc.is.number(t)?t:0,i=jc.is.element(e)?e:this.elements.display.buffer;if(jc.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];jc.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){if(this.supported.ui&&jc.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=jc.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&Vc.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":Vc.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(jc.is.element(e)&&jc.is.number(t)){var i=jc.getHours(this.duration)>0;e.textContent=jc.formatTime(t,i,n)}},timeUpdate:function(e){var t=!jc.is.element(this.elements.display.duration)&&this.config.invertTime;Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Vc.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=jc.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Vc.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Uc.updateSeekTooltip.call(this)}}},Bc={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=Bc.getSources.call(this);if(jc.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!jc.is.empty(e.getAttribute("size"))});return jc.is.empty(t)?null:jc.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Bc.getSources.call(e);if(jc.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return jc.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=Bc.getSources.call(e);if(!jc.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!jc.is.empty(i)){var r=i.filter(function(t){return Pc.mime.call(e,t.getAttribute("type"))});if(!jc.is.empty(r)){jc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,s=e.playing;e.media.src=r[0].getAttribute("src"),e.media.load(),s&&e.play(),e.currentTime=o,jc.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(jc.removeElement(Bc.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},Dc=jc.getBrowser(),Uc={updateRangeFill:function(e){var t=jc.is.event(e)?e.target:e;jc.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),Dc.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||Dc.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=Uc.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");jc.setAttributes(r,jc.extend(t,{role:"presentation"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=Rc(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,jc.createElement("span",i,n)},createBadge:function(e){if(jc.is.empty(e))return null;var t=jc.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(jc.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=jc.createElement("button"),i=Object.assign({},t),r=jc.toCamelCase(e),o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=e}return o?(n.appendChild(Uc.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(Uc.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(Uc.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(Uc.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=Rc(s,this.config)):(n.appendChild(Uc.createIcon.call(this,a)),n.appendChild(Uc.createLabel.call(this,s))),jc.extend(i,jc.getAttributesFromSelector(this.config.selectors.buttons[r],i)),jc.setAttributes(n,i),"play"===r?(jc.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=jc.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},Rc(e,this.config)),i=jc.createElement("input",jc.extend(jc.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,Uc.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=jc.createElement("progress",jc.extend(jc.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(jc.createElement("span",null,"0"));var i="";switch(e){case"played":i=Rc("played",this.config);break;case"buffer":i=Rc("buffered",this.config)}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=jc.createElement("div",{class:"plyr__time"});return t.appendChild(jc.createElement("span",{class:this.config.classNames.hidden},Rc(e,this.config))),t.appendChild(jc.createElement("span",jc.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=jc.createElement("li"),a=jc.createElement("label",{class:this.config.classNames.control}),l=jc.createElement("input",jc.extend(jc.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=jc.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),jc.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&jc.is.element(this.elements.inputs.seek)&&jc.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.inputs.seek.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){jc.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(jc.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!jc.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),Vc.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",jc.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];jc.toggleHidden(n,!t),jc.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this;if(jc.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");jc.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!jc.is.empty(this.options.quality)&&this.options.quality.length>1;if(Uc.toggleTab.call(this,"quality",i),Uc.checkMenu.call(this),i){jc.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=Uc.getLabel.call(t,"quality",e);Uc.createMenuItem.call(t,e,n,"quality",i,function(e){var n="";switch(e){case 2160:n="4K";break;case 1440:case 1080:case 720:n="HD";break;case 576:n="SD"}return n.length?Uc.createBadge.call(t,n):null}(e))}),Uc.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Rc("normal",this.config):t+"×";case"quality":return jc.is.number(t)?t+"p":jc.toTitleCase(t);case"captions":return qc.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=jc.is.empty(n)?this[e]:n,jc.is.empty(r)&&(r=this.config[e].default),!jc.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(jc.is.element(o)||(o=i&&i.querySelector("ul")),jc.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=Uc.getLabel.call(this,e,r);var s=o&&o.querySelector('input[value="'+r+'"]');jc.is.element(s)&&(s.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=qc.getTracks.call(this).length;if(Uc.toggleTab.call(this,"captions",n),jc.emptyElement(t),Uc.checkMenu.call(this),n){var i=qc.getTracks.call(this).map(function(t){return{language:jc.is.empty(t.language)?"enabled":t.language,label:qc.getLabel.call(e,t)}});i.unshift({language:"",label:Rc("disabled",this.config)}),i.forEach(function(n){Uc.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?Uc.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=i.map(function(e){return e.language}),Uc.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&jc.is.element(this.elements.settings.panes.speed)){jc.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!jc.is.empty(this.options.speed)&&this.options.speed.length>1;if(Uc.toggleTab.call(this,"speed",n),Uc.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");jc.toggleHidden(this.elements.settings.tabs.speed,!1),jc.toggleHidden(this.elements.settings.panes.speed,!1),jc.emptyElement(i),this.options.speed.forEach(function(e){var n=Uc.getLabel.call(t,"speed",e);Uc.createMenuItem.call(t,e,i,"speed",n)}),Uc.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!jc.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});jc.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(jc.is.element(t)&&jc.is.element(n)){var i=jc.is.boolean(e)?e:jc.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(jc.is.event(e)){var r=jc.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}jc.is.element(n)&&n.setAttribute("aria-expanded",i),jc.is.element(t)&&(t.setAttribute("aria-hidden",!i),jc.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return jc.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(jc.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Pc.transitions&&!Pc.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=Uc.getTabSize.call(this,r);jc.on(s,jc.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",jc.off(s,jc.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(jc.is.empty(this.config.controls))return null;var n=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Uc.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Uc.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Uc.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Uc.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.progress)),r=Uc.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(Uc.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=jc.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Uc.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Uc.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(Uc.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=jc.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=Uc.createRange.call(this,"volume",jc.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(Uc.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!jc.is.empty(this.config.settings)){var c=jc.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(Uc.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=jc.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=jc.createElement("div"),f=jc.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=jc.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=jc.createElement("li",{role:"tab",hidden:""}),r=jc.createElement("button",jc.extend(jc.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),Rc(n,t.config)),o=jc.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=jc.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=jc.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},Rc(n,t.config));i.appendChild(r);var o=jc.createElement("ul");i.appendChild(o),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Pc.pip&&n.appendChild(Uc.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Pc.airplay&&n.appendChild(Uc.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(Uc.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Uc.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&Uc.setQualityMenu.call(this,Bc.getQualityOptions.call(this)),Uc.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Uc.getIconUrl.call(this);t.absolute&&jc.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=jc.is.string(this.config.controls)||jc.is.element(this.config.controls)?this.config.controls:jc.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):Uc.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:qc.getLabel.call(this)});var i=void 0;if(jc.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),jc.is.element(i)||(i=this.elements.container),jc.is.element(n)?i.appendChild(n):n&&i.insertAdjacentHTML("beforeend",n),jc.is.element(this.elements.controls)||jc.findElements.call(this),window.navigator.userAgent.includes("Edge")&&jc.repaint(i),this.config.tooltips.controls){var r=jc.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){jc.toggleClass(t,e.config.classNames.hidden,!1),jc.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},Hc=jc.getBrowser(),Wc=function(){function e(t){xc(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Ac(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&jc.is.number(n)){if(i){var o=jc.getFocusElement();if(jc.is.element(o)&&jc.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){Uc.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,jc.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),jc.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&jc.toggleListener(window,"keydown keyup",this.handleKey,e,!1),jc.toggleListener(document.body,"click",this.toggleMenu,e),jc.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&jc.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),jc.on(this.player.elements.container,"focusout",function(t){jc.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),jc.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){jc.toggleClass(jc.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&jc.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(jc.on(this.player.media,"timeupdate seeking",function(t){return Vc.timeUpdate.call(e.player,t)}),jc.on(this.player.media,"durationchange loadedmetadata",function(t){return Vc.durationUpdate.call(e.player,t)}),jc.on(this.player.media,"loadeddata",function(){jc.toggleHidden(e.player.elements.volume,!e.player.hasAudio),jc.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),jc.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),jc.on(this.player.media,"progress playing",function(t){return Vc.updateProgress.call(e.player,t)}),jc.on(this.player.media,"volumechange",function(t){return Vc.updateVolume.call(e.player,t)}),jc.on(this.player.media,"playing play pause ended emptied",function(t){return Vc.checkPlaying.call(e.player,t)}),jc.on(this.player.media,"waiting canplay seeked playing",function(t){return Vc.checkLoading.call(e.player,t)}),jc.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=jc.getElement.call(this.player,"."+this.player.config.classNames.video);if(!jc.is.element(t))return;jc.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&jc.on(this.player.media,"contextmenu",function(e){e.preventDefault()},!1),jc.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),jc.on(this.player.media,"ratechange",function(){Uc.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),jc.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),jc.on(this.player.media,"qualitychange",function(t){Uc.updateSetting.call(e.player,"quality",null,t.detail.quality)}),jc.on(this.player.media,"languagechange",function(){Uc.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),jc.on(this.player.media,"captionsenabled captionsdisabled",function(){Uc.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),jc.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),jc.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=Hc.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;jc.is.function(r)&&(o=r.call(e.player,t)),o&&jc.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=e.player.config.listeners[o],l=jc.is.function(a);jc.on(t,i,function(e){return n(e,r,o)},s&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){Uc.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),jc.matches(t.target,e.player.config.selectors.inputs.language)?n(t,function(){e.player.language=t.target.value},"language"):jc.matches(t.target,e.player.config.selectors.inputs.quality)?n(t,function(){e.player.quality=t.target.value},"quality"):jc.matches(t.target,e.player.config.selectors.inputs.speed)?n(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):Uc.showTab.call(e.player,t)}),i(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!jc.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,Vc.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),Hc.isWebkit&&i(jc.getElements.call(this.player,'input[type="range"]'),"input",function(t){Uc.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return Uc.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),Yc=function(){function e(t){xc(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Ac(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if(jc.is.empty(n))return null;var i=JSON.parse(n);return jc.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&jc.is.object(t)){var n=this.get();jc.is.empty(n)&&(n={}),jc.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),Gc=function(){function e(t){var n=this;xc(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&jc.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Ac(e,[{key:"load",value:function(){var e=this;this.enabled&&(jc.is.object(window.google)&&jc.is.object(window.google.ima)?this.ready():jc.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=jc.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=jc.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=Rc("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),jc.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(jc.is.element(n)){var i=100/t.player.duration*e,r=jc.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();jc.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;jc.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];jc.is.array(o)&&o.forEach(function(e){jc.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return jc.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){jc.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+jc.buildUrlParams(e)}}]),e}();function Kc(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var Qc={setup:function(){var e=this;jc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Qc.setAspectRatio.call(this),jc.is.object(window.YT)&&jc.is.function(window.YT.Player)?Qc.ready.call(this):(jc.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Qc.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(jc.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(jc.is.empty(n))return this.config.title=n,void Vc.setTitle.call(this)}var i=this.config.keys.google;if(jc.is.string(i)&&!jc.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";jc.fetch(r).then(function(e){jc.is.object(e)&&(t.config.title=e.items[0].snippet.title,Vc.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(jc.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");jc.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=jc.parseYouTubeId(n),r=jc.generateId(e.provider),o=jc.createElement("div",{id:r});e.media=jc.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!jc.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,jc.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){jc.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),jc.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Qc.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){var i=e.media.paused;e.media.seeking=!0,jc.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t),i&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return Kc(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(Kc(i)),jc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),jc.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=jc.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),jc.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),jc.dispatchEvent.call(e,e.media,"timeupdate"),jc.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&jc.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),jc.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return Vc.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:jc.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),jc.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):jc.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&jc.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&jc.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,jc.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){jc.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),jc.dispatchEvent.call(e,e.media,"durationchange")),Uc.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),jc.is.empty(n)?n:jc.dedupe(n.map(function(e){return Kc(e)}))));break;case 2:e.media.paused=!0,jc.dispatchEvent.call(e,e.media,"pause")}jc.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},Jc={setup:function(){var e=this;jc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Jc.setAspectRatio.call(this),jc.is.object(window.Vimeo)?Jc.ready.call(this):jc.loadScript(this.config.urls.vimeo.api).then(function(){Jc.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=jc.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=jc.buildUrlParams(n),r=t.media.getAttribute("src");jc.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=jc.parseVimeoId(r),s=jc.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=jc.createElement("div");l.appendChild(s),t.media=jc.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,jc.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,jc.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&Uc.setSpeedMenu.call(t,[])})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,jc.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!jc.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,jc.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=jc.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=jc.getAspectRatio(t[0],t[1]);Jc.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,Vc.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,jc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,jc.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,qc.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=jc.stripHTML(e.cues[0].text)),qc.setText.call(t,n)}),t.embed.on("loaded",function(){jc.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&jc.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,jc.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,jc.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,jc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,jc.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&jc.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,jc.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,jc.dispatchEvent.call(t,t.media,"seeked"),jc.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,jc.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,jc.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return Vc.build.call(t)},0)}},$c=jc.getBrowser(),Xc={setup:function(){if(this.media)if(jc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),jc.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&jc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(jc.toggleClass(this.elements.container,this.config.classNames.pip.supported,Pc.pip&&this.isHTML5&&this.isVideo),jc.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Pc.airplay&&this.isHTML5),jc.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),jc.toggleClass(this.elements.container,this.config.classNames.isIos,$c.isIos),jc.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=jc.createElement("div",{class:this.config.classNames.video}),jc.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":Qc.setup.call(this);break;case"vimeo":Jc.setup.call(this)}else this.isHTML5&&(Vc.setTitle.call(this),Bc.extend.call(this));else this.debug.warn("No media element found!")}},Zc={insertElements:function(e,t){var n=this;jc.is.string(t)?jc.insertElement(e,this.media,{src:t}):jc.is.array(t)&&t.forEach(function(t){jc.insertElement(e,n.media,t)})},change:function(e){var t=this;jc.is.object(e)&&"sources"in e&&e.sources.length?(Bc.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],jc.removeElement(t.media),t.media=null,jc.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=jc.is.empty(e.sources[0].provider)?_c.html5:e.sources[0].provider,t.supported=Pc.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=jc.createElement("video");break;case"html5:audio":t.media=jc.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=jc.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),jc.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),Vc.addStyleHook.call(t),t.isHTML5&&Zc.insertElements.call(t,"source",e.sources),t.config.title=e.title,Xc.setup.call(t),t.isHTML5&&("tracks"in e&&Zc.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&Vc.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(xc(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Pc.touch,this.media=t,jc.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||jc.is.nodeList(this.media)||jc.is.array(this.media))&&(this.media=this.media[0]),this.config=jc.extend({},Tc,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new Lc(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Pc),!jc.is.nullOrUndefined(this.media)&&jc.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Pc.check().api){setTimeout(function(){var e=i.media.cloneNode(!0);e.getAttribute("autoplay")&&e.pause(),i.elements.original=e},0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),jc.is.element(o)){if(s=o.getAttribute("src"),this.provider=jc.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=jc.getUrlParams(s),!jc.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=l.includes(a.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(jc.is.empty(this.provider)||!Object.keys(_c).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=kc.video;break;case"video":case"audio":this.type=r,this.provider=_c.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Pc.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new Wc(this),this.storage=new Yc(this),this.media.plyr=this,jc.is.element(this.elements.container)||(this.elements.container=jc.createElement("div"),jc.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),Vc.addStyleHook.call(this),Xc.setup.call(this),this.config.debug&&jc.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Vc.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new zc(this),this.ads=new Gc(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Ac(e,[{key:"play",value:function(){return jc.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&jc.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(jc.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():jc.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(jc.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(jc.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(jc.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(jc.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=jc.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,jc.toggleState(this.elements.buttons.captions,this.captions.active),jc.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),jc.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Pc.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(jc.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(!jc.is.boolean(e))if(jc.is.event(e)){r="enterfullscreen"===e.type;i=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(n=2e3),this.touch||"focusin"!==e.type||(n=3e3,jc.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else i=jc.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),i||this.paused||this.loading){if(jc.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&jc.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){jc.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(jc.hasClass(t.elements.container,t.config.classNames.hideControls)||jc.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),jc.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(jc.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!jc.is.empty(t.config.settings)&&Uc.toggleMenu.call(t,!1))))},n))}}},{key:"on",value:function(e,t){jc.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){jc.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(jc.removeElement(t.elements.buttons.play),jc.removeElement(t.elements.captions),jc.removeElement(t.elements.controls),jc.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),jc.is.function(e)&&e()):(t.listeners.clear(),jc.replaceElement(t.elements.original,t.elements.container),jc.dispatchEvent.call(t,t.elements.original,"destroyed",!0),jc.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),Vc.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&jc.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return Pc.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===_c.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===_c.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===_c.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===kc.video)}},{key:"isAudio",get:function(){return Boolean(this.type===kc.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;jc.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return jc.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;jc.is.string(t)&&(t=Number(t)),jc.is.number(t)||(t=this.storage.get("volume")),jc.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!jc.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;jc.is.boolean(t)||(t=this.storage.get("muted")),jc.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;jc.is.number(e)&&(t=e),jc.is.number(t)||(t=this.storage.get("speed")),jc.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(jc.is.empty(e)||(t=Number(e)),jc.is.number(t)&&0!==t||(t=this.storage.get("quality")),jc.is.number(t)||(t=this.config.quality.selected),jc.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=jc.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=jc.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){Zc.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?jc.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=jc.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(jc.is.string(e))if(jc.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,qc.setText.call(this,null),qc.setLanguage.call(this),jc.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Pc.pip){var i=jc.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Pc.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Pc.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return jc.loadSprite(e,t)}}]),e}()}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=Object.freeze({default:n,__moduleExports:n}),r=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),o=r.version,s=Object.freeze({default:r,__moduleExports:r,version:o}),a=function(e){return"object"==typeof e?null!==e:"function"==typeof e},l=Object.freeze({default:a,__moduleExports:a}),c=l&&a||l,u=function(e){if(!c(e))throw TypeError(e+" is not an object!");return e},d=Object.freeze({default:u,__moduleExports:u}),f=function(e){try{return!!e()}catch(e){return!0}},h=Object.freeze({default:f,__moduleExports:f}),p=h&&f||h,g=!p(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),m=Object.freeze({default:g,__moduleExports:g}),y=i&&n||i,v=y.document,b=c(v)&&c(v.createElement),E=function(e){return b?v.createElement(e):{}},w=Object.freeze({default:E,__moduleExports:E}),_=m&&g||m,k=w&&E||w,T=!_&&!p(function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a}),S=Object.freeze({default:T,__moduleExports:T}),x=function(e,t){if(!c(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!c(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},A=Object.freeze({default:x,__moduleExports:x}),O=d&&u||d,C=S&&T||S,j=A&&x||A,P=Object.defineProperty,M=_?Object.defineProperty:function(e,t,n){if(O(e),t=j(t,!0),O(n),C)try{return P(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},L={f:M},N=Object.freeze({default:L,__moduleExports:L,f:M}),I=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},F=Object.freeze({default:I,__moduleExports:I}),z=N&&L||N,R=F&&I||F,q=_?function(e,t,n){return z.f(e,t,R(1,n))}:function(e,t,n){return e[t]=n,e},V=Object.freeze({default:q,__moduleExports:q}),B={}.hasOwnProperty,D=function(e,t){return B.call(e,t)},U=Object.freeze({default:D,__moduleExports:D}),H=0,W=Math.random(),Y=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+W).toString(36))},G=Object.freeze({default:Y,__moduleExports:Y}),K=V&&q||V,Q=U&&D||U,J=G&&Y||G,$=s&&r||s,X=t(function(e){var t=J("src"),n=Function.toString,i=(""+n).split("toString");$.inspectSource=function(e){return n.call(e)},(e.exports=function(e,n,r,o){var s="function"==typeof r;s&&(Q(r,"name")||K(r,"name",n)),e[n]!==r&&(s&&(Q(r,t)||K(r,t,e[n]?""+e[n]:i.join(String(n)))),e===y?e[n]=r:o?e[n]?e[n]=r:K(e,n,r):(delete e[n],K(e,n,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||n.call(this)})}),Z=Object.freeze({default:X,__moduleExports:X}),ee=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},te=Object.freeze({default:ee,__moduleExports:ee}),ne=te&&ee||te,ie=function(e,t,n){if(ne(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},re=Object.freeze({default:ie,__moduleExports:ie}),oe=Z&&X||Z,se=re&&ie||re,ae=function(e,t,n){var i,r,o,s,a=e&ae.F,l=e&ae.G,c=e&ae.S,u=e&ae.P,d=e&ae.B,f=l?y:c?y[t]||(y[t]={}):(y[t]||{}).prototype,h=l?$:$[t]||($[t]={}),p=h.prototype||(h.prototype={});for(i in l&&(n=t),n)o=((r=!a&&f&&void 0!==f[i])?f:n)[i],s=d&&r?se(o,y):u&&"function"==typeof o?se(Function.call,o):o,f&&oe(f,i,o,e&ae.U),h[i]!=o&&K(h,i,s),u&&p[i]!=o&&(p[i]=o)};y.core=$,ae.F=1,ae.G=2,ae.S=4,ae.P=8,ae.B=16,ae.W=32,ae.U=64,ae.R=128;for(var le,ce=ae,ue=Object.freeze({default:ce,__moduleExports:ce}),de=J("typed_array"),fe=J("view"),he=!(!y.ArrayBuffer||!y.DataView),pe=he,ge=0,me="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");ge<9;)(le=y[me[ge++]])?(K(le.prototype,de,!0),K(le.prototype,fe,!0)):pe=!1;var ye={ABV:he,CONSTR:pe,TYPED:de,VIEW:fe},ve=ye.ABV,be=ye.CONSTR,Ee=ye.TYPED,we=ye.VIEW,_e=Object.freeze({default:ye,__moduleExports:ye,ABV:ve,CONSTR:be,TYPED:Ee,VIEW:we}),ke=Object.freeze({default:!1,__moduleExports:!1}),Te=function(e,t,n){for(var i in t)oe(e,i,t[i],n);return e},Se=Object.freeze({default:Te,__moduleExports:Te}),xe=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},Ae=Object.freeze({default:xe,__moduleExports:xe}),Oe=Math.ceil,Ce=Math.floor,je=function(e){return isNaN(e=+e)?0:(e>0?Ce:Oe)(e)},Pe=Object.freeze({default:je,__moduleExports:je}),Me=Pe&&je||Pe,Le=Math.min,Ne=function(e){return e>0?Le(Me(e),9007199254740991):0},Ie=Object.freeze({default:Ne,__moduleExports:Ne}),Fe=Ie&&Ne||Ie,ze=function(e){if(void 0===e)return 0;var t=Me(e),n=Fe(t);if(t!==n)throw RangeError("Wrong length!");return n},Re=Object.freeze({default:ze,__moduleExports:ze}),qe={}.toString,Ve=function(e){return qe.call(e).slice(8,-1)},Be=Object.freeze({default:Ve,__moduleExports:Ve}),De=Be&&Ve||Be,Ue=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==De(e)?e.split(""):Object(e)},He=Object.freeze({default:Ue,__moduleExports:Ue}),We=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Ye=Object.freeze({default:We,__moduleExports:We}),Ge=He&&Ue||He,Ke=Ye&&We||Ye,Qe=function(e){return Ge(Ke(e))},Je=Object.freeze({default:Qe,__moduleExports:Qe}),$e=Math.max,Xe=Math.min,Ze=function(e,t){return(e=Me(e))<0?$e(e+t,0):Xe(e,t)},et=Object.freeze({default:Ze,__moduleExports:Ze}),tt=Je&&Qe||Je,nt=et&&Ze||et,it=function(e){return function(t,n,i){var r,o=tt(t),s=Fe(o.length),a=nt(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},rt=Object.freeze({default:it,__moduleExports:it}),ot=y["__core-js_shared__"]||(y["__core-js_shared__"]={}),st=function(e){return ot[e]||(ot[e]={})},at=Object.freeze({default:st,__moduleExports:st}),lt=at&&st||at,ct=lt("keys"),ut=function(e){return ct[e]||(ct[e]=J(e))},dt=Object.freeze({default:ut,__moduleExports:ut}),ft=rt&&it||rt,ht=dt&&ut||dt,pt=ft(!1),gt=ht("IE_PROTO"),mt=function(e,t){var n,i=tt(e),r=0,o=[];for(n in i)n!=gt&&Q(i,n)&&o.push(n);for(;t.length>r;)Q(i,n=t[r++])&&(~pt(o,n)||o.push(n));return o},yt=Object.freeze({default:mt,__moduleExports:mt}),vt="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),bt=Object.freeze({default:vt,__moduleExports:vt}),Et=yt&&mt||yt,wt=bt&&vt||bt,_t=wt.concat("length","prototype"),kt=Object.getOwnPropertyNames||function(e){return Et(e,_t)},Tt={f:kt},St=Object.freeze({default:Tt,__moduleExports:Tt,f:kt}),xt=function(e){return Object(Ke(e))},At=Object.freeze({default:xt,__moduleExports:xt}),Ot=At&&xt||At,Ct=function(e){for(var t=Ot(this),n=Fe(t.length),i=arguments.length,r=nt(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:nt(o,n);s>r;)t[r++]=e;return t},jt=Object.freeze({default:Ct,__moduleExports:Ct}),Pt=t(function(e){var t=lt("wks"),n=y.Symbol,i="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=i&&n[e]||(i?n:J)("Symbol."+e))}).store=t}),Mt=Object.freeze({default:Pt,__moduleExports:Pt}),Lt=Mt&&Pt||Mt,Nt=z.f,It=Lt("toStringTag"),Ft=function(e,t,n){e&&!Q(e=n?e:e.prototype,It)&&Nt(e,It,{configurable:!0,value:t})},zt=Object.freeze({default:Ft,__moduleExports:Ft}),Rt=ke,qt=_e&&ye||_e,Vt=Se&&Te||Se,Bt=Ae&&xe||Ae,Dt=Re&&ze||Re,Ut=St&&Tt||St,Ht=jt&&Ct||jt,Wt=zt&&Ft||zt,Yt=t(function(e,t){var n=Ut.f,i=z.f,r="prototype",o="Wrong index!",s=y.ArrayBuffer,a=y.DataView,l=y.Math,c=y.RangeError,u=y.Infinity,d=s,f=l.abs,h=l.pow,g=l.floor,m=l.log,v=l.LN2,b=_?"_b":"buffer",E=_?"_l":"byteLength",w=_?"_o":"byteOffset";function k(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,d=23===t?h(2,-24)-h(2,-77):0,p=0,y=e<0||0===e&&1/e<0?1:0;for((e=f(e))!=e||e===u?(r=e!=e?1:0,i=l):(i=g(m(e)/v),e*(o=h(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?d/o:d*h(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*h(2,t),i+=c):(r=e*h(2,c-1)*h(2,t),i=0));t>=8;s[p++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[p++]=255&i,i/=256,a-=8);return s[--p]|=128*y,s}function T(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],d=127&c;for(c>>=7;a>0;d=256*d+e[l],l--,a-=8);for(i=d&(1<<-a)-1,d>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===d)d=1-s;else{if(d===o)return i?NaN:c?-u:u;i+=h(2,t),d-=s}return(c?-1:1)*i*h(2,d-t)}function S(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function x(e){return[255&e]}function A(e){return[255&e,e>>8&255]}function O(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function C(e){return k(e,52,8)}function j(e){return k(e,23,4)}function P(e,t,n){i(e[r],t,{get:function(){return this[n]}})}function M(e,t,n,i){var r=Dt(+n);if(r+t>e[E])throw c(o);var s=e[b]._b,a=r+e[w],l=s.slice(a,a+t);return i?l:l.reverse()}function L(e,t,n,i,r,s){var a=Dt(+n);if(a+t>e[E])throw c(o);for(var l=e[b]._b,u=a+e[w],d=i(+r),f=0;f<t;f++)l[u+f]=d[s?f:t-f-1]}if(qt.ABV){if(!p(function(){s(1)})||!p(function(){new s(-1)})||p(function(){return new s,new s(1.5),new s(NaN),"ArrayBuffer"!=s.name})){for(var N,I=(s=function(e){return Bt(this,s),new d(Dt(e))})[r]=d[r],F=n(d),R=0;F.length>R;)(N=F[R++])in s||K(s,N,d[N]);Rt||(I.constructor=s)}var q=new a(new s(2)),V=a[r].setInt8;q.setInt8(0,2147483648),q.setInt8(1,2147483649),!q.getInt8(0)&&q.getInt8(1)||Vt(a[r],{setInt8:function(e,t){V.call(this,e,t<<24>>24)},setUint8:function(e,t){V.call(this,e,t<<24>>24)}},!0)}else s=function(e){Bt(this,s,"ArrayBuffer");var t=Dt(e);this._b=Ht.call(new Array(t),0),this[E]=t},a=function(e,t,n){Bt(this,a,"DataView"),Bt(e,s,"DataView");var i=e[E],r=Me(t);if(r<0||r>i)throw c("Wrong offset!");if(r+(n=void 0===n?i-r:Fe(n))>i)throw c("Wrong length!");this[b]=e,this[w]=r,this[E]=n},_&&(P(s,"byteLength","_l"),P(a,"buffer","_b"),P(a,"byteLength","_l"),P(a,"byteOffset","_o")),Vt(a[r],{getInt8:function(e){return M(this,1,e)[0]<<24>>24},getUint8:function(e){return M(this,1,e)[0]},getInt16:function(e){var t=M(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=M(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return S(M(this,4,e,arguments[1]))},getUint32:function(e){return S(M(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return T(M(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return T(M(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){L(this,1,e,x,t)},setUint8:function(e,t){L(this,1,e,x,t)},setInt16:function(e,t){L(this,2,e,A,t,arguments[2])},setUint16:function(e,t){L(this,2,e,A,t,arguments[2])},setInt32:function(e,t){L(this,4,e,O,t,arguments[2])},setUint32:function(e,t){L(this,4,e,O,t,arguments[2])},setFloat32:function(e,t){L(this,4,e,j,t,arguments[2])},setFloat64:function(e,t){L(this,8,e,C,t,arguments[2])}});Wt(s,"ArrayBuffer"),Wt(a,"DataView"),K(a[r],qt.VIEW,!0),t.ArrayBuffer=s,t.DataView=a}),Gt=Object.freeze({default:Yt,__moduleExports:Yt}),Kt=Lt("species"),Qt=function(e,t){var n,i=O(e).constructor;return void 0===i||void 0==(n=O(i)[Kt])?t:ne(n)},Jt=Object.freeze({default:Qt,__moduleExports:Qt}),$t=Lt("species"),Xt=function(e){var t=y[e];_&&t&&!t[$t]&&z.f(t,$t,{configurable:!0,get:function(){return this}})},Zt=Object.freeze({default:Xt,__moduleExports:Xt}),en=ue&&ce||ue,tn=Gt&&Yt||Gt,nn=Jt&&Qt||Jt,rn=Zt&&Xt||Zt,on=y.ArrayBuffer,sn=tn.ArrayBuffer,an=tn.DataView,ln=qt.ABV&&on.isView,cn=sn.prototype.slice,un=qt.VIEW;en(en.G+en.W+en.F*(on!==sn),{ArrayBuffer:sn}),en(en.S+en.F*!qt.CONSTR,"ArrayBuffer",{isView:function(e){return ln&&ln(e)||c(e)&&un in e}}),en(en.P+en.U+en.F*p(function(){return!new sn(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==cn&&void 0===t)return cn.call(O(this),e);for(var n=O(this).byteLength,i=nt(e,n),r=nt(void 0===t?n:t,n),o=new(nn(this,sn))(Fe(r-i)),s=new an(this),a=new an(o),l=0;i<r;)a.setUint8(l++,s.getUint8(i++));return o}}),rn("ArrayBuffer");var dn=Lt("toStringTag"),fn="Arguments"==De(function(){return arguments}()),hn=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),dn))?n:fn?De(t):"Object"==(i=De(t))&&"function"==typeof t.callee?"Arguments":i},pn=Object.freeze({default:hn,__moduleExports:hn}),gn={},mn=Object.freeze({default:gn,__moduleExports:gn}),yn=mn&&gn||mn,vn=Lt("iterator"),bn=Array.prototype,En=function(e){return void 0!==e&&(yn.Array===e||bn[vn]===e)},wn=Object.freeze({default:En,__moduleExports:En}),_n=Object.keys||function(e){return Et(e,wt)},kn=Object.freeze({default:_n,__moduleExports:_n}),Tn=kn&&_n||kn,Sn=_?Object.defineProperties:function(e,t){O(e);for(var n,i=Tn(t),r=i.length,o=0;r>o;)z.f(e,n=i[o++],t[n]);return e},xn=Object.freeze({default:Sn,__moduleExports:Sn}),An=y.document,On=An&&An.documentElement,Cn=Object.freeze({default:On,__moduleExports:On}),jn=xn&&Sn||xn,Pn=Cn&&On||Cn,Mn=ht("IE_PROTO"),Ln=function(){},Nn=function(){var e,t=k("iframe"),n=wt.length;for(t.style.display="none",Pn.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Nn=e.F;n--;)delete Nn.prototype[wt[n]];return Nn()},In=Object.create||function(e,t){var n;return null!==e?(Ln.prototype=O(e),n=new Ln,Ln.prototype=null,n[Mn]=e):n=Nn(),void 0===t?n:jn(n,t)},Fn=Object.freeze({default:In,__moduleExports:In}),zn=ht("IE_PROTO"),Rn=Object.prototype,qn=Object.getPrototypeOf||function(e){return e=Ot(e),Q(e,zn)?e[zn]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Rn:null},Vn=Object.freeze({default:qn,__moduleExports:qn}),Bn=pn&&hn||pn,Dn=Lt("iterator"),Un=$.getIteratorMethod=function(e){if(void 0!=e)return e[Dn]||e["@@iterator"]||yn[Bn(e)]},Hn=Object.freeze({default:Un,__moduleExports:Un}),Wn=Array.isArray||function(e){return"Array"==De(e)},Yn=Object.freeze({default:Wn,__moduleExports:Wn}),Gn=Yn&&Wn||Yn,Kn=Lt("species"),Qn=function(e){var t;return Gn(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Gn(t.prototype)||(t=void 0),c(t)&&null===(t=t[Kn])&&(t=void 0)),void 0===t?Array:t},Jn=Object.freeze({default:Qn,__moduleExports:Qn}),$n=Jn&&Qn||Jn,Xn=function(e,t){return new($n(e))(t)},Zn=Object.freeze({default:Xn,__moduleExports:Xn}),ei=Zn&&Xn||Zn,ti=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||ei;return function(t,c,u){for(var d,f,h=Ot(t),p=Ge(h),g=se(c,u,3),m=Fe(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((a||y in p)&&(f=g(d=p[y],y,h),e))if(n)v[y]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return y;case 2:v.push(d)}else if(o)return!1;return s?-1:r||o?o:v}},ni=Object.freeze({default:ti,__moduleExports:ti}),ii=Lt("unscopables"),ri=Array.prototype;void 0==ri[ii]&&K(ri,ii,{});var oi=function(e){ri[ii][e]=!0},si=Object.freeze({default:oi,__moduleExports:oi}),ai=function(e,t){return{value:t,done:!!e}},li=Object.freeze({default:ai,__moduleExports:ai}),ci=Fn&&In||Fn,ui={};K(ui,Lt("iterator"),function(){return this});var di=function(e,t,n){e.prototype=ci(ui,{next:R(1,n)}),Wt(e,t+" Iterator")},fi=Object.freeze({default:di,__moduleExports:di}),hi=fi&&di||fi,pi=Vn&&qn||Vn,gi=Lt("iterator"),mi=!([].keys&&"next"in[].keys()),yi=function(){return this},vi=function(e,t,n,i,r,o,s){hi(n,t,i);var a,l,c,u=function(e){if(!mi&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,g=p[gi]||p["@@iterator"]||r&&p[r],m=!mi&&g||u(r),y=r?f?u("entries"):m:void 0,v="Array"==t&&p.entries||g;if(v&&(c=pi(v.call(new e)))!==Object.prototype&&c.next&&(Wt(c,d,!0),Rt||Q(c,gi)||K(c,gi,yi)),f&&g&&"values"!==g.name&&(h=!0,m=function(){return g.call(this)}),Rt&&!s||!mi&&!h&&p[gi]||K(p,gi,m),yn[t]=m,yn[d]=yi,r)if(a={values:f?m:u("values"),keys:o?m:u("keys"),entries:y},s)for(l in a)l in p||oe(p,l,a[l]);else en(en.P+en.F*(mi||h),t,a);return a},bi=Object.freeze({default:vi,__moduleExports:vi}),Ei=si&&oi||si,wi=li&&ai||li,_i=bi&&vi||bi,ki=_i(Array,"Array",function(e,t){this._t=tt(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,wi(1)):wi(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");yn.Arguments=yn.Array,Ei("keys"),Ei("values"),Ei("entries");var Ti=Object.freeze({default:ki,__moduleExports:ki}),Si=Lt("iterator"),xi=!1;try{[7][Si]().return=function(){xi=!0}}catch(e){}var Ai=function(e,t){if(!t&&!xi)return!1;var n=!1;try{var i=[7],r=i[Si]();r.next=function(){return{done:n=!0}},i[Si]=function(){return r},e(i)}catch(e){}return n},Oi=Object.freeze({default:Ai,__moduleExports:Ai}),Ci=[].copyWithin||function(e,t){var n=Ot(this),i=Fe(n.length),r=nt(e,i),o=nt(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:nt(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ji=Object.freeze({default:Ci,__moduleExports:Ci}),Pi={}.propertyIsEnumerable,Mi={f:Pi},Li=Object.freeze({default:Mi,__moduleExports:Mi,f:Pi}),Ni=Li&&Mi||Li,Ii=Object.getOwnPropertyDescriptor,Fi=_?Ii:function(e,t){if(e=tt(e),t=j(t,!0),C)try{return Ii(e,t)}catch(e){}if(Q(e,t))return R(!Ni.f.call(e,t),e[t])},zi={f:Fi},Ri=Object.freeze({default:zi,__moduleExports:zi,f:Fi}),qi=wn&&En||wn,Vi=Hn&&Un||Hn,Bi=ni&&ti||ni,Di=Ti&&ki||Ti,Ui=Oi&&Ai||Oi,Hi=ji&&Ci||ji,Wi=Ri&&zi||Ri,Yi=t(function(e){if(_){var t=Rt,n=y,i=p,r=en,o=qt,s=tn,a=se,l=Bt,u=R,d=K,f=Vt,h=Me,g=Fe,m=Dt,v=nt,b=j,E=Q,w=Bn,k=c,T=Ot,S=qi,x=ci,A=pi,O=Ut.f,C=Vi,P=J,M=Lt,L=Bi,N=ft,I=nn,F=Di,q=yn,V=Ui,B=rn,D=Ht,U=Hi,H=z,W=Wi,Y=H.f,G=W.f,$=n.RangeError,X=n.TypeError,Z=n.Uint8Array,ee=Array.prototype,te=s.ArrayBuffer,ne=s.DataView,ie=L(0),re=L(2),oe=L(3),ae=L(4),le=L(5),ce=L(6),ue=N(!0),de=N(!1),fe=F.values,he=F.keys,pe=F.entries,ge=ee.lastIndexOf,me=ee.reduce,ye=ee.reduceRight,ve=ee.join,be=ee.sort,Ee=ee.slice,we=ee.toString,_e=ee.toLocaleString,ke=M("iterator"),Te=M("toStringTag"),Se=P("typed_constructor"),xe=P("def_constructor"),Ae=o.CONSTR,Oe=o.TYPED,Ce=o.VIEW,je=L(1,function(e,t){return ze(I(e,e[xe]),t)}),Pe=i(function(){return 1===new Z(new Uint16Array([1]).buffer)[0]}),Le=!!Z&&!!Z.prototype.set&&i(function(){new Z(1).set({})}),Ne=function(e,t){var n=h(e);if(n<0||n%t)throw $("Wrong offset!");return n},Ie=function(e){if(k(e)&&Oe in e)return e;throw X(e+" is not a typed array!")},ze=function(e,t){if(!(k(e)&&Se in e))throw X("It is not a typed array constructor!");return new e(t)},Re=function(e,t){return qe(I(e,e[xe]),t)},qe=function(e,t){for(var n=0,i=t.length,r=ze(e,i);i>n;)r[n]=t[n++];return r},Ve=function(e,t,n){Y(e,t,{get:function(){return this._d[n]}})},Be=function(e){var t,n,i,r,o,s,l=T(e),c=arguments.length,u=c>1?arguments[1]:void 0,d=void 0!==u,f=C(l);if(void 0!=f&&!S(f)){for(s=f.call(l),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);l=i}for(d&&c>2&&(u=a(u,arguments[2],2)),t=0,n=g(l.length),r=ze(this,n);n>t;t++)r[t]=d?u(l[t],t):l[t];return r},De=function(){for(var e=0,t=arguments.length,n=ze(this,t);t>e;)n[e]=arguments[e++];return n},Ue=!!Z&&i(function(){_e.call(new Z(1))}),He=function(){return _e.apply(Ue?Ee.call(Ie(this)):Ie(this),arguments)},We={copyWithin:function(e,t){return U.call(Ie(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ae(Ie(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return D.apply(Ie(this),arguments)},filter:function(e){return Re(this,re(Ie(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return le(Ie(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ce(Ie(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){ie(Ie(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return de(Ie(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return ue(Ie(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ve.apply(Ie(this),arguments)},lastIndexOf:function(e){return ge.apply(Ie(this),arguments)},map:function(e){return je(Ie(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return me.apply(Ie(this),arguments)},reduceRight:function(e){return ye.apply(Ie(this),arguments)},reverse:function(){for(var e,t=Ie(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return oe(Ie(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return be.call(Ie(this),e)},subarray:function(e,t){var n=Ie(this),i=n.length,r=v(e,i);return new(I(n,n[xe]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,g((void 0===t?i:v(t,i))-r))}},Ye=function(e,t){return Re(this,Ee.call(Ie(this),e,t))},Ge=function(e){Ie(this);var t=Ne(arguments[1],1),n=this.length,i=T(e),r=g(i.length),o=0;if(r+t>n)throw $("Wrong length!");for(;o<r;)this[t+o]=i[o++]},Ke={entries:function(){return pe.call(Ie(this))},keys:function(){return he.call(Ie(this))},values:function(){return fe.call(Ie(this))}},Qe=function(e,t){return k(e)&&e[Oe]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Je=function(e,t){return Qe(e,t=b(t,!0))?u(2,e[t]):G(e,t)},$e=function(e,t,n){return!(Qe(e,t=b(t,!0))&&k(n)&&E(n,"value"))||E(n,"get")||E(n,"set")||n.configurable||E(n,"writable")&&!n.writable||E(n,"enumerable")&&!n.enumerable?Y(e,t,n):(e[t]=n.value,e)};Ae||(W.f=Je,H.f=$e),r(r.S+r.F*!Ae,"Object",{getOwnPropertyDescriptor:Je,defineProperty:$e}),i(function(){we.call({})})&&(we=_e=function(){return ve.call(this)});var Xe=f({},We);f(Xe,Ke),d(Xe,ke,Ke.values),f(Xe,{slice:Ye,set:Ge,constructor:function(){},toString:we,toLocaleString:He}),Ve(Xe,"buffer","b"),Ve(Xe,"byteOffset","o"),Ve(Xe,"byteLength","l"),Ve(Xe,"length","e"),Y(Xe,Te,{get:function(){return this[Oe]}}),e.exports=function(e,s,a,c){var u=e+((c=!!c)?"Clamped":"")+"Array",f="get"+e,h="set"+e,p=n[u],y=p||{},v=p&&A(p),b=!p||!o.ABV,E={},_=p&&p.prototype,T=function(e,t){Y(e,t,{get:function(){return function(e,t){var n=e._d;return n.v[f](t*s+n.o,Pe)}(this,t)},set:function(e){return function(e,t,n){var i=e._d;c&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[h](t*s+i.o,n,Pe)}(this,t,e)},enumerable:!0})};b?(p=a(function(e,t,n,i){l(e,p,u,"_d");var r,o,a,c,f=0,h=0;if(k(t)){if(!(t instanceof te||"ArrayBuffer"==(c=w(t))||"SharedArrayBuffer"==c))return Oe in t?qe(p,t):Be.call(p,t);r=t,h=Ne(n,s);var y=t.byteLength;if(void 0===i){if(y%s)throw $("Wrong length!");if((o=y-h)<0)throw $("Wrong length!")}else if((o=g(i)*s)+h>y)throw $("Wrong length!");a=o/s}else a=m(t),r=new te(o=a*s);for(d(e,"_d",{b:r,o:h,l:o,e:a,v:new ne(r)});f<a;)T(e,f++)}),_=p.prototype=x(Xe),d(_,"constructor",p)):i(function(){p(1)})&&i(function(){new p(-1)})&&V(function(e){new p,new p(null),new p(1.5),new p(e)},!0)||(p=a(function(e,t,n,i){var r;return l(e,p,u),k(t)?t instanceof te||"ArrayBuffer"==(r=w(t))||"SharedArrayBuffer"==r?void 0!==i?new y(t,Ne(n,s),i):void 0!==n?new y(t,Ne(n,s)):new y(t):Oe in t?qe(p,t):Be.call(p,t):new y(m(t))}),ie(v!==Function.prototype?O(y).concat(O(v)):O(y),function(e){e in p||d(p,e,y[e])}),p.prototype=_,t||(_.constructor=p));var S=_[ke],C=!!S&&("values"==S.name||void 0==S.name),j=Ke.values;d(p,Se,!0),d(_,Oe,u),d(_,Ce,!0),d(_,xe,p),(c?new p(1)[Te]==u:Te in _)||Y(_,Te,{get:function(){return u}}),E[u]=p,r(r.G+r.W+r.F*(p!=y),E),r(r.S,u,{BYTES_PER_ELEMENT:s}),r(r.S+r.F*i(function(){y.of.call(p,1)}),u,{from:Be,of:De}),"BYTES_PER_ELEMENT"in _||d(_,"BYTES_PER_ELEMENT",s),r(r.P,u,We),B(u),r(r.P+r.F*Le,u,{set:Ge}),r(r.P+r.F*!C,u,Ke),t||_.toString==we||(_.toString=we),r(r.P+r.F*i(function(){new p(1).slice()}),u,{slice:Ye}),r(r.P+r.F*(i(function(){return[1,2].toLocaleString()!=new p([1,2]).toLocaleString()})||!i(function(){_.toLocaleString.call([1,2])})),u,{toLocaleString:He}),q[u]=C?S:j,t||C||d(_,ke,j)}}else e.exports=function(){}}),Gi=Object.freeze({default:Yi,__moduleExports:Yi}),Ki=Gi&&Yi||Gi;Ki("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),Ki("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var Qi=function(e,t,n,i){try{return i?t(O(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&O(r.call(e)),t}},Ji=Object.freeze({default:Qi,__moduleExports:Qi}),$i=Ji&&Qi||Ji,Xi=t(function(e){var t={},n={},i=e.exports=function(e,i,r,o,s){var a,l,c,u,d=s?function(){return e}:Vi(e),f=se(r,o,i?2:1),h=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(qi(d)){for(a=Fe(e.length);a>h;h++)if((u=i?f(O(l=e[h])[0],l[1]):f(e[h]))===t||u===n)return u}else for(c=d.call(e);!(l=c.next()).done;)if((u=$i(c,f,l.value,i))===t||u===n)return u};i.BREAK=t,i.RETURN=n}),Zi=Object.freeze({default:Xi,__moduleExports:Xi}),er=t(function(e){var t=J("meta"),n=z.f,i=0,r=Object.isExtensible||function(){return!0},o=!p(function(){return r(Object.preventExtensions({}))}),s=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},a=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!c(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!Q(e,t)){if(!r(e))return"F";if(!n)return"E";s(e)}return e[t].i},getWeak:function(e,n){if(!Q(e,t)){if(!r(e))return!0;if(!n)return!1;s(e)}return e[t].w},onFreeze:function(e){return o&&a.NEED&&r(e)&&!Q(e,t)&&s(e),e}}}),tr=er.KEY,nr=er.NEED,ir=er.fastKey,rr=er.getWeak,or=er.onFreeze,sr=Object.freeze({default:er,__moduleExports:er,KEY:tr,NEED:nr,fastKey:ir,getWeak:rr,onFreeze:or}),ar=function(e,t){if(!c(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},lr=Object.freeze({default:ar,__moduleExports:ar}),cr=Zi&&Xi||Zi,ur=sr&&er||sr,dr=lr&&ar||lr,fr=z.f,hr=ur.fastKey,pr=_?"_s":"size",gr=function(e,t){var n,i=hr(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},mr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=ci(null),e._f=void 0,e._l=void 0,e[pr]=0,void 0!=o&&cr(o,n,e[i],e)});return Vt(r.prototype,{clear:function(){for(var e=dr(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[pr]=0},delete:function(e){var n=dr(this,t),i=gr(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[pr]--}return!!i},forEach:function(e){dr(this,t);for(var n,i=se(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!gr(dr(this,t),e)}}),_&&fr(r.prototype,"size",{get:function(){return dr(this,t)[pr]}}),r},def:function(e,t,n){var i,r,o=gr(e,t);return o?o.v=n:(e._l=o={i:r=hr(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[pr]++,"F"!==r&&(e._i[r]=o)),e},getEntry:gr,setStrong:function(e,t,n){_i(e,t,function(e,n){this._t=dr(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?wi(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,wi(1))},n?"entries":"values",!n,!0),rn(t)}},yr=mr.getConstructor,vr=mr.def,br=mr.getEntry,Er=mr.setStrong,wr=Object.freeze({default:mr,__moduleExports:mr,getConstructor:yr,def:vr,getEntry:br,setStrong:Er}),_r=function(e,t){if(O(e),!c(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},kr={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=se(Function.call,Wi.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return _r(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:_r},Tr=kr.set,Sr=kr.check,xr=Object.freeze({default:kr,__moduleExports:kr,set:Tr,check:Sr}),Ar=xr&&kr||xr,Or=Ar.set,Cr=function(e,t,n){var i,r=t.constructor;return r!==n&&"function"==typeof r&&(i=r.prototype)!==n.prototype&&c(i)&&Or&&Or(e,i),e},jr=Object.freeze({default:Cr,__moduleExports:Cr}),Pr=jr&&Cr||jr,Mr=function(e,t,n,i,r,o){var s=y[e],a=s,l=r?"set":"add",u=a&&a.prototype,d={},f=function(e){var t=u[e];oe(u,e,"delete"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return o&&!c(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof a&&(o||u.forEach&&!p(function(){(new a).entries().next()}))){var h=new a,g=h[l](o?{}:-0,1)!=h,m=p(function(){h.has(1)}),v=Ui(function(e){new a(e)}),b=!o&&p(function(){for(var e=new a,t=5;t--;)e[l](t,t);return!e.has(-0)});v||((a=t(function(t,n){Bt(t,a,e);var i=Pr(new s,t,a);return void 0!=n&&cr(n,r,i[l],i),i})).prototype=u,u.constructor=a),(m||b)&&(f("delete"),f("has"),r&&f("get")),(b||g)&&f(l),o&&u.clear&&delete u.clear}else a=i.getConstructor(t,e,r,l),Vt(a.prototype,n),ur.NEED=!0;return Wt(a,e),d[e]=a,en(en.G+en.W+en.F*(a!=s),d),o||i.setStrong(a,e,r),a},Lr=Object.freeze({default:Mr,__moduleExports:Mr}),Nr=wr&&mr||wr,Ir=Lr&&Mr||Lr,Fr=(Ir("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Nr.getEntry(dr(this,"Map"),e);return t&&t.v},set:function(e,t){return Nr.def(dr(this,"Map"),0===e?0:e,t)}},Nr,!0),Ir("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Nr.def(dr(this,"Set"),e=0===e?0:e,e)}},Nr),Object.getOwnPropertySymbols),zr={f:Fr},Rr=Object.freeze({default:zr,__moduleExports:zr,f:Fr}),qr=Rr&&zr||Rr,Vr=Object.assign,Br=!Vr||p(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Vr({},e)[n]||Object.keys(Vr({},t)).join("")!=i})?function(e,t){for(var n=Ot(e),i=arguments.length,r=1,o=qr.f,s=Ni.f;i>r;)for(var a,l=Ge(arguments[r++]),c=o?Tn(l).concat(o(l)):Tn(l),u=c.length,d=0;u>d;)s.call(l,a=c[d++])&&(n[a]=l[a]);return n}:Vr,Dr=Object.freeze({default:Br,__moduleExports:Br}),Ur=ur.getWeak,Hr=Bi(5),Wr=Bi(6),Yr=0,Gr=function(e){return e._l||(e._l=new Kr)},Kr=function(){this.a=[]},Qr=function(e,t){return Hr(e.a,function(e){return e[0]===t})};Kr.prototype={get:function(e){var t=Qr(this,e);if(t)return t[1]},has:function(e){return!!Qr(this,e)},set:function(e,t){var n=Qr(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Wr(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Jr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Bt(e,r,t,"_i"),e._t=t,e._i=Yr++,e._l=void 0,void 0!=o&&cr(o,n,e[i],e)});return Vt(r.prototype,{delete:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Gr(dr(this,t)).delete(e):n&&Q(n,this._i)&&delete n[this._i]},has:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Gr(dr(this,t)).has(e):n&&Q(n,this._i)}}),r},def:function(e,t,n){var i=Ur(O(t),!0);return!0===i?Gr(e).set(t,n):i[e._i]=n,e},ufstore:Gr},$r=Jr.getConstructor,Xr=Jr.def,Zr=Jr.ufstore,eo=Object.freeze({default:Jr,__moduleExports:Jr,getConstructor:$r,def:Xr,ufstore:Zr}),to=Dr&&Br||Dr,no=eo&&Jr||eo;t(function(e){var t,n=Bi(0),i=ur.getWeak,r=Object.isExtensible,o=no.ufstore,s={},a=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},l={get:function(e){if(c(e)){var t=i(e);return!0===t?o(dr(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return no.def(dr(this,"WeakMap"),e,t)}},u=e.exports=Ir("WeakMap",a,l,no,!0,!0);p(function(){return 7!=(new u).set((Object.freeze||Object)(s),7).get(s)})&&(t=no.getConstructor(a,"WeakMap"),to(t.prototype,l),ur.NEED=!0,n(["delete","has","get","set"],function(e){var n=u.prototype,i=n[e];oe(n,e,function(n,o){if(c(n)&&!r(n)){this._f||(this._f=new t);var s=this._f[e](n,o);return"set"==e?this:s}return i.call(this,n,o)})}))});Ir("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return no.def(dr(this,"WeakSet"),e,!0)}},no,!1,!0);var io=(y.Reflect||{}).apply,ro=Function.apply;en(en.S+en.F*!p(function(){io(function(){})}),"Reflect",{apply:function(e,t,n){var i=ne(e),r=O(n);return io?io(i,t,r):ro.call(i,t,r)}});var oo=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},so=Object.freeze({default:oo,__moduleExports:oo}),ao=so&&oo||so,lo=[].slice,co={},uo=Function.bind||function(e){var t=ne(this),n=lo.call(arguments,1),i=function(){var r=n.concat(lo.call(arguments));return this instanceof i?function(e,t,n){if(!(t in co)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";co[t]=Function("F,a","return new F("+i.join(",")+")")}return co[t](e,n)}(t,r.length,r):ao(t,r,e)};return c(t.prototype)&&(i.prototype=t.prototype),i},fo=Object.freeze({default:uo,__moduleExports:uo}),ho=fo&&uo||fo,po=(y.Reflect||{}).construct,go=p(function(){function e(){}return!(po(function(){},[],e)instanceof e)}),mo=!p(function(){po(function(){})});en(en.S+en.F*(go||mo),"Reflect",{construct:function(e,t){ne(e),O(t);var n=arguments.length<3?e:ne(arguments[2]);if(mo&&!go)return po(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(ho.apply(e,i))}var r=n.prototype,o=ci(c(r)?r:Object.prototype),s=Function.apply.call(e,o,t);return c(s)?s:o}}),en(en.S+en.F*p(function(){Reflect.defineProperty(z.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){O(e),t=j(t,!0),O(n);try{return z.f(e,t,n),!0}catch(e){return!1}}});var yo=Wi.f;en(en.S,"Reflect",{deleteProperty:function(e,t){var n=yo(O(e),t);return!(n&&!n.configurable)&&delete e[t]}}),en(en.S,"Reflect",{get:function e(t,n){var i,r,o=arguments.length<3?t:arguments[2];return O(t)===o?t[n]:(i=Wi.f(t,n))?Q(i,"value")?i.value:void 0!==i.get?i.get.call(o):void 0:c(r=pi(t))?e(r,n,o):void 0}}),en(en.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return Wi.f(O(e),t)}}),en(en.S,"Reflect",{getPrototypeOf:function(e){return pi(O(e))}}),en(en.S,"Reflect",{has:function(e,t){return t in e}});var vo=Object.isExtensible;en(en.S,"Reflect",{isExtensible:function(e){return O(e),!vo||vo(e)}});var bo=y.Reflect,Eo=bo&&bo.ownKeys||function(e){var t=Ut.f(O(e)),n=qr.f;return n?t.concat(n(e)):t},wo=Object.freeze({default:Eo,__moduleExports:Eo}),_o=wo&&Eo||wo;en(en.S,"Reflect",{ownKeys:_o});var ko=Object.preventExtensions;en(en.S,"Reflect",{preventExtensions:function(e){O(e);try{return ko&&ko(e),!0}catch(e){return!1}}}),en(en.S,"Reflect",{set:function e(t,n,i){var r,o,s=arguments.length<4?t:arguments[3],a=Wi.f(O(t),n);if(!a){if(c(o=pi(t)))return e(o,n,i,s);a=R(0)}return Q(a,"value")?!(!1===a.writable||!c(s)||((r=Wi.f(s,n)||R(0)).value=i,z.f(s,n,r),0)):void 0!==a.set&&(a.set.call(s,i),!0)}}),Ar&&en(en.S,"Reflect",{setPrototypeOf:function(e,t){Ar.check(e,t);try{return Ar.set(e,t),!0}catch(e){return!1}}});var To,So,xo,Ao=y.process,Oo=y.setImmediate,Co=y.clearImmediate,jo=y.MessageChannel,Po=y.Dispatch,Mo=0,Lo={},No=function(){var e=+this;if(Lo.hasOwnProperty(e)){var t=Lo[e];delete Lo[e],t()}},Io=function(e){No.call(e.data)};Oo&&Co||(Oo=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return Lo[++Mo]=function(){ao("function"==typeof e?e:Function(e),t)},To(Mo),Mo},Co=function(e){delete Lo[e]},"process"==De(Ao)?To=function(e){Ao.nextTick(se(No,e,1))}:Po&&Po.now?To=function(e){Po.now(se(No,e,1))}:jo?(xo=(So=new jo).port2,So.port1.onmessage=Io,To=se(xo.postMessage,xo,1)):y.addEventListener&&"function"==typeof postMessage&&!y.importScripts?(To=function(e){y.postMessage(e+"","*")},y.addEventListener("message",Io,!1)):To="onreadystatechange"in k("script")?function(e){Pn.appendChild(k("script")).onreadystatechange=function(){Pn.removeChild(this),No.call(e)}}:function(e){setTimeout(se(No,e,1),0)});var Fo={set:Oo,clear:Co},zo=Fo.set,Ro=Fo.clear,qo=Object.freeze({default:Fo,__moduleExports:Fo,set:zo,clear:Ro}),Vo=qo&&Fo||qo,Bo=Vo.set,Do=y.MutationObserver||y.WebKitMutationObserver,Uo=y.process,Ho=y.Promise,Wo="process"==De(Uo),Yo=function(){var e,t,n,i=function(){var i,r;for(Wo&&(i=Uo.domain)&&i.exit();e;){r=e.fn,e=e.next;try{r()}catch(i){throw e?n():t=void 0,i}}t=void 0,i&&i.enter()};if(Wo)n=function(){Uo.nextTick(i)};else if(!Do||y.navigator&&y.navigator.standalone)if(Ho&&Ho.resolve){var r=Ho.resolve();n=function(){r.then(i)}}else n=function(){Bo.call(y,i)};else{var o=!0,s=document.createTextNode("");new Do(i).observe(s,{characterData:!0}),n=function(){s.data=o=!o}}return function(i){var r={fn:i,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}},Go=Object.freeze({default:Yo,__moduleExports:Yo});var Ko,Qo,Jo,$o,Xo=function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=ne(t),this.reject=ne(n)}(e)},Zo={f:Xo},es=Object.freeze({default:Zo,__moduleExports:Zo,f:Xo}),ts=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},ns=Object.freeze({default:ts,__moduleExports:ts}),is=es&&Zo||es,rs=function(e,t){if(O(e),c(t)&&t.constructor===e)return t;var n=is.f(e);return(0,n.resolve)(t),n.promise},os=Object.freeze({default:rs,__moduleExports:rs}),ss=Go&&Yo||Go,as=ns&&ts||ns,ls=os&&rs||os,cs=Vo.set,us=ss(),ds=y.TypeError,fs=y.process,hs=y.Promise,ps="process"==Bn(fs),gs=function(){},ms=Qo=is.f,ys=!!function(){try{var e=hs.resolve(1),t=(e.constructor={})[Lt("species")]=function(e){e(gs,gs)};return(ps||"function"==typeof PromiseRejectionEvent)&&e.then(gs)instanceof t}catch(e){}}(),vs=function(e){var t;return!(!c(e)||"function"!=typeof(t=e.then))&&t},bs=function(e,t){if(!e._n){e._n=!0;var n=e._c;us(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&_s(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(ds("Promise-chain cycle")):(o=vs(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&Es(e)})}},Es=function(e){cs.call(y,function(){var t,n,i,r=e._v,o=ws(e);if(o&&(t=as(function(){ps?fs.emit("unhandledRejection",r,e):(n=y.onunhandledrejection)?n({promise:e,reason:r}):(i=y.console)&&i.error&&i.error("Unhandled promise rejection",r)}),e._h=ps||ws(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},ws=function(e){return 1!==e._h&&0===(e._a||e._c).length},_s=function(e){cs.call(y,function(){var t;ps?fs.emit("rejectionHandled",e):(t=y.onrejectionhandled)&&t({promise:e,reason:e._v})})},ks=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),bs(t,!0))},Ts=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw ds("Promise can't be resolved itself");(t=vs(e))?us(function(){var i={_w:n,_d:!1};try{t.call(e,se(Ts,i,1),se(ks,i,1))}catch(e){ks.call(i,e)}}):(n._v=e,n._s=1,bs(n,!1))}catch(e){ks.call({_w:n,_d:!1},e)}}};ys||(hs=function(e){Bt(this,hs,"Promise","_h"),ne(e),Ko.call(this);try{e(se(Ts,this,1),se(ks,this,1))}catch(e){ks.call(this,e)}},(Ko=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=Vt(hs.prototype,{then:function(e,t){var n=ms(nn(this,hs));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=ps?fs.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&bs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Jo=function(){var e=new Ko;this.promise=e,this.resolve=se(Ts,e,1),this.reject=se(ks,e,1)},is.f=ms=function(e){return e===hs||e===$o?new Jo(e):Qo(e)}),en(en.G+en.W+en.F*!ys,{Promise:hs}),Wt(hs,"Promise"),rn("Promise"),$o=$.Promise,en(en.S+en.F*!ys,"Promise",{reject:function(e){var t=ms(this);return(0,t.reject)(e),t.promise}}),en(en.S+en.F*(Rt||!ys),"Promise",{resolve:function(e){return ls(Rt&&this===$o?hs:this,e)}}),en(en.S+en.F*!(ys&&Ui(function(e){hs.all(e).catch(gs)})),"Promise",{all:function(e){var t=this,n=ms(t),i=n.resolve,r=n.reject,o=as(function(){var n=[],o=0,s=1;cr(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=ms(t),i=n.reject,r=as(function(){cr(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Ss=Lt,xs={f:Ss},As=Object.freeze({default:xs,__moduleExports:xs,f:Ss}),Os=As&&xs||As,Cs=z.f,js=function(e){var t=$.Symbol||($.Symbol=Rt?{}:y.Symbol||{});"_"==e.charAt(0)||e in t||Cs(t,e,{value:Os.f(e)})},Ps=Object.freeze({default:js,__moduleExports:js}),Ms=function(e){var t=Tn(e),n=qr.f;if(n)for(var i,r=n(e),o=Ni.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t},Ls=Object.freeze({default:Ms,__moduleExports:Ms}),Ns=Ut.f,Is={}.toString,Fs="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],zs=function(e){return Fs&&"[object Window]"==Is.call(e)?function(e){try{return Ns(e)}catch(e){return Fs.slice()}}(e):Ns(tt(e))},Rs={f:zs},qs=Object.freeze({default:Rs,__moduleExports:Rs,f:zs}),Vs=Ps&&js||Ps,Bs=Ls&&Ms||Ls,Ds=qs&&Rs||qs,Us=ur.KEY,Hs=Wi.f,Ws=z.f,Ys=Ds.f,Gs=y.Symbol,Ks=y.JSON,Qs=Ks&&Ks.stringify,Js=Lt("_hidden"),$s=Lt("toPrimitive"),Xs={}.propertyIsEnumerable,Zs=lt("symbol-registry"),ea=lt("symbols"),ta=lt("op-symbols"),na=Object.prototype,ia="function"==typeof Gs,ra=y.QObject,oa=!ra||!ra.prototype||!ra.prototype.findChild,sa=_&&p(function(){return 7!=ci(Ws({},"a",{get:function(){return Ws(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Hs(na,t);i&&delete na[t],Ws(e,t,n),i&&e!==na&&Ws(na,t,i)}:Ws,aa=function(e){var t=ea[e]=ci(Gs.prototype);return t._k=e,t},la=ia&&"symbol"==typeof Gs.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Gs},ca=function(e,t,n){return e===na&&ca(ta,t,n),O(e),t=j(t,!0),O(n),Q(ea,t)?(n.enumerable?(Q(e,Js)&&e[Js][t]&&(e[Js][t]=!1),n=ci(n,{enumerable:R(0,!1)})):(Q(e,Js)||Ws(e,Js,R(1,{})),e[Js][t]=!0),sa(e,t,n)):Ws(e,t,n)},ua=function(e,t){O(e);for(var n,i=Bs(t=tt(t)),r=0,o=i.length;o>r;)ca(e,n=i[r++],t[n]);return e},da=function(e){var t=Xs.call(this,e=j(e,!0));return!(this===na&&Q(ea,e)&&!Q(ta,e))&&(!(t||!Q(this,e)||!Q(ea,e)||Q(this,Js)&&this[Js][e])||t)},fa=function(e,t){if(e=tt(e),t=j(t,!0),e!==na||!Q(ea,t)||Q(ta,t)){var n=Hs(e,t);return!n||!Q(ea,t)||Q(e,Js)&&e[Js][t]||(n.enumerable=!0),n}},ha=function(e){for(var t,n=Ys(tt(e)),i=[],r=0;n.length>r;)Q(ea,t=n[r++])||t==Js||t==Us||i.push(t);return i},pa=function(e){for(var t,n=e===na,i=Ys(n?ta:tt(e)),r=[],o=0;i.length>o;)!Q(ea,t=i[o++])||n&&!Q(na,t)||r.push(ea[t]);return r};ia||(oe((Gs=function(){if(this instanceof Gs)throw TypeError("Symbol is not a constructor!");var e=J(arguments.length>0?arguments[0]:void 0),t=function(n){this===na&&t.call(ta,n),Q(this,Js)&&Q(this[Js],e)&&(this[Js][e]=!1),sa(this,e,R(1,n))};return _&&oa&&sa(na,e,{configurable:!0,set:t}),aa(e)}).prototype,"toString",function(){return this._k}),Wi.f=fa,z.f=ca,Ut.f=Ds.f=ha,Ni.f=da,qr.f=pa,_&&!Rt&&oe(na,"propertyIsEnumerable",da,!0),Os.f=function(e){return aa(Lt(e))}),en(en.G+en.W+en.F*!ia,{Symbol:Gs});for(var ga="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ma=0;ga.length>ma;)Lt(ga[ma++]);for(var ya=Tn(Lt.store),va=0;ya.length>va;)Vs(ya[va++]);en(en.S+en.F*!ia,"Symbol",{for:function(e){return Q(Zs,e+="")?Zs[e]:Zs[e]=Gs(e)},keyFor:function(e){if(!la(e))throw TypeError(e+" is not a symbol!");for(var t in Zs)if(Zs[t]===e)return t},useSetter:function(){oa=!0},useSimple:function(){oa=!1}}),en(en.S+en.F*!ia,"Object",{create:function(e,t){return void 0===t?ci(e):ua(ci(e),t)},defineProperty:ca,defineProperties:ua,getOwnPropertyDescriptor:fa,getOwnPropertyNames:ha,getOwnPropertySymbols:pa}),Ks&&en(en.S+en.F*(!ia||p(function(){var e=Gs();return"[null]"!=Qs([e])||"{}"!=Qs({a:e})||"{}"!=Qs(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],r=1;arguments.length>r;)i.push(arguments[r++]);if(n=t=i[1],(c(t)||void 0!==e)&&!la(e))return Gn(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!la(t))return t}),i[1]=t,Qs.apply(Ks,i)}}),Gs.prototype[$s]||K(Gs.prototype,$s,Gs.prototype.valueOf),Wt(Gs,"Symbol"),Wt(Math,"Math",!0),Wt(y.JSON,"JSON",!0);var ba=function(e,t){var n=($.Object||{})[e]||Object[e],i={};i[e]=t(n),en(en.S+en.F*p(function(){n(1)}),"Object",i)},Ea=Object.freeze({default:ba,__moduleExports:ba}),wa=Ea&&ba||Ea,_a=ur.onFreeze;wa("freeze",function(e){return function(t){return e&&c(t)?e(_a(t)):t}});var ka=ur.onFreeze;wa("seal",function(e){return function(t){return e&&c(t)?e(ka(t)):t}});var Ta=ur.onFreeze;wa("preventExtensions",function(e){return function(t){return e&&c(t)?e(Ta(t)):t}}),wa("isFrozen",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isSealed",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isExtensible",function(e){return function(t){return!!c(t)&&(!e||e(t))}});var Sa=Wi.f;wa("getOwnPropertyDescriptor",function(){return function(e,t){return Sa(tt(e),t)}}),wa("getPrototypeOf",function(){return function(e){return pi(Ot(e))}}),wa("keys",function(){return function(e){return Tn(Ot(e))}}),wa("getOwnPropertyNames",function(){return Ds.f}),en(en.S+en.F,"Object",{assign:to});var xa=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},Aa=Object.freeze({default:xa,__moduleExports:xa}),Oa=Aa&&xa||Aa;en(en.S,"Object",{is:Oa});var Ca=z.f,ja=Function.prototype,Pa=/^\s*function ([^ (]*)/;"name"in ja||_&&Ca(ja,"name",{configurable:!0,get:function(){try{return(""+this).match(Pa)[1]}catch(e){return""}}}),en(en.S,"String",{raw:function(e){for(var t=tt(e.raw),n=Fe(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Ma=String.fromCharCode,La=String.fromCodePoint;en(en.S+en.F*(!!La&&1!=La.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],nt(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Ma(t):Ma(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Na=function(e){return function(t,n){var i,r,o=String(Ke(t)),s=Me(n),a=o.length;return s<0||s>=a?e?"":void 0:(i=o.charCodeAt(s))<55296||i>56319||s+1===a||(r=o.charCodeAt(s+1))<56320||r>57343?e?o.charAt(s):i:e?o.slice(s,s+2):r-56320+(i-55296<<10)+65536}},Ia=Object.freeze({default:Na,__moduleExports:Na}),Fa=(Ia&&Na||Ia)(!1);en(en.P,"String",{codePointAt:function(e){return Fa(this,e)}});var za=function(e){var t=String(Ke(this)),n="",i=Me(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n},Ra=Object.freeze({default:za,__moduleExports:za}),qa=Ra&&za||Ra;en(en.P,"String",{repeat:qa});var Va=Lt("match"),Ba=function(e){var t;return c(e)&&(void 0!==(t=e[Va])?!!t:"RegExp"==De(e))},Da=Object.freeze({default:Ba,__moduleExports:Ba}),Ua=Da&&Ba||Da,Ha=function(e,t,n){if(Ua(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(Ke(e))},Wa=Object.freeze({default:Ha,__moduleExports:Ha}),Ya=Lt("match"),Ga=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Ya]=!1,!"/./"[e](t)}catch(e){}}return!0},Ka=Object.freeze({default:Ga,__moduleExports:Ga}),Qa=Wa&&Ha||Wa,Ja=Ka&&Ga||Ka,$a="".startsWith;en(en.P+en.F*Ja("startsWith"),"String",{startsWith:function(e){var t=Qa(this,e,"startsWith"),n=Fe(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return $a?$a.call(t,i,n):t.slice(n,n+i.length)===i}});var Xa="".endsWith;en(en.P+en.F*Ja("endsWith"),"String",{endsWith:function(e){var t=Qa(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=Fe(t.length),r=void 0===n?i:Math.min(Fe(n),i),o=String(e);return Xa?Xa.call(t,o,r):t.slice(r-o.length,r)===o}});en(en.P+en.F*Ja("includes"),"String",{includes:function(e){return!!~Qa(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});var Za=function(){var e=O(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},el=Object.freeze({default:Za,__moduleExports:Za}),tl=el&&Za||el;_&&"g"!=/./g.flags&&z.f(RegExp.prototype,"flags",{configurable:!0,get:tl});var nl=function(e,t,n){var i=Lt(e),r=n(Ke,i,""[e]),o=r[0],s=r[1];p(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(oe(String.prototype,e,o),K(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))},il=Object.freeze({default:nl,__moduleExports:nl}),rl=il&&nl||il;rl("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),rl("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("split",2,function(e,t,n){var i=Ua,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(s||(a=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||f.push(""):f.push(n.slice(p)),f.length>g?f.slice(0,g):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var ol=function(e,t,n){t in e?z.f(e,t,R(0,n)):e[t]=n},sl=Object.freeze({default:ol,__moduleExports:ol}),al=sl&&ol||sl;en(en.S+en.F*!Ui(function(e){}),"Array",{from:function(e){var t,n,i,r,o=Ot(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=Vi(o);if(c&&(l=se(l,a>2?arguments[2]:void 0,2)),void 0==d||s==Array&&qi(d))for(n=new s(t=Fe(o.length));t>u;u++)al(n,u,c?l(o[u],u):o[u]);else for(r=d.call(o),n=new s;!(i=r.next()).done;u++)al(n,u,c?$i(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),en(en.S+en.F*p(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)al(n,e,arguments[e++]);return n.length=t,n}}),en(en.P,"Array",{copyWithin:Hi}),Ei("copyWithin");var ll=Bi(5),cl=!0;"find"in[]&&Array(1).find(function(){cl=!1}),en(en.P+en.F*cl,"Array",{find:function(e){return ll(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("find");var ul=Bi(6),dl=!0;"findIndex"in[]&&Array(1).findIndex(function(){dl=!1}),en(en.P+en.F*dl,"Array",{findIndex:function(e){return ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("findIndex"),en(en.P,"Array",{fill:Ht}),Ei("fill");var fl=y.isFinite;en(en.S,"Number",{isFinite:function(e){return"number"==typeof e&&fl(e)}});var hl=Math.floor,pl=function(e){return!c(e)&&isFinite(e)&&hl(e)===e},gl=Object.freeze({default:pl,__moduleExports:pl}),ml=gl&&pl||gl;en(en.S,"Number",{isInteger:ml});var yl=Math.abs;en(en.S,"Number",{isSafeInteger:function(e){return ml(e)&&yl(e)<=9007199254740991}}),en(en.S,"Number",{isNaN:function(e){return e!=e}}),en(en.S,"Number",{EPSILON:Math.pow(2,-52)}),en(en.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),en(en.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var vl=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},bl=Object.freeze({default:vl,__moduleExports:vl}),El=bl&&vl||bl,wl=Math.sqrt,_l=Math.acosh;en(en.S+en.F*!(_l&&710==Math.floor(_l(Number.MAX_VALUE))&&_l(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:El(e-1+wl(e-1)*wl(e+1))}});var kl=Math.asinh;en(en.S+en.F*!(kl&&1/kl(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var Tl=Math.atanh;en(en.S+en.F*!(Tl&&1/Tl(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var Sl=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1},xl=Object.freeze({default:Sl,__moduleExports:Sl}),Al=xl&&Sl||xl;en(en.S,"Math",{cbrt:function(e){return Al(e=+e)*Math.pow(Math.abs(e),1/3)}}),en(en.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var Ol=Math.exp;en(en.S,"Math",{cosh:function(e){return(Ol(e=+e)+Ol(-e))/2}});var Cl=Math.expm1,jl=!Cl||Cl(10)>22025.465794806718||Cl(10)<22025.465794806718||-2e-17!=Cl(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:Cl,Pl=Object.freeze({default:jl,__moduleExports:jl}),Ml=Pl&&jl||Pl;en(en.S+en.F*(Ml!=Math.expm1),"Math",{expm1:Ml});var Ll=Math.pow,Nl=Ll(2,-52),Il=Ll(2,-23),Fl=Ll(2,127)*(2-Il),zl=Ll(2,-126),Rl=Math.fround||function(e){var t,n,i=Math.abs(e),r=Al(e);return i<zl?r*(i/zl/Il+1/Nl-1/Nl)*zl*Il:(n=(t=(1+Il/Nl)*i)-(t-i))>Fl||n!=n?r*(1/0):r*n},ql=Object.freeze({default:Rl,__moduleExports:Rl}),Vl=ql&&Rl||ql;en(en.S,"Math",{fround:Vl});var Bl=Math.abs;en(en.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=Bl(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var Dl=Math.imul;en(en.S+en.F*p(function(){return-5!=Dl(4294967295,5)||2!=Dl.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),en(en.S,"Math",{log1p:El}),en(en.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),en(en.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),en(en.S,"Math",{sign:Al});var Ul=Math.exp;en(en.S+en.F*p(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(Ml(e)-Ml(-e))/2:(Ul(e-1)-Ul(-e-1))*(Math.E/2)}});var Hl=Math.exp;en(en.S,"Math",{tanh:function(e){var t=Ml(e=+e),n=Ml(-e);return t==1/0?1:n==1/0?-1:(t-n)/(Hl(e)+Hl(-e))}}),en(en.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var Wl=ft(!0);en(en.P,"Array",{includes:function(e){return Wl(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("includes");var Yl=Ni.f,Gl=function(e){return function(t){for(var n,i=tt(t),r=Tn(i),o=r.length,s=0,a=[];o>s;)Yl.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Kl=Object.freeze({default:Gl,__moduleExports:Gl}),Ql=Kl&&Gl||Kl,Jl=Ql(!1);en(en.S,"Object",{values:function(e){return Jl(e)}});var $l=Ql(!0);en(en.S,"Object",{entries:function(e){return $l(e)}}),en(en.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=tt(e),r=Wi.f,o=_o(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&al(s,t,n);return s}});var Xl=function(e,t,n,i){var r=String(Ke(e)),o=r.length,s=void 0===n?" ":String(n),a=Fe(t);if(a<=o||""==s)return r;var l=a-o,c=qa.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Zl=Object.freeze({default:Xl,__moduleExports:Xl}),ec=y.navigator,tc=ec&&ec.userAgent||"",nc=Object.freeze({default:tc,__moduleExports:tc}),ic=Zl&&Xl||Zl,rc=nc&&tc||nc;en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padStart:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padEnd:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var oc=[].slice,sc=/MSIE .\./.test(rc),ac=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&oc.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};en(en.G+en.B+en.F*sc,{setTimeout:ac(y.setTimeout),setInterval:ac(y.setInterval)}),en(en.G+en.B,{setImmediate:Vo.set,clearImmediate:Vo.clear});for(var lc=Lt("iterator"),cc=Lt("toStringTag"),uc=yn.Array,dc={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},fc=Tn(dc),hc=0;hc<fc.length;hc++){var pc,gc=fc[hc],mc=dc[gc],yc=y[gc],vc=yc&&yc.prototype;if(vc&&(vc[lc]||K(vc,lc,uc),vc[cc]||K(vc,cc,gc),yn[gc]=uc,mc))for(pc in Di)vc[pc]||oe(vc,pc,Di[pc],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},g={};g[s]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(j([])));y&&y!==i&&r.call(y,s)&&(g=y);var v=k.prototype=w.prototype=Object.create(g);_.prototype=v.constructor=k,k.constructor=_,k[l]=_.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===_||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},T(S.prototype),S.prototype[a]=function(){return this},c.AsyncIterator=S,c.async=function(e,t,n,i){var r=new S(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(v),v[l]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=j,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;O(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:j(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof w?t:w,o=Object.create(r.prototype),s=new C(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return P()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=x(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=E(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function E(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function w(){}function _(){}function k(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function S(t){function n(e,i,o,s){var a=E(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function x(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,x(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=E(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function j(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:P}}function P(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var bc=new window.CustomEvent("test");if(bc.preventDefault(),!0!==bc.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ec=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ec.prototype=window.Event.prototype,window.CustomEvent=Ec}var wc,_c={html5:"html5",youtube:"youtube",vimeo:"vimeo"},kc={audio:"audio",video:"video"},Tc={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.2.0/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,"default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:(navigator.language||navigator.userLanguage).split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",fastForward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",normal:"Normal",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",disabled:"Disabled",enabled:"Enabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adscontentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',fastForward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1,publisherId:""}},Sc=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function s(t,n,i,r){var o,a,l=document,c=i.async,u=(i.numRetries||0)+1,d=i.before||e,f=t.replace(/^(css|img)!/,"");r=r||0,/(^css!|\.css$)/.test(t)?(o=!0,(a=l.createElement("link")).rel="stylesheet",a.href=f):/(^img!|\.(png|gif|jpg|svg)$)/.test(t)?(a=l.createElement("img")).src=f:((a=l.createElement("script")).src=t,a.async=void 0===c||c),a.onload=a.onerror=a.onbeforeload=function(e){var l=e.type[0];if(o&&"hideFocus"in a)try{a.sheet.cssText.length||(l="e")}catch(e){l="e"}if("e"==l&&(r+=1)<u)return s(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==d(t,a)&&l.head.appendChild(a)}function a(e,n,i){var a,l;if(n&&n.trim&&(a=n),l=(a?i:n)||{},a){if(a in t)throw"LoadJS";t[a]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,a=o,l=[];for(i=function(e,n,i){if("e"==n&&l.push(e),"b"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<a;r++)s(e[r],i,n)}(e,function(e){o(l,e),r(a,e)},l)}return a.ready=function(e,t){return function(e,t){var r,o,s,a=[],l=(e=e.push?e:[e]).length,c=l;for(r=function(e,n){n.length&&a.push(e),--c||t(a)};l--;)o=e[l],(s=n[o])?r(o,s):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),a},a.done=function(e){r(e,[])},a.reset=function(){t={},n={},i={}},a.isDefined=function(e){return e in t},a},e.exports=n()}),xc=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Ac=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Oc=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Cc=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),jc={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e){return new Promise(function(t,n){Sc(e,{success:t,error:n})})},loadSprite:function(e,t){if(jc.is.string(e)){var n=jc.is.string(t),i=function(){return document.querySelectorAll("#"+t).length};if(!n||!i()){var r=document.createElement("div");if(jc.toggleHidden(r,!0),n&&r.setAttribute("id",t),Pc.storage){var o=window.localStorage.getItem("cache-"+t);if(null!==o){var s=JSON.parse(o);return void a.call(r,s.content)}}jc.fetch(e).then(function(e){jc.is.empty(e)||(Pc.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),a.call(r,e))}).catch(function(){})}}function a(e){n&&i()||(this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0]))}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return jc.is.object(t)&&jc.setAttributes(i,t),jc.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(jc.createElement(e,n,i))},removeElement:function(e){jc.is.element(e)&&jc.is.element(e.parentNode)&&(jc.is.nodeList(e)||jc.is.array(e)?Array.from(e).forEach(jc.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return jc.is.element(t)&&jc.is.element(t.parentNode)&&jc.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){jc.is.element(e)&&!jc.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Cc(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!jc.is.string(e)||jc.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":jc.is.object(i)&&jc.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(jc.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return jc.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){jc.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=jc.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:jc.getElements.call(this,this.config.selectors.buttons.play),pause:jc.getElement.call(this,this.config.selectors.buttons.pause),restart:jc.getElement.call(this,this.config.selectors.buttons.restart),rewind:jc.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:jc.getElement.call(this,this.config.selectors.buttons.fastForward),mute:jc.getElement.call(this,this.config.selectors.buttons.mute),pip:jc.getElement.call(this,this.config.selectors.buttons.pip),airplay:jc.getElement.call(this,this.config.selectors.buttons.airplay),settings:jc.getElement.call(this,this.config.selectors.buttons.settings),captions:jc.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:jc.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=jc.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:jc.getElement.call(this,this.config.selectors.inputs.seek),volume:jc.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:jc.getElement.call(this,this.config.selectors.display.buffer),duration:jc.getElement.call(this,this.config.selectors.display.duration),currentTime:jc.getElement.call(this,this.config.selectors.display.currentTime)},jc.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(jc.is.element(e)){var n=jc.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=jc.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?jc.on(this.elements.container,"keydown",o,!1):jc.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!jc.is.empty(e)&&!jc.is.empty(t)&&jc.is.function(n))if(jc.is.nodeList(e)||jc.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&jc.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=o;Pc.passiveListeners&&(a={passive:r,capture:o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];jc.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];jc.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(jc.is.element(e)&&!jc.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:jc.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(jc.is.array(e)||jc.is.nodeList(e))Array.from(e).forEach(function(e){return jc.toggleState(e,t)});else if(jc.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=jc.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!jc.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\]/\\])/g,"\\$1"),"g"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString().replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return e=jc.replaceAll(e,"-"," "),e=jc.replaceAll(e,"_"," "),e=jc.toTitleCase(e),jc.replaceAll(e," ","")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").toString();return(e=jc.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return jc.is.object(r)?(Object.keys(r).forEach(function(t){jc.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Oc({},t,{})),jc.extend(e[t],r[t])):Object.assign(e,Oc({},t,r[t]))}),jc.extend.apply(jc,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return jc.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},closest:function(e,t){return jc.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?_c.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?_c.vimeo:null},parseYouTubeId:function(e){if(jc.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(jc.is.empty(e))return null;if(jc.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Cc(n,2),r=i[0],o=i[1];return Object.assign(e,Oc({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return jc.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!jc.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){jc.toggleHidden(e,!0),e.offsetHeight,jc.toggleHidden(e,!1)},0)}},Pc={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=jc.getBrowser(),s=o.isIPhone&&n&&Pc.playsinline;switch(t+":"+e){case"html5:video":r=(i=Pc.video)&&Pc.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=Pc.audio)&&Pc.rangeInput;break;case"youtube:video":case"vimeo:video":i=!0,r=Pc.rangeInput&&(!o.isIPhone||s);break;default:r=(i=Pc.audio&&Pc.video)&&Pc.rangeInput}return{api:i,ui:r}},pip:!jc.getBrowser().isIPhone&&jc.is.function(jc.createElement("video").webkitSetPresentationMode),airplay:jc.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!jc.is.function(t.canPlayType))return!1;if(e.includes("codecs="))return t.canPlayType(e).replace(/no/,"");if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(wc=document.createElement("input"),wc.type="range","range"===wc.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==jc.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Mc=function(){},Lc=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];xc(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return Ac(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Mc}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Mc}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Mc}}]),e}(),Nc=jc.getBrowser();function Ic(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;jc.is.element(e)&&jc.toggleState(e,this.active),jc.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Nc.isIos||jc.trapFocus.call(this.player,this.target,this.active)}}function Fc(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",jc.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),Ic.call(this)}var zc=function(){function e(t){var n=this;xc(this,e),this.player=t,this.prefix=e.prefix,this.name=e.name,this.scrollPosition={x:0,y:0},jc.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){Ic.call(n)}),jc.on(this.player.elements.container,"dblclick",function(e){n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Ac(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),jc.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?jc.is.empty(this.prefix)||this.target[this.prefix+"Request"+this.name]():this.target.requestFullscreen():Fc.call(this,!0))}},{key:"exit",value:function(){if(this.enabled)if(Nc.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!jc.is.empty(this.prefix)){var t="moz"===this.prefix?"Cancel":"Exit";document[""+this.prefix+t+this.name]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else Fc.call(this,!1)}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[""+this.prefix+this.name+"Element"]:document.fullscreenElement)===this.target:jc.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(jc.is.function(document.exitFullscreen))return"";var e="";return["webkit","moz","ms"].some(function(t){return!(!jc.is.function(document[t+"ExitFullscreen"])&&!jc.is.function(document[t+"CancelFullScreen"]))&&(e=t,!0)}),e}},{key:"name",get:function(){return"moz"===this.prefix?"FullScreen":"Fullscreen"}}]),e}(),Rc=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(jc.is.empty(e)||jc.is.empty(t)||!Object.keys(t.i18n).includes(e))return"";var n=t.i18n[e],i={"{seektime}":t.seekTime,"{title}":t.title};return Object.entries(i).forEach(function(e){var t=Cc(e,2),i=t[0],r=t[1];n=jc.replaceAll(n,i,r)}),n},qc={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(jc.is.empty(e)||(this.captions.language=e),jc.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!jc.is.boolean(this.captions.active)){var t=this.storage.get("captions");jc.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!Pc.textTracks)jc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this);else{jc.is.element(this.elements.captions)||(this.elements.captions=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.captions)),jc.insertAfter(this.elements.captions,this.elements.wrapper)),jc.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!jc.is.empty(qc.getTracks.call(this)));var n=qc.getTracks.call(this);if(!jc.is.empty(n)){if(jc.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=jc.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&jc.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){jc.removeElement(e)})})}qc.setLanguage.call(this),qc.show.call(this),jc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){qc.getTracks.call(this).forEach(function(t){jc.on(t,"cuechange",function(t){return qc.setCue.call(e,t)}),t.mode="hidden"});var t=qc.getCurrentTrack.call(this);jc.is.track(t)&&Array.from(t.activeCues||[]).length&&qc.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return jc.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=qc.getTracks.call(this);if(!t.length)return null;var n=t.find(function(t){return t.language.toLowerCase()===e.language});(n||(n=jc.getElement.call(this,"track[default]")),n)||(n=Cc(t,1)[0]);return n},getLabel:function(e){var t=e;return!jc.is.track(t)&&Pc.textTracks&&this.captions.active&&(t=qc.getCurrentTrack.call(this)),jc.is.track(t)?jc.is.empty(t.label)?jc.is.empty(t.language)?Rc("enabled",this.config):e.language.toUpperCase():t.label:Rc("disabled",this.config)},setCue:function(e){var t=jc.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===qc.getCurrentTrack.call(this)&&(jc.is.cue(i)?qc.setText.call(this,i.getCueAsHTML()):qc.setText.call(this,null),jc.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(jc.is.element(this.elements.captions)){var t=jc.createElement("span");jc.emptyElement(this.elements.captions);var n=jc.is.nullOrUndefined(e)?"":e;jc.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){var e=this.storage.get("captions");jc.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(jc.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),jc.toggleState(this.elements.buttons.captions,!0))}},Vc={addStyleHook:function(){jc.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),jc.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void Vc.toggleNativeControls.call(this,!0);jc.is.element(this.elements.controls)||(Uc.inject.call(this),this.listeners.controls()),jc.is.element(this.elements.controls)&&(Vc.toggleNativeControls.call(this),qc.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,Vc.updateVolume.call(this),Vc.timeUpdate.call(this),Vc.checkPlaying.call(this),this.ready=!0,setTimeout(function(){jc.dispatchEvent.call(e,e.media,"ready")},0),Vc.setTitle.call(this))},setTitle:function(){var e=Rc("play",this.config);if(jc.is.string(this.config.title)&&!jc.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),jc.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=jc.getElement.call(this,"iframe");if(!jc.is.element(t))return;jc.is.empty(this.config.title)||this.config.title;t.setAttribute("title",Rc("frameTitle",this.config))}},checkPlaying:function(){jc.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),jc.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),jc.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){jc.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(jc.toggleClass(this.elements.container,this.config.classNames.loading,!1),jc.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){jc.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(jc.is.element(this.elements.inputs.volume)&&Vc.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),jc.is.element(this.elements.buttons.mute)&&jc.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;jc.is.element(e)&&(e.value=t,Uc.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=jc.is.number(t)?t:0,i=jc.is.element(e)?e:this.elements.display.buffer;if(jc.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];jc.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){if(this.supported.ui&&jc.is.event(e)){var t=0;if(e)switch(e.type){case"timeupdate":case"seeking":t=jc.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&Vc.setRange.call(this,this.elements.inputs.seek,t);break;case"playing":case"progress":Vc.setProgress.call(this,this.elements.display.buffer,100*this.buffered)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(jc.is.element(e)&&jc.is.number(t)){var i=jc.getHours(this.duration)>0;e.textContent=jc.formatTime(t,i,n)}},timeUpdate:function(e){var t=!jc.is.element(this.elements.display.duration)&&this.config.invertTime;Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Vc.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=jc.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Vc.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Uc.updateSeekTooltip.call(this)}}},Bc={getSources:function(){return this.isHTML5?this.media.querySelectorAll("source"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=Bc.getSources.call(this);if(jc.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!jc.is.empty(e.getAttribute("size"))});return jc.is.empty(t)?null:jc.dedupe(t.map(function(e){return Number(e.getAttribute("size"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,"quality",{get:function(){var t=Bc.getSources.call(e);if(jc.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute("src")===e.source});return jc.is.empty(n)?null:Number(n[0].getAttribute("size"))},set:function(t){var n=Bc.getSources.call(e);if(!jc.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute("size"))===t});if(!jc.is.empty(i)){var r=i.filter(function(t){return Pc.mime.call(e,t.getAttribute("type"))});if(!jc.is.empty(r)){jc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t});var o=e.currentTime,s=e.playing;e.media.src=r[0].getAttribute("src"),e.media.load(),s&&e.play(),e.currentTime=o,jc.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(jc.removeElement(Bc.getSources()),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},Dc=jc.getBrowser(),Uc={updateRangeFill:function(e){var t=jc.is.event(e)?e.target:e;jc.is.element(t)&&"range"===t.getAttribute("type")&&(t.setAttribute("aria-valuenow",t.value),Dc.isWebkit&&t.style.setProperty("--value",t.value/t.max*100+"%"))},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||Dc.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=Uc.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");jc.setAttributes(r,jc.extend(t,{role:"presentation",focusable:"false"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=Rc(e,this.config),i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,jc.createElement("span",i,n)},createBadge:function(e){if(jc.is.empty(e))return null;var t=jc.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(jc.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=jc.createElement("button"),i=Object.assign({},t),r=jc.toCamelCase(e),o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,e){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=e}return o?(n.appendChild(Uc.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(Uc.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(Uc.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(Uc.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=Rc(s,this.config)):(n.appendChild(Uc.createIcon.call(this,a)),n.appendChild(Uc.createLabel.call(this,s))),jc.extend(i,jc.getAttributesFromSelector(this.config.selectors.buttons[r],i)),jc.setAttributes(n,i),"play"===r?(jc.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=jc.createElement("label",{for:t.id,id:t.id+"-label",class:this.config.classNames.hidden},Rc(e,this.config)),i=jc.createElement("input",jc.extend(jc.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off",role:"slider","aria-labelledby":t.id+"-label","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":0},t));return this.elements.inputs[e]=i,Uc.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=jc.createElement("progress",jc.extend(jc.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:"presentation","aria-hidden":!0},t));if("volume"!==e){n.appendChild(jc.createElement("span",null,"0"));var i="";switch(e){case"played":i=Rc("played",this.config);break;case"buffer":i=Rc("buffered",this.config)}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=jc.createElement("div",{class:"plyr__time"});return t.appendChild(jc.createElement("span",{class:this.config.classNames.hidden},Rc(e,this.config))),t.appendChild(jc.createElement("span",jc.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=jc.createElement("li"),a=jc.createElement("label",{class:this.config.classNames.control}),l=jc.createElement("input",jc.extend(jc.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=jc.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),jc.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&jc.is.element(this.elements.inputs.seek)&&jc.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.inputs.seek.getBoundingClientRect(),r=this.config.classNames.tooltip+"--visible",o=function(e){jc.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(jc.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!jc.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),Vc.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+"%",jc.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&o("mouseenter"===e.type)}}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];jc.toggleHidden(n,!t),jc.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this;if(jc.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");jc.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!jc.is.empty(this.options.quality)&&this.options.quality.length>1;if(Uc.toggleTab.call(this,"quality",i),Uc.checkMenu.call(this),i){jc.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){var i=Uc.getLabel.call(t,"quality",e);Uc.createMenuItem.call(t,e,n,"quality",i,function(e){var n="";switch(e){case 2160:n="4K";break;case 1440:case 1080:case 720:n="HD";break;case 576:n="SD"}return n.length?Uc.createBadge.call(t,n):null}(e))}),Uc.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?Rc("normal",this.config):t+"×";case"quality":return jc.is.number(t)?t+"p":jc.toTitleCase(t);case"captions":return qc.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case"captions":r=this.captions.active?this.options.captions.length>2||!this.options.captions.some(function(e){return"enabled"===e})?this.captions.language:"enabled":"";break;default:if(r=jc.is.empty(n)?this[e]:n,jc.is.empty(r)&&(r=this.config[e].default),!jc.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn("Unsupported value of '"+r+"' for "+e);if(!this.config[e].options.includes(r))return void this.debug.warn("Disabled value of '"+r+"' for "+e)}if(jc.is.element(o)||(o=i&&i.querySelector("ul")),jc.is.element(o)){this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=Uc.getLabel.call(this,e,r);var s=o&&o.querySelector('input[value="'+r+'"]');jc.is.element(s)&&(s.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=qc.getTracks.call(this).length;if(Uc.toggleTab.call(this,"captions",n),jc.emptyElement(t),Uc.checkMenu.call(this),n){var i=qc.getTracks.call(this).map(function(t){return{language:jc.is.empty(t.language)?"enabled":t.language,label:qc.getLabel.call(e,t)}});i.unshift({language:"",label:Rc("disabled",this.config)}),i.forEach(function(n){Uc.createMenuItem.call(e,n.language,t,"language",n.label,"enabled"!==n.language?Uc.createBadge.call(e,n.language.toUpperCase()):null,n.language.toLowerCase()===e.captions.language.toLowerCase())}),this.options.captions=i.map(function(e){return e.language}),Uc.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&jc.is.element(this.elements.settings.panes.speed)){jc.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!jc.is.empty(this.options.speed)&&this.options.speed.length>1;if(Uc.toggleTab.call(this,"speed",n),Uc.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector("ul");jc.toggleHidden(this.elements.settings.tabs.speed,!1),jc.toggleHidden(this.elements.settings.panes.speed,!1),jc.emptyElement(i),this.options.speed.forEach(function(e){var n=Uc.getLabel.call(t,"speed",e);Uc.createMenuItem.call(t,e,i,"speed",n)}),Uc.updateSetting.call(this,"speed",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!jc.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});jc.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(jc.is.element(t)&&jc.is.element(n)){var i=jc.is.boolean(e)?e:jc.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(jc.is.event(e)){var r=jc.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}jc.is.element(n)&&n.setAttribute("aria-expanded",i),jc.is.element(t)&&(t.setAttribute("aria-hidden",!i),jc.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return jc.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(jc.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Pc.transitions&&!Pc.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=Uc.getTabSize.call(this,r);jc.on(s,jc.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",jc.off(s,jc.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(jc.is.empty(this.config.controls))return null;var n=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Uc.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Uc.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Uc.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Uc.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=jc.createElement("div",jc.getAttributesFromSelector(this.config.selectors.progress)),r=Uc.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(Uc.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=jc.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Uc.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Uc.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(Uc.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=jc.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=Uc.createRange.call(this,"volume",jc.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(Uc.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!jc.is.empty(this.config.settings)){var c=jc.createElement("div",{class:"plyr__menu",hidden:""});c.appendChild(Uc.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=jc.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=jc.createElement("div"),f=jc.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=jc.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=jc.createElement("li",{role:"tab",hidden:""}),r=jc.createElement("button",jc.extend(jc.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),Rc(n,t.config)),o=jc.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=jc.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=jc.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},Rc(n,t.config));i.appendChild(r);var o=jc.createElement("ul");i.appendChild(o),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Pc.pip&&n.appendChild(Uc.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Pc.airplay&&n.appendChild(Uc.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(Uc.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Uc.createButton.call(this,"play-large")),this.elements.controls=n,this.isHTML5&&Uc.setQualityMenu.call(this,Bc.getQualityOptions.call(this)),Uc.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Uc.getIconUrl.call(this);t.absolute&&jc.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=jc.is.string(this.config.controls)||jc.is.element(this.config.controls)?this.config.controls:jc.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):Uc.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:qc.getLabel.call(this)});var i=void 0;if(jc.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),jc.is.element(i)||(i=this.elements.container),jc.is.element(n)?i.appendChild(n):n&&i.insertAdjacentHTML("beforeend",n),jc.is.element(this.elements.controls)||jc.findElements.call(this),window.navigator.userAgent.includes("Edge")&&jc.repaint(i),this.config.tooltips.controls){var r=jc.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){jc.toggleClass(t,e.config.classNames.hidden,!1),jc.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},Hc=jc.getBrowser(),Wc=function(){function e(t){xc(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Ac(e,[{key:"handleKey",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i="keydown"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&jc.is.number(n)){if(i){var o=jc.getFocusElement();if(jc.is.element(o)&&jc.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:"toggleMenu",value:function(e){Uc.toggleMenu.call(this.player,e)}},{key:"firstTouch",value:function(){this.player.touch=!0,jc.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),jc.off(document.body,"touchstart",this.firstTouch)}},{key:"global",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&jc.toggleListener(window,"keydown keyup",this.handleKey,e,!1),jc.toggleListener(document.body,"click",this.toggleMenu,e),jc.on(document.body,"touchstart",this.firstTouch)}},{key:"container",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&jc.on(this.player.elements.container,"keydown keyup",this.handleKey,!1),jc.on(this.player.elements.container,"focusout",function(t){jc.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),jc.on(this.player.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){jc.toggleClass(jc.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),this.player.config.hideControls&&jc.on(this.player.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.player.toggleControls(t)})}},{key:"media",value:function(){var e=this;if(jc.on(this.player.media,"timeupdate seeking",function(t){return Vc.timeUpdate.call(e.player,t)}),jc.on(this.player.media,"durationchange loadedmetadata",function(t){return Vc.durationUpdate.call(e.player,t)}),jc.on(this.player.media,"loadeddata",function(){jc.toggleHidden(e.player.elements.volume,!e.player.hasAudio),jc.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),jc.on(this.player.media,"ended",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.showPosterOnEnd&&(e.player.restart(),e.player.media.load())}),jc.on(this.player.media,"progress playing",function(t){return Vc.updateProgress.call(e.player,t)}),jc.on(this.player.media,"volumechange",function(t){return Vc.updateVolume.call(e.player,t)}),jc.on(this.player.media,"playing play pause ended emptied",function(t){return Vc.checkPlaying.call(e.player,t)}),jc.on(this.player.media,"waiting canplay seeked playing",function(t){return Vc.checkLoading.call(e.player,t)}),jc.on(this.player.media,"playing",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=jc.getElement.call(this.player,"."+this.player.config.classNames.video);if(!jc.is.element(t))return;jc.on(t,"click",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&jc.on(this.player.elements.wrapper,"contextmenu",function(e){e.preventDefault()},!1),jc.on(this.player.media,"volumechange",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),jc.on(this.player.media,"ratechange",function(){Uc.updateSetting.call(e.player,"speed"),e.player.storage.set({speed:e.player.speed})}),jc.on(this.player.media,"qualityrequested",function(t){e.player.storage.set({quality:t.detail.quality})}),jc.on(this.player.media,"qualitychange",function(t){Uc.updateSetting.call(e.player,"quality",null,t.detail.quality)}),jc.on(this.player.media,"languagechange",function(){Uc.updateSetting.call(e.player,"captions"),e.player.storage.set({language:e.player.language})}),jc.on(this.player.media,"captionsenabled captionsdisabled",function(){Uc.updateSetting.call(e.player,"captions"),e.player.storage.set({captions:e.player.captions.active})}),jc.on(this.player.media,this.player.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.player.media.error),jc.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,n)})}},{key:"controls",value:function(){var e=this,t=Hc.isIE?"change":"input",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;jc.is.function(r)&&(o=r.call(e.player,t)),o&&jc.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],a=e.player.config.listeners[o],l=jc.is.function(a);jc.on(t,i,function(e){return n(e,r,o)},s&&!l)};i(this.player.elements.buttons.play,"click",this.player.togglePlay,"play"),i(this.player.elements.buttons.restart,"click",this.player.restart,"restart"),i(this.player.elements.buttons.rewind,"click",this.player.rewind,"rewind"),i(this.player.elements.buttons.fastForward,"click",this.player.forward,"fastForward"),i(this.player.elements.buttons.mute,"click",function(){e.player.muted=!e.player.muted},"mute"),i(this.player.elements.buttons.captions,"click",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,"click",function(){e.player.fullscreen.toggle()},"fullscreen"),i(this.player.elements.buttons.pip,"click",function(){e.player.pip="toggle"},"pip"),i(this.player.elements.buttons.airplay,"click",this.player.airplay,"airplay"),i(this.player.elements.buttons.settings,"click",function(t){Uc.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,"click",function(t){t.stopPropagation(),jc.matches(t.target,e.player.config.selectors.inputs.language)?n(t,function(){e.player.language=t.target.value},"language"):jc.matches(t.target,e.player.config.selectors.inputs.quality)?n(t,function(){e.player.quality=t.target.value},"quality"):jc.matches(t.target,e.player.config.selectors.inputs.speed)?n(t,function(){e.player.speed=parseFloat(t.target.value)},"speed"):Uc.showTab.call(e.player,t)}),i(this.player.elements.inputs.seek,t,function(t){e.player.currentTime=t.target.value/t.target.max*e.player.duration},"seek"),this.player.config.toggleInvert&&!jc.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,"click",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,Vc.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},"volume"),Hc.isWebkit&&i(jc.getElements.call(this.player,'input[type="range"]'),"input",function(t){Uc.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,"mouseenter mouseleave mousemove",function(t){return Uc.updateSeekTooltip.call(e.player,t)}),this.player.config.hideControls&&(i(this.player.elements.controls,"mouseenter mouseleave",function(t){e.player.elements.controls.hover=!e.player.touch&&"mouseenter"===t.type}),i(this.player.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.player.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),i(this.player.elements.controls,"focusin focusout",function(t){e.player.toggleControls(t)})),i(this.player.elements.inputs.volume,"wheel",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},"volume",!1)}},{key:"clear",value:function(){this.global(!1)}}]),e}(),Yc=function(){function e(t){xc(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Ac(e,[{key:"get",value:function(t){if(!e.supported)return null;var n=window.localStorage.getItem(this.key);if(jc.is.empty(n))return null;var i=JSON.parse(n);return jc.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&jc.is.object(t)){var n=this.get();jc.is.empty(n)&&(n={}),jc.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){try{if(!("localStorage"in window))return!1;return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),Gc=function(){function e(t){var n=this;xc(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.enabled=t.isHTML5&&t.isVideo&&t.config.ads.enabled&&jc.is.string(this.publisherId)&&this.publisherId.length,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on("loaded",e),n.on("error",t)}),this.load()}return Ac(e,[{key:"load",value:function(){var e=this;this.enabled&&(jc.is.object(window.google)&&jc.is.object(window.google.ima)?this.ready():jc.loadScript(this.player.config.urls.googleIMA.api).then(function(){e.ready()}).catch(function(){e.trigger("error",new Error("Google IMA SDK failed to load"))}))}},{key:"ready",value:function(){var e=this;this.startSafetyTimer(12e3,"ready()"),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.listeners(),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=jc.createElement("div",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=setInterval(function(){var t=jc.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=Rc("advertisement",e.player.config)+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),jc.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(jc.is.element(n)){var i=100/t.player.duration*e,r=jc.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger("loaded")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n="ads"+e.replace(/_/g,"").toLowerCase();jc.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger("loaded"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.warn("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;jc.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:"resumeContent",value:function(){this.elements.container.style.zIndex="",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.trigger("error"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("loaded",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:"trigger",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];jc.is.array(o)&&o.forEach(function(e){jc.is.function(e)&&e.apply(t,i)})}},{key:"on",value:function(e,t){return jc.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){jc.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:"tagUrl",get:function(){var e={AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return"https://go.aniview.com/api/adserver6/vast/?"+jc.buildUrlParams(e)}}]),e}();function Kc(e){switch(e){case"hd2160":return 2160;case 2160:return"hd2160";case"hd1440":return 1440;case 1440:return"hd1440";case"hd1080":return 1080;case 1080:return"hd1080";case"hd720":return 720;case 720:return"hd720";case"large":return 480;case 480:return"large";case"medium":return 360;case 360:return"medium";case"small":return 240;case 240:return"small";default:return"default"}}var Qc={setup:function(){var e=this;jc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Qc.setAspectRatio.call(this),jc.is.object(window.YT)&&jc.is.function(window.YT.Player)?Qc.ready.call(this):(jc.loadScript(this.config.urls.youtube.api).catch(function(t){e.debug.warn("YouTube API failed to load",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Qc.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(jc.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(jc.is.empty(n))return this.config.title=n,void Vc.setTitle.call(this)}var i=this.config.keys.google;if(jc.is.string(i)&&!jc.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";jc.fetch(r).then(function(e){jc.is.object(e)&&(t.config.title=e.items[0].snippet.title,Vc.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(jc.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");jc.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=jc.parseYouTubeId(n),r=jc.generateId(e.provider),o=jc.createElement("div",{id:r});e.media=jc.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!jc.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,jc.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(){jc.dispatchEvent.call(e,e.media,"qualitychange",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),jc.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Qc.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){var i=e.media.paused;e.media.seeking=!0,jc.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t),i&&e.pause()}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return Kc(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(Kc(i)),jc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),jc.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=jc.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),jc.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),jc.dispatchEvent.call(e,e.media,"timeupdate"),jc.dispatchEvent.call(e,e.media,"durationchange"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&jc.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),jc.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return Vc.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),t.data){case-1:jc.dispatchEvent.call(e,e.media,"timeupdate"),e.media.buffered=i.getVideoLoadedFraction(),jc.dispatchEvent.call(e,e.media,"progress");break;case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):jc.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&jc.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&jc.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,jc.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=setInterval(function(){jc.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),jc.dispatchEvent.call(e,e.media,"durationchange")),Uc.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),jc.is.empty(n)?n:jc.dedupe(n.map(function(e){return Kc(e)}))));break;case 2:e.media.paused=!0,jc.dispatchEvent.call(e,e.media,"pause")}jc.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},Jc={setup:function(){var e=this;jc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Jc.setAspectRatio.call(this),jc.is.object(window.Vimeo)?Jc.ready.call(this):jc.loadScript(this.config.urls.vimeo.api).then(function(){Jc.ready.call(e)}).catch(function(t){e.debug.warn("Vimeo API failed to load",t)})},setAspectRatio:function(e){var t=jc.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+"%",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform="translateY(-"+i+"%)"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media",playsinline:!this.config.fullscreen.iosNative},i=jc.buildUrlParams(n),r=t.media.getAttribute("src");jc.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=jc.parseVimeoId(r),s=jc.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=jc.createElement("div");l.appendChild(s),t.media=jc.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,jc.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e).catch(function(){}),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,jc.dispatchEvent.call(t,t.media,"ratechange")}).catch(function(e){"Error"===e.name&&Uc.setSpeedMenu.call(t,[])})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,jc.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!jc.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,jc.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=jc.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=jc.getAspectRatio(t[0],t[1]);Jc.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,Vc.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,jc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,jc.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,qc.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=jc.stripHTML(e.cues[0].text)),qc.setText.call(t,n)}),t.embed.on("loaded",function(){jc.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&jc.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,jc.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,jc.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,jc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,jc.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&jc.dispatchEvent.call(t,t.media,"canplaythrough"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,jc.dispatchEvent.call(t,t.media,"durationchange"))})}),t.embed.on("seeked",function(){t.media.seeking=!1,jc.dispatchEvent.call(t,t.media,"seeked"),jc.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,jc.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,jc.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return Vc.build.call(t)},0)}},$c=jc.getBrowser(),Xc={setup:function(){if(this.media)if(jc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),jc.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&jc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(jc.toggleClass(this.elements.container,this.config.classNames.pip.supported,Pc.pip&&this.isHTML5&&this.isVideo),jc.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Pc.airplay&&this.isHTML5),jc.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),jc.toggleClass(this.elements.container,this.config.classNames.isIos,$c.isIos),jc.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch)),this.isVideo&&(this.elements.wrapper=jc.createElement("div",{class:this.config.classNames.video}),jc.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":Qc.setup.call(this);break;case"vimeo":Jc.setup.call(this)}else this.isHTML5&&(Vc.setTitle.call(this),Bc.extend.call(this));else this.debug.warn("No media element found!")}},Zc={insertElements:function(e,t){var n=this;jc.is.string(t)?jc.insertElement(e,this.media,{src:t}):jc.is.array(t)&&t.forEach(function(t){jc.insertElement(e,n.media,t)})},change:function(e){var t=this;jc.is.object(e)&&"sources"in e&&e.sources.length?(Bc.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],jc.removeElement(t.media),t.media=null,jc.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=jc.is.empty(e.sources[0].provider)?_c.html5:e.sources[0].provider,t.supported=Pc.check(t.type,t.provider,t.config.playsinline),t.provider+":"+t.type){case"html5:video":t.media=jc.createElement("video");break;case"html5:audio":t.media=jc.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=jc.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),jc.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.playsinline&&t.media.setAttribute("playsinline","")),Vc.addStyleHook.call(t),t.isHTML5&&Zc.insertElements.call(t,"source",e.sources),t.config.title=e.title,Xc.setup.call(t),t.isHTML5&&("tracks"in e&&Zc.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&Vc.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(xc(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Pc.touch,this.media=t,jc.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||jc.is.nodeList(this.media)||jc.is.array(this.media))&&(this.media=this.media[0]),this.config=jc.extend({},Tc,n||{},function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[],captions:[]},this.debug=new Lc(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Pc),!jc.is.nullOrUndefined(this.media)&&jc.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Pc.check().api){setTimeout(function(){var e=i.media.cloneNode(!0);e.getAttribute("autoplay")&&e.pause(),i.elements.original=e},0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),jc.is.element(o)){if(s=o.getAttribute("src"),this.provider=jc.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=jc.getUrlParams(s),!jc.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=l.includes(a.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(jc.is.empty(this.provider)||!Object.keys(_c).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=kc.video;break;case"video":case"audio":this.type=r,this.provider=_c.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.playsinline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Pc.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new Wc(this),this.storage=new Yc(this),this.media.plyr=this,jc.is.element(this.elements.container)||(this.elements.container=jc.createElement("div"),jc.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),Vc.addStyleHook.call(this),Xc.setup.call(this),this.config.debug&&jc.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Vc.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new zc(this),this.ads=new Gc(this),this.config.autoplay&&this.play()):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return Ac(e,[{key:"play",value:function(){return jc.is.function(this.media.play)?this.media.play():null}},{key:"pause",value:function(){this.playing&&jc.is.function(this.media.pause)&&this.media.pause()}},{key:"togglePlay",value:function(e){(jc.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.isHTML5?this.media.load():jc.is.function(this.media.stop)&&this.media.stop()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(jc.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(jc.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(jc.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(jc.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui){var t=jc.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,jc.toggleState(this.elements.buttons.captions,this.captions.active),jc.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),jc.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Pc.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(jc.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(!jc.is.boolean(e))if(jc.is.event(e)){r="enterfullscreen"===e.type;i=["touchstart","touchmove","mouseenter","mousemove","focusin"].includes(e.type),["touchmove","touchend","mousemove"].includes(e.type)&&(n=2e3),this.touch||"focusin"!==e.type||(n=3e3,jc.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))}else i=jc.hasClass(this.elements.container,this.config.classNames.hideControls);if(clearTimeout(this.timers.controls),i||this.paused||this.loading){if(jc.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&jc.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;this.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){jc.is.element(t.elements.controls)&&((!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(jc.hasClass(t.elements.container,t.config.classNames.hideControls)||jc.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),jc.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(jc.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!jc.is.empty(t.config.settings)&&Uc.toggleMenu.call(t,!1))))},n))}}},{key:"on",value:function(e,t){jc.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){jc.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(jc.removeElement(t.elements.buttons.play),jc.removeElement(t.elements.captions),jc.removeElement(t.elements.controls),jc.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),jc.is.function(e)&&e()):(t.listeners.clear(),jc.replaceElement(t.elements.original,t.elements.container),jc.dispatchEvent.call(t,t.elements.original,"destroyed",!0),jc.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+":"+this.type){case"html5:video":case"html5:audio":clearTimeout(this.timers.loading),Vc.toggleNativeControls.call(this,!0),i();break;case"youtube:video":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&jc.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:"supports",value:function(e){return Pc.mime.call(this,e)}},{key:"isHTML5",get:function(){return Boolean(this.provider===_c.html5)}},{key:"isEmbed",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:"isYouTube",get:function(){return Boolean(this.provider===_c.youtube)}},{key:"isVimeo",get:function(){return Boolean(this.provider===_c.vimeo)}},{key:"isVideo",get:function(){return Boolean(this.type===kc.video)}},{key:"isAudio",get:function(){return Boolean(this.type===kc.audio)}},{key:"paused",get:function(){return Boolean(this.media.paused)}},{key:"playing",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2))}},{key:"ended",get:function(){return Boolean(this.media.ended)}},{key:"currentTime",set:function(e){var t=0;jc.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t,this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"buffered",get:function(){var e=this.media.buffered;return jc.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:"seeking",get:function(){return Boolean(this.media.seeking)}},{key:"duration",get:function(){var e=parseFloat(this.config.duration),t=this.media?Number(this.media.duration):0;return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;jc.is.string(t)&&(t=Number(t)),jc.is.number(t)||(t=this.storage.get("volume")),jc.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!jc.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:"muted",set:function(e){var t=e;jc.is.boolean(t)||(t=this.storage.get("muted")),jc.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;jc.is.number(e)&&(t=e),jc.is.number(t)||(t=this.storage.get("speed")),jc.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return Number(this.media.playbackRate)}},{key:"quality",set:function(e){var t=null;if(jc.is.empty(e)||(t=Number(e)),jc.is.number(t)&&0!==t||(t=this.storage.get("quality")),jc.is.number(t)||(t=this.config.quality.selected),jc.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=jc.closest(this.options.quality,t);this.debug.warn("Unsupported quality option: "+t+", using "+n+" instead"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=jc.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:"source",set:function(e){Zc.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?jc.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=jc.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:"language",set:function(e){if(jc.is.string(e))if(jc.is.empty(e))this.toggleCaptions(!1);else{var t=e.toLowerCase();this.options.captions.includes(t)?(this.toggleCaptions(!0),"enabled"!==t&&this.language!==t&&(this.captions.language=t,qc.setText.call(this,null),qc.setLanguage.call(this),jc.dispatchEvent.call(this,this.media,"languagechange"))):this.debug.warn("Unsupported language option: "+t)}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Pc.pip){var i=jc.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Pc.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Pc.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return jc.loadSprite(e,t)}}]),e}()}); //# sourceMappingURL=plyr.polyfilled.min.js.map diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map index 835b5027..03b861e8 100644 --- a/dist/plyr.polyfilled.min.js.map +++ b/dist/plyr.polyfilled.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","types.js","support.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","f","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","f$1","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","LIBRARY","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesConstructor","original","_arraySpeciesCreate","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","f$2","gOPD","getOwnPropertyDescriptor","f$3","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_inheritIfRequired","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","f$4","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","_microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","resolve","promise","then","toggle","node","createTextNode","observe","characterData","task","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","f$5","reject","$$resolve","$$reject","_perform","_promiseResolve","x","promiseCapability","newPromiseCapability","microtask","$Promise","empty","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","promiseResolve","all","remaining","$index","alreadyCalled","race","f$6","_wksDefine","$Symbol","charAt","wksExt","_enumKeys","symbols","windowNames","f$7","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","_stringAt","TO_STRING","pos","charCodeAt","$at","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","_flags","ignoreCase","multiline","unicode","sticky","flags","RegExp","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","userLanguage","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","href","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","boolean","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","i18n","seekTime","title","stored","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","setTitle","isEmbed","stopped","paused","toggleControls","loading","timers","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","checked","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","lang","default","unshift","_this4","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","base","buildUrlParams","mapQualityUnit","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","levels","getAvailableQualityLevels","level","Vimeo","padding","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","insertElement","attribute","cancelRequests","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","unload","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"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CExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAKw/B,kBAAmB,IAGrBE,GAGTJ,GAAYv/B,UAAYzE,OAAO2kC,MAAMlgC,UACrCzE,OAAOgkC,YAAcA,GCtCvB,IC4IcY,GD5IDC,UACF,gBACE,gBACF,SAGEC,UACF,cACA,SERLC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACG3Z,UAAU4Z,UAAY5Z,UAAU6Z,cAAchhC,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAG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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\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 bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]}
\ No newline at end of file +{"version":3,"sources":["../../node_modules/core-js/modules/_global.js","../../node_modules/core-js/modules/_core.js","../../node_modules/core-js/modules/_is-object.js","../../node_modules/core-js/modules/_an-object.js","../../node_modules/core-js/modules/_fails.js","../../node_modules/core-js/modules/_descriptors.js","../../node_modules/core-js/modules/_dom-create.js","../../node_modules/core-js/modules/_ie8-dom-define.js","../../node_modules/core-js/modules/_to-primitive.js","../../node_modules/core-js/modules/_object-dp.js","../../node_modules/core-js/modules/_property-desc.js","../../node_modules/core-js/modules/_hide.js","../../node_modules/core-js/modules/_has.js","../../node_modules/core-js/modules/_uid.js","../../node_modules/core-js/modules/_redefine.js","../../node_modules/core-js/modules/_a-function.js","../../node_modules/core-js/modules/_ctx.js","../../node_modules/core-js/modules/_export.js","../../node_modules/core-js/modules/_typed.js","../../node_modules/core-js/modules/_library.js","../../node_modules/core-js/modules/_redefine-all.js","../../node_modules/core-js/modules/_an-instance.js","../../node_modules/core-js/modules/_to-integer.js","../../node_modules/core-js/modules/_to-length.js","../../node_modules/core-js/modules/_to-index.js","../../node_modules/core-js/modules/_cof.js","../../node_modules/core-js/modules/_iobject.js","../../node_modules/core-js/modules/_defined.js","../../node_modules/core-js/modules/_to-iobject.js","../../node_modules/core-js/modules/_to-absolute-index.js","../../node_modules/core-js/modules/_array-includes.js","../../node_modules/core-js/modules/_shared.js","../../node_modules/core-js/modules/_shared-key.js","../../node_modules/core-js/modules/_object-keys-internal.js","../../node_modules/core-js/modules/_enum-bug-keys.js","../../node_modules/core-js/modules/_object-gopn.js","../../node_modules/core-js/modules/_to-object.js","../../node_modules/core-js/modules/_array-fill.js","../../node_modules/core-js/modules/_wks.js","../../node_modules/core-js/modules/_set-to-string-tag.js","../../node_modules/core-js/modules/_typed-buffer.js","../../node_modules/core-js/modules/_species-constructor.js","../../node_modules/core-js/modules/_set-species.js","../../node_modules/core-js/modules/es6.typed.array-buffer.js","../../node_modules/core-js/modules/_classof.js","../../node_modules/core-js/modules/_iterators.js","../../node_modules/core-js/modules/_is-array-iter.js","../../node_modules/core-js/modules/_object-keys.js","../../node_modules/core-js/modules/_object-dps.js","../../node_modules/core-js/modules/_html.js","../../node_modules/core-js/modules/_object-create.js","../../node_modules/core-js/modules/_object-gpo.js","../../node_modules/core-js/modules/core.get-iterator-method.js","../../node_modules/core-js/modules/_is-array.js","../../node_modules/core-js/modules/_array-species-constructor.js","../../node_modules/core-js/modules/_array-species-create.js","../../node_modules/core-js/modules/_array-methods.js","../../node_modules/core-js/modules/_add-to-unscopables.js","../../node_modules/core-js/modules/_iter-step.js","../../node_modules/core-js/modules/_iter-create.js","../../node_modules/core-js/modules/_iter-define.js","../../node_modules/core-js/modules/es6.array.iterator.js","../../node_modules/core-js/modules/_iter-detect.js","../../node_modules/core-js/modules/_array-copy-within.js","../../node_modules/core-js/modules/_object-pie.js","../../node_modules/core-js/modules/_object-gopd.js","../../node_modules/core-js/modules/_typed-array.js","../../node_modules/core-js/modules/es6.typed.int8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-array.js","../../node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","../../node_modules/core-js/modules/es6.typed.int16-array.js","../../node_modules/core-js/modules/es6.typed.uint16-array.js","../../node_modules/core-js/modules/es6.typed.int32-array.js","../../node_modules/core-js/modules/es6.typed.uint32-array.js","../../node_modules/core-js/modules/es6.typed.float32-array.js","../../node_modules/core-js/modules/es6.typed.float64-array.js","../../node_modules/core-js/modules/_iter-call.js","../../node_modules/core-js/modules/_for-of.js","../../node_modules/core-js/modules/_meta.js","../../node_modules/core-js/modules/_validate-collection.js","../../node_modules/core-js/modules/_collection-strong.js","../../node_modules/core-js/modules/_set-proto.js","../../node_modules/core-js/modules/_inherit-if-required.js","../../node_modules/core-js/modules/_collection.js","../../node_modules/core-js/modules/_object-gops.js","../../node_modules/core-js/modules/es6.map.js","../../node_modules/core-js/modules/es6.set.js","../../node_modules/core-js/modules/_object-assign.js","../../node_modules/core-js/modules/_collection-weak.js","../../node_modules/core-js/modules/es6.weak-map.js","../../node_modules/core-js/modules/es6.weak-set.js","../../node_modules/core-js/modules/es6.reflect.apply.js","../../node_modules/core-js/modules/_invoke.js","../../node_modules/core-js/modules/_bind.js","../../node_modules/core-js/modules/es6.reflect.construct.js","../../node_modules/core-js/modules/es6.reflect.define-property.js","../../node_modules/core-js/modules/es6.reflect.delete-property.js","../../node_modules/core-js/modules/es6.reflect.get.js","../../node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.reflect.get-prototype-of.js","../../node_modules/core-js/modules/es6.reflect.has.js","../../node_modules/core-js/modules/es6.reflect.is-extensible.js","../../node_modules/core-js/modules/_own-keys.js","../../node_modules/core-js/modules/es6.reflect.own-keys.js","../../node_modules/core-js/modules/es6.reflect.prevent-extensions.js","../../node_modules/core-js/modules/es6.reflect.set.js","../../node_modules/core-js/modules/es6.reflect.set-prototype-of.js","../../node_modules/core-js/modules/_task.js","../../node_modules/core-js/modules/_microtask.js","../../node_modules/core-js/modules/_new-promise-capability.js","../../node_modules/core-js/modules/es6.promise.js","../../node_modules/core-js/modules/_perform.js","../../node_modules/core-js/modules/_promise-resolve.js","../../node_modules/core-js/modules/_wks-ext.js","../../node_modules/core-js/modules/_wks-define.js","../../node_modules/core-js/modules/_enum-keys.js","../../node_modules/core-js/modules/_object-gopn-ext.js","../../node_modules/core-js/modules/es6.symbol.js","../../node_modules/core-js/modules/_object-sap.js","../../node_modules/core-js/modules/es6.object.freeze.js","../../node_modules/core-js/modules/es6.object.seal.js","../../node_modules/core-js/modules/es6.object.prevent-extensions.js","../../node_modules/core-js/modules/es6.object.is-frozen.js","../../node_modules/core-js/modules/es6.object.is-sealed.js","../../node_modules/core-js/modules/es6.object.is-extensible.js","../../node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","../../node_modules/core-js/modules/es6.object.get-prototype-of.js","../../node_modules/core-js/modules/es6.object.keys.js","../../node_modules/core-js/modules/es6.object.get-own-property-names.js","../../node_modules/core-js/modules/es6.object.assign.js","../../node_modules/core-js/modules/_same-value.js","../../node_modules/core-js/modules/es6.object.is.js","../../node_modules/core-js/modules/es6.function.name.js","../../node_modules/core-js/modules/es6.string.raw.js","../../node_modules/core-js/modules/es6.string.from-code-point.js","../../node_modules/core-js/modules/_string-at.js","../../node_modules/core-js/modules/es6.string.code-point-at.js","../../node_modules/core-js/modules/_string-repeat.js","../../node_modules/core-js/modules/es6.string.repeat.js","../../node_modules/core-js/modules/_is-regexp.js","../../node_modules/core-js/modules/_string-context.js","../../node_modules/core-js/modules/_fails-is-regexp.js","../../node_modules/core-js/modules/es6.string.starts-with.js","../../node_modules/core-js/modules/es6.string.ends-with.js","../../node_modules/core-js/modules/es6.string.includes.js","../../node_modules/core-js/modules/_flags.js","../../node_modules/core-js/modules/es6.regexp.flags.js","../../node_modules/core-js/modules/_fix-re-wks.js","../../node_modules/core-js/modules/es6.regexp.match.js","../../node_modules/core-js/modules/es6.regexp.replace.js","../../node_modules/core-js/modules/es6.regexp.split.js","../../node_modules/core-js/modules/es6.regexp.search.js","../../node_modules/core-js/modules/_create-property.js","../../node_modules/core-js/modules/es6.array.from.js","../../node_modules/core-js/modules/es6.array.of.js","../../node_modules/core-js/modules/es6.array.copy-within.js","../../node_modules/core-js/modules/es6.array.find.js","../../node_modules/core-js/modules/es6.array.find-index.js","../../node_modules/core-js/modules/es6.array.fill.js","../../node_modules/core-js/modules/es6.number.is-finite.js","../../node_modules/core-js/modules/_is-integer.js","../../node_modules/core-js/modules/es6.number.is-integer.js","../../node_modules/core-js/modules/es6.number.is-safe-integer.js","../../node_modules/core-js/modules/es6.number.is-nan.js","../../node_modules/core-js/modules/es6.number.epsilon.js","../../node_modules/core-js/modules/es6.number.min-safe-integer.js","../../node_modules/core-js/modules/es6.number.max-safe-integer.js","../../node_modules/core-js/modules/_math-log1p.js","../../node_modules/core-js/modules/es6.math.acosh.js","../../node_modules/core-js/modules/es6.math.asinh.js","../../node_modules/core-js/modules/es6.math.atanh.js","../../node_modules/core-js/modules/_math-sign.js","../../node_modules/core-js/modules/es6.math.cbrt.js","../../node_modules/core-js/modules/es6.math.clz32.js","../../node_modules/core-js/modules/es6.math.cosh.js","../../node_modules/core-js/modules/_math-expm1.js","../../node_modules/core-js/modules/es6.math.expm1.js","../../node_modules/core-js/modules/_math-fround.js","../../node_modules/core-js/modules/es6.math.fround.js","../../node_modules/core-js/modules/es6.math.hypot.js","../../node_modules/core-js/modules/es6.math.imul.js","../../node_modules/core-js/modules/es6.math.log1p.js","../../node_modules/core-js/modules/es6.math.log10.js","../../node_modules/core-js/modules/es6.math.log2.js","../../node_modules/core-js/modules/es6.math.sign.js","../../node_modules/core-js/modules/es6.math.sinh.js","../../node_modules/core-js/modules/es6.math.tanh.js","../../node_modules/core-js/modules/es6.math.trunc.js","../../node_modules/core-js/modules/es7.array.includes.js","../../node_modules/core-js/modules/_object-to-array.js","../../node_modules/core-js/modules/es7.object.values.js","../../node_modules/core-js/modules/es7.object.entries.js","../../node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","../../node_modules/core-js/modules/_string-pad.js","../../node_modules/core-js/modules/_user-agent.js","../../node_modules/core-js/modules/es7.string.pad-start.js","../../node_modules/core-js/modules/es7.string.pad-end.js","../../node_modules/core-js/modules/web.timers.js","../../node_modules/core-js/modules/web.immediate.js","../../node_modules/core-js/modules/web.dom.iterable.js","../../node_modules/regenerator-runtime/runtime.js","../../node_modules/custom-event-polyfill/custom-event-polyfill.js","types.js","support.js","defaults.js","../../node_modules/loadjs/dist/loadjs.umd.js","utils.js","console.js","fullscreen.js","i18n.js","captions.js","ui.js","html5.js","controls.js","listeners.js","storage.js","plugins/ads.js","plugins/youtube.js","plugins/vimeo.js","media.js","source.js","plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","f","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","f$1","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","LIBRARY","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesConstructor","original","_arraySpeciesCreate","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","f$2","gOPD","getOwnPropertyDescriptor","f$3","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_inheritIfRequired","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","f$4","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","_microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","resolve","promise","then","toggle","node","createTextNode","observe","characterData","task","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","f$5","reject","$$resolve","$$reject","_perform","_promiseResolve","x","promiseCapability","newPromiseCapability","microtask","$Promise","empty","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","promiseResolve","all","remaining","$index","alreadyCalled","race","f$6","_wksDefine","$Symbol","charAt","wksExt","_enumKeys","symbols","windowNames","f$7","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","_stringAt","TO_STRING","pos","charCodeAt","$at","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","_flags","ignoreCase","multiline","unicode","sticky","flags","RegExp","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","userLanguage","factory","devnull","bundleIdCache","bundleResultCache","bundleCallbackQueue","publish","bundleId","pathsNotFound","q","executeCallbacks","depsNotFound","success","loadFile","path","callbackFn","numTries","isCss","doc","maxTries","numRetries","beforeCallbackFn","before","pathStripped","rel","href","onload","onerror","onbeforeload","ev","sheet","cssText","loadjs","paths","arg1","arg2","trim","numWaiting","loadFiles","ready","deps","bundleIds","subscribe","isDefined","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","hasId","exists","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","injectSprite","innerHTML","body","insertBefore","childNodes","prefix","elements","targets","element","child","cloneNode","parentNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","_ref","_ref2","sel","existingAttributes","existing","selector","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","querySelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","fastForward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","callback","passive","capture","function","Node","toggleListener","events","options","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","boolean","current","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","toUpperCase","substr","toLowerCase","replaceAll","toTitleCase","toPascalCase","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","item","curr","youtube","vimeo","$2","parser","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","playsinline","api","ui","browser","getBrowser","canPlayInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","update","native","iosNative","playing","webkitEnterFullscreen","requestFullscreen","webkitExitFullscreen","action","cancelFullScreen","exitFullscreen","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","i18n","seekTime","title","stored","isYouTube","textTracks","setCaptionsMenu","getAttributesFromSelector","insertAfter","getTracks","tracks","isIE","URL","track","hostname","location","protocol","blob","createObjectURL","setLanguage","show","setCue","mode","currentTrack","getCurrentTrack","activeCues","isVimeo","embed","enableTextTrack","_this2","label","cue","setText","getCueAsHTML","emptyElement","caption","uiSupported","listeners","inject","setup","muted","speed","loop","quality","updateVolume","timeUpdate","checkPlaying","setTitle","isEmbed","stopped","paused","toggleControls","loading","timers","failed","networkState","_this3","setRange","updateRangeFill","getElementsByTagName","nodeValue","getPercentage","setProgress","buffered","invert","invertTime","updateTimeDisplay","seeking","updateProgress","hasDuration","displayDuration","updateSeekTooltip","html5","getSources","sizes","dedupe","mime","load","blankVideo","isWebkit","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","setAttributeNS","attr","hidden","badge","menu","buttonType","toCamelCase","labelPressed","iconPressed","control","createIcon","createLabel","suffix","checked","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","_toggle","touch","pageX","parseFloat","setting","tab","tabs","pane","panes","toggleTab","checkMenu","sorting","getLabel","createMenuItem","createBadge","getBadge","updateSetting","lang","default","unshift","_this4","form","isMenuItem","isButton","stopPropagation","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","_this5","back","setQualityMenu","getQualityOptions","setSpeedMenu","loadSprite","findElements","repaint","labels","_this6","Listeners","lastKey","handleKey","toggleMenu","firstTouch","which","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","forward","toggleCaptions","isTouch","keyboard","tabFocus","hideControls","durationUpdate","hasAudio","showPosterOnEnd","checkLoading","ads","initialized","managerPromise","clickToPlay","ended","disableContextMenu","inputEvent","proxy","defaultHandler","customHandlerKey","customHandler","returned","hasCustomHandler","showTab","toggleInvert","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","Storage","json","removeItem","Ads","publisherId","manager","loader","cuePoints","safetyTimer","countdownTimer","google","ima","loadScript","urls","googleIMA","trigger","startSafetyTimer","clearSafetyTimer","setupIMA","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","tagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","getRemainingTime","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this7","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this8","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this9","adError","zIndex","_this10","destroy","handlers","_this11","Date","base","buildUrlParams","mapQualityUnit","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","getPlaybackQuality","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","levels","getAvailableQualityLevels","level","Vimeo","padding","transform","parseVimeoId","disableTextTrack","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","insertElement","attribute","cancelRequests","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","soft","unload","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","closest","change","states","webkitPresentationMode","inline"],"mappings":"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CExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAKw/B,kBAAmB,IAGrBE,GAGTJ,GAAYv/B,UAAYzE,OAAO2kC,MAAMlgC,UACrCzE,OAAOgkC,YAAcA,GCtCvB,IC4IcY,GD5IDC,UACF,gBACE,gBACF,SAGEC,UACF,cACA,SERLC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,gDAGG,wDAIC,aAEL,KACA,KACA,KACA,KACA,KACA,IACA,IACA,IACA,IACA,IACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,YACG3Z,UAAU4Z,UAAY5Z,UAAU6Z,cAAchhC,MAAM,KAAK,yBAK3D,YACC,aACC,qBAKF,MACJ,kBAKL,+BAMA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,oBACM,+BACP,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,eACC,iBACC,eACH,aACC,YACF,UACA,YACE,iBACG,mBACD,wBACM,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,iBACK,UACP,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,mBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,mCACK,kCACP,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAG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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\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 bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, playsinline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || canPlayInline);\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\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(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Check directly if codecs specified\n if (type.includes('codecs=')) {\n return media.canPlayType(type).replace(/no/, '');\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\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\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\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\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\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\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.2.0/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 576,\n options: [\n 4320,\n 2880,\n 2160,\n 1440,\n 1080,\n 720,\n 576,\n 480,\n 360,\n 240,\n 'default', // YouTube's \"auto\"\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: (navigator.language || navigator.userLanguage).split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n // 'restart',\n // 'rewind',\n 'play',\n // 'fast-forward',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n fastForward: 'Forward {seektime} secs',\n seek: 'Seek',\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 enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\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 },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\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 fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adscontentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\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 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 played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\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 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 },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\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 },\n};\n\nexport default defaults;\n","(function(root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.loadjs = factory();\n }\n}(this, function() {\n/**\n * Global dependencies.\n * @global {Object} document - DOM\n */\n\nvar devnull = function() {},\n bundleIdCache = {},\n bundleResultCache = {},\n bundleCallbackQueue = {};\n\n\n/**\n * Subscribe to bundle load event.\n * @param {string[]} bundleIds - Bundle ids\n * @param {Function} callbackFn - The callback function\n */\nfunction subscribe(bundleIds, callbackFn) {\n // listify\n bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n\n var depsNotFound = [],\n i = bundleIds.length,\n numWaiting = i,\n fn,\n bundleId,\n r,\n q;\n\n // define callback function\n fn = function (bundleId, pathsNotFound) {\n if (pathsNotFound.length) depsNotFound.push(bundleId);\n\n numWaiting--;\n if (!numWaiting) callbackFn(depsNotFound);\n };\n\n // register callback\n while (i--) {\n bundleId = bundleIds[i];\n\n // execute callback if in result cache\n r = bundleResultCache[bundleId];\n if (r) {\n fn(bundleId, r);\n continue;\n }\n\n // add to callback queue\n q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n q.push(fn);\n }\n}\n\n\n/**\n * Publish bundle load event.\n * @param {string} bundleId - Bundle id\n * @param {string[]} pathsNotFound - List of files not found\n */\nfunction publish(bundleId, pathsNotFound) {\n // exit if id isn't defined\n if (!bundleId) return;\n\n var q = bundleCallbackQueue[bundleId];\n\n // cache result\n bundleResultCache[bundleId] = pathsNotFound;\n\n // exit if queue is empty\n if (!q) return;\n\n // empty callback queue\n while (q.length) {\n q[0](bundleId, pathsNotFound);\n q.splice(0, 1);\n }\n}\n\n\n/**\n * Execute callbacks.\n * @param {Object or Function} args - The callback args\n * @param {string[]} depsNotFound - List of dependencies not found\n */\nfunction executeCallbacks(args, depsNotFound) {\n // accept function as argument\n if (args.call) args = {success: args};\n\n // success and error callbacks\n if (depsNotFound.length) (args.error || devnull)(depsNotFound);\n else (args.success || devnull)(args);\n}\n\n\n/**\n * Load individual file.\n * @param {string} path - The file path\n * @param {Function} callbackFn - The callback function\n */\nfunction 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 pathStripped = path.replace(/^(css|img)!/, ''),\n isCss,\n e;\n\n numTries = numTries || 0;\n\n if (/(^css!|\\.css$)/.test(path)) {\n isCss = true;\n\n // css\n e = doc.createElement('link');\n e.rel = 'stylesheet';\n e.href = pathStripped; //.replace(/^css!/, ''); // remove \"css!\" prefix\n } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\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];\n\n // Note: The following code isolates IE using `hideFocus` and treats empty\n // stylesheets as failures to get around lack of onerror support\n if (isCss && 'hideFocus' in e) {\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`\n result = 'e';\n }\n }\n\n // handle retries in case of load failure\n if (result == 'e') {\n // increment counter\n numTries += 1;\n\n // exit function and try again\n if (numTries < maxTries) {\n return loadFile(path, callbackFn, args, numTries);\n }\n }\n\n // execute callback\n callbackFn(path, result, ev.defaultPrevented);\n };\n\n // add to document (unless callback returns `false`)\n if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n}\n\n\n/**\n * Load multiple files.\n * @param {string[]} paths - The file paths\n * @param {Function} callbackFn - The callback function\n */\nfunction loadFiles(paths, callbackFn, args) {\n // listify paths\n paths = paths.push ? paths : [paths];\n\n var numWaiting = paths.length,\n x = numWaiting,\n pathsNotFound = [],\n fn,\n i;\n\n // define callback function\n fn = function(path, result, defaultPrevented) {\n // handle error\n if (result == 'e') pathsNotFound.push(path);\n\n // handle beforeload event. If defaultPrevented then that means the load\n // will be blocked (ex. Ghostery/ABP on Safari)\n if (result == 'b') {\n if (defaultPrevented) pathsNotFound.push(path);\n else return;\n }\n\n numWaiting--;\n if (!numWaiting) callbackFn(pathsNotFound);\n };\n\n // load scripts\n for (i=0; i < x; i++) loadFile(paths[i], fn, args);\n}\n\n\n/**\n * Initiate script load and register bundle.\n * @param {(string|string[])} paths - The file paths\n * @param {(string|Function)} [arg1] - The bundleId or success callback\n * @param {Function} [arg2] - The success or error callback\n * @param {Function} [arg3] - The error callback\n */\nfunction loadjs(paths, arg1, arg2) {\n var bundleId,\n args;\n\n // bundleId (if string)\n if (arg1 && arg1.trim) bundleId = arg1;\n\n // args (default is {})\n args = (bundleId ? arg2 : arg1) || {};\n\n // throw error if bundle is already defined\n if (bundleId) {\n if (bundleId in bundleIdCache) {\n throw \"LoadJS\";\n } else {\n bundleIdCache[bundleId] = true;\n }\n }\n\n // load scripts\n loadFiles(paths, function (pathsNotFound) {\n // execute callbacks\n executeCallbacks(args, pathsNotFound);\n\n // publish bundle load event\n publish(bundleId, pathsNotFound);\n }, args);\n}\n\n\n/**\n * Execute callbacks when dependencies have been satisfied.\n * @param {(string|string[])} deps - List of bundle ids\n * @param {Object} args - success/error arguments\n */\nloadjs.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\n return loadjs;\n};\n\n\n/**\n * Manually satisfy bundle dependencies.\n * @param {string} bundleId - The bundle id\n */\nloadjs.done = function done(bundleId) {\n publish(bundleId, []);\n};\n\n\n/**\n * Reset loadjs dependencies statuses\n */\nloadjs.reset = function reset() {\n bundleIdCache = {};\n bundleResultCache = {};\n bundleCallbackQueue = {};\n};\n\n\n/**\n * Determine if bundle has already been defined\n * @param String} bundleId - The bundle id\n */\nloadjs.isDefined = function isDefined(bundleId) {\n return bundleId in bundleIdCache;\n};\n\n\n// export\nreturn loadjs;\n\n}));\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport loadjs from 'loadjs';\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch (e) {\n resolve(request.responseText);\n }\n } else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url) {\n return new Promise((resolve, reject) => {\n loadjs(url, {\n success: resolve,\n error: reject,\n });\n });\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n const exists = () => document.querySelectorAll(`#${id}`).length;\n\n function injectSprite(data) {\n // Check again incase of race condition\n if (hasId && exists()) {\n return;\n }\n\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once if ID set\n if (!hasId || !exists()) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n injectSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n injectSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.entries(attributes).forEach(([\n key,\n value,\n ]) => {\n element.setAttribute(key, value);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\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\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n fastForward: utils.getElement.call(this, this.config.selectors.buttons.fastForward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.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);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\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 if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle = false, passive = true, capture = false) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just the capture boolean for browsers with no passive listener support\n let options = capture;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive,\n // Whether the listener is a capturing listener or not\n capture,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events = '', callback, passive = true, capture = false) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type = '', bubbles = false, detail = {}) {\n // Bail if no element\n if (!utils.is.element(element) || utils.is.empty(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n 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 },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Replace all occurances of a string in a string\n replaceAll(input = '', find = '', replace = '') {\n return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n },\n\n // Convert to title case\n toTitleCase(input = '') {\n return input.toString().replace(/\\w\\S*/g, text => text.charAt(0).toUpperCase() + text.substr(1).toLowerCase());\n },\n\n // Convert string to pascalCase\n toPascalCase(input = '') {\n let string = input.toString();\n\n // Convert kebab case\n string = utils.replaceAll(string, '-', ' ');\n\n // Convert snake case\n string = utils.replaceAll(string, '_', ' ');\n\n // Convert to title case\n string = utils.toTitleCase(string);\n\n // Convert to pascal case\n return utils.replaceAll(string, ' ', '');\n },\n\n // Convert string to pascalCase\n toCamelCase(input = '') {\n let string = input.toString();\n\n // Convert to pascal case\n string = utils.toPascalCase(string);\n\n // Convert first character to lowercase\n return string.charAt(0).toLowerCase() + string.slice(1);\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Remove duplicates in an array\n dedupe(array) {\n if (!utils.is.array(array)) {\n return array;\n }\n\n return array.filter((item, index) => array.indexOf(item) === index);\n },\n\n // Get the closest value in an array\n closest(array, value) {\n if (!utils.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 // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.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 },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.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 },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class 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 get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// https://developer.mozilla.org/en-US/docs/Web/API/Fullscreen_API#prefixing\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n this.name = Fullscreen.name;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', event => {\n // Ignore double click in controls\n if (this.player.elements.controls.contains(event.target)) {\n return;\n }\n\n this.toggle();\n });\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.exitFullscreen)) {\n return '';\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}ExitFullscreen`]) || utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n static get name() {\n return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n return (\n (Fullscreen.native || this.player.config.fullscreen.fallback) &&\n this.player.config.fullscreen.enabled &&\n this.player.supported.ui &&\n this.player.isVideo\n );\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}${this.name}Element`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullscreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}Request${this.name}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n (document.cancelFullScreen || document.exitFullscreen).call(document);\n } else if (!utils.is.empty(this.prefix)) {\n const action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n document[`${this.prefix}${action}${this.name}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr internationalization\n// ==========================================================================\n\nimport utils from './utils';\n\nconst i18n = {\n get(key = '', config = {}) {\n if (utils.is.empty(key) || utils.is.empty(config) || !Object.keys(config.i18n).includes(key)) {\n return '';\n }\n\n let string = config.i18n[key];\n\n const replace = {\n '{seektime}': config.seekTime,\n '{title}': config.title,\n };\n\n Object.entries(replace).forEach(([\n key,\n value,\n ]) => {\n string = utils.replaceAll(string, key, value);\n });\n\n return string;\n },\n};\n\nexport default i18n;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.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 }\n\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n const tracks = captions.getTracks.call(this);\n\n if (!tracks.length) {\n return null;\n }\n\n // Get track based on current language\n let track = tracks.find(track => track.language.toLowerCase() === this.language);\n\n // Get the <track> with default attribute\n if (!track) {\n track = utils.getElement.call(this, 'track[default]');\n }\n\n // Get the first track\n if (!track) {\n [track] = tracks;\n }\n\n return track;\n },\n\n // Get UI label for track\n getLabel(track) {\n let currentTrack = track;\n\n if (!utils.is.track(currentTrack) && support.textTracks && this.captions.active) {\n currentTrack = captions.getCurrentTrack.call(this);\n }\n\n if (utils.is.track(currentTrack)) {\n if (!utils.is.empty(currentTrack.label)) {\n return currentTrack.label;\n }\n\n if (!utils.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 // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport i18n from './i18n';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.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();\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n this.listeners.controls();\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality setting\n this.quality = null;\n\n // Reset volume display\n ui.updateVolume.call(this);\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = i18n.get('play', this.config);\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', i18n.get('frameTitle', this.config));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n ui.setProgress.call(this, this.elements.display.buffer, this.buffered * 100);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\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 = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr HTML5 helpers\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\n\nconst html5 = {\n getSources() {\n if (!this.isHTML5) {\n return null;\n }\n\n return this.media.querySelectorAll('source');\n },\n\n // Get quality levels\n getQualityOptions() {\n if (!this.isHTML5) {\n return null;\n }\n\n // Get sources\n const sources = html5.getSources.call(this);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n // Get <source> with size attribute\n const sizes = Array.from(sources).filter(source => !utils.is.empty(source.getAttribute('size')));\n\n // If none, bail\n if (utils.is.empty(sizes)) {\n return null;\n }\n\n // Reduce to unique list\n return utils.dedupe(sizes.map(source => Number(source.getAttribute('size'))));\n },\n\n extend() {\n if (!this.isHTML5) {\n return;\n }\n\n const player = this;\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return null;\n }\n\n const matches = Array.from(sources).filter(source => source.getAttribute('src') === player.source);\n\n if (utils.is.empty(matches)) {\n return null;\n }\n\n return Number(matches[0].getAttribute('size'));\n },\n set(input) {\n // Get sources\n const sources = html5.getSources.call(player);\n\n if (utils.is.empty(sources)) {\n return;\n }\n\n // Get matches for requested size\n const matches = Array.from(sources).filter(source => Number(source.getAttribute('size')) === input);\n\n // No matches for requested size\n if (utils.is.empty(matches)) {\n return;\n }\n\n // Get supported sources\n const supported = matches.filter(source => support.mime.call(player, source.getAttribute('type')));\n\n // No supported sources\n if (utils.is.empty(supported)) {\n return;\n }\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n // Get current state\n const { currentTime, playing } = player;\n\n // Set new source\n player.media.src = supported[0].getAttribute('src');\n\n // Load new source\n player.media.load();\n\n // Resume playing\n if (playing) {\n player.play();\n }\n\n // Restore time\n player.currentTime = currentTime;\n\n // Trigger change event\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: input,\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 }\n\n // Remove child sources\n utils.removeElement(html5.getSources());\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default html5;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport i18n from './i18n';\nimport captions from './captions';\nimport html5 from './html5';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set aria value for https://github.com/sampotts/plyr/issues/905\n range.setAttribute('aria-valuenow', range.value);\n\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> 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.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n focusable: 'false',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = i18n.get(type, this.config);\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = utils.toCamelCase(buttonType);\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (buttonType) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = buttonType;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = i18n.get(label, this.config);\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n id: `${attributes.id}-label`,\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n // A11y fixes for https://github.com/sampotts/plyr/issues/905\n role: 'slider',\n 'aria-labelledby': `${attributes.id}-label`,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n 'aria-valuenow': 0,\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n role: 'presentation',\n 'aria-hidden': true,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = i18n.get('played', this.config);\n break;\n\n case 'buffer':\n suffix = i18n.get('buffered', this.config);\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n i18n.get(type, this.config),\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n const toggle = toggle => {\n utils.toggleClass(this.elements.display.seekTooltip, visible, toggle);\n };\n\n // Hide on touch\n if (this.touch) {\n toggle(false);\n return;\n }\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n toggle(event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the quality menu\n // TODO: Vimeo support\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.options.quality.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 2160:\n label = '4K';\n break;\n\n case 1440:\n case 1080:\n case 720:\n label = 'HD';\n break;\n\n case 576:\n label = 'SD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n // Sort options by the config and then render options\n this.options.quality\n .sort((a, b) => {\n const sorting = this.config.quality.options;\n return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n })\n .forEach(quality => {\n const label = controls.getLabel.call(this, 'quality', quality);\n controls.createMenuItem.call(this, quality, list, type, label, getBadge(quality));\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\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 (utils.is.number(value)) {\n return `${value}p`;\n }\n\n return utils.toTitleCase(value);\n\n case 'captions':\n return captions.getLabel.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container, input) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n if (this.captions.active) {\n if (this.options.captions.length > 2 || !this.options.captions.some(lang => lang === 'enabled')) {\n value = this.captions.language;\n } else {\n value = 'enabled';\n }\n } else {\n value = '';\n }\n\n break;\n\n default:\n value = !utils.is.empty(input) ? input : this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!utils.is.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // If there's no list it means it's not been rendered...\n if (!utils.is.element(list)) {\n return;\n }\n\n // Update the label\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n\n // Find the radio option and check it\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.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\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const toggle = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If there's no captions, bail\n if (!toggle) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: !utils.is.empty(track.language) ? track.language : 'enabled',\n label: captions.getLabel.call(this, track),\n }));\n\n // Add the \"Disabled\" option to turn off captions\n tracks.unshift({\n language: '',\n label: i18n.get('disabled', this.config),\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label,\n track.language !== 'enabled' ? controls.createBadge.call(this, track.language.toUpperCase()) : null,\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n // Store reference\n this.options.captions = tracks.map(track => track.language);\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu(options) {\n // Do nothing if not selected\n if (!this.config.controls.includes('settings') || !this.config.settings.includes('speed')) {\n return;\n }\n\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the speed options\n if (utils.is.array(options)) {\n this.options.speed = options;\n } else if (this.isHTML5 || this.isVimeo) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed) && this.options.speed.length > 1;\n controls.toggleTab.call(this, type, toggle);\n\n // Check if we need to toggle the parent\n controls.checkMenu.call(this);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => {\n const label = controls.getLabel.call(this, 'speed', speed);\n controls.createMenuItem.call(this, speed, list, type, label);\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 { tabs } = this.elements.settings;\n const visible = !utils.is.empty(tabs) && Object.values(tabs).some(tab => !tab.hidden);\n\n utils.toggleHidden(this.elements.settings.menu, !visible);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n\n // Menu and button are required\n if (!utils.is.element(form) || !utils.is.element(button)) {\n return;\n }\n\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n hidden: '',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n i18n.get(type, this.config),\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n i18n.get(type, this.config),\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.isHTML5) {\n controls.setQualityMenu.call(this, html5.getQualityOptions.call(this));\n }\n\n controls.setSpeedMenu.call(this);\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: captions.getLabel.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else if (container) {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nclass Listeners {\n constructor(player) {\n this.player = player;\n this.lastKey = null;\n\n this.handleKey = this.handleKey.bind(this);\n this.toggleMenu = this.toggleMenu.bind(this);\n this.firstTouch = this.firstTouch.bind(this);\n }\n\n // Handle key presses\n handleKey(event) {\n const code = event.keyCode ? event.keyCode : event.which;\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === this.lastKey;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.player.currentTime = this.player.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\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 = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.player.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.player.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.player.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.player.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.player.muted = !this.player.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.player.forward();\n break;\n\n case 37:\n // Arrow back\n this.player.rewind();\n break;\n\n case 70:\n // F key\n this.player.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.player.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.player.loop = !this.player.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.player.fullscreen.enabled && this.player.fullscreen.active && code === 27) {\n this.player.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n this.lastKey = code;\n } else {\n this.lastKey = null;\n }\n }\n\n // Toggle menu\n toggleMenu(event) {\n controls.toggleMenu.call(this.player, event);\n }\n\n // Device is touch enabled\n firstTouch() {\n this.player.touch = true;\n\n // Add touch class\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.isTouch, true);\n\n // Clean up\n utils.off(document.body, 'touchstart', this.firstTouch);\n }\n\n // Global window & document listeners\n global(toggle = true) {\n // Keyboard shortcuts\n if (this.player.config.keyboard.global) {\n utils.toggleListener(window, 'keydown keyup', this.handleKey, toggle, false);\n }\n\n // Click anywhere closes menu\n utils.toggleListener(document.body, 'click', this.toggleMenu, toggle);\n\n // Detect touch by events\n utils.on(document.body, 'touchstart', this.firstTouch);\n }\n\n // Container listeners\n container() {\n // Keyboard shortcuts\n if (!this.player.config.keyboard.global && this.player.config.keyboard.focused) {\n utils.on(this.player.elements.container, 'keydown keyup', this.handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.player.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.player.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.player.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.player.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.player.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.player.toggleControls(event);\n });\n }\n }\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.player.media, 'timeupdate seeking', event => ui.timeUpdate.call(this.player, event));\n\n // Display duration\n utils.on(this.player.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this.player, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.player.media, 'loadeddata', () => {\n utils.toggleHidden(this.player.elements.volume, !this.player.hasAudio);\n utils.toggleHidden(this.player.elements.buttons.mute, !this.player.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.player.media, 'ended', () => {\n // Show poster on end\n if (this.player.isHTML5 && this.player.isVideo && this.player.config.showPosterOnEnd) {\n // Restart\n this.player.restart();\n\n // Re-load media\n this.player.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.player.media, 'progress playing', event => ui.updateProgress.call(this.player, event));\n\n // Handle volume changes\n utils.on(this.player.media, 'volumechange', event => ui.updateVolume.call(this.player, event));\n\n // Handle play/pause\n utils.on(this.player.media, 'playing play pause ended emptied', event => ui.checkPlaying.call(this.player, event));\n\n // Loading state\n utils.on(this.player.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this.player, event));\n\n // Check if media failed to load\n // utils.on(this.player.media, 'play', event => ui.checkFailed.call(this.player, event));\n\n // If autoplay, then load advertisement if required\n // TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows\n utils.on(this.player.media, 'playing', () => {\n if (!this.player.ads) {\n return;\n }\n\n // If ads are enabled, wait for them first\n if (this.player.ads.enabled && !this.player.ads.initialized) {\n // Wait for manager response\n this.player.ads.managerPromise.then(() => this.player.ads.play()).catch(() => this.player.play());\n }\n });\n\n // Click video\n if (this.player.supported.ui && this.player.config.clickToPlay && !this.player.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this.player, `.${this.player.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.player.config.hideControls && this.player.touch && !this.player.paused) {\n return;\n }\n\n if (this.player.paused) {\n this.player.play();\n } else if (this.player.ended) {\n this.player.restart();\n this.player.play();\n } else {\n this.player.pause();\n }\n });\n }\n\n // Disable right click\n if (this.player.supported.ui && this.player.config.disableContextMenu) {\n utils.on(\n this.player.elements.wrapper,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.player.media, 'volumechange', () => {\n // Save to storage\n this.player.storage.set({ volume: this.player.volume, muted: this.player.muted });\n });\n\n // Speed change\n utils.on(this.player.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'speed');\n\n // Save to storage\n this.player.storage.set({ speed: this.player.speed });\n });\n\n // Quality request\n utils.on(this.player.media, 'qualityrequested', event => {\n // Save to storage\n this.player.storage.set({ quality: event.detail.quality });\n });\n\n // Quality change\n utils.on(this.player.media, 'qualitychange', event => {\n // Update UI\n controls.updateSetting.call(this.player, 'quality', null, event.detail.quality);\n });\n\n // Caption language change\n utils.on(this.player.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ language: this.player.language });\n });\n\n // Captions toggle\n utils.on(this.player.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this.player, 'captions');\n\n // Save to storage\n this.player.storage.set({ captions: this.player.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.player.media, this.player.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.player.media.error;\n }\n\n utils.dispatchEvent.call(this.player, this.player.elements.container, event.type, true, detail);\n });\n }\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Run default and custom handlers\n const proxy = (event, defaultHandler, customHandlerKey) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n let returned = true;\n\n // Execute custom handler\n if (hasCustomHandler) {\n returned = customHandler.call(this.player, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (returned && utils.is.function(defaultHandler)) {\n defaultHandler.call(this.player, event);\n }\n };\n\n // Trigger custom and default handlers\n const on = (element, type, defaultHandler, customHandlerKey, passive = true) => {\n const customHandler = this.player.config.listeners[customHandlerKey];\n const hasCustomHandler = utils.is.function(customHandler);\n\n utils.on(element, type, event => proxy(event, defaultHandler, customHandlerKey), passive && !hasCustomHandler);\n };\n\n // Play/pause toggle\n on(this.player.elements.buttons.play, 'click', this.player.togglePlay, 'play');\n\n // Pause\n on(this.player.elements.buttons.restart, 'click', this.player.restart, 'restart');\n\n // Rewind\n on(this.player.elements.buttons.rewind, 'click', this.player.rewind, 'rewind');\n\n // Rewind\n on(this.player.elements.buttons.fastForward, 'click', this.player.forward, 'fastForward');\n\n // Mute toggle\n on(\n this.player.elements.buttons.mute,\n 'click',\n () => {\n this.player.muted = !this.player.muted;\n },\n 'mute',\n );\n\n // Captions toggle\n on(this.player.elements.buttons.captions, 'click', this.player.toggleCaptions);\n\n // Fullscreen toggle\n on(\n this.player.elements.buttons.fullscreen,\n 'click',\n () => {\n this.player.fullscreen.toggle();\n },\n 'fullscreen',\n );\n\n // Picture-in-Picture\n on(\n this.player.elements.buttons.pip,\n 'click',\n () => {\n this.player.pip = 'toggle';\n },\n 'pip',\n );\n\n // Airplay\n on(this.player.elements.buttons.airplay, 'click', this.player.airplay, 'airplay');\n\n // Settings menu\n on(this.player.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this.player, event);\n });\n\n // Settings menu\n on(this.player.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.player.config.selectors.inputs.language)) {\n proxy(\n event,\n () => {\n this.player.language = event.target.value;\n },\n 'language',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.quality)) {\n proxy(\n event,\n () => {\n this.player.quality = event.target.value;\n },\n 'quality',\n );\n } else if (utils.matches(event.target, this.player.config.selectors.inputs.speed)) {\n proxy(\n event,\n () => {\n this.player.speed = parseFloat(event.target.value);\n },\n 'speed',\n );\n } else {\n controls.showTab.call(this.player, event);\n }\n });\n\n // Seek\n on(\n this.player.elements.inputs.seek,\n inputEvent,\n event => {\n this.player.currentTime = event.target.value / event.target.max * this.player.duration;\n },\n 'seek',\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.player.config.toggleInvert && !utils.is.element(this.player.elements.display.duration)) {\n on(this.player.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.player.currentTime === 0) {\n return;\n }\n\n this.player.config.invertTime = !this.player.config.invertTime;\n ui.timeUpdate.call(this.player);\n });\n }\n\n // Volume\n on(\n this.player.elements.inputs.volume,\n inputEvent,\n event => {\n this.player.volume = event.target.value;\n },\n 'volume',\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n on(utils.getElements.call(this.player, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this.player, event.target);\n });\n }\n\n // Seek tooltip\n on(this.player.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this.player, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.player.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mouseenter mouseleave', event => {\n this.player.elements.controls.hover = !this.player.touch && event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n on(this.player.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.player.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n on(this.player.elements.controls, 'focusin focusout', event => {\n this.player.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n on(\n this.player.elements.inputs.volume,\n 'wheel',\n event => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.player.decreaseVolume(step);\n direction = -1;\n } else {\n this.player.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.player.increaseVolume(step);\n direction = 1;\n } else {\n this.player.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.player.media.volume < 1) || (direction === -1 && this.player.media.volume > 0)) {\n event.preventDefault();\n }\n },\n 'volume',\n false,\n );\n }\n\n // Reset on destroy\n clear() {\n this.global(false);\n }\n}\n\nexport default Listeners;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n try {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n if (!Storage.supported) {\n return null;\n }\n\n const store = window.localStorage.getItem(this.key);\n\n if (utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\nimport i18n from '../i18n';\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.publisherId = player.config.ads.publisherId;\n this.enabled = player.isHTML5 && player.isVideo && player.config.ads.enabled && utils.is.string(this.publisherId) && this.publisherId.length;\n this.playing = false;\n this.initialized = false;\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Setup a promise to resolve when the IMA manager is ready\n this.managerPromise = new Promise((resolve, reject) => {\n // The ad is loaded and ready\n this.on('loaded', resolve);\n\n // Ads failed\n this.on('error', reject);\n });\n\n this.load();\n }\n\n /**\n * Load the IMA SDK\n */\n load() {\n if (this.enabled) {\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google) || !utils.is.object(window.google.ima)) {\n utils\n .loadScript(this.player.config.urls.googleIMA.api)\n .then(() => {\n this.ready();\n })\n .catch(() => {\n // Script failed to load or is blocked\n this.trigger('error', new Error('Google IMA SDK failed to load'));\n });\n } else {\n this.ready();\n }\n }\n }\n\n /**\n * Get the ads instance ready\n */\n ready() {\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n // Build the default tag URL\n get tagUrl() {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: location.hostname,\n cb: Date.now(),\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n AV_CDIM2: this.publisherId,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = this.tagUrl;\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(Math.max(this.manager.getRemainingTime(), 0));\n const label = `${i18n.get('advertisement', this.player.config)} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(event) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = event.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n if (!utils.is.empty(this.cuePoints)) {\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < this.player.duration) {\n const seekElement = this.player.elements.progress;\n\n if (utils.is.element(seekElement)) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n }\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.trigger('loaded');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n const event = `ads${type.replace(/_/g, '').toLowerCase()}`;\n utils.dispatchEvent.call(this.player, this.player.media, event);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.trigger('loaded');\n\n // Bubble event\n dispatchEvent(event.type);\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n\n // Fire event\n dispatchEvent(event.type);\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n\n dispatchEvent(event.type);\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n\n dispatchEvent(event.type);\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n case google.ima.AdEvent.Type.MIDPOINT:\n case google.ima.AdEvent.Type.COMPLETE:\n case google.ima.AdEvent.Type.IMPRESSION:\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent(event.type);\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.warn('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n if (utils.is.empty(this.cuePoints)) {\n return;\n }\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n if (this.manager) {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n }\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n this.resumeContent();\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise\n .then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n })\n .catch(() => {});\n }\n\n /**\n * Resume our video\n */\n resumeContent() {\n // Hide the advertisement container\n this.elements.container.style.zIndex = '';\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show the advertisement container\n this.elements.container.style.zIndex = 3;\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.trigger('error');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise\n .then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('loaded', resolve);\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n })\n .catch(() => {});\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n trigger(event, ...args) {\n const handlers = this.events[event];\n\n if (utils.is.array(handlers)) {\n handlers.forEach(handler => {\n if (utils.is.function(handler)) {\n handler.apply(this, args);\n }\n });\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n if (!utils.is.array(this.events[event])) {\n this.events[event] = [];\n }\n\n this.events[event].push(callback);\n\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\n// Standardise YouTube quality unit\nfunction mapQualityUnit(input) {\n switch (input) {\n case 'hd2160':\n return 2160;\n\n case 2160:\n return 'hd2160';\n\n case 'hd1440':\n return 1440;\n\n case 1440:\n return 'hd1440';\n\n case 'hd1080':\n return 1080;\n\n case 1080:\n return 'hd1080';\n\n case 'hd720':\n return 720;\n\n case 720:\n return 'hd720';\n\n case 'large':\n return 480;\n\n case 480:\n return 'large';\n\n case 'medium':\n return 360;\n\n case 360:\n return 'medium';\n\n case 'small':\n return 240;\n\n case 240:\n return 'small';\n\n default:\n return 'default';\n }\n}\n\nfunction mapQualityUnits(levels) {\n if (utils.is.empty(levels)) {\n return levels;\n }\n\n return utils.dedupe(levels.map(level => mapQualityUnit(level)));\n}\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api).catch(error => {\n this.debug.warn('YouTube API failed to load', error);\n });\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange() {\n utils.dispatchEvent.call(player, player.media, 'qualitychange', false, {\n quality: player.media.quality,\n });\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return mapQualityUnit(instance.getPlaybackQuality());\n },\n set(input) {\n const quality = input;\n\n // Set via API\n instance.setPlaybackQuality(mapQualityUnit(quality));\n\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality,\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case -1:\n // Update scrubber\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n break;\n\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, mapQualityUnits(instance.getAvailableQualityLevels()));\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils\n .loadScript(this.config.urls.vimeo.api)\n .then(() => {\n vimeo.ready.call(this);\n })\n .catch(error => {\n this.debug.warn('Vimeo API failed to load', error);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n\n if (this.supported.ui) {\n const height = 240;\n const offset = (height - padding) / (height / 50);\n\n this.media.style.transform = `translateY(-${offset}%)`;\n }\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n playsinline: !this.config.fullscreen.iosNative,\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Disable native text track rendering\n if (player.supported.ui) {\n player.embed.disableTextTrack();\n }\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.pause();\n player.currentTime = 0;\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time).catch(() => {\n // Do nothing\n });\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed\n .setPlaybackRate(input)\n .then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n })\n .catch(error => {\n // Hide menu item (and menu if empty)\n if (error.name === 'Error') {\n controls.setSpeedMenu.call(player, []);\n }\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed\n .getVideoUrl()\n .then(value => {\n currentSrc = value;\n })\n .catch(error => {\n this.debug.warn(error);\n });\n\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n\n // Get duration as if we do it before load, it gives an incorrect value\n // https://github.com/sampotts/plyr/issues/891\n player.embed.getDuration().then(value => {\n if (value !== player.media.duration) {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n });\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport html5 from './html5';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n\n html5.extend.call(this);\n }\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport html5 from './html5';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n html5.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // Reset quality options\n this.options.quality = [];\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.playsinline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.2.0\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Listeners from './listeners';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Touch device\n this.touch = support.touch;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options || {},\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n captions: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n // TODO: Investigate a better solution as I suspect this causes reported double load issues?\n setTimeout(() => {\n const clone = this.media.cloneNode(true);\n\n // Prevent the clone autoplaying\n if (clone.getAttribute('autoplay')) {\n clone.pause();\n }\n\n this.elements.original = clone;\n }, 0);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n\n // TODO: replace fullscreen.iosNative with this playsinline config option\n // YouTube requires the playsinline in the URL\n if (this.isYouTube) {\n this.config.playsinline = truthy.includes(params.playsinline);\n } else {\n this.config.playsinline = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.playsinline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.playsinline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Create listeners\n this.listeners = new Listeners(this);\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Container listeners\n this.listeners.container();\n\n // Global listeners\n this.listeners.global();\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n\n // Autoplay if required\n if (this.config.autoplay) {\n this.play();\n }\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return Boolean(this.provider === providers.html5);\n }\n get isEmbed() {\n return Boolean(this.isYouTube || this.isVimeo);\n }\n get isYouTube() {\n return Boolean(this.provider === providers.youtube);\n }\n get isVimeo() {\n return Boolean(this.provider === providers.vimeo);\n }\n get isVideo() {\n return Boolean(this.type === types.video);\n }\n get isAudio() {\n return Boolean(this.type === types.audio);\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n if (!utils.is.function(this.media.play)) {\n return null;\n }\n\n // If ads are enabled, wait for them first\n /* if (this.ads.enabled && !this.ads.initialized) {\n return this.ads.managerPromise.then(() => this.ads.play()).catch(() => this.media.play());\n } */\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing || !utils.is.function(this.media.pause)) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return Boolean(this.media.paused);\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return Boolean(this.ready && !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true));\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return Boolean(this.media.ended);\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n if (this.isHTML5) {\n this.media.load();\n } else if (utils.is.function(this.media.stop)) {\n this.media.stop();\n }\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime;\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get buffered\n */\n get buffered() {\n const { buffered } = this.media;\n\n // YouTube / Vimeo return a float between 0-1\n if (utils.is.number(buffered)) {\n return buffered;\n }\n\n // HTML5\n // TODO: Handle buffered chunks of the media\n // (i.e. seek to another section buffers only that section)\n if (buffered && buffered.length && this.duration > 0) {\n return buffered.end(0) / this.duration;\n }\n\n return 0;\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return Boolean(this.media.seeking);\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseFloat(this.config.duration);\n\n // True duration\n const realDuration = this.media ? Number(this.media.duration) : 0;\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume manually, reset muted state\n if (!utils.is.empty(value) && this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return Number(this.media.volume);\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return Boolean(this.media.muted);\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return (\n Boolean(this.media.mozHasAudio) ||\n Boolean(this.media.webkitAudioDecodedByteCount) ||\n Boolean(this.media.audioTracks && this.media.audioTracks.length)\n );\n }\n\n /**\n * Set playback speed\n * @param {number} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return Number(this.media.playbackRate);\n }\n\n /**\n * Set playback quality\n * Currently HTML5 & YouTube only\n * @param {number} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (!utils.is.empty(input)) {\n quality = Number(input);\n }\n\n if (!utils.is.number(quality) || quality === 0) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!utils.is.number(quality)) {\n quality = this.config.quality.default;\n }\n\n if (!this.options.quality.length) {\n return;\n }\n\n if (!this.options.quality.includes(quality)) {\n const closest = utils.closest(this.options.quality, quality);\n this.debug.warn(`Unsupported quality option: ${quality}, using ${closest} instead`);\n quality = closest;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return Boolean(this.media.loop);\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return Boolean(this.config.autoplay);\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support\n if (!this.supported.ui) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : !this.elements.container.classList.contains(this.config.classNames.captions.active);\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n this.toggleCaptions(false);\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // Check for support\n if (!this.options.captions.includes(language)) {\n this.debug.warn(`Unsupported language option: ${language}`);\n return;\n }\n\n // Ensure captions are enabled\n this.toggleCaptions(true);\n\n // Enabled only\n if (language === 'enabled') {\n return;\n }\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Events that show the controls\n const showEvents = [\n 'touchstart',\n 'touchmove',\n 'mouseenter',\n 'mousemove',\n 'focusin',\n ];\n\n // Events that delay hiding\n const delayEvents = [\n 'touchmove',\n 'touchend',\n 'mousemove',\n ];\n\n // Whether to show controls\n show = showEvents.includes(toggle.type);\n\n // Delay hiding on move events\n if (delayEvents.includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (!this.touch && toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (this.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n if (!this.ready) {\n return;\n }\n\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Unbind listeners\n this.listeners.clear();\n\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Reset state\n this.ready = false;\n\n // Clear for garbage collection\n setTimeout(() => {\n this.elements = null;\n this.media = null;\n }, 200);\n }\n };\n\n // Stop playback\n this.stop();\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Clear timeout\n clearTimeout(this.timers.loading);\n\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n clearInterval(this.timers.buffering);\n clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null && utils.is.function(this.embed.destroy)) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]}
\ No newline at end of file diff --git a/src/js/controls.js b/src/js/controls.js index ce4c17ee..615da39e 100644 --- a/src/js/controls.js +++ b/src/js/controls.js @@ -57,6 +57,7 @@ const controls = { icon, utils.extend(attributes, { role: 'presentation', + focusable: 'false', }), ); @@ -293,6 +294,8 @@ const controls = { min: 0, max: 100, value: 0, + role: 'presentation', + 'aria-hidden': true, }, attributes, ), diff --git a/src/js/listeners.js b/src/js/listeners.js index 35ee5f2a..5887c3ab 100644 --- a/src/js/listeners.js +++ b/src/js/listeners.js @@ -334,7 +334,7 @@ class Listeners { // Disable right click if (this.player.supported.ui && this.player.config.disableContextMenu) { utils.on( - this.player.media, + this.player.elements.wrapper, 'contextmenu', event => { event.preventDefault(); |