{"version":3,"sources":["webpack:///./node_modules/_video.js@6.12.1@video.js/dist/video.cjs.js"],"names":["_interopDefault","ex","match","window","document","tsml","safeParseTuple","xhr","vtt","USER_AGENT","navigator","userAgent","webkitVersionMap","exec","appleWebkitVersion","parseFloat","pop","IS_IPAD","test","IS_IPHONE","IS_IPOD","IS_IOS","IOS_VERSION","IS_ANDROID","ANDROID_VERSION","major","minor","IS_OLD_ANDROID","IS_NATIVE_ANDROID","IS_FIREFOX","IS_EDGE","IS_CHROME","CHROME_VERSION","IS_IE8","IE_VERSION","result","version","IS_SAFARI","IS_ANY_SAFARI","TOUCH_ENABLED","isReal","maxTouchPoints","DocumentTouch","BACKGROUND_SIZE_SUPPORTED","createElement","style","browser","Object","freeze","_typeof","Symbol","iterator","obj","constructor","prototype","classCallCheck","instance","Constructor","TypeError","inherits","subClass","superClass","create","value","enumerable","writable","configurable","setPrototypeOf","__proto__","possibleConstructorReturn","self","call","ReferenceError","taggedTemplateLiteralLoose","strings","raw","toString","keys","object","isObject","each","fn","forEach","key","assign","target","_len","arguments","length","sources","Array","_key","apply","concat","source","isPlain","log","level","history","logByType","type","args","stringify","undefined","lvl","levels","lvlRegExp","RegExp","unshift","toUpperCase","push","console","info","map","a","isArray","JSON","x","String","join","all","off","debug","warn","error","DEFAULT","hasOwnProperty","Error","clear","disable","enable","_len2","_key2","_len3","_key3","_len4","_key4","log$1","computedStyle","el","prop","getComputedStyle","cs","currentStyle","_templateObject","isNonBlankString","str","throwIfWhitespace","isEl","nodeType","isInFrame","parent","createQuerier","method","selector","context","querySelector","ctx","createEl","tagName","properties","attributes","content","getOwnPropertyNames","propName","val","indexOf","setAttribute","textContent","attrName","appendContent","text","innerText","prependTo","child","firstChild","insertBefore","appendChild","hasClass","element","classToCheck","classList","contains","className","addClass","classToAdd","add","trim","removeClass","classToRemove","remove","split","filter","c","toggleClass","classToToggle","predicate","has","setAttributes","attrValue","removeAttribute","getAttributes","tag","knownBooleans","attrs","i","name","attrVal","getAttribute","attribute","blockTextSelection","body","focus","onselectstart","unblockTextSelection","getBoundingClientRect","parentNode","rect","k","height","width","findPosition","box","left","top","docEl","documentElement","clientLeft","scrollLeft","pageXOffset","clientTop","scrollTop","pageYOffset","Math","round","getPointerPosition","event","position","boxW","offsetWidth","boxH","offsetHeight","boxY","boxX","pageY","pageX","changedTouches","y","max","min","isTextNode","emptyEl","removeChild","normalizeContent","createTextNode","node","insertContent","isSingleLeftClick","button","buttons","$","$$","Dom","_guid","newGUID","elData","elIdAttr","Date","getTime","getData","id","hasData","removeData","e","_cleanUpEvents","elem","data","handlers","removeEventListener","dispatcher","detachEvent","disabled","_handleMultipleEvents","types","callback","fixEvent","returnTrue","returnFalse","isPropagationStopped","old","preventDefault","srcElement","relatedTarget","fromElement","toElement","returnValue","defaultPrevented","stopPropagation","cancelBubble","stopImmediatePropagation","isImmediatePropagationStopped","clientX","doc","clientY","which","charCode","keyCode","_supportsPassive","opts","defineProperty","get","addEventListener","passiveEvents","on","guid","hash","handlersCopy","slice","m","n","options","passive","attachEvent","removeType","t","splice","trigger","elemData","ownerDocument","bubbles","targetData","one","func","this","Events","_windowLoaded","videojs$2","autoSetup","vids","getElementsByTagName","audios","divs","mediaEls","_i","_e","_i2","_e2","_i3","_e3","mediaEl","autoSetupTimeout","player","wait","vjs","setTimeout","readyState","createStyleElement","setTextContent","styleSheet","cssText","bind","uid","bound","throttle","last","now","EventTarget","allowedEvents_","ael","dispatchEvent","isEvented","eventBusEl_","every","isValidEventType","validateTarget","nodeName","validateEventType","validateListener","listener","normalizeListenArgs","isTargetingSelf","shift","listen","EventedMixin","_this","_normalizeListenArgs","removeListenerOnDispose","removeRemoverOnTargetDispose","_this2","_normalizeListenArgs2","wrapper","largs","targetOrType","typeOrListener","evented","eventBusKey","StatefulMixin","state","setState","stateUpdates","changes","from","to","stateful","defaultState","handleStateChanged","toTitleCase","string","charAt","mergeOptions","Component","ready","play","player_","options_","id_","name_","el_","children_","childIndex_","childNameIndex_","initChildren","reportTouchActivity","enableTouchActivity","dispose","localize","tokens","defaultValue","code","language","languages","primaryCode","primaryLang","localizedString","replace","index","ret","contentEl","contentEl_","children","getChildById","getChild","addChild","component","componentName","componentClassName","componentClass","ComponentClass","getComponent","childNodes","refNode","childFound","compEl","parentOptions","workingChildren","Tech","some","wchild","isTech","playerOptions","newChild","buildCSSClass","sync","isReady_","readyQueue_","triggerReady","readyQueue","show","hide","lockShowing","unlockShowing","num","skipListeners","dimension","dimensions","widthOrHeight","pxIndex","parseInt","currentDimension","computedWidthOrHeight","getPropertyValue","rule","currentDimensions","currentWidth","currentHeight","blur","emitTapEvents","touchStart","firstTouch","couldBeTap","touches","xdiff","ydiff","sqrt","noTap","reportUserActivity","report","touchHolding","clearInterval","setInterval","touchEnd","timeout","timeoutId","disposeFn","clearTimeout","interval","_this3","intervalId","requestAnimationFrame","_this4","supportsRaf_","cancelAnimationFrame","registerComponent","ComponentToRegister","isComp","isPrototypeOf","reason","components_","Player","players","playerNames","pname","Boolean","getRange","fnName","valueIndex","ranges","rangeIndex","maxIndex","rangeCheck","createTimeRangesObj","start","end","createTimeRanges","bufferedPercent","buffered","duration","bufferedDuration","FullscreenApi","apiMap","specApi","browserApi","MediaError","message","defaultMessages","status","errorTypes","1","2","3","4","5","errNum","isPromise","then","silencePromise","trackToJson_","track","reduce","acc","cues","cue","startTime","endTime","textTrackConverter","tech","trackEls","trackObjs","trackEl","json","src","textTracks","addedTrack","addRemoteTextTrack","addCue","ModalDialog","_Component","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","MODAL_CLASS_NAME","role","descEl_","description","tabIndex","label","previouslyActiveEl_","handleKeyPress","close","desc","open","fillAlways","fill","wasPlaying_","paused","pauseOnOpen","pause","hadControls_","controls","conditionalFocus_","opened","conditionalBlur_","temporary","closeable_","temp","controlText","fillWith","parentEl","nextSiblingEl","nextSibling","empty","closeButton","content_","activeEl","activeElement","playerEl","handleKeyDown","focusableEls","focusableEls_","focusIndex","shiftKey","allChildren","querySelectorAll","HTMLAnchorElement","HTMLAreaElement","hasAttribute","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLButtonElement","HTMLIFrameElement","HTMLObjectElement","HTMLEmbedElement","TrackList","_EventTarget","tracks","list","tracks_","addTrack","removeTrack","rtrack","l","getTrackById","change","addtrack","removetrack","disableOthers","enabled","AudioTrackList","_TrackList","_prop","changing_","disableOthers$1","selected","VideoTrackList","set","TextTrackList","kind","HtmlTrackElementList","trackElements","trackElements_","addTrackElement_","trackElement","getTrackElementByTrack_","trackElement_","removeTrackElement_","TextTrackCueList","setCues_","length_","oldLength","cues_","defineProp","getCueById","VideoTrackKind","alternative","captions","main","sign","subtitles","commentary","AudioTrackKind","TextTrackKind","descriptions","chapters","metadata","TextTrackMode","hidden","showing","Track","trackProps","_loop","parseUrl","url","props","href","addToBody","host","protocol","div","innerHTML","details","location","getAbsoluteURL","getFileExtension","path","pathParts","toLowerCase","isCrossOrigin","winLoc","urlInfo","Url","parseCues","srcContent","parser","WebVTT","Parser","vttjs","StringDecoder","errors","oncue","onparsingerror","onflush","parse","groupCollapsed","groupEnd","flush","loadTrack","uri","crossOrigin","cors","err","response","responseBody","loaded_","tech_","loadHandler","TextTrack","_Track","settings","srclang","mode","default_","tt","activeCues_","activeCues","changed","timeupdateHandler","newMode","ct","currentTime","active","originalCue","VTTCue","originalCue_","removeCue","_removeCue","cuechange","AudioTrack","newEnabled","VideoTrack","newSelected","HTMLTrackElement","load","NONE","LOADING","LOADED","ERROR","NORMAL","audio","ListClass","TrackClass","capitalName","video","getterName","privateName","REMOTE","remoteText","remoteTextEl","ALL","names","hasStarted_","featuresProgressEvents","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","featuresNativeTextTracks","emulateTextTracks","autoRemoteTextTracks_","initTrackListeners","nativeControlsForTouch","triggerSourceset","onDurationChange","manualProgress","trackProgress","manualProgressOff","stopTrackingProgress","progressInterval","numBufferedPercent","bufferedPercent_","duration_","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","manualTimeUpdatesOff","currentTimeInterval","manuallyTriggered","clearTracks","removeRemoteTextTrack","cleanupAutoTextTracks","reset","error_","played","setCurrentTime","trackListChanges","addWebVttScript_","_this5","script","onload","onerror","_this6","remoteTracks","remoteTextTracks","handleAddTrack","handleRemoveTrack","updateDisplay","textTracksChanges","addTextTrack","createTrackHelper","createRemoteTextTrack","_this7","manualCleanup","htmlTrackElement","remoteTextTrackEls","getVideoPlaybackQuality","setPoster","playsinline","setPlaysinline","canPlayType","canPlaySource","srcObj","registerTech","techs_","defaultTechOrder_","getTech","videojs","featuresVolumeControl","featuresMuteControl","featuresFullscreenResize","featuresPlaybackRate","featuresSourceset","withSourceHandlers","_Tech","registerSourceHandler","handler","sourceHandlers","can","selectSourceHandler","canHandleSource","sh","originalFn","sourceHandler_","setSource","nativeSourceHandler","disposeSourceHandler","currentSource_","handleSource","middlewares","middlewareInstances","TERMINATOR","next","setSourceHelper","middleware","lastRun","mwFactory","mwrest","mw","getOrCreateFactory","_src","mediate","arg","callMethod","middlewareValue","middlewareIterator","terminated","executeRight","allowedGetters","seekable","allowedSetters","allowedMediators","mws","_mws$i","mwf","mwi","MimetypesKind","opus","ogv","mp4","mov","m4v","mkv","mp3","aac","oga","m3u8","getMimetype","ext","mimetype","findMimetype","cache_","matchingSources","s","fixSource","MediaLoader","j","techOrder","techName","isSupported","loadTech_","ClickableComponent","tabIndex_","createControlTextEl","controlTextEl_","controlText_","localizedText","nonIconControl","enabled_","handleClick","handleFocus","handleBlur","PosterImage","_ClickableComponent","update","fallbackImg_","poster","setSrc","backgroundImage","fontMap","monospace","sansSerif","serif","monospaceSansSerif","monospaceSerif","proportionalSansSerif","proportionalSerif","casual","smallcaps","constructColor","color","opacity","hex","tryUpdateStyle","TextTrackDisplay","toggleDisplay","preselectTrack","modes","trackList","userPref","selectedLanguage","firstDesc","firstCaptions","preferredTrack","clearDisplay","processCues","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","textTrackSettings","overrides","getValues","cueDiv","displayState","textOpacity","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","bottom","fontFamily","fontVariant","LoadingSpinner","isAudio","playerType","dir","Button","BigPlayButton","_Button","mouseused_","handleMouseDown","playPromise","cb","playToggle","playFocus","CloseButton","PlayToggle","handlePlay","handlePause","handleEnded","handleSeeked","defaultImplementation","seconds","guide","floor","h","gm","gh","isNaN","Infinity","implementation","formatTime","TimeDisplay","throttledUpdateContent","updateContent","plainName","labelText_","updateTextNode_","textNode_","formattedTime_","formatTime_","time","updateFormattedTime_","formattedTime","CurrentTimeDisplay","_TimeDisplay","scrubbing","getCache","DurationDisplay","TimeDivider","RemainingTimeDisplay","remainingTimeDisplay","remainingTime","LiveDisplay","updateShowing","Slider","bar","barName","vertical","playerEvent","handleMouseMove","handleMouseUp","progress","getPercent","percentage","toFixed","calculateDistance","stepBack","stepForward","bool","vertical_","LoadProgressBar","partEls_","bufferedEnd","percentify","percent","part","TimeTooltip","seekBarRect","seekBarPoint","tooltipRect","playerRect","seekBarPointPx","spaceLeftOfPoint","spaceRightOfPoint","right","pullTooltipBy","PlayProgressBar","rafId_","timeTooltip","MouseTimeDisplay","SeekBar","_Slider","setEventHandlers_","updateInterval","update_","getCurrentTime_","videoWasPlaying","newTime","mouseTimeDisplay","handleAction","ProgressControl","throttledHandleMouseSeek","handleMouseSeek","seekBar","seekBarEl","FullscreenToggle","handleFullscreenChange","fullscreenEnabled","isFullscreen","exitFullscreen","requestFullscreen","checkVolumeSupport","VolumeLevel","VolumeBar","updateLastVolume_","updateARIAAttributes","checkMuted","volume","muted","ariaValue","volumeAsPercentage_","volumeBeforeDrag","lastVolume_","VolumeControl","volumeBar","throttledHandleMouseMove","orientationClass","MuteToggle","checkMuteSupport","vol","lastVolume","volumeToSet","updateIcon_","updateControlText_","VolumePanel","inline","volumeControl","volumePanelState_","sliderActive_","sliderInactive_","muteToggle","Menu","menuButton_","menuButton","focusedChild_","addItem","unpressButton","contentElType","append","stepChild","item","haveTitle","MenuButton","buttonClass","handleSubmenuKeyPress","menu","createMenu","buttonPressed_","items","hideThreshold_","title","createItems","buildWrapperCSSClass","menuButtonClass","pressButton","TrackButton","_MenuButton","updateHandler","MenuItem","selectable","isSelected_","multiSelectable","_selected","TextTrackMenuItem","_MenuItem","changeHandler","handleTracksChange","selectedLanguageChangeHandler","handleSelectedLanguageChange","onchange","Event","createEvent","initEvent","kinds","shouldBeSelected","OffTextTrackMenuItem","_TextTrackMenuItem","allHidden","TextTrackButton","_TrackButton","TrackMenuItem","label_","kinds_","kind_","ChaptersTrackMenuItem","ChaptersButton","_TextTrackButton","track_","setTrack","findChaptersTrack","updateHandler_","remoteTextTrackEl","_remoteTextTrackEl","getMenuCaption","mi","DescriptionsButton","SubtitlesButton","CaptionSettingsMenuItem","CaptionsButton","SubsCapsMenuItem","SubsCapsButton","language_","AudioTrackMenuItem","audioTracks","AudioTrackButton","PlaybackRateMenuItem","rate","playbackRate","PlaybackRateMenuButton","updateVisibility","updateLabel","labelEl_","rates","playbackRates","currentRate","newRate","playbackRateSupported","Spacer","CustomControlSpacer","_Spacer","ControlBar","ErrorDisplay","_ModalDialog","COLOR_BLACK","COLOR_BLUE","COLOR_CYAN","COLOR_GREEN","COLOR_MAGENTA","COLOR_RED","COLOR_WHITE","COLOR_YELLOW","OPACITY_OPAQUE","OPACITY_SEMI","OPACITY_TRANS","selectConfigs","v","Number","parseOptionValue","TextTrackSettings","endDialog","setDefaults","persistTextTrackSettings","saveSettings","config","restoreSettings","createElSelect_","legendId","selectLabelledbyIds","o","optionId","createElFgColor_","createElBgColor_","createElWinColor_","createElColors_","createElFont_","createElControls_","defaultsDescription","initial","accum","selectedIndex","setValues","values","setSelectedOption","localStorage","getItem","setItem","removeItem","ttDisplay","controlBar","subsCapsBtn","subsCapsButton","ccBtn","captionsButton","ResizeManager","RESIZE_OBSERVER_AVAILABLE","ResizeObserver","loadListener_","resizeObserver_","debouncedHandler_","immediate","_later","debounce","resizeHandler","observe","contentWindow","unobserve","disconnect","resizeObserver","sourcesetLoad","srcUrls","innerHTMLDescriptorPolyfill","cloneNode","dummy","docFrag","createDocumentFragment","Element","getDescriptor","priority","descriptor","getOwnPropertyDescriptor","firstSourceWatch","resetSourceWatch_","innerDescriptor","HTMLMediaElement","getInnerHTMLDescriptor","appendWrapper","appendFn","retval","srcDescriptorPolyfill","setupSourceset","resetSourceset_","srcDescriptor","getSrcDescriptor","oldSetAttribute","oldLoad","currentSrc","_templateObject$2","Html5","crossoriginTracks","initNetworkState_","handleLateInit_","enableSourceset","setupSourcesetHandling_","hasChildNodes","nodes","nodesLength","removeNodes","proxyNativeTracks_","restoreMetadataTracksInIOSNativePlayer_","setControls","proxyWebkitFullscreen_","disposeMediaElement","metadataTracksPreFullscreenState","takeMetadataTrackSnapshot","storedMode","restoreTrackMode","storedTrack","elTracks","techTracks","listeners","currentTarget","removeOldTracks","removeTracks","found","eventName","playerElIngest","movingMediaElementInDOM","clone","techId","playerId","preload","settingsAttrs","attr","networkState","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","checkProgress","NaN","endFn","beginFn","webkitPresentationMode","supportsFullScreen","webkitEnterFullScreen","enterFullScreen","HAVE_METADATA","exitFullScreen","webkitExitFullScreen","resetMediaElement","videoPlaybackQuality","webkitDroppedFrameCount","webkitDecodedFrameCount","droppedVideoFrames","totalVideoFrames","performance","creationTime","timing","navigationStart","TEST_VID","canControlVolume","canMuteVolume","canControlPlaybackRate","canOverrideAttributes","noop","supportsNativeTextTracks","supportsNativeVideoTracks","videoTracks","supportsNativeAudioTracks","featuresNativeVideoTracks","featuresNativeAudioTracks","mpegurlRE","mp4RE","patchCanPlayType","unpatchCanPlayType","r","_templateObject$1","TECH_EVENTS_RETRIGGER","TECH_EVENTS_QUEUE","canplay","canplaythrough","playing","seeked","getTagSettings","closest","isPosterFromTech_","queuedCallbacks_","userActive_","tagAttributes","languagesToLower","name$$1","languages_","poster_","controls_","autoplay","scrubbing_","lastPlaybackRate","defaultPlaybackRate","playerOptionsCopy","plugins","middleware_","flexNotSupported_","majorVersion","userActive","listenForUserActivity_","handleFullscreenChange_","handleStageClick_","changingSrc_","playWaitingForReady_","playOnLoadstart_","styleEl_","playerElIngest_","divEmbed","VIDEOJS_NO_DYNAMIC_STYLE","defaultsStyleEl","head","fluid","aspectRatio","links","linkEl","_dimension","privDimension","updateStyleEl_","parsedVal","fluid_","ratio","aspectRatio_","idClass","ratioParts","videoWidth","videoHeight","ratioMultiplier","width_","height_","_width","_height","techEl","unloadTech_","titleTechName","camelTechName","techName_","techOptions","loop","techCanOverridePoster","TechClass","handleTechReady_","textTracksJson_","eventObj","seeking","handleTechLoadStart_","handleTechSourceset_","handleTechWaiting_","handleTechEnded_","handleTechSeeking_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechPosterChange_","handleTechTextData_","handleTechRateChange_","usingNativeControls","techGet_","addTechControlsListeners_","safety","removeTechControlsListeners_","handleTechClick_","handleTechTouchStart_","handleTechTouchMove_","handleTechTouchEnd_","handleTechTap_","techCall_","hasStarted","manualAutoplay_","previouslyMuted","promise","updateSourceCaches_","sourceElSources","sourceEls","matchingSourceEls","sourceObj","updateCache","request","queued","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechSeeked_","starttime","userWasActive","set$1","reduceRight","get$1","PromiseClass","Promise","resolve","play_","_this8","isScrubbing","percentAsDecimal","_muted","defaultMuted","_defaultMuted","isFS","isFullscreen_","fsApi","fullscreenchange","documentFullscreenChange","fullscreenElement","enterFullWindow","exitFullWindow","isFullWindow","docOrigOverflow","overflow","fullWindowOnEscKey","selectSource","_this9","techs","_ref","findFirstPassingTechSourcePair","outerArray","innerArray","tester","outerChoice","innerChoice","finder","_ref2","sourceOrder","b","_this10","filterSource","newsrc","srcobj","middlewareSource","src_","notSupportedMessage","setTech","str1","str2","_this11","sourceTech","currentSources","currentSource","currentType","techAutoplay","newPoster","usingNativeControls_","errorDisplay","userActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","inactivityTimeout","isAudio_","_ref3","_ref3$track","toJSON","createModal","_this12","modal","baseOptions","tagOptions","dataSetup","_safeParseTuple","childName","html5","flash","userLanguage","pluginStorage","pluginExists","getPlugin","markPluginAsActive","triggerSetupEvent","before","createPluginFactory","PluginSubClass","plugin","Function","getEventHash","Plugin","VERSION","isBasic","p","registerPlugin","basicPluginWrapper","createBasicPlugin","deregisterPlugin","getPlugins","getPluginVersion","BASE_PLUGIN_NAME","usingPlugin","hasPlugin","_inherits","super_","HTMLVideoElement","normalizeId","getPlayer","hooks","hookFunction","PlayerComponent","hooks_","hook","hookOnce","original","removeHook","getPlayers","nId","_tag","_player","getAllPlayers","comp","use","writeable","extend","subClassMethods","methods","addLanguage","_mergeOptions","createTimeRange","setFormatTime","customImplementation","resetFormatTime","dom","module","exports"],"mappings":"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","file":"js/npm._video.js6.12.1@video.js.da91c295.js","sourcesContent":["/**\n * @license\n * Video.js 6.12.1 \n * Copyright Brightcove, Inc. \n * Available under Apache License Version 2.0\n * \n *\n * Includes vtt.js \n * Available under Apache License Version 2.0\n * \n */\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar window = _interopDefault(require('global/window'));\nvar document = _interopDefault(require('global/document'));\nvar tsml = _interopDefault(require('tsml'));\nvar safeParseTuple = _interopDefault(require('safe-json-parse/tuple'));\nvar xhr = _interopDefault(require('xhr'));\nvar vtt = _interopDefault(require('videojs-vtt.js'));\n\nvar version = \"6.12.1\";\n\n/**\n * @file browser.js\n * @module browser\n */\nvar USER_AGENT = window.navigator && window.navigator.userAgent || '';\nvar webkitVersionMap = /AppleWebKit\\/([\\d.]+)/i.exec(USER_AGENT);\nvar appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nvar IS_IPAD = /iPad/i.test(USER_AGENT);\n\n// The Facebook app's UIWebView identifies as both an iPhone and iPad, so\n// to identify iPhones, we need to exclude iPads.\n// http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/\nvar IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD;\nvar IS_IPOD = /iPod/i.test(USER_AGENT);\nvar IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nvar IOS_VERSION = function () {\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n\n if (match && match[1]) {\n return match[1];\n }\n return null;\n}();\n\nvar IS_ANDROID = /Android/i.test(USER_AGENT);\nvar ANDROID_VERSION = function () {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i);\n\n if (!match) {\n return null;\n }\n\n var major = match[1] && parseFloat(match[1]);\n var minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n }\n return null;\n}();\n\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nvar IS_OLD_ANDROID = IS_ANDROID && /webkit/i.test(USER_AGENT) && ANDROID_VERSION < 2.3;\nvar IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nvar IS_FIREFOX = /Firefox/i.test(USER_AGENT);\nvar IS_EDGE = /Edge/i.test(USER_AGENT);\nvar IS_CHROME = !IS_EDGE && (/Chrome/i.test(USER_AGENT) || /CriOS/i.test(USER_AGENT));\nvar CHROME_VERSION = function () {\n var match = USER_AGENT.match(/(Chrome|CriOS)\\/(\\d+)/);\n\n if (match && match[2]) {\n return parseFloat(match[2]);\n }\n return null;\n}();\nvar IS_IE8 = /MSIE\\s8\\.0/.test(USER_AGENT);\nvar IE_VERSION = function () {\n var result = /MSIE\\s(\\d+)\\.\\d/.exec(USER_AGENT);\n var version = result && parseFloat(result[1]);\n\n if (!version && /Trident\\/7.0/i.test(USER_AGENT) && /rv:11.0/.test(USER_AGENT)) {\n // IE 11 has a different user agent string than other IE versions\n version = 11.0;\n }\n\n return version;\n}();\n\nvar IS_SAFARI = /Safari/i.test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE;\nvar IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !IS_CHROME;\n\nvar TOUCH_ENABLED = isReal() && ('ontouchstart' in window || window.navigator.maxTouchPoints || window.DocumentTouch && window.document instanceof window.DocumentTouch);\n\nvar BACKGROUND_SIZE_SUPPORTED = isReal() && 'backgroundSize' in window.document.createElement('video').style;\n\nvar browser = (Object.freeze || Object)({\n\tIS_IPAD: IS_IPAD,\n\tIS_IPHONE: IS_IPHONE,\n\tIS_IPOD: IS_IPOD,\n\tIS_IOS: IS_IOS,\n\tIOS_VERSION: IOS_VERSION,\n\tIS_ANDROID: IS_ANDROID,\n\tANDROID_VERSION: ANDROID_VERSION,\n\tIS_OLD_ANDROID: IS_OLD_ANDROID,\n\tIS_NATIVE_ANDROID: IS_NATIVE_ANDROID,\n\tIS_FIREFOX: IS_FIREFOX,\n\tIS_EDGE: IS_EDGE,\n\tIS_CHROME: IS_CHROME,\n\tCHROME_VERSION: CHROME_VERSION,\n\tIS_IE8: IS_IE8,\n\tIE_VERSION: IE_VERSION,\n\tIS_SAFARI: IS_SAFARI,\n\tIS_ANY_SAFARI: IS_ANY_SAFARI,\n\tTOUCH_ENABLED: TOUCH_ENABLED,\n\tBACKGROUND_SIZE_SUPPORTED: BACKGROUND_SIZE_SUPPORTED\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\n\n\n\n\n\n\n\n\n\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar taggedTemplateLiteralLoose = function (strings, raw) {\n strings.raw = raw;\n return strings;\n};\n\n/**\n * @file obj.js\n * @module obj\n */\n\n/**\n * @callback obj:EachCallback\n *\n * @param {Mixed} value\n * The current key for the object that is being iterated over.\n *\n * @param {string} key\n * The current key-value for object that is being iterated over\n */\n\n/**\n * @callback obj:ReduceCallback\n *\n * @param {Mixed} accum\n * The value that is accumulating over the reduce loop.\n *\n * @param {Mixed} value\n * The current key for the object that is being iterated over.\n *\n * @param {string} key\n * The current key-value for object that is being iterated over\n *\n * @return {Mixed}\n * The new accumulated value.\n */\nvar toString = Object.prototype.toString;\n\n/**\n * Get the keys of an Object\n *\n * @param {Object}\n * The Object to get the keys from\n *\n * @return {string[]}\n * An array of the keys from the object. Returns an empty array if the\n * object passed in was invalid or had no keys.\n *\n * @private\n */\nvar keys = function keys(object) {\n return isObject(object) ? Object.keys(object) : [];\n};\n\n/**\n * Array-like iteration for objects.\n *\n * @param {Object} object\n * The object to iterate over\n *\n * @param {obj:EachCallback} fn\n * The callback function which is called for each key in the object.\n */\nfunction each(object, fn) {\n keys(object).forEach(function (key) {\n return fn(object[key], key);\n });\n}\n\n/**\n * Array-like reduce for objects.\n *\n * @param {Object} object\n * The Object that you want to reduce.\n *\n * @param {Function} fn\n * A callback function which is called for each key in the object. It\n * receives the accumulated value and the per-iteration value and key\n * as arguments.\n *\n * @param {Mixed} [initial = 0]\n * Starting value\n *\n * @return {Mixed}\n * The final accumulated value.\n */\nfunction reduce(object, fn) {\n var initial = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n return keys(object).reduce(function (accum, key) {\n return fn(accum, object[key], key);\n }, initial);\n}\n\n/**\n * Object.assign-style object shallow merge/extend.\n *\n * @param {Object} target\n * @param {Object} ...sources\n * @return {Object}\n */\nfunction assign(target) {\n for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n sources[_key - 1] = arguments[_key];\n }\n\n if (Object.assign) {\n return Object.assign.apply(Object, [target].concat(sources));\n }\n\n sources.forEach(function (source) {\n if (!source) {\n return;\n }\n\n each(source, function (value, key) {\n target[key] = value;\n });\n });\n\n return target;\n}\n\n/**\n * Returns whether a value is an object of any kind - including DOM nodes,\n * arrays, regular expressions, etc. Not functions, though.\n *\n * This avoids the gotcha where using `typeof` on a `null` value\n * results in `'object'`.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nfunction isObject(value) {\n return !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object';\n}\n\n/**\n * Returns whether an object appears to be a \"plain\" object - that is, a\n * direct instance of `Object`.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nfunction isPlain(value) {\n return isObject(value) && toString.call(value) === '[object Object]' && value.constructor === Object;\n}\n\n/**\n * @file log.js\n * @module log\n */\nvar log = void 0;\n\n// This is the private tracking variable for logging level.\nvar level = 'info';\n\n// This is the private tracking variable for the logging history.\nvar history = [];\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @private\n * @param {string} type\n * The name of the console method to use.\n *\n * @param {Array} args\n * The arguments to be passed to the matching console method.\n *\n * @param {boolean} [stringify]\n * By default, only old IEs should get console argument stringification,\n * but this is exposed as a parameter to facilitate testing.\n */\nvar logByType = function logByType(type, args) {\n var stringify = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : !!IE_VERSION && IE_VERSION < 11;\n\n var lvl = log.levels[level];\n var lvlRegExp = new RegExp('^(' + lvl + ')$');\n\n if (type !== 'log') {\n\n // Add the type to the front of the message when it's not \"log\".\n args.unshift(type.toUpperCase() + ':');\n }\n\n // Add a clone of the args at this point to history.\n if (history) {\n history.push([].concat(args));\n }\n\n // Add console prefix after adding to history.\n args.unshift('VIDEOJS:');\n\n // If there's no console then don't try to output messages, but they will\n // still be stored in history.\n if (!window.console) {\n return;\n }\n\n // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n // when the module is executed.\n var fn = window.console[type];\n\n if (!fn && type === 'debug') {\n // Certain browsers don't have support for console.debug. For those, we\n // should default to the closest comparable log.\n fn = window.console.info || window.console.log;\n }\n\n // Bail out if there's no console or if this type is not allowed by the\n // current logging level.\n if (!fn || !lvl || !lvlRegExp.test(type)) {\n return;\n }\n\n // IEs previous to 11 log objects uselessly as \"[object Object]\"; so, JSONify\n // objects and arrays for those less-capable browsers.\n if (stringify) {\n args = args.map(function (a) {\n if (isObject(a) || Array.isArray(a)) {\n try {\n return JSON.stringify(a);\n } catch (x) {\n return String(a);\n }\n }\n\n // Cast to string before joining, so we get null and undefined explicitly\n // included in output (as we would in a modern console).\n return String(a);\n }).join(' ');\n }\n\n // Old IE versions do not allow .apply() for console methods (they are\n // reported as objects rather than functions).\n if (!fn.apply) {\n fn(args);\n } else {\n fn[Array.isArray(args) ? 'apply' : 'call'](window.console, args);\n }\n};\n\n/**\n * Logs plain debug messages. Similar to `console.log`.\n *\n * @class\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged.\n */\nlog = function log() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n logByType('log', args);\n};\n\n/**\n * Enumeration of available logging levels, where the keys are the level names\n * and the values are `|`-separated strings containing logging methods allowed\n * in that logging level. These strings are used to create a regular expression\n * matching the function name being called.\n *\n * Levels provided by video.js are:\n *\n * - `off`: Matches no calls. Any value that can be cast to `false` will have\n * this effect. The most restrictive.\n * - `all`: Matches only Video.js-provided functions (`debug`, `log`,\n * `log.warn`, and `log.error`).\n * - `debug`: Matches `log.debug`, `log`, `log.warn`, and `log.error` calls.\n * - `info` (default): Matches `log`, `log.warn`, and `log.error` calls.\n * - `warn`: Matches `log.warn` and `log.error` calls.\n * - `error`: Matches only `log.error` calls.\n *\n * @type {Object}\n */\nlog.levels = {\n all: 'debug|log|warn|error',\n off: '',\n debug: 'debug|log|warn|error',\n info: 'log|warn|error',\n warn: 'warn|error',\n error: 'error',\n DEFAULT: level\n};\n\n/**\n * Get or set the current logging level. If a string matching a key from\n * {@link log.levels} is provided, acts as a setter. Regardless of argument,\n * returns the current logging level.\n *\n * @param {string} [lvl]\n * Pass to set a new logging level.\n *\n * @return {string}\n * The current logging level.\n */\nlog.level = function (lvl) {\n if (typeof lvl === 'string') {\n if (!log.levels.hasOwnProperty(lvl)) {\n throw new Error('\"' + lvl + '\" in not a valid log level');\n }\n level = lvl;\n }\n return level;\n};\n\n/**\n * Returns an array containing everything that has been logged to the history.\n *\n * This array is a shallow clone of the internal history record. However, its\n * contents are _not_ cloned; so, mutating objects inside this array will\n * mutate them in history.\n *\n * @return {Array}\n */\nlog.history = function () {\n return history ? [].concat(history) : [];\n};\n\n/**\n * Clears the internal history tracking, but does not prevent further history\n * tracking.\n */\nlog.history.clear = function () {\n if (history) {\n history.length = 0;\n }\n};\n\n/**\n * Disable history tracking if it is currently enabled.\n */\nlog.history.disable = function () {\n if (history !== null) {\n history.length = 0;\n history = null;\n }\n};\n\n/**\n * Enable history tracking if it is currently disabled.\n */\nlog.history.enable = function () {\n if (history === null) {\n history = [];\n }\n};\n\n/**\n * Logs error messages. Similar to `console.error`.\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as an error\n */\nlog.error = function () {\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n return logByType('error', args);\n};\n\n/**\n * Logs warning messages. Similar to `console.warn`.\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as a warning.\n */\nlog.warn = function () {\n for (var _len3 = arguments.length, args = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n return logByType('warn', args);\n};\n\n/**\n * Logs debug messages. Similar to `console.debug`, but may also act as a comparable\n * log if `console.debug` is not available\n *\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged as debug.\n */\nlog.debug = function () {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return logByType('debug', args);\n};\n\nvar log$1 = log;\n\n/**\n * @file computed-style.js\n * @module computed-style\n */\n/**\n * A safe getComputedStyle with an IE8 fallback.\n *\n * This is needed because in Firefox, if the player is loaded in an iframe with\n * `display:none`, then `getComputedStyle` returns `null`, so, we do a null-check to\n * make sure that the player doesn't break in these cases.\n *\n * @param {Element} el\n * The element you want the computed style of\n *\n * @param {string} prop\n * The property name you want\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n *\n * @static\n * @const\n */\nfunction computedStyle(el, prop) {\n if (!el || !prop) {\n return '';\n }\n\n if (typeof window.getComputedStyle === 'function') {\n var cs = window.getComputedStyle(el);\n\n return cs ? cs[prop] : '';\n }\n\n return el.currentStyle[prop] || '';\n}\n\nvar _templateObject = taggedTemplateLiteralLoose(['Setting attributes in the second argument of createEl()\\n has been deprecated. Use the third argument instead.\\n createEl(type, properties, attributes). Attempting to set ', ' to ', '.'], ['Setting attributes in the second argument of createEl()\\n has been deprecated. Use the third argument instead.\\n createEl(type, properties, attributes). Attempting to set ', ' to ', '.']);\n\n/**\n * @file dom.js\n * @module dom\n */\n/**\n * Detect if a value is a string with any non-whitespace characters.\n *\n * @param {string} str\n * The string to check\n *\n * @return {boolean}\n * - True if the string is non-blank\n * - False otherwise\n *\n */\nfunction isNonBlankString(str) {\n return typeof str === 'string' && /\\S/.test(str);\n}\n\n/**\n * Throws an error if the passed string has whitespace. This is used by\n * class methods to be relatively consistent with the classList API.\n *\n * @param {string} str\n * The string to check for whitespace.\n *\n * @throws {Error}\n * Throws an error if there is whitespace in the string.\n *\n */\nfunction throwIfWhitespace(str) {\n if (/\\s/.test(str)) {\n throw new Error('class has illegal whitespace characters');\n }\n}\n\n/**\n * Produce a regular expression for matching a className within an elements className.\n *\n * @param {string} className\n * The className to generate the RegExp for.\n *\n * @return {RegExp}\n * The RegExp that will check for a specific `className` in an elements\n * className.\n */\nfunction classRegExp(className) {\n return new RegExp('(^|\\\\s)' + className + '($|\\\\s)');\n}\n\n/**\n * Whether the current DOM interface appears to be real.\n *\n * @return {Boolean}\n */\nfunction isReal() {\n return (\n\n // Both document and window will never be undefined thanks to `global`.\n document === window.document &&\n\n // In IE < 9, DOM methods return \"object\" as their type, so all we can\n // confidently check is that it exists.\n typeof document.createElement !== 'undefined'\n );\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a DOM element.\n *\n * @param {Mixed} value\n * The thing to check\n *\n * @return {boolean}\n * - True if it is a DOM element\n * - False otherwise\n */\nfunction isEl(value) {\n return isObject(value) && value.nodeType === 1;\n}\n\n/**\n * Determines if the current DOM is embedded in an iframe.\n *\n * @return {boolean}\n *\n */\nfunction isInFrame() {\n\n // We need a try/catch here because Safari will throw errors when attempting\n // to get either `parent` or `self`\n try {\n return window.parent !== window.self;\n } catch (x) {\n return true;\n }\n}\n\n/**\n * Creates functions to query the DOM using a given method.\n *\n * @param {string} method\n * The method to create the query with.\n *\n * @return {Function}\n * The query method\n */\nfunction createQuerier(method) {\n return function (selector, context) {\n if (!isNonBlankString(selector)) {\n return document[method](null);\n }\n if (isNonBlankString(context)) {\n context = document.querySelector(context);\n }\n\n var ctx = isEl(context) ? context : document;\n\n return ctx[method] && ctx[method](selector);\n };\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {string} [tagName='div']\n * Name of tag to be created.\n *\n * @param {Object} [properties={}]\n * Element properties to be applied.\n *\n * @param {Object} [attributes={}]\n * Element attributes to be applied.\n *\n * @param {String|Element|TextNode|Array|Function} [content]\n * Contents for the element (see: {@link dom:normalizeContent})\n *\n * @return {Element}\n * The element that was created.\n */\nfunction createEl() {\n var tagName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'div';\n var properties = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var content = arguments[3];\n\n var el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function (propName) {\n var val = properties[propName];\n\n // See #2176\n // We originally were accepting both properties and attributes in the\n // same object, but that doesn't work so well.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n log$1.warn(tsml(_templateObject, propName, val));\n el.setAttribute(propName, val);\n\n // Handle textContent since it's not supported everywhere and we have a\n // method for it.\n } else if (propName === 'textContent') {\n textContent(el, val);\n } else {\n el[propName] = val;\n }\n });\n\n Object.getOwnPropertyNames(attributes).forEach(function (attrName) {\n el.setAttribute(attrName, attributes[attrName]);\n });\n\n if (content) {\n appendContent(el, content);\n }\n\n return el;\n}\n\n/**\n * Injects text into an element, replacing any existing contents entirely.\n *\n * @param {Element} el\n * The element to add text content into\n *\n * @param {string} text\n * The text content to add.\n *\n * @return {Element}\n * The element with added text content.\n */\nfunction textContent(el, text) {\n if (typeof el.textContent === 'undefined') {\n el.innerText = text;\n } else {\n el.textContent = text;\n }\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child\n * Element to insert\n *\n * @param {Element} parent\n * Element to insert child into\n */\nfunction prependTo(child, parent) {\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @param {Element} element\n * Element to check\n *\n * @param {string} classToCheck\n * Class name to check for\n *\n * @return {boolean}\n * - True if the element had the class\n * - False otherwise.\n *\n * @throws {Error}\n * Throws an error if `classToCheck` has white space.\n */\nfunction hasClass(element, classToCheck) {\n throwIfWhitespace(classToCheck);\n if (element.classList) {\n return element.classList.contains(classToCheck);\n }\n return classRegExp(classToCheck).test(element.className);\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @param {Element} element\n * Element to add class name to.\n *\n * @param {string} classToAdd\n * Class name to add.\n *\n * @return {Element}\n * The dom element with the added class name.\n */\nfunction addClass(element, classToAdd) {\n if (element.classList) {\n element.classList.add(classToAdd);\n\n // Don't need to `throwIfWhitespace` here because `hasElClass` will do it\n // in the case of classList not being supported.\n } else if (!hasClass(element, classToAdd)) {\n element.className = (element.className + ' ' + classToAdd).trim();\n }\n\n return element;\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @param {Element} element\n * Element to remove a class name from.\n *\n * @param {string} classToRemove\n * Class name to remove\n *\n * @return {Element}\n * The dom element with class name removed.\n */\nfunction removeClass(element, classToRemove) {\n if (element.classList) {\n element.classList.remove(classToRemove);\n } else {\n throwIfWhitespace(classToRemove);\n element.className = element.className.split(/\\s+/).filter(function (c) {\n return c !== classToRemove;\n }).join(' ');\n }\n\n return element;\n}\n\n/**\n * The callback definition for toggleElClass.\n *\n * @callback Dom~PredicateCallback\n * @param {Element} element\n * The DOM element of the Component.\n *\n * @param {string} classToToggle\n * The `className` that wants to be toggled\n *\n * @return {boolean|undefined}\n * - If true the `classToToggle` will get added to `element`.\n * - If false the `classToToggle` will get removed from `element`.\n * - If undefined this callback will be ignored\n */\n\n/**\n * Adds or removes a CSS class name on an element depending on an optional\n * condition or the presence/absence of the class name.\n *\n * @param {Element} element\n * The element to toggle a class name on.\n *\n * @param {string} classToToggle\n * The class that should be toggled\n *\n * @param {boolean|PredicateCallback} [predicate]\n * See the return value for {@link Dom~PredicateCallback}\n *\n * @return {Element}\n * The element with a class that has been toggled.\n */\nfunction toggleClass(element, classToToggle, predicate) {\n\n // This CANNOT use `classList` internally because IE does not support the\n // second parameter to the `classList.toggle()` method! Which is fine because\n // `classList` will be used by the add/remove functions.\n var has = hasClass(element, classToToggle);\n\n if (typeof predicate === 'function') {\n predicate = predicate(element, classToToggle);\n }\n\n if (typeof predicate !== 'boolean') {\n predicate = !has;\n }\n\n // If the necessary class operation matches the current state of the\n // element, no action is required.\n if (predicate === has) {\n return;\n }\n\n if (predicate) {\n addClass(element, classToToggle);\n } else {\n removeClass(element, classToToggle);\n }\n\n return element;\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el\n * Element to add attributes to.\n *\n * @param {Object} [attributes]\n * Attributes to be applied.\n */\nfunction setAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function (attrName) {\n var attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, attrValue === true ? '' : attrValue);\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag\n * Element from which to get tag attributes.\n *\n * @return {Object}\n * All attributes of the element.\n */\nfunction getAttributes(tag) {\n var obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n var knownBooleans = ',' + 'autoplay,controls,playsinline,loop,muted,default,defaultMuted' + ',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n var attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n var attrName = attrs[i].name;\n var attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = attrVal !== null ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Get the value of an element's attribute\n *\n * @param {Element} el\n * A DOM element\n *\n * @param {string} attribute\n * Attribute to get the value of\n *\n * @return {string}\n * value of the attribute\n */\nfunction getAttribute(el, attribute) {\n return el.getAttribute(attribute);\n}\n\n/**\n * Set the value of an element's attribute\n *\n * @param {Element} el\n * A DOM element\n *\n * @param {string} attribute\n * Attribute to set\n *\n * @param {string} value\n * Value to set the attribute to\n */\nfunction setAttribute(el, attribute, value) {\n el.setAttribute(attribute, value);\n}\n\n/**\n * Remove an element's attribute\n *\n * @param {Element} el\n * A DOM element\n *\n * @param {string} attribute\n * Attribute to remove\n */\nfunction removeAttribute(el, attribute) {\n el.removeAttribute(attribute);\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n */\nfunction blockTextSelection() {\n document.body.focus();\n document.onselectstart = function () {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n */\nfunction unblockTextSelection() {\n document.onselectstart = function () {\n return true;\n };\n}\n\n/**\n * Identical to the native `getBoundingClientRect` function, but ensures that\n * the method is supported at all (it is in all browsers we claim to support)\n * and that the element is in the DOM before continuing.\n *\n * This wrapper function also shims properties which are not provided by some\n * older browsers (namely, IE8).\n *\n * Additionally, some browsers do not support adding properties to a\n * `ClientRect`/`DOMRect` object; so, we shallow-copy it with the standard\n * properties (except `x` and `y` which are not widely supported). This helps\n * avoid implementations where keys are non-enumerable.\n *\n * @param {Element} el\n * Element whose `ClientRect` we want to calculate.\n *\n * @return {Object|undefined}\n * Always returns a plain\n */\nfunction getBoundingClientRect(el) {\n if (el && el.getBoundingClientRect && el.parentNode) {\n var rect = el.getBoundingClientRect();\n var result = {};\n\n ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(function (k) {\n if (rect[k] !== undefined) {\n result[k] = rect[k];\n }\n });\n\n if (!result.height) {\n result.height = parseFloat(computedStyle(el, 'height'));\n }\n\n if (!result.width) {\n result.width = parseFloat(computedStyle(el, 'width'));\n }\n\n return result;\n }\n}\n\n/**\n * The postion of a DOM element on the page.\n *\n * @typedef {Object} module:dom~Position\n *\n * @property {number} left\n * Pixels to the left\n *\n * @property {number} top\n * Pixels on top\n */\n\n/**\n * Offset Left.\n * getBoundingClientRect technique from\n * John Resig\n *\n * @see http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el\n * Element from which to get offset\n *\n * @return {module:dom~Position}\n * The position of the element that was passed in.\n */\nfunction findPosition(el) {\n var box = void 0;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n var docEl = document.documentElement;\n var body = document.body;\n\n var clientLeft = docEl.clientLeft || body.clientLeft || 0;\n var scrollLeft = window.pageXOffset || body.scrollLeft;\n var left = box.left + scrollLeft - clientLeft;\n\n var clientTop = docEl.clientTop || body.clientTop || 0;\n var scrollTop = window.pageYOffset || body.scrollTop;\n var top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n\n/**\n * x and y coordinates for a dom element or mouse pointer\n *\n * @typedef {Object} Dom~Coordinates\n *\n * @property {number} x\n * x coordinate in pixels\n *\n * @property {number} y\n * y coordinate in pixels\n */\n\n/**\n * Get pointer position in element\n * Returns an object with x and y coordinates.\n * The base on the coordinates are the bottom left of the element.\n *\n * @param {Element} el\n * Element on which to get the pointer position on\n *\n * @param {EventTarget~Event} event\n * Event object\n *\n * @return {Dom~Coordinates}\n * A Coordinates object corresponding to the mouse position.\n *\n */\nfunction getPointerPosition(el, event) {\n var position = {};\n var box = findPosition(el);\n var boxW = el.offsetWidth;\n var boxH = el.offsetHeight;\n\n var boxY = box.top;\n var boxX = box.left;\n var pageY = event.pageY;\n var pageX = event.pageX;\n\n if (event.changedTouches) {\n pageX = event.changedTouches[0].pageX;\n pageY = event.changedTouches[0].pageY;\n }\n\n position.y = Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH));\n position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n\n return position;\n}\n\n/**\n * Determines, via duck typing, whether or not a value is a text node.\n *\n * @param {Mixed} value\n * Check if this value is a text node.\n *\n * @return {boolean}\n * - True if it is a text node\n * - False otherwise\n */\nfunction isTextNode(value) {\n return isObject(value) && value.nodeType === 3;\n}\n\n/**\n * Empties the contents of an element.\n *\n * @param {Element} el\n * The element to empty children from\n *\n * @return {Element}\n * The element with no children\n */\nfunction emptyEl(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n return el;\n}\n\n/**\n * Normalizes content for eventual insertion into the DOM.\n *\n * This allows a wide range of content definition methods, but protects\n * from falling into the trap of simply writing to `innerHTML`, which is\n * an XSS concern.\n *\n * The content for an element can be passed in multiple types and\n * combinations, whose behavior is as follows:\n *\n * @param {String|Element|TextNode|Array|Function} content\n * - String: Normalized into a text node.\n * - Element/TextNode: Passed through.\n * - Array: A one-dimensional array of strings, elements, nodes, or functions\n * (which return single strings, elements, or nodes).\n * - Function: If the sole argument, is expected to produce a string, element,\n * node, or array as defined above.\n *\n * @return {Array}\n * All of the content that was passed in normalized.\n */\nfunction normalizeContent(content) {\n\n // First, invoke content if it is a function. If it produces an array,\n // that needs to happen before normalization.\n if (typeof content === 'function') {\n content = content();\n }\n\n // Next up, normalize to an array, so one or many items can be normalized,\n // filtered, and returned.\n return (Array.isArray(content) ? content : [content]).map(function (value) {\n\n // First, invoke value if it is a function to produce a new value,\n // which will be subsequently normalized to a Node of some kind.\n if (typeof value === 'function') {\n value = value();\n }\n\n if (isEl(value) || isTextNode(value)) {\n return value;\n }\n\n if (typeof value === 'string' && /\\S/.test(value)) {\n return document.createTextNode(value);\n }\n }).filter(function (value) {\n return value;\n });\n}\n\n/**\n * Normalizes and appends content to an element.\n *\n * @param {Element} el\n * Element to append normalized content to.\n *\n *\n * @param {String|Element|TextNode|Array|Function} content\n * See the `content` argument of {@link dom:normalizeContent}\n *\n * @return {Element}\n * The element with appended normalized content.\n */\nfunction appendContent(el, content) {\n normalizeContent(content).forEach(function (node) {\n return el.appendChild(node);\n });\n return el;\n}\n\n/**\n * Normalizes and inserts content into an element; this is identical to\n * `appendContent()`, except it empties the element first.\n *\n * @param {Element} el\n * Element to insert normalized content into.\n *\n * @param {String|Element|TextNode|Array|Function} content\n * See the `content` argument of {@link dom:normalizeContent}\n *\n * @return {Element}\n * The element with inserted normalized content.\n *\n */\nfunction insertContent(el, content) {\n return appendContent(emptyEl(el), content);\n}\n\n/**\n * Check if event was a single left click\n *\n * @param {EventTarget~Event} event\n * Event object\n *\n * @return {boolean}\n * - True if a left click\n * - False if not a left click\n */\nfunction isSingleLeftClick(event) {\n // Note: if you create something draggable, be sure to\n // call it on both `mousedown` and `mousemove` event,\n // otherwise `mousedown` should be enough for a button\n\n if (event.button === undefined && event.buttons === undefined) {\n // Why do we need `buttons` ?\n // Because, middle mouse sometimes have this:\n // e.button === 0 and e.buttons === 4\n // Furthermore, we want to prevent combination click, something like\n // HOLD middlemouse then left click, that would be\n // e.button === 0, e.buttons === 5\n // just `button` is not gonna work\n\n // Alright, then what this block does ?\n // this is for chrome `simulate mobile devices`\n // I want to support this as well\n\n return true;\n }\n\n if (event.button === 0 && event.buttons === undefined) {\n // Touch screen, sometimes on some specific device, `buttons`\n // doesn't have anything (safari on ios, blackberry...)\n\n return true;\n }\n\n if (IE_VERSION === 9) {\n // Ignore IE9\n\n return true;\n }\n\n if (event.button !== 0 || event.buttons !== 1) {\n // This is the reason we have those if else block above\n // if any special case we can catch and let it slide\n // we do it above, when get to here, this definitely\n // is-not-left-click\n\n return false;\n }\n\n return true;\n}\n\n/**\n * Finds a single DOM element matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {Element|null}\n * The element that was found or null.\n */\nvar $ = createQuerier('querySelector');\n\n/**\n * Finds a all DOM elements matching `selector` within the optional\n * `context` of another DOM element (defaulting to `document`).\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|String} [context=document]\n * A DOM element within which to query. Can also be a selector\n * string in which case the first matching element will be used\n * as context. If missing (or no element matches selector), falls\n * back to `document`.\n *\n * @return {NodeList}\n * A element list of elements that were found. Will be empty if none were found.\n *\n */\nvar $$ = createQuerier('querySelectorAll');\n\n\n\nvar Dom = (Object.freeze || Object)({\n\tisReal: isReal,\n\tisEl: isEl,\n\tisInFrame: isInFrame,\n\tcreateEl: createEl,\n\ttextContent: textContent,\n\tprependTo: prependTo,\n\thasClass: hasClass,\n\taddClass: addClass,\n\tremoveClass: removeClass,\n\ttoggleClass: toggleClass,\n\tsetAttributes: setAttributes,\n\tgetAttributes: getAttributes,\n\tgetAttribute: getAttribute,\n\tsetAttribute: setAttribute,\n\tremoveAttribute: removeAttribute,\n\tblockTextSelection: blockTextSelection,\n\tunblockTextSelection: unblockTextSelection,\n\tgetBoundingClientRect: getBoundingClientRect,\n\tfindPosition: findPosition,\n\tgetPointerPosition: getPointerPosition,\n\tisTextNode: isTextNode,\n\temptyEl: emptyEl,\n\tnormalizeContent: normalizeContent,\n\tappendContent: appendContent,\n\tinsertContent: insertContent,\n\tisSingleLeftClick: isSingleLeftClick,\n\t$: $,\n\t$$: $$\n});\n\n/**\n * @file guid.js\n * @module guid\n */\n\n/**\n * Unique ID for an element or function\n * @type {Number}\n */\nvar _guid = 1;\n\n/**\n * Get a unique auto-incrementing ID by number that has not been returned before.\n *\n * @return {number}\n * A new unique ID.\n */\nfunction newGUID() {\n return _guid++;\n}\n\n/**\n * @file dom-data.js\n * @module dom-data\n */\n/**\n * Element Data Store.\n *\n * Allows for binding data to an element without putting it directly on the\n * element. Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nvar elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nvar elIdAttr = 'vdata' + new Date().getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el\n * Element to store data for.\n *\n * @return {Object}\n * The cache object for that el that was passed in.\n */\nfunction getData(el) {\n var id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el\n * Check if this element has cached data.\n *\n * @return {boolean}\n * - True if the DOM element has cached data.\n * - False otherwise.\n */\nfunction hasData(el) {\n var id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el\n * Remove cached data for this element.\n */\nfunction removeData(el) {\n var id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch (e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * @file events.js. An Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n *\n * @module events\n */\n\n/**\n * Clean up the listener cache and dispatchers\n *\n * @param {Element|Object} elem\n * Element to clean up\n *\n * @param {string} type\n * Type of event to clean up\n */\nfunction _cleanUpEvents(elem, type) {\n var data = getData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n removeData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn\n * The event method we want to use.\n *\n * @param {Element|Object} elem\n * Element or object to bind listeners to\n *\n * @param {string} type\n * Type of event to bind to.\n *\n * @param {EventTarget~EventListener} callback\n * Event listener.\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function (type) {\n // Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event\n * Event object to fix.\n *\n * @return {Object}\n * Fixed event object.\n */\nfunction fixEvent(event) {\n\n function returnTrue() {\n return true;\n }\n\n function returnFalse() {\n return false;\n }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || window.event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n // and webkitMovementX/Y\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n old.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n old.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX !== null && event.clientX !== undefined) {\n var doc = document.documentElement;\n var body = document.body;\n\n event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button !== null && event.button !== undefined) {\n\n // The following is disabled because it does not pass videojs-standard\n // and... yikes.\n /* eslint-disable */\n event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0;\n /* eslint-enable */\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Whether passive event listeners are supported\n */\nvar _supportsPassive = false;\n\n(function () {\n try {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n _supportsPassive = true;\n }\n });\n\n window.addEventListener('test', null, opts);\n window.removeEventListener('test', null, opts);\n } catch (e) {\n // disregard\n }\n})();\n\n/**\n * Touch events Chrome expects to be passive\n */\nvar passiveEvents = ['touchstart', 'touchmove'];\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem\n * Element or object to bind listeners to\n *\n * @param {string|string[]} type\n * Type of event to bind to.\n *\n * @param {EventTarget~EventListener} fn\n * Event listener.\n */\nfunction on(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n var data = getData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) {\n data.handlers = {};\n }\n\n if (!data.handlers[type]) {\n data.handlers[type] = [];\n }\n\n if (!fn.guid) {\n fn.guid = newGUID();\n }\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash) {\n\n if (data.disabled) {\n return;\n }\n\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n try {\n handlersCopy[m].call(elem, event, hash);\n } catch (e) {\n log$1.error(e);\n }\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n var options = false;\n\n if (_supportsPassive && passiveEvents.indexOf(type) > -1) {\n options = { passive: true };\n }\n elem.addEventListener(type, data.dispatcher, options);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem\n * Object to remove listeners from.\n *\n * @param {string|string[]} [type]\n * Type of listener to remove. Don't include to remove all events from element.\n *\n * @param {EventTarget~EventListener} [fn]\n * Specific listener to remove. Don't include to remove listeners for an event\n * type.\n */\nfunction off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!hasData(elem)) {\n return;\n }\n\n var data = getData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) {\n return;\n }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function removeType(el, t) {\n data.handlers[t] = [];\n _cleanUpEvents(el, t);\n };\n\n // Are we removing all bound events?\n if (type === undefined) {\n for (var t in data.handlers) {\n if (Object.prototype.hasOwnProperty.call(data.handlers || {}, t)) {\n removeType(elem, t);\n }\n }\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) {\n return;\n }\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(elem, type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (var n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem\n * Element to trigger an event on\n *\n * @param {EventTarget~Event|string} event\n * A string (the type) or an event object with a type attribute\n *\n * @param {Object} [hash]\n * data hash to pass along with the event\n *\n * @return {boolean|undefined}\n * - Returns the opposite of `defaultPrevented` if default was prevented\n * - Otherwise returns undefined\n */\nfunction trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = hasData(elem) ? getData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type: event, target: elem };\n } else if (!event.target) {\n event.target = elem;\n }\n\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = getData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem\n * Element or object to bind to.\n *\n * @param {string|string[]} type\n * Name/type of event\n *\n * @param {Event~EventListener} fn\n * Event Listener function\n */\nfunction one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function func() {\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || newGUID();\n on(elem, type, func);\n}\n\nvar Events = (Object.freeze || Object)({\n\tfixEvent: fixEvent,\n\ton: on,\n\toff: off,\n\ttrigger: trigger,\n\tone: one\n});\n\n/**\n * @file setup.js - Functions for setting up a player without\n * user interaction based on the data-setup `attribute` of the video tag.\n *\n * @module setup\n */\nvar _windowLoaded = false;\nvar videojs$2 = void 0;\n\n/**\n * Set up any tags that have a data-setup `attribute` when the player is started.\n */\nvar autoSetup = function autoSetup() {\n\n // Protect against breakage in non-browser environments and check global autoSetup option.\n if (!isReal() || videojs$2.options.autoSetup === false) {\n return;\n }\n\n // One day, when we stop supporting IE8, go back to this, but in the meantime...*hack hack hack*\n // var vids = Array.prototype.slice.call(document.getElementsByTagName('video'));\n // var audios = Array.prototype.slice.call(document.getElementsByTagName('audio'));\n // var mediaEls = vids.concat(audios);\n\n // Because IE8 doesn't support calling slice on a node list, we need to loop\n // through each list of elements to build up a new, combined list of elements.\n var vids = document.getElementsByTagName('video');\n var audios = document.getElementsByTagName('audio');\n var divs = document.getElementsByTagName('video-js');\n var mediaEls = [];\n\n if (vids && vids.length > 0) {\n for (var i = 0, e = vids.length; i < e; i++) {\n mediaEls.push(vids[i]);\n }\n }\n\n if (audios && audios.length > 0) {\n for (var _i = 0, _e = audios.length; _i < _e; _i++) {\n mediaEls.push(audios[_i]);\n }\n }\n\n if (divs && divs.length > 0) {\n for (var _i2 = 0, _e2 = divs.length; _i2 < _e2; _i2++) {\n mediaEls.push(divs[_i2]);\n }\n }\n\n // Check if any media elements exist\n if (mediaEls && mediaEls.length > 0) {\n\n for (var _i3 = 0, _e3 = mediaEls.length; _i3 < _e3; _i3++) {\n var mediaEl = mediaEls[_i3];\n\n // Check if element exists, has getAttribute func.\n // IE seems to consider typeof el.getAttribute == 'object' instead of\n // 'function' like expected, at least when loading the player immediately.\n if (mediaEl && mediaEl.getAttribute) {\n\n // Make sure this player hasn't already been set up.\n if (mediaEl.player === undefined) {\n var options = mediaEl.getAttribute('data-setup');\n\n // Check if data-setup attr exists.\n // We only auto-setup if they've added the data-setup attr.\n if (options !== null) {\n // Create new video.js instance.\n videojs$2(mediaEl);\n }\n }\n\n // If getAttribute isn't defined, we need to wait for the DOM.\n } else {\n autoSetupTimeout(1);\n break;\n }\n }\n\n // No videos were found, so keep looping unless page is finished loading.\n } else if (!_windowLoaded) {\n autoSetupTimeout(1);\n }\n};\n\n/**\n * Wait until the page is loaded before running autoSetup. This will be called in\n * autoSetup if `hasLoaded` returns false.\n *\n * @param {number} wait\n * How long to wait in ms\n *\n * @param {module:videojs} [vjs]\n * The videojs library function\n */\nfunction autoSetupTimeout(wait, vjs) {\n if (vjs) {\n videojs$2 = vjs;\n }\n\n window.setTimeout(autoSetup, wait);\n}\n\nif (isReal() && document.readyState === 'complete') {\n _windowLoaded = true;\n} else {\n /**\n * Listen for the load event on window, and set _windowLoaded to true.\n *\n * @listens load\n */\n one(window, 'load', function () {\n _windowLoaded = true;\n });\n}\n\n/**\n * @file stylesheet.js\n * @module stylesheet\n */\n/**\n * Create a DOM syle element given a className for it.\n *\n * @param {string} className\n * The className to add to the created style element.\n *\n * @return {Element}\n * The element that was created.\n */\nvar createStyleElement = function createStyleElement(className) {\n var style = document.createElement('style');\n\n style.className = className;\n\n return style;\n};\n\n/**\n * Add text to a DOM element.\n *\n * @param {Element} el\n * The Element to add text content to.\n *\n * @param {string} content\n * The text to add to the element.\n */\nvar setTextContent = function setTextContent(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\n\n/**\n * @file fn.js\n * @module fn\n */\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events.\n *\n * @param {Mixed} context\n * The object to bind as scope.\n *\n * @param {Function} fn\n * The function to be bound to a scope.\n *\n * @param {number} [uid]\n * An optional unique ID for the function to be set\n *\n * @return {Function}\n * The new function that will be bound into the context given\n */\nvar bind = function bind(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) {\n fn.guid = newGUID();\n }\n\n // Create the new function that changes the context\n var bound = function bound() {\n return fn.apply(context, arguments);\n };\n\n // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n bound.guid = uid ? uid + '_' + fn.guid : fn.guid;\n\n return bound;\n};\n\n/**\n * Wraps the given function, `fn`, with a new function that only invokes `fn`\n * at most once per every `wait` milliseconds.\n *\n * @param {Function} fn\n * The function to be throttled.\n *\n * @param {Number} wait\n * The number of milliseconds by which to throttle.\n *\n * @return {Function}\n */\nvar throttle = function throttle(fn, wait) {\n var last = Date.now();\n\n var throttled = function throttled() {\n var now = Date.now();\n\n if (now - last >= wait) {\n fn.apply(undefined, arguments);\n last = now;\n }\n };\n\n return throttled;\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked.\n *\n * Inspired by lodash and underscore implementations.\n *\n * @param {Function} func\n * The function to wrap with debounce behavior.\n *\n * @param {number} wait\n * The number of milliseconds to wait after the last invocation.\n *\n * @param {boolean} [immediate]\n * Whether or not to invoke the function immediately upon creation.\n *\n * @param {Object} [context=window]\n * The \"context\" in which the debounced function should debounce. For\n * example, if this function should be tied to a Video.js player,\n * the player can be passed here. Alternatively, defaults to the\n * global `window` object.\n *\n * @return {Function}\n * A debounced function.\n */\nvar debounce = function debounce(func, wait, immediate) {\n var context = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : window;\n\n var timeout = void 0;\n\n /* eslint-disable consistent-this */\n return function () {\n var self = this;\n var args = arguments;\n\n var _later = function later() {\n timeout = null;\n _later = null;\n if (!immediate) {\n func.apply(self, args);\n }\n };\n\n if (!timeout && immediate) {\n func.apply(self, args);\n }\n\n context.clearTimeout(timeout);\n timeout = context.setTimeout(_later, wait);\n };\n /* eslint-enable consistent-this */\n};\n\n/**\n * @file src/js/event-target.js\n */\n/**\n * `EventTarget` is a class that can have the same API as the DOM `EventTarget`. It\n * adds shorthand functions that wrap around lengthy functions. For example:\n * the `on` function is a wrapper around `addEventListener`.\n *\n * @see [EventTarget Spec]{@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget}\n * @class EventTarget\n */\nvar EventTarget = function EventTarget() {};\n\n/**\n * A Custom DOM event.\n *\n * @typedef {Object} EventTarget~Event\n * @see [Properties]{@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent}\n */\n\n/**\n * All event listeners should follow the following format.\n *\n * @callback EventTarget~EventListener\n * @this {EventTarget}\n *\n * @param {EventTarget~Event} event\n * the event that triggered this function\n *\n * @param {Object} [hash]\n * hash of data sent during the event\n */\n\n/**\n * An object containing event names as keys and booleans as values.\n *\n * > NOTE: If an event name is set to a true value here {@link EventTarget#trigger}\n * will have extra functionality. See that function for more information.\n *\n * @property EventTarget.prototype.allowedEvents_\n * @private\n */\nEventTarget.prototype.allowedEvents_ = {};\n\n/**\n * Adds an `event listener` to an instance of an `EventTarget`. An `event listener` is a\n * function that will get called when an event with a certain name gets triggered.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to call with `EventTarget`s\n */\nEventTarget.prototype.on = function (type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n var ael = this.addEventListener;\n\n this.addEventListener = function () {};\n on(this, type, fn);\n this.addEventListener = ael;\n};\n\n/**\n * An alias of {@link EventTarget#on}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#on}\n */\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\n/**\n * Removes an `event listener` for a specific event from an instance of `EventTarget`.\n * This makes it so that the `event listener` will no longer get called when the\n * named event happens.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to remove.\n */\nEventTarget.prototype.off = function (type, fn) {\n off(this, type, fn);\n};\n\n/**\n * An alias of {@link EventTarget#off}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#off}\n */\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\n/**\n * This function will add an `event listener` that gets triggered only once. After the\n * first trigger it will get removed. This is like adding an `event listener`\n * with {@link EventTarget#on} that calls {@link EventTarget#off} on itself.\n *\n * @param {string|string[]} type\n * An event name or an array of event names.\n *\n * @param {EventTarget~EventListener} fn\n * The function to be called once for each event name.\n */\nEventTarget.prototype.one = function (type, fn) {\n // Remove the addEventListener alialing Events.on\n // so we don't get into an infinite type loop\n var ael = this.addEventListener;\n\n this.addEventListener = function () {};\n one(this, type, fn);\n this.addEventListener = ael;\n};\n\n/**\n * This function causes an event to happen. This will then cause any `event listeners`\n * that are waiting for that event, to get called. If there are no `event listeners`\n * for an event then nothing will happen.\n *\n * If the name of the `Event` that is being triggered is in `EventTarget.allowedEvents_`.\n * Trigger will also call the `on` + `uppercaseEventName` function.\n *\n * Example:\n * 'click' is in `EventTarget.allowedEvents_`, so, trigger will attempt to call\n * `onClick` if it exists.\n *\n * @param {string|EventTarget~Event|Object} event\n * The name of the event, an `Event`, or an object with a key of type set to\n * an event name.\n */\nEventTarget.prototype.trigger = function (event) {\n var type = event.type || event;\n\n if (typeof event === 'string') {\n event = { type: type };\n }\n event = fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n trigger(this, event);\n};\n\n/**\n * An alias of {@link EventTarget#trigger}. Allows `EventTarget` to mimic\n * the standard DOM API.\n *\n * @function\n * @see {@link EventTarget#trigger}\n */\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\n/**\n * @file mixins/evented.js\n * @module evented\n */\n/**\n * Returns whether or not an object has had the evented mixin applied.\n *\n * @param {Object} object\n * An object to test.\n *\n * @return {boolean}\n * Whether or not the object appears to be evented.\n */\nvar isEvented = function isEvented(object) {\n return object instanceof EventTarget || !!object.eventBusEl_ && ['on', 'one', 'off', 'trigger'].every(function (k) {\n return typeof object[k] === 'function';\n });\n};\n\n/**\n * Whether a value is a valid event type - non-empty string or array.\n *\n * @private\n * @param {string|Array} type\n * The type value to test.\n *\n * @return {boolean}\n * Whether or not the type is a valid event type.\n */\nvar isValidEventType = function isValidEventType(type) {\n return (\n // The regex here verifies that the `type` contains at least one non-\n // whitespace character.\n typeof type === 'string' && /\\S/.test(type) || Array.isArray(type) && !!type.length\n );\n};\n\n/**\n * Validates a value to determine if it is a valid event target. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the target does not appear to be a valid event target.\n *\n * @param {Object} target\n * The object to test.\n */\nvar validateTarget = function validateTarget(target) {\n if (!target.nodeName && !isEvented(target)) {\n throw new Error('Invalid target; must be a DOM node or evented object.');\n }\n};\n\n/**\n * Validates a value to determine if it is a valid event target. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the type does not appear to be a valid event type.\n *\n * @param {string|Array} type\n * The type to test.\n */\nvar validateEventType = function validateEventType(type) {\n if (!isValidEventType(type)) {\n throw new Error('Invalid event type; must be a non-empty string or array.');\n }\n};\n\n/**\n * Validates a value to determine if it is a valid listener. Throws if not.\n *\n * @private\n * @throws {Error}\n * If the listener is not a function.\n *\n * @param {Function} listener\n * The listener to test.\n */\nvar validateListener = function validateListener(listener) {\n if (typeof listener !== 'function') {\n throw new Error('Invalid listener; must be a function.');\n }\n};\n\n/**\n * Takes an array of arguments given to `on()` or `one()`, validates them, and\n * normalizes them into an object.\n *\n * @private\n * @param {Object} self\n * The evented object on which `on()` or `one()` was called. This\n * object will be bound as the `this` value for the listener.\n *\n * @param {Array} args\n * An array of arguments passed to `on()` or `one()`.\n *\n * @return {Object}\n * An object containing useful values for `on()` or `one()` calls.\n */\nvar normalizeListenArgs = function normalizeListenArgs(self, args) {\n\n // If the number of arguments is less than 3, the target is always the\n // evented object itself.\n var isTargetingSelf = args.length < 3 || args[0] === self || args[0] === self.eventBusEl_;\n var target = void 0;\n var type = void 0;\n var listener = void 0;\n\n if (isTargetingSelf) {\n target = self.eventBusEl_;\n\n // Deal with cases where we got 3 arguments, but we are still listening to\n // the evented object itself.\n if (args.length >= 3) {\n args.shift();\n }\n\n type = args[0];\n listener = args[1];\n } else {\n target = args[0];\n type = args[1];\n listener = args[2];\n }\n\n validateTarget(target);\n validateEventType(type);\n validateListener(listener);\n\n listener = bind(self, listener);\n\n return { isTargetingSelf: isTargetingSelf, target: target, type: type, listener: listener };\n};\n\n/**\n * Adds the listener to the event type(s) on the target, normalizing for\n * the type of target.\n *\n * @private\n * @param {Element|Object} target\n * A DOM node or evented object.\n *\n * @param {string} method\n * The event binding method to use (\"on\" or \"one\").\n *\n * @param {string|Array} type\n * One or more event type(s).\n *\n * @param {Function} listener\n * A listener function.\n */\nvar listen = function listen(target, method, type, listener) {\n validateTarget(target);\n\n if (target.nodeName) {\n Events[method](target, type, listener);\n } else {\n target[method](type, listener);\n }\n};\n\n/**\n * Contains methods that provide event capabilites to an object which is passed\n * to {@link module:evented|evented}.\n *\n * @mixin EventedMixin\n */\nvar EventedMixin = {\n\n /**\n * Add a listener to an event (or events) on this object or another evented\n * object.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */\n on: function on$$1() {\n var _this = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var _normalizeListenArgs = normalizeListenArgs(this, args),\n isTargetingSelf = _normalizeListenArgs.isTargetingSelf,\n target = _normalizeListenArgs.target,\n type = _normalizeListenArgs.type,\n listener = _normalizeListenArgs.listener;\n\n listen(target, 'on', type, listener);\n\n // If this object is listening to another evented object.\n if (!isTargetingSelf) {\n\n // If this object is disposed, remove the listener.\n var removeListenerOnDispose = function removeListenerOnDispose() {\n return _this.off(target, type, listener);\n };\n\n // Use the same function ID as the listener so we can remove it later it\n // using the ID of the original listener.\n removeListenerOnDispose.guid = listener.guid;\n\n // Add a listener to the target's dispose event as well. This ensures\n // that if the target is disposed BEFORE this object, we remove the\n // removal listener that was just added. Otherwise, we create a memory leak.\n var removeRemoverOnTargetDispose = function removeRemoverOnTargetDispose() {\n return _this.off('dispose', removeListenerOnDispose);\n };\n\n // Use the same function ID as the listener so we can remove it later\n // it using the ID of the original listener.\n removeRemoverOnTargetDispose.guid = listener.guid;\n\n listen(this, 'on', 'dispose', removeListenerOnDispose);\n listen(target, 'on', 'dispose', removeRemoverOnTargetDispose);\n }\n },\n\n\n /**\n * Add a listener to an event (or events) on this object or another evented\n * object. The listener will only be called once and then removed.\n *\n * @param {string|Array|Element|Object} targetOrType\n * If this is a string or array, it represents the event type(s)\n * that will trigger the listener.\n *\n * Another evented object can be passed here instead, which will\n * cause the listener to listen for events on _that_ object.\n *\n * In either case, the listener's `this` value will be bound to\n * this object.\n *\n * @param {string|Array|Function} typeOrListener\n * If the first argument was a string or array, this should be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function.\n */\n one: function one$$1() {\n var _this2 = this;\n\n for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var _normalizeListenArgs2 = normalizeListenArgs(this, args),\n isTargetingSelf = _normalizeListenArgs2.isTargetingSelf,\n target = _normalizeListenArgs2.target,\n type = _normalizeListenArgs2.type,\n listener = _normalizeListenArgs2.listener;\n\n // Targeting this evented object.\n\n\n if (isTargetingSelf) {\n listen(target, 'one', type, listener);\n\n // Targeting another evented object.\n } else {\n var wrapper = function wrapper() {\n for (var _len3 = arguments.length, largs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n largs[_key3] = arguments[_key3];\n }\n\n _this2.off(target, type, wrapper);\n listener.apply(null, largs);\n };\n\n // Use the same function ID as the listener so we can remove it later\n // it using the ID of the original listener.\n wrapper.guid = listener.guid;\n listen(target, 'one', type, wrapper);\n }\n },\n\n\n /**\n * Removes listener(s) from event(s) on an evented object.\n *\n * @param {string|Array|Element|Object} [targetOrType]\n * If this is a string or array, it represents the event type(s).\n *\n * Another evented object can be passed here instead, in which case\n * ALL 3 arguments are _required_.\n *\n * @param {string|Array|Function} [typeOrListener]\n * If the first argument was a string or array, this may be the\n * listener function. Otherwise, this is a string or array of event\n * type(s).\n *\n * @param {Function} [listener]\n * If the first argument was another evented object, this will be\n * the listener function; otherwise, _all_ listeners bound to the\n * event type(s) will be removed.\n */\n off: function off$$1(targetOrType, typeOrListener, listener) {\n\n // Targeting this evented object.\n if (!targetOrType || isValidEventType(targetOrType)) {\n off(this.eventBusEl_, targetOrType, typeOrListener);\n\n // Targeting another evented object.\n } else {\n var target = targetOrType;\n var type = typeOrListener;\n\n // Fail fast and in a meaningful way!\n validateTarget(target);\n validateEventType(type);\n validateListener(listener);\n\n // Ensure there's at least a guid, even if the function hasn't been used\n listener = bind(this, listener);\n\n // Remove the dispose listener on this evented object, which was given\n // the same guid as the event listener in on().\n this.off('dispose', listener);\n\n if (target.nodeName) {\n off(target, type, listener);\n off(target, 'dispose', listener);\n } else if (isEvented(target)) {\n target.off(type, listener);\n target.off('dispose', listener);\n }\n }\n },\n\n\n /**\n * Fire an event on this evented object, causing its listeners to be called.\n *\n * @param {string|Object} event\n * An event type or an object with a type property.\n *\n * @param {Object} [hash]\n * An additional object to pass along to listeners.\n *\n * @returns {boolean}\n * Whether or not the default behavior was prevented.\n */\n trigger: function trigger$$1(event, hash) {\n return trigger(this.eventBusEl_, event, hash);\n }\n};\n\n/**\n * Applies {@link module:evented~EventedMixin|EventedMixin} to a target object.\n *\n * @param {Object} target\n * The object to which to add event methods.\n *\n * @param {Object} [options={}]\n * Options for customizing the mixin behavior.\n *\n * @param {String} [options.eventBusKey]\n * By default, adds a `eventBusEl_` DOM element to the target object,\n * which is used as an event bus. If the target object already has a\n * DOM element that should be used, pass its key here.\n *\n * @return {Object}\n * The target object.\n */\nfunction evented(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var eventBusKey = options.eventBusKey;\n\n // Set or create the eventBusEl_.\n\n if (eventBusKey) {\n if (!target[eventBusKey].nodeName) {\n throw new Error('The eventBusKey \"' + eventBusKey + '\" does not refer to an element.');\n }\n target.eventBusEl_ = target[eventBusKey];\n } else {\n target.eventBusEl_ = createEl('span', { className: 'vjs-event-bus' });\n }\n\n assign(target, EventedMixin);\n\n // When any evented object is disposed, it removes all its listeners.\n target.on('dispose', function () {\n target.off();\n window.setTimeout(function () {\n target.eventBusEl_ = null;\n }, 0);\n });\n\n return target;\n}\n\n/**\n * @file mixins/stateful.js\n * @module stateful\n */\n/**\n * Contains methods that provide statefulness to an object which is passed\n * to {@link module:stateful}.\n *\n * @mixin StatefulMixin\n */\nvar StatefulMixin = {\n\n /**\n * A hash containing arbitrary keys and values representing the state of\n * the object.\n *\n * @type {Object}\n */\n state: {},\n\n /**\n * Set the state of an object by mutating its\n * {@link module:stateful~StatefulMixin.state|state} object in place.\n *\n * @fires module:stateful~StatefulMixin#statechanged\n * @param {Object|Function} stateUpdates\n * A new set of properties to shallow-merge into the plugin state.\n * Can be a plain object or a function returning a plain object.\n *\n * @returns {Object|undefined}\n * An object containing changes that occurred. If no changes\n * occurred, returns `undefined`.\n */\n setState: function setState(stateUpdates) {\n var _this = this;\n\n // Support providing the `stateUpdates` state as a function.\n if (typeof stateUpdates === 'function') {\n stateUpdates = stateUpdates();\n }\n\n var changes = void 0;\n\n each(stateUpdates, function (value, key) {\n\n // Record the change if the value is different from what's in the\n // current state.\n if (_this.state[key] !== value) {\n changes = changes || {};\n changes[key] = {\n from: _this.state[key],\n to: value\n };\n }\n\n _this.state[key] = value;\n });\n\n // Only trigger \"statechange\" if there were changes AND we have a trigger\n // function. This allows us to not require that the target object be an\n // evented object.\n if (changes && isEvented(this)) {\n\n /**\n * An event triggered on an object that is both\n * {@link module:stateful|stateful} and {@link module:evented|evented}\n * indicating that its state has changed.\n *\n * @event module:stateful~StatefulMixin#statechanged\n * @type {Object}\n * @property {Object} changes\n * A hash containing the properties that were changed and\n * the values they were changed `from` and `to`.\n */\n this.trigger({\n changes: changes,\n type: 'statechanged'\n });\n }\n\n return changes;\n }\n};\n\n/**\n * Applies {@link module:stateful~StatefulMixin|StatefulMixin} to a target\n * object.\n *\n * If the target object is {@link module:evented|evented} and has a\n * `handleStateChanged` method, that method will be automatically bound to the\n * `statechanged` event on itself.\n *\n * @param {Object} target\n * The object to be made stateful.\n *\n * @param {Object} [defaultState]\n * A default set of properties to populate the newly-stateful object's\n * `state` property.\n *\n * @returns {Object}\n * Returns the `target`.\n */\nfunction stateful(target, defaultState) {\n assign(target, StatefulMixin);\n\n // This happens after the mixing-in because we need to replace the `state`\n // added in that step.\n target.state = assign({}, target.state, defaultState);\n\n // Auto-bind the `handleStateChanged` method of the target object if it exists.\n if (typeof target.handleStateChanged === 'function' && isEvented(target)) {\n target.on('statechanged', target.handleStateChanged);\n }\n\n return target;\n}\n\n/**\n * @file to-title-case.js\n * @module to-title-case\n */\n\n/**\n * Uppercase the first letter of a string.\n *\n * @param {string} string\n * String to be uppercased\n *\n * @return {string}\n * The string with an uppercased first letter\n */\nfunction toTitleCase(string) {\n if (typeof string !== 'string') {\n return string;\n }\n\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\n/**\n * Compares the TitleCase versions of the two strings for equality.\n *\n * @param {string} str1\n * The first string to compare\n *\n * @param {string} str2\n * The second string to compare\n *\n * @return {boolean}\n * Whether the TitleCase versions of the strings are equal\n */\nfunction titleCaseEquals(str1, str2) {\n return toTitleCase(str1) === toTitleCase(str2);\n}\n\n/**\n * @file merge-options.js\n * @module merge-options\n */\n/**\n * Deep-merge one or more options objects, recursively merging **only** plain\n * object properties.\n *\n * @param {Object[]} sources\n * One or more objects to merge into a new object.\n *\n * @returns {Object}\n * A new object that is the merged result of all sources.\n */\nfunction mergeOptions() {\n var result = {};\n\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n sources.forEach(function (source) {\n if (!source) {\n return;\n }\n\n each(source, function (value, key) {\n if (!isPlain(value)) {\n result[key] = value;\n return;\n }\n\n if (!isPlain(result[key])) {\n result[key] = {};\n }\n\n result[key] = mergeOptions(result[key], value);\n });\n });\n\n return result;\n}\n\n/**\n * Player Component - Base class for all UI objects\n *\n * @file component.js\n */\n/**\n * Base class for all UI Components.\n * Components are UI objects which represent both a javascript object and an element\n * in the DOM. They can be children of other components, and can have\n * children themselves.\n *\n * Components can also use methods from {@link EventTarget}\n */\n\nvar Component = function () {\n\n /**\n * A callback that is called when a component is ready. Does not have any\n * paramters and any callback value will be ignored.\n *\n * @callback Component~ReadyCallback\n * @this Component\n */\n\n /**\n * Creates an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Object[]} [options.children]\n * An array of children objects to intialize this component with. Children objects have\n * a name property that will be used if more than one component of the same type needs to be\n * added.\n *\n * @param {Component~ReadyCallback} [ready]\n * Function that gets called when the `Component` is ready.\n */\n function Component(player, options, ready) {\n classCallCheck(this, Component);\n\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = mergeOptions({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = mergeOptions(this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || options.el && options.el.id;\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n var id = player && player.id && player.id() || 'no_player';\n\n this.id_ = id + '_component_' + newGUID();\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n // if evented is anything except false, we want to mixin in evented\n if (options.evented !== false) {\n // Make this an evented object and use `el_`, if available, as its event bus\n evented(this, { eventBusKey: this.el_ ? 'el_' : null });\n }\n stateful(this, this.constructor.defaultState);\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the `Component` and all child components.\n *\n * @fires Component#dispose\n */\n\n\n Component.prototype.dispose = function dispose() {\n\n /**\n * Triggered when a `Component` is disposed.\n *\n * @event Component#dispose\n * @type {EventTarget~Event}\n *\n * @property {boolean} [bubbles=false]\n * set to false so that the close event does not\n * bubble up\n */\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (var i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n if (this.el_) {\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n removeData(this.el_);\n this.el_ = null;\n }\n\n // remove reference to the player after disposing of the element\n this.player_ = null;\n };\n\n /**\n * Return the {@link Player} that the `Component` has attached to.\n *\n * @return {Player}\n * The player that this `Component` has attached to.\n */\n\n\n Component.prototype.player = function player() {\n return this.player_;\n };\n\n /**\n * Deep merge of options objects with new options.\n * > Note: When both `obj` and `options` contain properties whose values are objects.\n * The two properties get merged using {@link module:mergeOptions}\n *\n * @param {Object} obj\n * The object that contains new options.\n *\n * @return {Object}\n * A new object of `this.options_` and `obj` merged together.\n *\n * @deprecated since version 5\n */\n\n\n Component.prototype.options = function options(obj) {\n log$1.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions(this.options_, obj);\n return this.options_;\n };\n\n /**\n * Get the `Component`s DOM element\n *\n * @return {Element}\n * The DOM element for this `Component`.\n */\n\n\n Component.prototype.el = function el() {\n return this.el_;\n };\n\n /**\n * Create the `Component`s DOM element.\n *\n * @param {string} [tagName]\n * Element's DOM node type. e.g. 'div'\n *\n * @param {Object} [properties]\n * An object of properties that should be set.\n *\n * @param {Object} [attributes]\n * An object of attributes that should be set.\n *\n * @return {Element}\n * The element that gets created.\n */\n\n\n Component.prototype.createEl = function createEl$$1(tagName, properties, attributes) {\n return createEl(tagName, properties, attributes);\n };\n\n /**\n * Localize a string given the string in english.\n *\n * If tokens are provided, it'll try and run a simple token replacement on the provided string.\n * The tokens it looks for look like `{1}` with the index being 1-indexed into the tokens array.\n *\n * If a `defaultValue` is provided, it'll use that over `string`,\n * if a value isn't found in provided language files.\n * This is useful if you want to have a descriptive key for token replacement\n * but have a succinct localized string and not require `en.json` to be included.\n *\n * Currently, it is used for the progress bar timing.\n * ```js\n * {\n * \"progress bar timing: currentTime={1} duration={2}\": \"{1} of {2}\"\n * }\n * ```\n * It is then used like so:\n * ```js\n * this.localize('progress bar timing: currentTime={1} duration{2}',\n * [this.player_.currentTime(), this.player_.duration()],\n * '{1} of {2}');\n * ```\n *\n * Which outputs something like: `01:23 of 24:56`.\n *\n *\n * @param {string} string\n * The string to localize and the key to lookup in the language files.\n * @param {string[]} [tokens]\n * If the current item has token replacements, provide the tokens here.\n * @param {string} [defaultValue]\n * Defaults to `string`. Can be a default value to use for token replacement\n * if the lookup key is needed to be separate.\n *\n * @return {string}\n * The localized string or if no localization exists the english string.\n */\n\n\n Component.prototype.localize = function localize(string, tokens) {\n var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : string;\n\n var code = this.player_.language && this.player_.language();\n var languages = this.player_.languages && this.player_.languages();\n var language = languages && languages[code];\n var primaryCode = code && code.split('-')[0];\n var primaryLang = languages && languages[primaryCode];\n\n var localizedString = defaultValue;\n\n if (language && language[string]) {\n localizedString = language[string];\n } else if (primaryLang && primaryLang[string]) {\n localizedString = primaryLang[string];\n }\n\n if (tokens) {\n localizedString = localizedString.replace(/\\{(\\d+)\\}/g, function (match, index) {\n var value = tokens[index - 1];\n var ret = value;\n\n if (typeof value === 'undefined') {\n ret = match;\n }\n\n return ret;\n });\n }\n\n return localizedString;\n };\n\n /**\n * Return the `Component`s DOM element. This is where children get inserted.\n * This will usually be the the same as the element returned in {@link Component#el}.\n *\n * @return {Element}\n * The content element for this `Component`.\n */\n\n\n Component.prototype.contentEl = function contentEl() {\n return this.contentEl_ || this.el_;\n };\n\n /**\n * Get this `Component`s ID\n *\n * @return {string}\n * The id of this `Component`\n */\n\n\n Component.prototype.id = function id() {\n return this.id_;\n };\n\n /**\n * Get the `Component`s name. The name gets used to reference the `Component`\n * and is set during registration.\n *\n * @return {string}\n * The name of this `Component`.\n */\n\n\n Component.prototype.name = function name() {\n return this.name_;\n };\n\n /**\n * Get an array of all child components\n *\n * @return {Array}\n * The children\n */\n\n\n Component.prototype.children = function children() {\n return this.children_;\n };\n\n /**\n * Returns the child `Component` with the given `id`.\n *\n * @param {string} id\n * The id of the child `Component` to get.\n *\n * @return {Component|undefined}\n * The child `Component` with the given `id` or undefined.\n */\n\n\n Component.prototype.getChildById = function getChildById(id) {\n return this.childIndex_[id];\n };\n\n /**\n * Returns the child `Component` with the given `name`.\n *\n * @param {string} name\n * The name of the child `Component` to get.\n *\n * @return {Component|undefined}\n * The child `Component` with the given `name` or undefined.\n */\n\n\n Component.prototype.getChild = function getChild(name) {\n if (!name) {\n return;\n }\n\n name = toTitleCase(name);\n\n return this.childNameIndex_[name];\n };\n\n /**\n * Add a child `Component` inside the current `Component`.\n *\n *\n * @param {string|Component} child\n * The name or instance of a child to add.\n *\n * @param {Object} [options={}]\n * The key/value store of options that will get passed to children of\n * the child.\n *\n * @param {number} [index=this.children_.length]\n * The index to attempt to add a child into.\n *\n * @return {Component}\n * The `Component` that gets added as a child. When using a string the\n * `Component` will get created by this process.\n */\n\n\n Component.prototype.addChild = function addChild(child) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var index = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.children_.length;\n\n var component = void 0;\n var componentName = void 0;\n\n // If child is a string, create component with options\n if (typeof child === 'string') {\n componentName = toTitleCase(child);\n\n var componentClassName = options.componentClass || componentName;\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n var ComponentClass = Component.getComponent(componentClassName);\n\n if (!ComponentClass) {\n throw new Error('Component ' + componentClassName + ' does not exist');\n }\n\n // data stored directly on the videojs object may be\n // misidentified as a component to retain\n // backwards-compatibility with 4.x. check to make sure the\n // component class can be instantiated.\n if (typeof ComponentClass !== 'function') {\n return null;\n }\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.splice(index, 0, component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || component.name && toTitleCase(component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n var childNodes = this.contentEl().children;\n var refNode = childNodes[index] || null;\n\n this.contentEl().insertBefore(component.el(), refNode);\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n };\n\n /**\n * Remove a child `Component` from this `Component`s list of children. Also removes\n * the child `Component`s element from this `Component`s element.\n *\n * @param {Component} component\n * The child `Component` to remove.\n */\n\n\n Component.prototype.removeChild = function removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n var childFound = false;\n\n for (var i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n var compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n };\n\n /**\n * Add and initialize default child `Component`s based upon options.\n */\n\n\n Component.prototype.initChildren = function initChildren() {\n var _this = this;\n\n var children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n var parentOptions = this.options_;\n\n var handleAdd = function handleAdd(child) {\n var name = child.name;\n var opts = child.opts;\n\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options\n // to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = _this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n var newChild = _this.addChild(name, opts);\n\n if (newChild) {\n _this[name] = newChild;\n }\n };\n\n // Allow for an array of children details to passed in the options\n var workingChildren = void 0;\n var Tech = Component.getComponent('Tech');\n\n if (Array.isArray(children)) {\n workingChildren = children;\n } else {\n workingChildren = Object.keys(children);\n }\n\n workingChildren\n // children that are in this.options_ but also in workingChildren would\n // give us extra children we do not want. So, we want to filter them out.\n .concat(Object.keys(this.options_).filter(function (child) {\n return !workingChildren.some(function (wchild) {\n if (typeof wchild === 'string') {\n return child === wchild;\n }\n return child === wchild.name;\n });\n })).map(function (child) {\n var name = void 0;\n var opts = void 0;\n\n if (typeof child === 'string') {\n name = child;\n opts = children[name] || _this.options_[name] || {};\n } else {\n name = child.name;\n opts = child;\n }\n\n return { name: name, opts: opts };\n }).filter(function (child) {\n // we have to make sure that child.name isn't in the techOrder since\n // techs are registerd as Components but can't aren't compatible\n // See https://github.com/videojs/video.js/issues/2772\n var c = Component.getComponent(child.opts.componentClass || toTitleCase(child.name));\n\n return c && !Tech.isTech(c);\n }).forEach(handleAdd);\n }\n };\n\n /**\n * Builds the default DOM class name. Should be overriden by sub-components.\n *\n * @return {string}\n * The DOM class name for this object.\n *\n * @abstract\n */\n\n\n Component.prototype.buildCSSClass = function buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n };\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @return {Component}\n * Returns itself; method can be chained.\n */\n\n\n Component.prototype.ready = function ready(fn) {\n var sync = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n if (!fn) {\n return;\n }\n\n if (!this.isReady_) {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n return;\n }\n\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n };\n\n /**\n * Trigger all the ready listeners for this `Component`.\n *\n * @fires Component#ready\n */\n\n\n Component.prototype.triggerReady = function triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggered asynchronously\n this.setTimeout(function () {\n var readyQueue = this.readyQueue_;\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function (fn) {\n fn.call(this);\n }, this);\n }\n\n // Allow for using event listeners also\n /**\n * Triggered when a `Component` is ready.\n *\n * @event Component#ready\n * @type {EventTarget~Event}\n */\n this.trigger('ready');\n }, 1);\n };\n\n /**\n * Find a single DOM element matching a `selector`. This can be within the `Component`s\n * `contentEl()` or another custom context.\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelector`.\n *\n * @param {Element|string} [context=this.contentEl()]\n * A DOM element within which to query. Can also be a selector string in\n * which case the first matching element will get used as context. If\n * missing `this.contentEl()` gets used. If `this.contentEl()` returns\n * nothing it falls back to `document`.\n *\n * @return {Element|null}\n * the dom element that was found, or null\n *\n * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors)\n */\n\n\n Component.prototype.$ = function $$$1(selector, context) {\n return $(selector, context || this.contentEl());\n };\n\n /**\n * Finds all DOM element matching a `selector`. This can be within the `Component`s\n * `contentEl()` or another custom context.\n *\n * @param {string} selector\n * A valid CSS selector, which will be passed to `querySelectorAll`.\n *\n * @param {Element|string} [context=this.contentEl()]\n * A DOM element within which to query. Can also be a selector string in\n * which case the first matching element will get used as context. If\n * missing `this.contentEl()` gets used. If `this.contentEl()` returns\n * nothing it falls back to `document`.\n *\n * @return {NodeList}\n * a list of dom elements that were found\n *\n * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors)\n */\n\n\n Component.prototype.$$ = function $$$$1(selector, context) {\n return $$(selector, context || this.contentEl());\n };\n\n /**\n * Check if a component's element has a CSS class name.\n *\n * @param {string} classToCheck\n * CSS class name to check.\n *\n * @return {boolean}\n * - True if the `Component` has the class.\n * - False if the `Component` does not have the class`\n */\n\n\n Component.prototype.hasClass = function hasClass$$1(classToCheck) {\n return hasClass(this.el_, classToCheck);\n };\n\n /**\n * Add a CSS class name to the `Component`s element.\n *\n * @param {string} classToAdd\n * CSS class name to add\n */\n\n\n Component.prototype.addClass = function addClass$$1(classToAdd) {\n addClass(this.el_, classToAdd);\n };\n\n /**\n * Remove a CSS class name from the `Component`s element.\n *\n * @param {string} classToRemove\n * CSS class name to remove\n */\n\n\n Component.prototype.removeClass = function removeClass$$1(classToRemove) {\n removeClass(this.el_, classToRemove);\n };\n\n /**\n * Add or remove a CSS class name from the component's element.\n * - `classToToggle` gets added when {@link Component#hasClass} would return false.\n * - `classToToggle` gets removed when {@link Component#hasClass} would return true.\n *\n * @param {string} classToToggle\n * The class to add or remove based on (@link Component#hasClass}\n *\n * @param {boolean|Dom~predicate} [predicate]\n * An {@link Dom~predicate} function or a boolean\n */\n\n\n Component.prototype.toggleClass = function toggleClass$$1(classToToggle, predicate) {\n toggleClass(this.el_, classToToggle, predicate);\n };\n\n /**\n * Show the `Component`s element if it is hidden by removing the\n * 'vjs-hidden' class name from it.\n */\n\n\n Component.prototype.show = function show() {\n this.removeClass('vjs-hidden');\n };\n\n /**\n * Hide the `Component`s element if it is currently showing by adding the\n * 'vjs-hidden` class name to it.\n */\n\n\n Component.prototype.hide = function hide() {\n this.addClass('vjs-hidden');\n };\n\n /**\n * Lock a `Component`s element in its visible state by adding the 'vjs-lock-showing'\n * class name to it. Used during fadeIn/fadeOut.\n *\n * @private\n */\n\n\n Component.prototype.lockShowing = function lockShowing() {\n this.addClass('vjs-lock-showing');\n };\n\n /**\n * Unlock a `Component`s element from its visible state by removing the 'vjs-lock-showing'\n * class name from it. Used during fadeIn/fadeOut.\n *\n * @private\n */\n\n\n Component.prototype.unlockShowing = function unlockShowing() {\n this.removeClass('vjs-lock-showing');\n };\n\n /**\n * Get the value of an attribute on the `Component`s element.\n *\n * @param {string} attribute\n * Name of the attribute to get the value from.\n *\n * @return {string|null}\n * - The value of the attribute that was asked for.\n * - Can be an empty string on some browsers if the attribute does not exist\n * or has no value\n * - Most browsers will return null if the attibute does not exist or has\n * no value.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute}\n */\n\n\n Component.prototype.getAttribute = function getAttribute$$1(attribute) {\n return getAttribute(this.el_, attribute);\n };\n\n /**\n * Set the value of an attribute on the `Component`'s element\n *\n * @param {string} attribute\n * Name of the attribute to set.\n *\n * @param {string} value\n * Value to set the attribute to.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute}\n */\n\n\n Component.prototype.setAttribute = function setAttribute$$1(attribute, value) {\n setAttribute(this.el_, attribute, value);\n };\n\n /**\n * Remove an attribute from the `Component`s element.\n *\n * @param {string} attribute\n * Name of the attribute to remove.\n *\n * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute}\n */\n\n\n Component.prototype.removeAttribute = function removeAttribute$$1(attribute) {\n removeAttribute(this.el_, attribute);\n };\n\n /**\n * Get or set the width of the component based upon the CSS styles.\n * See {@link Component#dimension} for more detailed information.\n *\n * @param {number|string} [num]\n * The width that you want to set postfixed with '%', 'px' or nothing.\n *\n * @param {boolean} [skipListeners]\n * Skip the componentresize event trigger\n *\n * @return {number|string}\n * The width when getting, zero if there is no width. Can be a string\n * postpixed with '%' or 'px'.\n */\n\n\n Component.prototype.width = function width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n };\n\n /**\n * Get or set the height of the component based upon the CSS styles.\n * See {@link Component#dimension} for more detailed information.\n *\n * @param {number|string} [num]\n * The height that you want to set postfixed with '%', 'px' or nothing.\n *\n * @param {boolean} [skipListeners]\n * Skip the componentresize event trigger\n *\n * @return {number|string}\n * The width when getting, zero if there is no width. Can be a string\n * postpixed with '%' or 'px'.\n */\n\n\n Component.prototype.height = function height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n };\n\n /**\n * Set both the width and height of the `Component` element at the same time.\n *\n * @param {number|string} width\n * Width to set the `Component`s element to.\n *\n * @param {number|string} height\n * Height to set the `Component`s element to.\n */\n\n\n Component.prototype.dimensions = function dimensions(width, height) {\n // Skip componentresize listeners on width for optimization\n this.width(width, true);\n this.height(height);\n };\n\n /**\n * Get or set width or height of the `Component` element. This is the shared code\n * for the {@link Component#width} and {@link Component#height}.\n *\n * Things to know:\n * - If the width or height in an number this will return the number postfixed with 'px'.\n * - If the width/height is a percent this will return the percent postfixed with '%'\n * - Hidden elements have a width of 0 with `window.getComputedStyle`. This function\n * defaults to the `Component`s `style.width` and falls back to `window.getComputedStyle`.\n * See [this]{@link http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/}\n * for more information\n * - If you want the computed style of the component, use {@link Component#currentWidth}\n * and {@link {Component#currentHeight}\n *\n * @fires Component#componentresize\n *\n * @param {string} widthOrHeight\n 8 'width' or 'height'\n *\n * @param {number|string} [num]\n 8 New dimension\n *\n * @param {boolean} [skipListeners]\n * Skip componentresize event trigger\n *\n * @return {number}\n * The dimension when getting or 0 if unset\n */\n\n\n Component.prototype.dimension = function dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n /**\n * Triggered when a component is resized.\n *\n * @event Component#componentresize\n * @type {EventTarget~Event}\n */\n this.trigger('componentresize');\n }\n\n return;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n var val = this.el_.style[widthOrHeight];\n var pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n };\n\n /**\n * Get the width or the height of the `Component` elements computed style. Uses\n * `window.getComputedStyle`.\n *\n * @param {string} widthOrHeight\n * A string containing 'width' or 'height'. Whichever one you want to get.\n *\n * @return {number}\n * The dimension that gets asked for or 0 if nothing was set\n * for that dimension.\n */\n\n\n Component.prototype.currentDimension = function currentDimension(widthOrHeight) {\n var computedWidthOrHeight = 0;\n\n if (widthOrHeight !== 'width' && widthOrHeight !== 'height') {\n throw new Error('currentDimension only accepts width or height value');\n }\n\n if (typeof window.getComputedStyle === 'function') {\n var computedStyle = window.getComputedStyle(this.el_);\n\n computedWidthOrHeight = computedStyle.getPropertyValue(widthOrHeight) || computedStyle[widthOrHeight];\n }\n\n // remove 'px' from variable and parse as integer\n computedWidthOrHeight = parseFloat(computedWidthOrHeight);\n\n // if the computed value is still 0, it's possible that the browser is lying\n // and we want to check the offset values.\n // This code also runs on IE8 and wherever getComputedStyle doesn't exist.\n if (computedWidthOrHeight === 0) {\n var rule = 'offset' + toTitleCase(widthOrHeight);\n\n computedWidthOrHeight = this.el_[rule];\n }\n\n return computedWidthOrHeight;\n };\n\n /**\n * An object that contains width and height values of the `Component`s\n * computed style. Uses `window.getComputedStyle`.\n *\n * @typedef {Object} Component~DimensionObject\n *\n * @property {number} width\n * The width of the `Component`s computed style.\n *\n * @property {number} height\n * The height of the `Component`s computed style.\n */\n\n /**\n * Get an object that contains width and height values of the `Component`s\n * computed style.\n *\n * @return {Component~DimensionObject}\n * The dimensions of the components element\n */\n\n\n Component.prototype.currentDimensions = function currentDimensions() {\n return {\n width: this.currentDimension('width'),\n height: this.currentDimension('height')\n };\n };\n\n /**\n * Get the width of the `Component`s computed style. Uses `window.getComputedStyle`.\n *\n * @return {number} width\n * The width of the `Component`s computed style.\n */\n\n\n Component.prototype.currentWidth = function currentWidth() {\n return this.currentDimension('width');\n };\n\n /**\n * Get the height of the `Component`s computed style. Uses `window.getComputedStyle`.\n *\n * @return {number} height\n * The height of the `Component`s computed style.\n */\n\n\n Component.prototype.currentHeight = function currentHeight() {\n return this.currentDimension('height');\n };\n\n /**\n * Set the focus to this component\n */\n\n\n Component.prototype.focus = function focus() {\n this.el_.focus();\n };\n\n /**\n * Remove the focus from this component\n */\n\n\n Component.prototype.blur = function blur() {\n this.el_.blur();\n };\n\n /**\n * Emit a 'tap' events when touch event support gets detected. This gets used to\n * support toggling the controls through a tap on the video. They get enabled\n * because every sub-component would have extra overhead otherwise.\n *\n * @private\n * @fires Component#tap\n * @listens Component#touchstart\n * @listens Component#touchmove\n * @listens Component#touchleave\n * @listens Component#touchcancel\n * @listens Component#touchend\n */\n\n\n Component.prototype.emitTapEvents = function emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n var touchStart = 0;\n var firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15,\n // so 10 seems like a nice, round number.\n var tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n var touchTimeThreshold = 200;\n\n var couldBeTap = void 0;\n\n this.on('touchstart', function (event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy pageX/pageY from the object\n firstTouch = {\n pageX: event.touches[0].pageX,\n pageY: event.touches[0].pageY\n };\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function (event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n var xdiff = event.touches[0].pageX - firstTouch.pageX;\n var ydiff = event.touches[0].pageY - firstTouch.pageY;\n var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n var noTap = function noTap() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function (event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n var touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n /**\n * Triggered when a `Component` is tapped.\n *\n * @event Component#tap\n * @type {EventTarget~Event}\n */\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n };\n\n /**\n * This function reports user activity whenever touch events happen. This can get\n * turned off by any sub-components that wants touch events to act another way.\n *\n * Report user touch activity when touch events occur. User activity gets used to\n * determine when controls should show/hide. It is simple when it comes to mouse\n * events, because any mouse event should show the controls. So we capture mouse\n * events that bubble up to the player and report activity when that happens.\n * With touch events it isn't as easy as `touchstart` and `touchend` toggle player\n * controls. So touch events can't help us at the player level either.\n *\n * User activity gets checked asynchronously. So what could happen is a tap event\n * on the video turns the controls off. Then the `touchend` event bubbles up to\n * the player. Which, if it reported user activity, would turn the controls right\n * back on. We also don't want to completely block touch events from bubbling up.\n * Furthermore a `touchmove` event and anything other than a tap, should not turn\n * controls back on.\n *\n * @listens Component#touchstart\n * @listens Component#touchmove\n * @listens Component#touchend\n * @listens Component#touchcancel\n */\n\n\n Component.prototype.enableTouchActivity = function enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n var report = bind(this.player(), this.player().reportUserActivity);\n\n var touchHolding = void 0;\n\n this.on('touchstart', function () {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n var touchEnd = function touchEnd(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n };\n\n /**\n * A callback that has no parameters and is bound into `Component`s context.\n *\n * @callback Component~GenericCallback\n * @this Component\n */\n\n /**\n * Creates a function that runs after an `x` millisecond timeout. This function is a\n * wrapper around `window.setTimeout`. There are a few reasons to use this one\n * instead though:\n * 1. It gets cleared via {@link Component#clearTimeout} when\n * {@link Component#dispose} gets called.\n * 2. The function callback will gets turned into a {@link Component~GenericCallback}\n *\n * > Note: You can't use `window.clearTimeout` on the id returned by this function. This\n * will cause its dispose listener not to get cleaned up! Please use\n * {@link Component#clearTimeout} or {@link Component#dispose} instead.\n *\n * @param {Component~GenericCallback} fn\n * The function that will be run after `timeout`.\n *\n * @param {number} timeout\n * Timeout in milliseconds to delay before executing the specified function.\n *\n * @return {number}\n * Returns a timeout ID that gets used to identify the timeout. It can also\n * get used in {@link Component#clearTimeout} to clear the timeout that\n * was set.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout}\n */\n\n\n Component.prototype.setTimeout = function setTimeout(fn, timeout) {\n var _this2 = this;\n\n // declare as variables so they are properly available in timeout function\n // eslint-disable-next-line\n var timeoutId, disposeFn;\n\n fn = bind(this, fn);\n\n timeoutId = window.setTimeout(function () {\n _this2.off('dispose', disposeFn);\n fn();\n }, timeout);\n\n disposeFn = function disposeFn() {\n return _this2.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = 'vjs-timeout-' + timeoutId;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n };\n\n /**\n * Clears a timeout that gets created via `window.setTimeout` or\n * {@link Component#setTimeout}. If you set a timeout via {@link Component#setTimeout}\n * use this function instead of `window.clearTimout`. If you don't your dispose\n * listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} timeoutId\n * The id of the timeout to clear. The return value of\n * {@link Component#setTimeout} or `window.setTimeout`.\n *\n * @return {number}\n * Returns the timeout id that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout}\n */\n\n\n Component.prototype.clearTimeout = function clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n var disposeFn = function disposeFn() {};\n\n disposeFn.guid = 'vjs-timeout-' + timeoutId;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n };\n\n /**\n * Creates a function that gets run every `x` milliseconds. This function is a wrapper\n * around `window.setInterval`. There are a few reasons to use this one instead though.\n * 1. It gets cleared via {@link Component#clearInterval} when\n * {@link Component#dispose} gets called.\n * 2. The function callback will be a {@link Component~GenericCallback}\n *\n * @param {Component~GenericCallback} fn\n * The function to run every `x` seconds.\n *\n * @param {number} interval\n * Execute the specified function every `x` milliseconds.\n *\n * @return {number}\n * Returns an id that can be used to identify the interval. It can also be be used in\n * {@link Component#clearInterval} to clear the interval.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval}\n */\n\n\n Component.prototype.setInterval = function setInterval(fn, interval) {\n var _this3 = this;\n\n fn = bind(this, fn);\n\n var intervalId = window.setInterval(fn, interval);\n\n var disposeFn = function disposeFn() {\n return _this3.clearInterval(intervalId);\n };\n\n disposeFn.guid = 'vjs-interval-' + intervalId;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n };\n\n /**\n * Clears an interval that gets created via `window.setInterval` or\n * {@link Component#setInterval}. If you set an inteval via {@link Component#setInterval}\n * use this function instead of `window.clearInterval`. If you don't your dispose\n * listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} intervalId\n * The id of the interval to clear. The return value of\n * {@link Component#setInterval} or `window.setInterval`.\n *\n * @return {number}\n * Returns the interval id that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval}\n */\n\n\n Component.prototype.clearInterval = function clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n var disposeFn = function disposeFn() {};\n\n disposeFn.guid = 'vjs-interval-' + intervalId;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n };\n\n /**\n * Queues up a callback to be passed to requestAnimationFrame (rAF), but\n * with a few extra bonuses:\n *\n * - Supports browsers that do not support rAF by falling back to\n * {@link Component#setTimeout}.\n *\n * - The callback is turned into a {@link Component~GenericCallback} (i.e.\n * bound to the component).\n *\n * - Automatic cancellation of the rAF callback is handled if the component\n * is disposed before it is called.\n *\n * @param {Component~GenericCallback} fn\n * A function that will be bound to this component and executed just\n * before the browser's next repaint.\n *\n * @return {number}\n * Returns an rAF ID that gets used to identify the timeout. It can\n * also be used in {@link Component#cancelAnimationFrame} to cancel\n * the animation frame callback.\n *\n * @listens Component#dispose\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame}\n */\n\n\n Component.prototype.requestAnimationFrame = function requestAnimationFrame(fn) {\n var _this4 = this;\n\n // declare as variables so they are properly available in rAF function\n // eslint-disable-next-line\n var id, disposeFn;\n\n if (this.supportsRaf_) {\n fn = bind(this, fn);\n\n id = window.requestAnimationFrame(function () {\n _this4.off('dispose', disposeFn);\n fn();\n });\n\n disposeFn = function disposeFn() {\n return _this4.cancelAnimationFrame(id);\n };\n\n disposeFn.guid = 'vjs-raf-' + id;\n this.on('dispose', disposeFn);\n\n return id;\n }\n\n // Fall back to using a timer.\n return this.setTimeout(fn, 1000 / 60);\n };\n\n /**\n * Cancels a queued callback passed to {@link Component#requestAnimationFrame}\n * (rAF).\n *\n * If you queue an rAF callback via {@link Component#requestAnimationFrame},\n * use this function instead of `window.cancelAnimationFrame`. If you don't,\n * your dispose listener will not get cleaned up until {@link Component#dispose}!\n *\n * @param {number} id\n * The rAF ID to clear. The return value of {@link Component#requestAnimationFrame}.\n *\n * @return {number}\n * Returns the rAF ID that was cleared.\n *\n * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/cancelAnimationFrame}\n */\n\n\n Component.prototype.cancelAnimationFrame = function cancelAnimationFrame(id) {\n if (this.supportsRaf_) {\n window.cancelAnimationFrame(id);\n\n var disposeFn = function disposeFn() {};\n\n disposeFn.guid = 'vjs-raf-' + id;\n\n this.off('dispose', disposeFn);\n\n return id;\n }\n\n // Fall back to using a timer.\n return this.clearTimeout(id);\n };\n\n /**\n * Register a `Component` with `videojs` given the name and the component.\n *\n * > NOTE: {@link Tech}s should not be registered as a `Component`. {@link Tech}s\n * should be registered using {@link Tech.registerTech} or\n * {@link videojs:videojs.registerTech}.\n *\n * > NOTE: This function can also be seen on videojs as\n * {@link videojs:videojs.registerComponent}.\n *\n * @param {string} name\n * The name of the `Component` to register.\n *\n * @param {Component} ComponentToRegister\n * The `Component` class to register.\n *\n * @return {Component}\n * The `Component` that was registered.\n */\n\n\n Component.registerComponent = function registerComponent(name, ComponentToRegister) {\n if (typeof name !== 'string' || !name) {\n throw new Error('Illegal component name, \"' + name + '\"; must be a non-empty string.');\n }\n\n var Tech = Component.getComponent('Tech');\n\n // We need to make sure this check is only done if Tech has been registered.\n var isTech = Tech && Tech.isTech(ComponentToRegister);\n var isComp = Component === ComponentToRegister || Component.prototype.isPrototypeOf(ComponentToRegister.prototype);\n\n if (isTech || !isComp) {\n var reason = void 0;\n\n if (isTech) {\n reason = 'techs must be registered using Tech.registerTech()';\n } else {\n reason = 'must be a Component subclass';\n }\n\n throw new Error('Illegal component, \"' + name + '\"; ' + reason + '.');\n }\n\n name = toTitleCase(name);\n\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n var Player = Component.getComponent('Player');\n\n if (name === 'Player' && Player && Player.players) {\n var players = Player.players;\n var playerNames = Object.keys(players);\n\n // If we have players that were disposed, then their name will still be\n // in Players.players. So, we must loop through and verify that the value\n // for each item is not null. This allows registration of the Player component\n // after all players have been disposed or before any were created.\n if (players && playerNames.length > 0 && playerNames.map(function (pname) {\n return players[pname];\n }).every(Boolean)) {\n throw new Error('Can not register Player component after player has been created.');\n }\n }\n\n Component.components_[name] = ComponentToRegister;\n\n return ComponentToRegister;\n };\n\n /**\n * Get a `Component` based on the name it was registered with.\n *\n * @param {string} name\n * The Name of the component to get.\n *\n * @return {Component}\n * The `Component` that got registered under the given name.\n *\n * @deprecated In `videojs` 6 this will not return `Component`s that were not\n * registered using {@link Component.registerComponent}. Currently we\n * check the global `videojs` object for a `Component` name and\n * return that if it exists.\n */\n\n\n Component.getComponent = function getComponent(name) {\n if (!name) {\n return;\n }\n\n name = toTitleCase(name);\n\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n };\n\n return Component;\n}();\n\n/**\n * Whether or not this component supports `requestAnimationFrame`.\n *\n * This is exposed primarily for testing purposes.\n *\n * @private\n * @type {Boolean}\n */\n\n\nComponent.prototype.supportsRaf_ = typeof window.requestAnimationFrame === 'function' && typeof window.cancelAnimationFrame === 'function';\n\nComponent.registerComponent('Component', Component);\n\n/**\n * @file time-ranges.js\n * @module time-ranges\n */\n\n/**\n * Returns the time for the specified index at the start or end\n * of a TimeRange object.\n *\n * @function time-ranges:indexFunction\n *\n * @param {number} [index=0]\n * The range number to return the time for.\n *\n * @return {number}\n * The time that offset at the specified index.\n *\n * @depricated index must be set to a value, in the future this will throw an error.\n */\n\n/**\n * An object that contains ranges of time for various reasons.\n *\n * @typedef {Object} TimeRange\n *\n * @property {number} length\n * The number of time ranges represented by this Object\n *\n * @property {time-ranges:indexFunction} start\n * Returns the time offset at which a specified time range begins.\n *\n * @property {time-ranges:indexFunction} end\n * Returns the time offset at which a specified time range ends.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges\n */\n\n/**\n * Check if any of the time ranges are over the maximum index.\n *\n * @param {string} fnName\n * The function name to use for logging\n *\n * @param {number} index\n * The index to check\n *\n * @param {number} maxIndex\n * The maximum possible index\n *\n * @throws {Error} if the timeRanges provided are over the maxIndex\n */\nfunction rangeCheck(fnName, index, maxIndex) {\n if (typeof index !== 'number' || index < 0 || index > maxIndex) {\n throw new Error('Failed to execute \\'' + fnName + '\\' on \\'TimeRanges\\': The index provided (' + index + ') is non-numeric or out of bounds (0-' + maxIndex + ').');\n }\n}\n\n/**\n * Get the time for the specified index at the start or end\n * of a TimeRange object.\n *\n * @param {string} fnName\n * The function name to use for logging\n *\n * @param {string} valueIndex\n * The proprety that should be used to get the time. should be 'start' or 'end'\n *\n * @param {Array} ranges\n * An array of time ranges\n *\n * @param {Array} [rangeIndex=0]\n * The index to start the search at\n *\n * @return {number}\n * The time that offset at the specified index.\n *\n *\n * @depricated rangeIndex must be set to a value, in the future this will throw an error.\n * @throws {Error} if rangeIndex is more than the length of ranges\n */\nfunction getRange(fnName, valueIndex, ranges, rangeIndex) {\n rangeCheck(fnName, rangeIndex, ranges.length - 1);\n return ranges[rangeIndex][valueIndex];\n}\n\n/**\n * Create a time range object given ranges of time.\n *\n * @param {Array} [ranges]\n * An array of time ranges.\n */\nfunction createTimeRangesObj(ranges) {\n if (ranges === undefined || ranges.length === 0) {\n return {\n length: 0,\n start: function start() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function end() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: ranges.length,\n start: getRange.bind(null, 'start', 0, ranges),\n end: getRange.bind(null, 'end', 1, ranges)\n };\n}\n\n/**\n * Should create a fake `TimeRange` object which mimics an HTML5 time range instance.\n *\n * @param {number|Array} start\n * The start of a single range or an array of ranges\n *\n * @param {number} end\n * The end of a single range.\n *\n * @private\n */\nfunction createTimeRanges(start, end) {\n if (Array.isArray(start)) {\n return createTimeRangesObj(start);\n } else if (start === undefined || end === undefined) {\n return createTimeRangesObj();\n }\n return createTimeRangesObj([[start, end]]);\n}\n\n/**\n * @file buffer.js\n * @module buffer\n */\n/**\n * Compute the percentage of the media that has been buffered.\n *\n * @param {TimeRange} buffered\n * The current `TimeRange` object representing buffered time ranges\n *\n * @param {number} duration\n * Total duration of the media\n *\n * @return {number}\n * Percent buffered of the total duration in decimal form.\n */\nfunction bufferedPercent(buffered, duration) {\n var bufferedDuration = 0;\n var start = void 0;\n var end = void 0;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRanges(0, 0);\n }\n\n for (var i = 0; i < buffered.length; i++) {\n start = buffered.start(i);\n end = buffered.end(i);\n\n // buffered end can be bigger than duration by a very small fraction\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n\n/**\n * @file fullscreen-api.js\n * @module fullscreen-api\n * @private\n */\n/**\n * Store the browser-specific methods for the fullscreen API.\n *\n * @type {Object}\n * @see [Specification]{@link https://fullscreen.spec.whatwg.org}\n * @see [Map Approach From Screenfull.js]{@link https://github.com/sindresorhus/screenfull.js}\n */\nvar FullscreenApi = {};\n\n// browser API methods\nvar apiMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],\n// WebKit\n['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror'],\n// Old WebKit (Safari 5.1)\n['webkitRequestFullScreen', 'webkitCancelFullScreen', 'webkitCurrentFullScreenElement', 'webkitCancelFullScreen', 'webkitfullscreenchange', 'webkitfullscreenerror'],\n// Mozilla\n['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'],\n// Microsoft\n['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']];\n\nvar specApi = apiMap[0];\nvar browserApi = void 0;\n\n// determine the supported set of functions\nfor (var i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in document) {\n browserApi = apiMap[i];\n break;\n }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n for (var _i = 0; _i < browserApi.length; _i++) {\n FullscreenApi[specApi[_i]] = browserApi[_i];\n }\n}\n\n/**\n * @file media-error.js\n */\n/**\n * A Custom `MediaError` class which mimics the standard HTML5 `MediaError` class.\n *\n * @param {number|string|Object|MediaError} value\n * This can be of multiple types:\n * - number: should be a standard error code\n * - string: an error message (the code will be 0)\n * - Object: arbitrary properties\n * - `MediaError` (native): used to populate a video.js `MediaError` object\n * - `MediaError` (video.js): will return itself if it's already a\n * video.js `MediaError` object.\n *\n * @see [MediaError Spec]{@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror}\n * @see [Encrypted MediaError Spec]{@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes}\n *\n * @class MediaError\n */\nfunction MediaError(value) {\n\n // Allow redundant calls to this constructor to avoid having `instanceof`\n // checks peppered around the code.\n if (value instanceof MediaError) {\n return value;\n }\n\n if (typeof value === 'number') {\n this.code = value;\n } else if (typeof value === 'string') {\n // default code is zero, so this is a custom error\n this.message = value;\n } else if (isObject(value)) {\n\n // We assign the `code` property manually because native `MediaError` objects\n // do not expose it as an own/enumerable property of the object.\n if (typeof value.code === 'number') {\n this.code = value.code;\n }\n\n assign(this, value);\n }\n\n if (!this.message) {\n this.message = MediaError.defaultMessages[this.code] || '';\n }\n}\n\n/**\n * The error code that refers two one of the defined `MediaError` types\n *\n * @type {Number}\n */\nMediaError.prototype.code = 0;\n\n/**\n * An optional message that to show with the error. Message is not part of the HTML5\n * video spec but allows for more informative custom errors.\n *\n * @type {String}\n */\nMediaError.prototype.message = '';\n\n/**\n * An optional status code that can be set by plugins to allow even more detail about\n * the error. For example a plugin might provide a specific HTTP status code and an\n * error message for that code. Then when the plugin gets that error this class will\n * know how to display an error message for it. This allows a custom message to show\n * up on the `Player` error overlay.\n *\n * @type {Array}\n */\nMediaError.prototype.status = null;\n\n/**\n * Errors indexed by the W3C standard. The order **CANNOT CHANGE**! See the\n * specification listed under {@link MediaError} for more information.\n *\n * @enum {array}\n * @readonly\n * @property {string} 0 - MEDIA_ERR_CUSTOM\n * @property {string} 1 - MEDIA_ERR_CUSTOM\n * @property {string} 2 - MEDIA_ERR_ABORTED\n * @property {string} 3 - MEDIA_ERR_NETWORK\n * @property {string} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED\n * @property {string} 5 - MEDIA_ERR_ENCRYPTED\n */\nMediaError.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED'];\n\n/**\n * The default `MediaError` messages based on the {@link MediaError.errorTypes}.\n *\n * @type {Array}\n * @constant\n */\nMediaError.defaultMessages = {\n 1: 'You aborted the media playback',\n 2: 'A network error caused the media download to fail part-way.',\n 3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',\n 4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',\n 5: 'The media is encrypted and we do not have the keys to decrypt it.'\n};\n\n// Add types as properties on MediaError\n// e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\nfor (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) {\n MediaError[MediaError.errorTypes[errNum]] = errNum;\n // values should be accessible on both the class and instance\n MediaError.prototype[MediaError.errorTypes[errNum]] = errNum;\n}\n\n/**\n * Returns whether an object is `Promise`-like (i.e. has a `then` method).\n *\n * @param {Object} value\n * An object that may or may not be `Promise`-like.\n *\n * @return {Boolean}\n * Whether or not the object is `Promise`-like.\n */\nfunction isPromise(value) {\n return value !== undefined && value !== null && typeof value.then === 'function';\n}\n\n/**\n * Silence a Promise-like object.\n *\n * This is useful for avoiding non-harmful, but potentially confusing \"uncaught\n * play promise\" rejection error messages.\n *\n * @param {Object} value\n * An object that may or may not be `Promise`-like.\n */\nfunction silencePromise(value) {\n if (isPromise(value)) {\n value.then(null, function (e) {});\n }\n}\n\n/**\n * @file text-track-list-converter.js Utilities for capturing text track state and\n * re-creating tracks based on a capture.\n *\n * @module text-track-list-converter\n */\n\n/**\n * Examine a single {@link TextTrack} and return a JSON-compatible javascript object that\n * represents the {@link TextTrack}'s state.\n *\n * @param {TextTrack} track\n * The text track to query.\n *\n * @return {Object}\n * A serializable javascript representation of the TextTrack.\n * @private\n */\nvar trackToJson_ = function trackToJson_(track) {\n var ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(function (acc, prop, i) {\n\n if (track[prop]) {\n acc[prop] = track[prop];\n }\n\n return acc;\n }, {\n cues: track.cues && Array.prototype.map.call(track.cues, function (cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n })\n });\n\n return ret;\n};\n\n/**\n * Examine a {@link Tech} and return a JSON-compatible javascript array that represents the\n * state of all {@link TextTrack}s currently configured. The return array is compatible with\n * {@link text-track-list-converter:jsonToTextTracks}.\n *\n * @param {Tech} tech\n * The tech object to query\n *\n * @return {Array}\n * A serializable javascript representation of the {@link Tech}s\n * {@link TextTrackList}.\n */\nvar textTracksToJson = function textTracksToJson(tech) {\n\n var trackEls = tech.$$('track');\n\n var trackObjs = Array.prototype.map.call(trackEls, function (t) {\n return t.track;\n });\n var tracks = Array.prototype.map.call(trackEls, function (trackEl) {\n var json = trackToJson_(trackEl.track);\n\n if (trackEl.src) {\n json.src = trackEl.src;\n }\n return json;\n });\n\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n\n/**\n * Create a set of remote {@link TextTrack}s on a {@link Tech} based on an array of javascript\n * object {@link TextTrack} representations.\n *\n * @param {Array} json\n * An array of `TextTrack` representation objects, like those that would be\n * produced by `textTracksToJson`.\n *\n * @param {Tech} tech\n * The `Tech` to create the `TextTrack`s on.\n */\nvar jsonToTextTracks = function jsonToTextTracks(json, tech) {\n json.forEach(function (track) {\n var addedTrack = tech.addRemoteTextTrack(track).track;\n\n if (!track.src && track.cues) {\n track.cues.forEach(function (cue) {\n return addedTrack.addCue(cue);\n });\n }\n });\n\n return tech.textTracks();\n};\n\nvar textTrackConverter = { textTracksToJson: textTracksToJson, jsonToTextTracks: jsonToTextTracks, trackToJson_: trackToJson_ };\n\n/**\n * @file modal-dialog.js\n */\nvar MODAL_CLASS_NAME = 'vjs-modal-dialog';\nvar ESC = 27;\n\n/**\n * The `ModalDialog` displays over the video and its controls, which blocks\n * interaction with the player until it is closed.\n *\n * Modal dialogs include a \"Close\" button and will close when that button\n * is activated - or when ESC is pressed anywhere.\n *\n * @extends Component\n */\n\nvar ModalDialog = function (_Component) {\n inherits(ModalDialog, _Component);\n\n /**\n * Create an instance of this class.\n *\n * @param {Player} player\n * The `Player` that this class should be attached to.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Mixed} [options.content=undefined]\n * Provide customized content for this modal.\n *\n * @param {string} [options.description]\n * A text description for the modal, primarily for accessibility.\n *\n * @param {boolean} [options.fillAlways=false]\n * Normally, modals are automatically filled only the first time\n * they open. This tells the modal to refresh its content\n * every time it opens.\n *\n * @param {string} [options.label]\n * A text label for the modal, primarily for accessibility.\n *\n * @param {boolean} [options.temporary=true]\n * If `true`, the modal can only be opened once; it will be\n * disposed as soon as it's closed.\n *\n * @param {boolean} [options.uncloseable=false]\n * If `true`, the user will not be able to close the modal\n * through the UI in the normal ways. Programmatic closing is\n * still possible.\n */\n function ModalDialog(player, options) {\n classCallCheck(this, ModalDialog);\n\n var _this = possibleConstructorReturn(this, _Component.call(this, player, options));\n\n _this.opened_ = _this.hasBeenOpened_ = _this.hasBeenFilled_ = false;\n\n _this.closeable(!_this.options_.uncloseable);\n _this.content(_this.options_.content);\n\n // Make sure the contentEl is defined AFTER any children are initialized\n // because we only want the contents of the modal in the contentEl\n // (not the UI elements like the close button).\n _this.contentEl_ = createEl('div', {\n className: MODAL_CLASS_NAME + '-content'\n }, {\n role: 'document'\n });\n\n _this.descEl_ = createEl('p', {\n className: MODAL_CLASS_NAME + '-description vjs-control-text',\n id: _this.el().getAttribute('aria-describedby')\n });\n\n textContent(_this.descEl_, _this.description());\n _this.el_.appendChild(_this.descEl_);\n _this.el_.appendChild(_this.contentEl_);\n return _this;\n }\n\n /**\n * Create the `ModalDialog`'s DOM element\n *\n * @return {Element}\n * The DOM element that gets created.\n */\n\n\n ModalDialog.prototype.createEl = function createEl$$1() {\n return _Component.prototype.createEl.call(this, 'div', {\n className: this.buildCSSClass(),\n tabIndex: -1\n }, {\n 'aria-describedby': this.id() + '_description',\n 'aria-hidden': 'true',\n 'aria-label': this.label(),\n 'role': 'dialog'\n });\n };\n\n ModalDialog.prototype.dispose = function dispose() {\n this.contentEl_ = null;\n this.descEl_ = null;\n this.previouslyActiveEl_ = null;\n\n _Component.prototype.dispose.call(this);\n };\n\n /**\n * Builds the default DOM `className`.\n *\n * @return {string}\n * The DOM `className` for this object.\n */\n\n\n ModalDialog.prototype.buildCSSClass = function buildCSSClass() {\n return MODAL_CLASS_NAME + ' vjs-hidden ' + _Component.prototype.buildCSSClass.call(this);\n };\n\n /**\n * Handles `keydown` events on the document, looking for ESC, which closes\n * the modal.\n *\n * @param {EventTarget~Event} e\n * The keypress that triggered this event.\n *\n * @listens keydown\n */\n\n\n ModalDialog.prototype.handleKeyPress = function handleKeyPress(e) {\n if (e.which === ESC && this.closeable()) {\n this.close();\n }\n };\n\n /**\n * Returns the label string for this modal. Primarily used for accessibility.\n *\n * @return {string}\n * the localized or raw label of this modal.\n */\n\n\n ModalDialog.prototype.label = function label() {\n return this.localize(this.options_.label || 'Modal Window');\n };\n\n /**\n * Returns the description string for this modal. Primarily used for\n * accessibility.\n *\n * @return {string}\n * The localized or raw description of this modal.\n */\n\n\n ModalDialog.prototype.description = function description() {\n var desc = this.options_.description || this.localize('This is a modal window.');\n\n // Append a universal closeability message if the modal is closeable.\n if (this.closeable()) {\n desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.');\n }\n\n return desc;\n };\n\n /**\n * Opens the modal.\n *\n * @fires ModalDialog#beforemodalopen\n * @fires ModalDialog#modalopen\n */\n\n\n ModalDialog.prototype.open = function open() {\n if (!this.opened_) {\n var player = this.player();\n\n /**\n * Fired just before a `ModalDialog` is opened.\n *\n * @event ModalDialog#beforemodalopen\n * @type {EventTarget~Event}\n */\n this.trigger('beforemodalopen');\n this.opened_ = true;\n\n // Fill content if the modal has never opened before and\n // never been filled.\n if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) {\n this.fill();\n }\n\n // If the player was playing, pause it and take note of its previously\n // playing state.\n this.wasPlaying_ = !player.paused();\n\n if (this.options_.pauseOnOpen && this.wasPlaying_) {\n player.pause();\n }\n\n if (this.closeable()) {\n this.on(this.el_.ownerDocument, 'keydown', bind(this, this.handleKeyPress));\n }\n\n // Hide controls and note if they were enabled.\n this.hadControls_ = player.controls();\n player.controls(false);\n\n this.show();\n this.conditionalFocus_();\n this.el().setAttribute('aria-hidden', 'false');\n\n /**\n * Fired just after a `ModalDialog` is opened.\n *\n * @event ModalDialog#modalopen\n * @type {EventTarget~Event}\n */\n this.trigger('modalopen');\n this.hasBeenOpened_ = true;\n }\n };\n\n /**\n * If the `ModalDialog` is currently open or closed.\n *\n * @param {boolean} [value]\n * If given, it will open (`true`) or close (`false`) the modal.\n *\n * @return {boolean}\n * the current open state of the modaldialog\n */\n\n\n ModalDialog.prototype.opened = function opened(value) {\n if (typeof value === 'boolean') {\n this[value ? 'open' : 'close']();\n }\n return this.opened_;\n };\n\n /**\n * Closes the modal, does nothing if the `ModalDialog` is\n * not open.\n *\n * @fires ModalDialog#beforemodalclose\n * @fires ModalDialog#modalclose\n */\n\n\n ModalDialog.prototype.close = function close() {\n if (!this.opened_) {\n return;\n }\n var player = this.player();\n\n /**\n * Fired just before a `ModalDialog` is closed.\n *\n * @event ModalDialog#beforemodalclose\n * @type {EventTarget~Event}\n */\n this.trigger('beforemodalclose');\n this.opened_ = false;\n\n if (this.wasPlaying_ && this.options_.pauseOnOpen) {\n player.play();\n }\n\n if (this.closeable()) {\n this.off(this.el_.ownerDocument, 'keydown', bind(this, this.handleKeyPress));\n }\n\n if (this.hadControls_) {\n player.controls(true);\n }\n\n this.hide();\n this.el().setAttribute('aria-hidden', 'true');\n\n /**\n * Fired just after a `ModalDialog` is closed.\n *\n * @event ModalDialog#modalclose\n * @type {EventTarget~Event}\n */\n this.trigger('modalclose');\n this.conditionalBlur_();\n\n if (this.options_.temporary) {\n this.dispose();\n }\n };\n\n /**\n * Check to see if the `ModalDialog` is closeable via the UI.\n *\n * @param {boolean} [value]\n * If given as a boolean, it will set the `closeable` option.\n *\n * @return {boolean}\n * Returns the final value of the closable option.\n */\n\n\n ModalDialog.prototype.closeable = function closeable(value) {\n if (typeof value === 'boolean') {\n var closeable = this.closeable_ = !!value;\n var close = this.getChild('closeButton');\n\n // If this is being made closeable and has no close button, add one.\n if (closeable && !close) {\n\n // The close button should be a child of the modal - not its\n // content element, so temporarily change the content element.\n var temp = this.contentEl_;\n\n this.contentEl_ = this.el_;\n close = this.addChild('closeButton', { controlText: 'Close Modal Dialog' });\n this.contentEl_ = temp;\n this.on(close, 'close', this.close);\n }\n\n // If this is being made uncloseable and has a close button, remove it.\n if (!closeable && close) {\n this.off(close, 'close', this.close);\n this.removeChild(close);\n close.dispose();\n }\n }\n return this.closeable_;\n };\n\n /**\n * Fill the modal's content element with the modal's \"content\" option.\n * The content element will be emptied before this change takes place.\n */\n\n\n ModalDialog.prototype.fill = function fill() {\n this.fillWith(this.content());\n };\n\n /**\n * Fill the modal's content element with arbitrary content.\n * The content element will be emptied before this change takes place.\n *\n * @fires ModalDialog#beforemodalfill\n * @fires ModalDialog#modalfill\n *\n * @param {Mixed} [content]\n * The same rules apply to this as apply to the `content` option.\n */\n\n\n ModalDialog.prototype.fillWith = function fillWith(content) {\n var contentEl = this.contentEl();\n var parentEl = contentEl.parentNode;\n var nextSiblingEl = contentEl.nextSibling;\n\n /**\n * Fired just before a `ModalDialog` is filled with content.\n *\n * @event ModalDialog#beforemodalfill\n * @type {EventTarget~Event}\n */\n this.trigger('beforemodalfill');\n this.hasBeenFilled_ = true;\n\n // Detach the content element from the DOM before performing\n // manipulation to avoid modifying the live DOM multiple times.\n parentEl.removeChild(contentEl);\n this.empty();\n insertContent(contentEl, content);\n /**\n * Fired just after a `ModalDialog` is filled with content.\n *\n * @event ModalDialog#modalfill\n * @type {EventTarget~Event}\n */\n this.trigger('modalfill');\n\n // Re-inject the re-filled content element.\n if (nextSiblingEl) {\n parentEl.insertBefore(contentEl, nextSiblingEl);\n } else {\n parentEl.appendChild(contentEl);\n }\n\n // make sure that the close button is last in the dialog DOM\n var closeButton = this.getChild('closeButton');\n\n if (closeButton) {\n parentEl.appendChild(closeButton.el_);\n }\n };\n\n /**\n * Empties the content element. This happens anytime the modal is filled.\n *\n * @fires ModalDialog#beforemodalempty\n * @fires ModalDialog#modalempty\n */\n\n\n ModalDialog.prototype.empty = function empty() {\n /**\n * Fired just before a `ModalDialog` is emptied.\n *\n * @event ModalDialog#beforemodalempty\n * @type {EventTarget~Event}\n */\n this.trigger('beforemodalempty');\n emptyEl(this.contentEl());\n\n /**\n * Fired just after a `ModalDialog` is emptied.\n *\n * @event ModalDialog#modalempty\n * @type {EventTarget~Event}\n */\n this.trigger('modalempty');\n };\n\n /**\n * Gets or sets the modal content, which gets normalized before being\n * rendered into the DOM.\n *\n * This does not update the DOM or fill the modal, but it is called during\n * that process.\n *\n * @param {Mixed} [value]\n * If defined, sets the internal content value to be used on the\n * next call(s) to `fill`. This value is normalized before being\n * inserted. To \"clear\" the internal content value, pass `null`.\n *\n * @return {Mixed}\n * The current content of the modal dialog\n */\n\n\n ModalDialog.prototype.content = function content(value) {\n if (typeof value !== 'undefined') {\n this.content_ = value;\n }\n return this.content_;\n };\n\n /**\n * conditionally focus the modal dialog if focus was previously on the player.\n *\n * @private\n */\n\n\n ModalDialog.prototype.conditionalFocus_ = function conditionalFocus_() {\n var activeEl = document.activeElement;\n var playerEl = this.player_.el_;\n\n this.previouslyActiveEl_ = null;\n\n if (playerEl.contains(activeEl) || playerEl === activeEl) {\n this.previouslyActiveEl_ = activeEl;\n\n this.focus();\n\n this.on(document, 'keydown', this.handleKeyDown);\n }\n };\n\n /**\n * conditionally blur the element and refocus the last focused element\n *\n * @private\n */\n\n\n ModalDialog.prototype.conditionalBlur_ = function conditionalBlur_() {\n if (this.previouslyActiveEl_) {\n this.previouslyActiveEl_.focus();\n this.previouslyActiveEl_ = null;\n }\n\n this.off(document, 'keydown', this.handleKeyDown);\n };\n\n /**\n * Keydown handler. Attached when modal is focused.\n *\n * @listens keydown\n */\n\n\n ModalDialog.prototype.handleKeyDown = function handleKeyDown(event) {\n // exit early if it isn't a tab key\n if (event.which !== 9) {\n return;\n }\n\n var focusableEls = this.focusableEls_();\n var activeEl = this.el_.querySelector(':focus');\n var focusIndex = void 0;\n\n for (var i = 0; i < focusableEls.length; i++) {\n if (activeEl === focusableEls[i]) {\n focusIndex = i;\n break;\n }\n }\n\n if (document.activeElement === this.el_) {\n focusIndex = 0;\n }\n\n if (event.shiftKey && focusIndex === 0) {\n focusableEls[focusableEls.length - 1].focus();\n event.preventDefault();\n } else if (!event.shiftKey && focusIndex === focusableEls.length - 1) {\n focusableEls[0].focus();\n event.preventDefault();\n }\n };\n\n /**\n * get all focusable elements\n *\n * @private\n */\n\n\n ModalDialog.prototype.focusableEls_ = function focusableEls_() {\n var allChildren = this.el_.querySelectorAll('*');\n\n return Array.prototype.filter.call(allChildren, function (child) {\n return (child instanceof window.HTMLAnchorElement || child instanceof window.HTMLAreaElement) && child.hasAttribute('href') || (child instanceof window.HTMLInputElement || child instanceof window.HTMLSelectElement || child instanceof window.HTMLTextAreaElement || child instanceof window.HTMLButtonElement) && !child.hasAttribute('disabled') || child instanceof window.HTMLIFrameElement || child instanceof window.HTMLObjectElement || child instanceof window.HTMLEmbedElement || child.hasAttribute('tabindex') && child.getAttribute('tabindex') !== -1 || child.hasAttribute('contenteditable');\n });\n };\n\n return ModalDialog;\n}(Component);\n\n/**\n * Default options for `ModalDialog` default options.\n *\n * @type {Object}\n * @private\n */\n\n\nModalDialog.prototype.options_ = {\n pauseOnOpen: true,\n temporary: true\n};\n\nComponent.registerComponent('ModalDialog', ModalDialog);\n\n/**\n * @file track-list.js\n */\n/**\n * Common functionaliy between {@link TextTrackList}, {@link AudioTrackList}, and\n * {@link VideoTrackList}\n *\n * @extends EventTarget\n */\n\nvar TrackList = function (_EventTarget) {\n inherits(TrackList, _EventTarget);\n\n /**\n * Create an instance of this class\n *\n * @param {Track[]} tracks\n * A list of tracks to initialize the list with.\n *\n * @param {Object} [list]\n * The child object with inheritance done manually for ie8.\n *\n * @abstract\n */\n function TrackList() {\n var tracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var _ret;\n\n var list = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n classCallCheck(this, TrackList);\n\n var _this = possibleConstructorReturn(this, _EventTarget.call(this));\n\n if (!list) {\n list = _this; // eslint-disable-line\n if (IS_IE8) {\n list = document.createElement('custom');\n for (var prop in TrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TrackList.prototype[prop];\n }\n }\n }\n }\n\n list.tracks_ = [];\n\n /**\n * @memberof TrackList\n * @member {number} length\n * The current number of `Track`s in the this Trackist.\n * @instance\n */\n Object.defineProperty(list, 'length', {\n get: function get$$1() {\n return this.tracks_.length;\n }\n });\n\n for (var i = 0; i < tracks.length; i++) {\n list.addTrack(tracks[i]);\n }\n\n // must return the object, as for ie8 it will not be this\n // but a reference to a document object\n return _ret = list, possibleConstructorReturn(_this, _ret);\n }\n\n /**\n * Add a {@link Track} to the `TrackList`\n *\n * @param {Track} track\n * The audio, video, or text track to add to the list.\n *\n * @fires TrackList#addtrack\n */\n\n\n TrackList.prototype.addTrack = function addTrack(track) {\n var index = this.tracks_.length;\n\n if (!('' + index in this)) {\n Object.defineProperty(this, index, {\n get: function get$$1() {\n return this.tracks_[index];\n }\n });\n }\n\n // Do not add duplicate tracks\n if (this.tracks_.indexOf(track) === -1) {\n this.tracks_.push(track);\n /**\n * Triggered when a track is added to a track list.\n *\n * @event TrackList#addtrack\n * @type {EventTarget~Event}\n * @property {Track} track\n * A reference to track that was added.\n */\n this.trigger({\n track: track,\n type: 'addtrack'\n });\n }\n };\n\n /**\n * Remove a {@link Track} from the `TrackList`\n *\n * @param {Track} rtrack\n * The audio, video, or text track to remove from the list.\n *\n * @fires TrackList#removetrack\n */\n\n\n TrackList.prototype.removeTrack = function removeTrack(rtrack) {\n var track = void 0;\n\n for (var i = 0, l = this.length; i < l; i++) {\n if (this[i] === rtrack) {\n track = this[i];\n if (track.off) {\n track.off();\n }\n\n this.tracks_.splice(i, 1);\n\n break;\n }\n }\n\n if (!track) {\n return;\n }\n\n /**\n * Triggered when a track is removed from track list.\n *\n * @event TrackList#removetrack\n * @type {EventTarget~Event}\n * @property {Track} track\n * A reference to track that was removed.\n */\n this.trigger({\n track: track,\n type: 'removetrack'\n });\n };\n\n /**\n * Get a Track from the TrackList by a tracks id\n *\n * @param {String} id - the id of the track to get\n * @method getTrackById\n * @return {Track}\n * @private\n */\n\n\n TrackList.prototype.getTrackById = function getTrackById(id) {\n var result = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n var track = this[i];\n\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n };\n\n return TrackList;\n}(EventTarget);\n\n/**\n * Triggered when a different track is selected/enabled.\n *\n * @event TrackList#change\n * @type {EventTarget~Event}\n */\n\n/**\n * Events that can be called with on + eventName. See {@link EventHandler}.\n *\n * @property {Object} TrackList#allowedEvents_\n * @private\n */\n\n\nTrackList.prototype.allowedEvents_ = {\n change: 'change',\n addtrack: 'addtrack',\n removetrack: 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (var event in TrackList.prototype.allowedEvents_) {\n TrackList.prototype['on' + event] = null;\n}\n\n/**\n * @file audio-track-list.js\n */\n/**\n * Anywhere we call this function we diverge from the spec\n * as we only support one enabled audiotrack at a time\n *\n * @param {AudioTrackList} list\n * list to work on\n *\n * @param {AudioTrack} track\n * The track to skip\n *\n * @private\n */\nvar disableOthers = function disableOthers(list, track) {\n for (var i = 0; i < list.length; i++) {\n if (!Object.keys(list[i]).length || track.id === list[i].id) {\n continue;\n }\n // another audio track is enabled, disable it\n list[i].enabled = false;\n }\n};\n\n/**\n * The current list of {@link AudioTrack} for a media file.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist}\n * @extends TrackList\n */\n\nvar AudioTrackList = function (_TrackList) {\n inherits(AudioTrackList, _TrackList);\n\n /**\n * Create an instance of this class.\n *\n * @param {AudioTrack[]} [tracks=[]]\n * A list of `AudioTrack` to instantiate the list with.\n */\n function AudioTrackList() {\n var _this, _ret;\n\n var tracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n classCallCheck(this, AudioTrackList);\n\n var list = void 0;\n\n // make sure only 1 track is enabled\n // sorted from last index to first index\n for (var i = tracks.length - 1; i >= 0; i--) {\n if (tracks[i].enabled) {\n disableOthers(tracks, tracks[i]);\n break;\n }\n }\n\n // IE8 forces us to implement inheritance ourselves\n // as it does not support Object.defineProperty properly\n if (IS_IE8) {\n list = document.createElement('custom');\n for (var prop in TrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TrackList.prototype[prop];\n }\n }\n for (var _prop in AudioTrackList.prototype) {\n if (_prop !== 'constructor') {\n list[_prop] = AudioTrackList.prototype[_prop];\n }\n }\n }\n\n list = (_this = possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);\n list.changing_ = false;\n\n return _ret = list, possibleConstructorReturn(_this, _ret);\n }\n\n /**\n * Add an {@link AudioTrack} to the `AudioTrackList`.\n *\n * @param {AudioTrack} track\n * The AudioTrack to add to the list\n *\n * @fires TrackList#addtrack\n */\n\n\n AudioTrackList.prototype.addTrack = function addTrack(track) {\n var _this2 = this;\n\n if (track.enabled) {\n disableOthers(this, track);\n }\n\n _TrackList.prototype.addTrack.call(this, track);\n // native tracks don't have this\n if (!track.addEventListener) {\n return;\n }\n\n /**\n * @listens AudioTrack#enabledchange\n * @fires TrackList#change\n */\n track.addEventListener('enabledchange', function () {\n // when we are disabling other tracks (since we don't support\n // more than one track at a time) we will set changing_\n // to true so that we don't trigger additional change events\n if (_this2.changing_) {\n return;\n }\n _this2.changing_ = true;\n disableOthers(_this2, track);\n _this2.changing_ = false;\n _this2.trigger('change');\n });\n };\n\n return AudioTrackList;\n}(TrackList);\n\n/**\n * @file video-track-list.js\n */\n/**\n * Un-select all other {@link VideoTrack}s that are selected.\n *\n * @param {VideoTrackList} list\n * list to work on\n *\n * @param {VideoTrack} track\n * The track to skip\n *\n * @private\n */\nvar disableOthers$1 = function disableOthers(list, track) {\n for (var i = 0; i < list.length; i++) {\n if (!Object.keys(list[i]).length || track.id === list[i].id) {\n continue;\n }\n // another video track is enabled, disable it\n list[i].selected = false;\n }\n};\n\n/**\n * The current list of {@link VideoTrack} for a video.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist}\n * @extends TrackList\n */\n\nvar VideoTrackList = function (_TrackList) {\n inherits(VideoTrackList, _TrackList);\n\n /**\n * Create an instance of this class.\n *\n * @param {VideoTrack[]} [tracks=[]]\n * A list of `VideoTrack` to instantiate the list with.\n */\n function VideoTrackList() {\n var _this, _ret;\n\n var tracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n classCallCheck(this, VideoTrackList);\n\n var list = void 0;\n\n // make sure only 1 track is enabled\n // sorted from last index to first index\n for (var i = tracks.length - 1; i >= 0; i--) {\n if (tracks[i].selected) {\n disableOthers$1(tracks, tracks[i]);\n break;\n }\n }\n\n // IE8 forces us to implement inheritance ourselves\n // as it does not support Object.defineProperty properly\n if (IS_IE8) {\n list = document.createElement('custom');\n for (var prop in TrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TrackList.prototype[prop];\n }\n }\n for (var _prop in VideoTrackList.prototype) {\n if (_prop !== 'constructor') {\n list[_prop] = VideoTrackList.prototype[_prop];\n }\n }\n }\n\n list = (_this = possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);\n list.changing_ = false;\n\n /**\n * @member {number} VideoTrackList#selectedIndex\n * The current index of the selected {@link VideoTrack`}.\n */\n Object.defineProperty(list, 'selectedIndex', {\n get: function get$$1() {\n for (var _i = 0; _i < this.length; _i++) {\n if (this[_i].selected) {\n return _i;\n }\n }\n return -1;\n },\n set: function set$$1() {}\n });\n\n return _ret = list, possibleConstructorReturn(_this, _ret);\n }\n\n /**\n * Add a {@link VideoTrack} to the `VideoTrackList`.\n *\n * @param {VideoTrack} track\n * The VideoTrack to add to the list\n *\n * @fires TrackList#addtrack\n */\n\n\n VideoTrackList.prototype.addTrack = function addTrack(track) {\n var _this2 = this;\n\n if (track.selected) {\n disableOthers$1(this, track);\n }\n\n _TrackList.prototype.addTrack.call(this, track);\n // native tracks don't have this\n if (!track.addEventListener) {\n return;\n }\n\n /**\n * @listens VideoTrack#selectedchange\n * @fires TrackList#change\n */\n track.addEventListener('selectedchange', function () {\n if (_this2.changing_) {\n return;\n }\n _this2.changing_ = true;\n disableOthers$1(_this2, track);\n _this2.changing_ = false;\n _this2.trigger('change');\n });\n };\n\n return VideoTrackList;\n}(TrackList);\n\n/**\n * @file text-track-list.js\n */\n/**\n * The current list of {@link TextTrack} for a media file.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist}\n * @extends TrackList\n */\n\nvar TextTrackList = function (_TrackList) {\n inherits(TextTrackList, _TrackList);\n\n /**\n * Create an instance of this class.\n *\n * @param {TextTrack[]} [tracks=[]]\n * A list of `TextTrack` to instantiate the list with.\n */\n function TextTrackList() {\n var _this, _ret;\n\n var tracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n classCallCheck(this, TextTrackList);\n\n var list = void 0;\n\n // IE8 forces us to implement inheritance ourselves\n // as it does not support Object.defineProperty properly\n if (IS_IE8) {\n list = document.createElement('custom');\n for (var prop in TrackList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TrackList.prototype[prop];\n }\n }\n for (var _prop in TextTrackList.prototype) {\n if (_prop !== 'constructor') {\n list[_prop] = TextTrackList.prototype[_prop];\n }\n }\n }\n\n list = (_this = possibleConstructorReturn(this, _TrackList.call(this, tracks, list)), _this);\n return _ret = list, possibleConstructorReturn(_this, _ret);\n }\n\n /**\n * Add a {@link TextTrack} to the `TextTrackList`\n *\n * @param {TextTrack} track\n * The text track to add to the list.\n *\n * @fires TrackList#addtrack\n */\n\n\n TextTrackList.prototype.addTrack = function addTrack(track) {\n _TrackList.prototype.addTrack.call(this, track);\n\n /**\n * @listens TextTrack#modechange\n * @fires TrackList#change\n */\n track.addEventListener('modechange', bind(this, function () {\n this.trigger('change');\n }));\n\n var nonLanguageTextTrackKind = ['metadata', 'chapters'];\n\n if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) {\n track.addEventListener('modechange', bind(this, function () {\n this.trigger('selectedlanguagechange');\n }));\n }\n };\n\n return TextTrackList;\n}(TrackList);\n\n/**\n * @file html-track-element-list.js\n */\n\n/**\n * The current list of {@link HtmlTrackElement}s.\n */\n\nvar HtmlTrackElementList = function () {\n\n /**\n * Create an instance of this class.\n *\n * @param {HtmlTrackElement[]} [tracks=[]]\n * A list of `HtmlTrackElement` to instantiate the list with.\n */\n function HtmlTrackElementList() {\n var trackElements = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n classCallCheck(this, HtmlTrackElementList);\n\n var list = this; // eslint-disable-line\n\n if (IS_IE8) {\n list = document.createElement('custom');\n\n for (var prop in HtmlTrackElementList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = HtmlTrackElementList.prototype[prop];\n }\n }\n }\n\n list.trackElements_ = [];\n\n /**\n * @memberof HtmlTrackElementList\n * @member {number} length\n * The current number of `Track`s in the this Trackist.\n * @instance\n */\n Object.defineProperty(list, 'length', {\n get: function get$$1() {\n return this.trackElements_.length;\n }\n });\n\n for (var i = 0, length = trackElements.length; i < length; i++) {\n list.addTrackElement_(trackElements[i]);\n }\n\n if (IS_IE8) {\n return list;\n }\n }\n\n /**\n * Add an {@link HtmlTrackElement} to the `HtmlTrackElementList`\n *\n * @param {HtmlTrackElement} trackElement\n * The track element to add to the list.\n *\n * @private\n */\n\n\n HtmlTrackElementList.prototype.addTrackElement_ = function addTrackElement_(trackElement) {\n var index = this.trackElements_.length;\n\n if (!('' + index in this)) {\n Object.defineProperty(this, index, {\n get: function get$$1() {\n return this.trackElements_[index];\n }\n });\n }\n\n // Do not add duplicate elements\n if (this.trackElements_.indexOf(trackElement) === -1) {\n this.trackElements_.push(trackElement);\n }\n };\n\n /**\n * Get an {@link HtmlTrackElement} from the `HtmlTrackElementList` given an\n * {@link TextTrack}.\n *\n * @param {TextTrack} track\n * The track associated with a track element.\n *\n * @return {HtmlTrackElement|undefined}\n * The track element that was found or undefined.\n *\n * @private\n */\n\n\n HtmlTrackElementList.prototype.getTrackElementByTrack_ = function getTrackElementByTrack_(track) {\n var trackElement_ = void 0;\n\n for (var i = 0, length = this.trackElements_.length; i < length; i++) {\n if (track === this.trackElements_[i].track) {\n trackElement_ = this.trackElements_[i];\n\n break;\n }\n }\n\n return trackElement_;\n };\n\n /**\n * Remove a {@link HtmlTrackElement} from the `HtmlTrackElementList`\n *\n * @param {HtmlTrackElement} trackElement\n * The track element to remove from the list.\n *\n * @private\n */\n\n\n HtmlTrackElementList.prototype.removeTrackElement_ = function removeTrackElement_(trackElement) {\n for (var i = 0, length = this.trackElements_.length; i < length; i++) {\n if (trackElement === this.trackElements_[i]) {\n this.trackElements_.splice(i, 1);\n\n break;\n }\n }\n };\n\n return HtmlTrackElementList;\n}();\n\n/**\n * @file text-track-cue-list.js\n */\n/**\n * @typedef {Object} TextTrackCueList~TextTrackCue\n *\n * @property {string} id\n * The unique id for this text track cue\n *\n * @property {number} startTime\n * The start time for this text track cue\n *\n * @property {number} endTime\n * The end time for this text track cue\n *\n * @property {boolean} pauseOnExit\n * Pause when the end time is reached if true.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue}\n */\n\n/**\n * A List of TextTrackCues.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist}\n */\n\nvar TextTrackCueList = function () {\n\n /**\n * Create an instance of this class..\n *\n * @param {Array} cues\n * A list of cues to be initialized with\n */\n function TextTrackCueList(cues) {\n classCallCheck(this, TextTrackCueList);\n\n var list = this; // eslint-disable-line\n\n if (IS_IE8) {\n list = document.createElement('custom');\n\n for (var prop in TextTrackCueList.prototype) {\n if (prop !== 'constructor') {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n /**\n * @memberof TextTrackCueList\n * @member {number} length\n * The current number of `TextTrackCue`s in the TextTrackCueList.\n * @instance\n */\n Object.defineProperty(list, 'length', {\n get: function get$$1() {\n return this.length_;\n }\n });\n\n if (IS_IE8) {\n return list;\n }\n }\n\n /**\n * A setter for cues in this list. Creates getters\n * an an index for the cues.\n *\n * @param {Array} cues\n * An array of cues to set\n *\n * @private\n */\n\n\n TextTrackCueList.prototype.setCues_ = function setCues_(cues) {\n var oldLength = this.length || 0;\n var i = 0;\n var l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n var defineProp = function defineProp(index) {\n if (!('' + index in this)) {\n Object.defineProperty(this, '' + index, {\n get: function get$$1() {\n return this.cues_[index];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for (; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n };\n\n /**\n * Get a `TextTrackCue` that is currently in the `TextTrackCueList` by id.\n *\n * @param {string} id\n * The id of the cue that should be searched for.\n *\n * @return {TextTrackCueList~TextTrackCue|null}\n * A single cue or null if none was found.\n */\n\n\n TextTrackCueList.prototype.getCueById = function getCueById(id) {\n var result = null;\n\n for (var i = 0, l = this.length; i < l; i++) {\n var cue = this[i];\n\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n };\n\n return TextTrackCueList;\n}();\n\n/**\n * @file track-kinds.js\n */\n\n/**\n * All possible `VideoTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind\n * @typedef VideoTrack~Kind\n * @enum\n */\nvar VideoTrackKind = {\n alternative: 'alternative',\n captions: 'captions',\n main: 'main',\n sign: 'sign',\n subtitles: 'subtitles',\n commentary: 'commentary'\n};\n\n/**\n * All possible `AudioTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind\n * @typedef AudioTrack~Kind\n * @enum\n */\nvar AudioTrackKind = {\n 'alternative': 'alternative',\n 'descriptions': 'descriptions',\n 'main': 'main',\n 'main-desc': 'main-desc',\n 'translation': 'translation',\n 'commentary': 'commentary'\n};\n\n/**\n * All possible `TextTrackKind`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-texttrack-kind\n * @typedef TextTrack~Kind\n * @enum\n */\nvar TextTrackKind = {\n subtitles: 'subtitles',\n captions: 'captions',\n descriptions: 'descriptions',\n chapters: 'chapters',\n metadata: 'metadata'\n};\n\n/**\n * All possible `TextTrackMode`s\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n * @typedef TextTrack~Mode\n * @enum\n */\nvar TextTrackMode = {\n disabled: 'disabled',\n hidden: 'hidden',\n showing: 'showing'\n};\n\n/**\n * @file track.js\n */\n/**\n * A Track class that contains all of the common functionality for {@link AudioTrack},\n * {@link VideoTrack}, and {@link TextTrack}.\n *\n * > Note: This class should not be used directly\n *\n * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html}\n * @extends EventTarget\n * @abstract\n */\n\nvar Track = function (_EventTarget) {\n inherits(Track, _EventTarget);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {string} [options.kind='']\n * A valid kind for the track type you are creating.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @abstract\n */\n function Track() {\n var _ret;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, Track);\n\n var _this = possibleConstructorReturn(this, _EventTarget.call(this));\n\n var track = _this; // eslint-disable-line\n\n if (IS_IE8) {\n track = document.createElement('custom');\n for (var prop in Track.prototype) {\n if (prop !== 'constructor') {\n track[prop] = Track.prototype[prop];\n }\n }\n }\n\n var trackProps = {\n id: options.id || 'vjs_track_' + newGUID(),\n kind: options.kind || '',\n label: options.label || '',\n language: options.language || ''\n };\n\n /**\n * @memberof Track\n * @member {string} id\n * The id of this track. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */\n\n /**\n * @memberof Track\n * @member {string} kind\n * The kind of track that this is. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */\n\n /**\n * @memberof Track\n * @member {string} label\n * The label of this track. Cannot be changed after creation.\n * @instance\n *\n * @readonly\n */\n\n /**\n * @memberof Track\n * @member {string} language\n * The two letter language code for this track. Cannot be changed after\n * creation.\n * @instance\n *\n * @readonly\n */\n\n var _loop = function _loop(key) {\n Object.defineProperty(track, key, {\n get: function get$$1() {\n return trackProps[key];\n },\n set: function set$$1() {}\n });\n };\n\n for (var key in trackProps) {\n _loop(key);\n }\n\n return _ret = track, possibleConstructorReturn(_this, _ret);\n }\n\n return Track;\n}(EventTarget);\n\n/**\n * @file url.js\n * @module url\n */\n/**\n * @typedef {Object} url:URLObject\n *\n * @property {string} protocol\n * The protocol of the url that was parsed.\n *\n * @property {string} hostname\n * The hostname of the url that was parsed.\n *\n * @property {string} port\n * The port of the url that was parsed.\n *\n * @property {string} pathname\n * The pathname of the url that was parsed.\n *\n * @property {string} search\n * The search query of the url that was parsed.\n *\n * @property {string} hash\n * The hash of the url that was parsed.\n *\n * @property {string} host\n * The host of the url that was parsed.\n */\n\n/**\n * Resolve and parse the elements of a URL.\n *\n * @param {String} url\n * The url to parse\n *\n * @return {url:URLObject}\n * An object of url details\n */\nvar parseUrl = function parseUrl(url) {\n var props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n var a = document.createElement('a');\n\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n var addToBody = a.host === '' && a.protocol !== 'file:';\n var div = void 0;\n\n if (addToBody) {\n div = document.createElement('div');\n div.innerHTML = '';\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n document.body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n var details = {};\n\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (!details.protocol) {\n details.protocol = window.location.protocol;\n }\n\n if (addToBody) {\n document.body.removeChild(div);\n }\n\n return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n *\n *\n * @param {string} url\n * URL to make absolute\n *\n * @return {string}\n * Absolute URL\n *\n * @see http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n */\nvar getAbsoluteURL = function getAbsoluteURL(url) {\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n var div = document.createElement('div');\n\n div.innerHTML = 'x';\n url = div.firstChild.href;\n }\n\n return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string\n * if passed an invalid path.\n *\n * @param {string} path\n * The fileName path like '/path/to/file.mp4'\n *\n * @returns {string}\n * The extension in lower case or an empty string if no\n * extension could be found.\n */\nvar getFileExtension = function getFileExtension(path) {\n if (typeof path === 'string') {\n var splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n var pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {string} url\n * The url to check.\n *\n * @return {boolean}\n * Whether it is a cross domain request or not.\n */\nvar isCrossOrigin = function isCrossOrigin(url) {\n var winLoc = window.location;\n var urlInfo = parseUrl(url);\n\n // IE8 protocol relative urls will return ':' for protocol\n var srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host;\n\n return crossOrigin;\n};\n\nvar Url = (Object.freeze || Object)({\n\tparseUrl: parseUrl,\n\tgetAbsoluteURL: getAbsoluteURL,\n\tgetFileExtension: getFileExtension,\n\tisCrossOrigin: isCrossOrigin\n});\n\n/**\n * @file text-track.js\n */\n/**\n * Takes a webvtt file contents and parses it into cues\n *\n * @param {string} srcContent\n * webVTT file contents\n *\n * @param {TextTrack} track\n * TextTrack to add cues to. Cues come from the srcContent.\n *\n * @private\n */\nvar parseCues = function parseCues(srcContent, track) {\n var parser = new window.WebVTT.Parser(window, window.vttjs, window.WebVTT.StringDecoder());\n var errors = [];\n\n parser.oncue = function (cue) {\n track.addCue(cue);\n };\n\n parser.onparsingerror = function (error) {\n errors.push(error);\n };\n\n parser.onflush = function () {\n track.trigger({\n type: 'loadeddata',\n target: track\n });\n };\n\n parser.parse(srcContent);\n if (errors.length > 0) {\n if (window.console && window.console.groupCollapsed) {\n window.console.groupCollapsed('Text Track parsing errors for ' + track.src);\n }\n errors.forEach(function (error) {\n return log$1.error(error);\n });\n if (window.console && window.console.groupEnd) {\n window.console.groupEnd();\n }\n }\n\n parser.flush();\n};\n\n/**\n * Load a `TextTrack` from a specifed url.\n *\n * @param {string} src\n * Url to load track from.\n *\n * @param {TextTrack} track\n * Track to add cues to. Comes from the content at the end of `url`.\n *\n * @private\n */\nvar loadTrack = function loadTrack(src, track) {\n var opts = {\n uri: src\n };\n var crossOrigin = isCrossOrigin(src);\n\n if (crossOrigin) {\n opts.cors = crossOrigin;\n }\n\n xhr(opts, bind(this, function (err, response, responseBody) {\n if (err) {\n return log$1.error(err, response);\n }\n\n track.loaded_ = true;\n\n // Make sure that vttjs has loaded, otherwise, wait till it finished loading\n // NOTE: this is only used for the alt/video.novtt.js build\n if (typeof window.WebVTT !== 'function') {\n if (track.tech_) {\n var loadHandler = function loadHandler() {\n return parseCues(responseBody, track);\n };\n\n track.tech_.on('vttjsloaded', loadHandler);\n track.tech_.on('vttjserror', function () {\n log$1.error('vttjs failed to load, stopping trying to process ' + track.src);\n track.tech_.off('vttjsloaded', loadHandler);\n });\n }\n } else {\n parseCues(responseBody, track);\n }\n }));\n};\n\n/**\n * A representation of a single `TextTrack`.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack}\n * @extends Track\n */\n\nvar TextTrack = function (_Track) {\n inherits(TextTrack, _Track);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} options={}\n * Object of option names and values\n *\n * @param {Tech} options.tech\n * A reference to the tech that owns this TextTrack.\n *\n * @param {TextTrack~Kind} [options.kind='subtitles']\n * A valid text track kind.\n *\n * @param {TextTrack~Mode} [options.mode='disabled']\n * A valid text track mode.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this TextTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {string} [options.srclang='']\n * A valid two character language code. An alternative, but deprioritized\n * vesion of `options.language`\n *\n * @param {string} [options.src]\n * A url to TextTrack cues.\n *\n * @param {boolean} [options.default]\n * If this track should default to on or off.\n */\n function TextTrack() {\n var _this, _ret;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, TextTrack);\n\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n var settings = mergeOptions(options, {\n kind: TextTrackKind[options.kind] || 'subtitles',\n language: options.language || options.srclang || ''\n });\n var mode = TextTrackMode[settings.mode] || 'disabled';\n var default_ = settings['default'];\n\n if (settings.kind === 'metadata' || settings.kind === 'chapters') {\n mode = 'hidden';\n }\n // on IE8 this will be a document element\n // for every other browser this will be a normal object\n var tt = (_this = possibleConstructorReturn(this, _Track.call(this, settings)), _this);\n\n tt.tech_ = settings.tech;\n\n if (IS_IE8) {\n for (var prop in TextTrack.prototype) {\n if (prop !== 'constructor') {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n var cues = new TextTrackCueList(tt.cues_);\n var activeCues = new TextTrackCueList(tt.activeCues_);\n var changed = false;\n var timeupdateHandler = bind(tt, function () {\n\n // Accessing this.activeCues for the side-effects of updating itself\n // due to it's nature as a getter function. Do not remove or cues will\n // stop updating!\n // Use the setter to prevent deletion from uglify (pure_getters rule)\n this.activeCues = this.activeCues;\n if (changed) {\n this.trigger('cuechange');\n changed = false;\n }\n });\n\n if (mode !== 'disabled') {\n tt.tech_.ready(function () {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }, true);\n }\n\n /**\n * @memberof TextTrack\n * @member {boolean} default\n * If this track was set to be on or off by default. Cannot be changed after\n * creation.\n * @instance\n *\n * @readonly\n */\n Object.defineProperty(tt, 'default', {\n get: function get$$1() {\n return default_;\n },\n set: function set$$1() {}\n });\n\n /**\n * @memberof TextTrack\n * @member {string} mode\n * Set the mode of this TextTrack to a valid {@link TextTrack~Mode}. Will\n * not be set if setting to an invalid mode.\n * @instance\n *\n * @fires TextTrack#modechange\n */\n Object.defineProperty(tt, 'mode', {\n get: function get$$1() {\n return mode;\n },\n set: function set$$1(newMode) {\n var _this2 = this;\n\n if (!TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n\n this.tech_.ready(function () {\n _this2.tech_.on('timeupdate', timeupdateHandler);\n }, true);\n }\n /**\n * An event that fires when mode changes on this track. This allows\n * the TextTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec!\n *\n * @event TextTrack#modechange\n * @type {EventTarget~Event}\n */\n this.trigger('modechange');\n }\n });\n\n /**\n * @memberof TextTrack\n * @member {TextTrackCueList} cues\n * The text track cue list for this TextTrack.\n * @instance\n */\n Object.defineProperty(tt, 'cues', {\n get: function get$$1() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: function set$$1() {}\n });\n\n /**\n * @memberof TextTrack\n * @member {TextTrackCueList} activeCues\n * The list text track cues that are currently active for this TextTrack.\n * @instance\n */\n Object.defineProperty(tt, 'activeCues', {\n get: function get$$1() {\n if (!this.loaded_) {\n return null;\n }\n\n // nothing to do\n if (this.cues.length === 0) {\n return activeCues;\n }\n\n var ct = this.tech_.currentTime();\n var active = [];\n\n for (var i = 0, l = this.cues.length; i < l; i++) {\n var cue = this.cues[i];\n\n if (cue.startTime <= ct && cue.endTime >= ct) {\n active.push(cue);\n } else if (cue.startTime === cue.endTime && cue.startTime <= ct && cue.startTime + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (var _i = 0; _i < active.length; _i++) {\n if (this.activeCues_.indexOf(active[_i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n\n\n // /!\\ Keep this setter empty (see the timeupdate handler above)\n set: function set$$1() {}\n });\n\n if (settings.src) {\n tt.src = settings.src;\n loadTrack(settings.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n return _ret = tt, possibleConstructorReturn(_this, _ret);\n }\n\n /**\n * Add a cue to the internal list of cues.\n *\n * @param {TextTrack~Cue} cue\n * The cue to add to our internal list\n */\n\n\n TextTrack.prototype.addCue = function addCue(originalCue) {\n var cue = originalCue;\n\n if (window.vttjs && !(originalCue instanceof window.vttjs.VTTCue)) {\n cue = new window.vttjs.VTTCue(originalCue.startTime, originalCue.endTime, originalCue.text);\n\n for (var prop in originalCue) {\n if (!(prop in cue)) {\n cue[prop] = originalCue[prop];\n }\n }\n\n // make sure that `id` is copied over\n cue.id = originalCue.id;\n cue.originalCue_ = originalCue;\n }\n\n var tracks = this.tech_.textTracks();\n\n for (var i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n\n this.cues_.push(cue);\n this.cues.setCues_(this.cues_);\n };\n\n /**\n * Remove a cue from our internal list\n *\n * @param {TextTrack~Cue} removeCue\n * The cue to remove from our internal list\n */\n\n\n TextTrack.prototype.removeCue = function removeCue(_removeCue) {\n var i = this.cues_.length;\n\n while (i--) {\n var cue = this.cues_[i];\n\n if (cue === _removeCue || cue.originalCue_ && cue.originalCue_ === _removeCue) {\n this.cues_.splice(i, 1);\n this.cues.setCues_(this.cues_);\n break;\n }\n }\n };\n\n return TextTrack;\n}(Track);\n\n/**\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\n\n\nTextTrack.prototype.allowedEvents_ = {\n cuechange: 'cuechange'\n};\n\n/**\n * A representation of a single `AudioTrack`. If it is part of an {@link AudioTrackList}\n * only one `AudioTrack` in the list will be enabled at a time.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack}\n * @extends Track\n */\n\nvar AudioTrack = function (_Track) {\n inherits(AudioTrack, _Track);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {AudioTrack~Kind} [options.kind='']\n * A valid audio track kind\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {boolean} [options.enabled]\n * If this track is the one that is currently playing. If this track is part of\n * an {@link AudioTrackList}, only one {@link AudioTrack} will be enabled.\n */\n function AudioTrack() {\n var _this, _ret;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, AudioTrack);\n\n var settings = mergeOptions(options, {\n kind: AudioTrackKind[options.kind] || ''\n });\n // on IE8 this will be a document element\n // for every other browser this will be a normal object\n var track = (_this = possibleConstructorReturn(this, _Track.call(this, settings)), _this);\n var enabled = false;\n\n if (IS_IE8) {\n for (var prop in AudioTrack.prototype) {\n if (prop !== 'constructor') {\n track[prop] = AudioTrack.prototype[prop];\n }\n }\n }\n /**\n * @memberof AudioTrack\n * @member {boolean} enabled\n * If this `AudioTrack` is enabled or not. When setting this will\n * fire {@link AudioTrack#enabledchange} if the state of enabled is changed.\n * @instance\n *\n * @fires VideoTrack#selectedchange\n */\n Object.defineProperty(track, 'enabled', {\n get: function get$$1() {\n return enabled;\n },\n set: function set$$1(newEnabled) {\n // an invalid or unchanged value\n if (typeof newEnabled !== 'boolean' || newEnabled === enabled) {\n return;\n }\n enabled = newEnabled;\n\n /**\n * An event that fires when enabled changes on this track. This allows\n * the AudioTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec! Native tracks will do\n * this internally without an event.\n *\n * @event AudioTrack#enabledchange\n * @type {EventTarget~Event}\n */\n this.trigger('enabledchange');\n }\n });\n\n // if the user sets this track to selected then\n // set selected to that true value otherwise\n // we keep it false\n if (settings.enabled) {\n track.enabled = settings.enabled;\n }\n track.loaded_ = true;\n\n return _ret = track, possibleConstructorReturn(_this, _ret);\n }\n\n return AudioTrack;\n}(Track);\n\n/**\n * A representation of a single `VideoTrack`.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack}\n * @extends Track\n */\n\nvar VideoTrack = function (_Track) {\n inherits(VideoTrack, _Track);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} [options={}]\n * Object of option names and values\n *\n * @param {string} [options.kind='']\n * A valid {@link VideoTrack~Kind}\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this AudioTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {boolean} [options.selected]\n * If this track is the one that is currently playing.\n */\n function VideoTrack() {\n var _this, _ret;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, VideoTrack);\n\n var settings = mergeOptions(options, {\n kind: VideoTrackKind[options.kind] || ''\n });\n\n // on IE8 this will be a document element\n // for every other browser this will be a normal object\n var track = (_this = possibleConstructorReturn(this, _Track.call(this, settings)), _this);\n var selected = false;\n\n if (IS_IE8) {\n for (var prop in VideoTrack.prototype) {\n if (prop !== 'constructor') {\n track[prop] = VideoTrack.prototype[prop];\n }\n }\n }\n\n /**\n * @memberof VideoTrack\n * @member {boolean} selected\n * If this `VideoTrack` is selected or not. When setting this will\n * fire {@link VideoTrack#selectedchange} if the state of selected changed.\n * @instance\n *\n * @fires VideoTrack#selectedchange\n */\n Object.defineProperty(track, 'selected', {\n get: function get$$1() {\n return selected;\n },\n set: function set$$1(newSelected) {\n // an invalid or unchanged value\n if (typeof newSelected !== 'boolean' || newSelected === selected) {\n return;\n }\n selected = newSelected;\n\n /**\n * An event that fires when selected changes on this track. This allows\n * the VideoTrackList that holds this track to act accordingly.\n *\n * > Note: This is not part of the spec! Native tracks will do\n * this internally without an event.\n *\n * @event VideoTrack#selectedchange\n * @type {EventTarget~Event}\n */\n this.trigger('selectedchange');\n }\n });\n\n // if the user sets this track to selected then\n // set selected to that true value otherwise\n // we keep it false\n if (settings.selected) {\n track.selected = settings.selected;\n }\n\n return _ret = track, possibleConstructorReturn(_this, _ret);\n }\n\n return VideoTrack;\n}(Track);\n\n/**\n * @file html-track-element.js\n */\n\n/**\n * @memberof HTMLTrackElement\n * @typedef {HTMLTrackElement~ReadyState}\n * @enum {number}\n */\nvar NONE = 0;\nvar LOADING = 1;\nvar LOADED = 2;\nvar ERROR = 3;\n\n/**\n * A single track represented in the DOM.\n *\n * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement}\n * @extends EventTarget\n */\n\nvar HTMLTrackElement = function (_EventTarget) {\n inherits(HTMLTrackElement, _EventTarget);\n\n /**\n * Create an instance of this class.\n *\n * @param {Object} options={}\n * Object of option names and values\n *\n * @param {Tech} options.tech\n * A reference to the tech that owns this HTMLTrackElement.\n *\n * @param {TextTrack~Kind} [options.kind='subtitles']\n * A valid text track kind.\n *\n * @param {TextTrack~Mode} [options.mode='disabled']\n * A valid text track mode.\n *\n * @param {string} [options.id='vjs_track_' + Guid.newGUID()]\n * A unique id for this TextTrack.\n *\n * @param {string} [options.label='']\n * The menu label for this track.\n *\n * @param {string} [options.language='']\n * A valid two character language code.\n *\n * @param {string} [options.srclang='']\n * A valid two character language code. An alternative, but deprioritized\n * vesion of `options.language`\n *\n * @param {string} [options.src]\n * A url to TextTrack cues.\n *\n * @param {boolean} [options.default]\n * If this track should default to on or off.\n */\n function HTMLTrackElement() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, HTMLTrackElement);\n\n var _this = possibleConstructorReturn(this, _EventTarget.call(this));\n\n var readyState = void 0;\n var trackElement = _this; // eslint-disable-line\n\n if (IS_IE8) {\n trackElement = document.createElement('custom');\n\n for (var prop in HTMLTrackElement.prototype) {\n if (prop !== 'constructor') {\n trackElement[prop] = HTMLTrackElement.prototype[prop];\n }\n }\n }\n\n var track = new TextTrack(options);\n\n trackElement.kind = track.kind;\n trackElement.src = track.src;\n trackElement.srclang = track.language;\n trackElement.label = track.label;\n trackElement['default'] = track['default'];\n\n /**\n * @memberof HTMLTrackElement\n * @member {HTMLTrackElement~ReadyState} readyState\n * The current ready state of the track element.\n * @instance\n */\n Object.defineProperty(trackElement, 'readyState', {\n get: function get$$1() {\n return readyState;\n }\n });\n\n /**\n * @memberof HTMLTrackElement\n * @member {TextTrack} track\n * The underlying TextTrack object.\n * @instance\n *\n */\n Object.defineProperty(trackElement, 'track', {\n get: function get$$1() {\n return track;\n }\n });\n\n readyState = NONE;\n\n /**\n * @listens TextTrack#loadeddata\n * @fires HTMLTrackElement#load\n */\n track.addEventListener('loadeddata', function () {\n readyState = LOADED;\n\n trackElement.trigger({\n type: 'load',\n target: trackElement\n });\n });\n\n if (IS_IE8) {\n var _ret;\n\n return _ret = trackElement, possibleConstructorReturn(_this, _ret);\n }\n return _this;\n }\n\n return HTMLTrackElement;\n}(EventTarget);\n\nHTMLTrackElement.prototype.allowedEvents_ = {\n load: 'load'\n};\n\nHTMLTrackElement.NONE = NONE;\nHTMLTrackElement.LOADING = LOADING;\nHTMLTrackElement.LOADED = LOADED;\nHTMLTrackElement.ERROR = ERROR;\n\n/*\n * This file contains all track properties that are used in\n * player.js, tech.js, html5.js and possibly other techs in the future.\n */\n\nvar NORMAL = {\n audio: {\n ListClass: AudioTrackList,\n TrackClass: AudioTrack,\n capitalName: 'Audio'\n },\n video: {\n ListClass: VideoTrackList,\n TrackClass: VideoTrack,\n capitalName: 'Video'\n },\n text: {\n ListClass: TextTrackList,\n TrackClass: TextTrack,\n capitalName: 'Text'\n }\n};\n\nObject.keys(NORMAL).forEach(function (type) {\n NORMAL[type].getterName = type + 'Tracks';\n NORMAL[type].privateName = type + 'Tracks_';\n});\n\nvar REMOTE = {\n remoteText: {\n ListClass: TextTrackList,\n TrackClass: TextTrack,\n capitalName: 'RemoteText',\n getterName: 'remoteTextTracks',\n privateName: 'remoteTextTracks_'\n },\n remoteTextEl: {\n ListClass: HtmlTrackElementList,\n TrackClass: HTMLTrackElement,\n capitalName: 'RemoteTextTrackEls',\n getterName: 'remoteTextTrackEls',\n privateName: 'remoteTextTrackEls_'\n }\n};\n\nvar ALL = mergeOptions(NORMAL, REMOTE);\n\nREMOTE.names = Object.keys(REMOTE);\nNORMAL.names = Object.keys(NORMAL);\nALL.names = [].concat(REMOTE.names).concat(NORMAL.names);\n\n/**\n * @file tech.js\n */\n\n/**\n * An Object containing a structure like: `{src: 'url', type: 'mimetype'}` or string\n * that just contains the src url alone.\n * * `var SourceObject = {src: 'http://ex.com/video.mp4', type: 'video/mp4'};`\n * `var SourceString = 'http://example.com/some-video.mp4';`\n *\n * @typedef {Object|string} Tech~SourceObject\n *\n * @property {string} src\n * The url to the source\n *\n * @property {string} type\n * The mime type of the source\n */\n\n/**\n * A function used by {@link Tech} to create a new {@link TextTrack}.\n *\n * @private\n *\n * @param {Tech} self\n * An instance of the Tech class.\n *\n * @param {string} kind\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata)\n *\n * @param {string} [label]\n * Label to identify the text track\n *\n * @param {string} [language]\n * Two letter language abbreviation\n *\n * @param {Object} [options={}]\n * An object with additional text track options\n *\n * @return {TextTrack}\n * The text track that was created.\n */\nfunction createTrackHelper(self, kind, label, language) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};\n\n var tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n var track = new ALL.text.TrackClass(options);\n\n tracks.addTrack(track);\n\n return track;\n}\n\n/**\n * This is the base class for media playback technology controllers, such as\n * {@link Flash} and {@link HTML5}\n *\n * @extends Component\n */\n\nvar Tech = function (_Component) {\n inherits(Tech, _Component);\n\n /**\n * Create an instance of this Tech.\n *\n * @param {Object} [options]\n * The key/value store of player options.\n *\n * @param {Component~ReadyCallback} ready\n * Callback function to call when the `HTML5` Tech is ready.\n */\n function Tech() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var ready = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {};\n classCallCheck(this, Tech);\n\n // we don't want the tech to report user activity automatically.\n // This is done manually in addControlsListeners\n options.reportTouchActivity = false;\n\n // keep track of whether the current source has played at all to\n // implement a very limited played()\n var _this = possibleConstructorReturn(this, _Component.call(this, null, options, ready));\n\n _this.hasStarted_ = false;\n _this.on('playing', function () {\n this.hasStarted_ = true;\n });\n _this.on('loadstart', function () {\n this.hasStarted_ = false;\n });\n\n ALL.names.forEach(function (name) {\n var props = ALL[name];\n\n if (options && options[props.getterName]) {\n _this[props.privateName] = options[props.getterName];\n }\n });\n\n // Manually track progress in cases where the browser/flash player doesn't report it.\n if (!_this.featuresProgressEvents) {\n _this.manualProgressOn();\n }\n\n // Manually track timeupdates in cases where the browser/flash player doesn't report it.\n if (!_this.featuresTimeupdateEvents) {\n _this.manualTimeUpdatesOn();\n }\n\n ['Text', 'Audio', 'Video'].forEach(function (track) {\n if (options['native' + track + 'Tracks'] === false) {\n _this['featuresNative' + track + 'Tracks'] = false;\n }\n });\n\n if (options.nativeCaptions === false || options.nativeTextTracks === false) {\n _this.featuresNativeTextTracks = false;\n } else if (options.nativeCaptions === true || options.nativeTextTracks === true) {\n _this.featuresNativeTextTracks = true;\n }\n\n if (!_this.featuresNativeTextTracks) {\n _this.emulateTextTracks();\n }\n\n _this.autoRemoteTextTracks_ = new ALL.text.ListClass();\n\n _this.initTrackListeners();\n\n // Turn on component tap events only if not using native controls\n if (!options.nativeControlsForTouch) {\n _this.emitTapEvents();\n }\n\n if (_this.constructor) {\n _this.name_ = _this.constructor.name || 'Unknown Tech';\n }\n return _this;\n }\n\n /**\n * A special function to trigger source set in a way that will allow player\n * to re-trigger if the player or tech are not ready yet.\n *\n * @fires Tech#sourceset\n * @param {string} src The source string at the time of the source changing.\n */\n\n\n Tech.prototype.triggerSourceset = function triggerSourceset(src) {\n var _this2 = this;\n\n if (!this.isReady_) {\n // on initial ready we have to trigger source set\n // 1ms after ready so that player can watch for it.\n this.one('ready', function () {\n return _this2.setTimeout(function () {\n return _this2.triggerSourceset(src);\n }, 1);\n });\n }\n\n /**\n * Fired when the source is set on the tech causing the media element\n * to reload.\n *\n * @see {@link Player#event:sourceset}\n * @event Tech#sourceset\n * @type {EventTarget~Event}\n */\n this.trigger({\n src: src,\n type: 'sourceset'\n });\n };\n\n /* Fallbacks for unsupported event types\n ================================================================================ */\n\n /**\n * Polyfill the `progress` event for browsers that don't support it natively.\n *\n * @see {@link Tech#trackProgress}\n */\n\n\n Tech.prototype.manualProgressOn = function manualProgressOn() {\n this.on('durationchange', this.onDurationChange);\n\n this.manualProgress = true;\n\n // Trigger progress watching when a source begins loading\n this.one('ready', this.trackProgress);\n };\n\n /**\n * Turn off the polyfill for `progress` events that was created in\n * {@link Tech#manualProgressOn}\n */\n\n\n Tech.prototype.manualProgressOff = function manualProgressOff() {\n this.manualProgress = false;\n this.stopTrackingProgress();\n\n this.off('durationchange', this.onDurationChange);\n };\n\n /**\n * This is used to trigger a `progress` event when the buffered percent changes. It\n * sets an interval function that will be called every 500 milliseconds to check if the\n * buffer end percent has changed.\n *\n * > This function is called by {@link Tech#manualProgressOn}\n *\n * @param {EventTarget~Event} event\n * The `ready` event that caused this to run.\n *\n * @listens Tech#ready\n * @fires Tech#progress\n */\n\n\n Tech.prototype.trackProgress = function trackProgress(event) {\n this.stopTrackingProgress();\n this.progressInterval = this.setInterval(bind(this, function () {\n // Don't trigger unless buffered amount is greater than last time\n\n var numBufferedPercent = this.bufferedPercent();\n\n if (this.bufferedPercent_ !== numBufferedPercent) {\n /**\n * See {@link Player#progress}\n *\n * @event Tech#progress\n * @type {EventTarget~Event}\n */\n this.trigger('progress');\n }\n\n this.bufferedPercent_ = numBufferedPercent;\n\n if (numBufferedPercent === 1) {\n this.stopTrackingProgress();\n }\n }), 500);\n };\n\n /**\n * Update our internal duration on a `durationchange` event by calling\n * {@link Tech#duration}.\n *\n * @param {EventTarget~Event} event\n * The `durationchange` event that caused this to run.\n *\n * @listens Tech#durationchange\n */\n\n\n Tech.prototype.onDurationChange = function onDurationChange(event) {\n this.duration_ = this.duration();\n };\n\n /**\n * Get and create a `TimeRange` object for buffering.\n *\n * @return {TimeRange}\n * The time range object that was created.\n */\n\n\n Tech.prototype.buffered = function buffered() {\n return createTimeRanges(0, 0);\n };\n\n /**\n * Get the percentage of the current video that is currently buffered.\n *\n * @return {number}\n * A number from 0 to 1 that represents the decimal percentage of the\n * video that is buffered.\n *\n */\n\n\n Tech.prototype.bufferedPercent = function bufferedPercent$$1() {\n return bufferedPercent(this.buffered(), this.duration_);\n };\n\n /**\n * Turn off the polyfill for `progress` events that was created in\n * {@link Tech#manualProgressOn}\n * Stop manually tracking progress events by clearing the interval that was set in\n * {@link Tech#trackProgress}.\n */\n\n\n Tech.prototype.stopTrackingProgress = function stopTrackingProgress() {\n this.clearInterval(this.progressInterval);\n };\n\n /**\n * Polyfill the `timeupdate` event for browsers that don't support it.\n *\n * @see {@link Tech#trackCurrentTime}\n */\n\n\n Tech.prototype.manualTimeUpdatesOn = function manualTimeUpdatesOn() {\n this.manualTimeUpdates = true;\n\n this.on('play', this.trackCurrentTime);\n this.on('pause', this.stopTrackingCurrentTime);\n };\n\n /**\n * Turn off the polyfill for `timeupdate` events that was created in\n * {@link Tech#manualTimeUpdatesOn}\n */\n\n\n Tech.prototype.manualTimeUpdatesOff = function manualTimeUpdatesOff() {\n this.manualTimeUpdates = false;\n this.stopTrackingCurrentTime();\n this.off('play', this.trackCurrentTime);\n this.off('pause', this.stopTrackingCurrentTime);\n };\n\n /**\n * Sets up an interval function to track current time and trigger `timeupdate` every\n * 250 milliseconds.\n *\n * @listens Tech#play\n * @triggers Tech#timeupdate\n */\n\n\n Tech.prototype.trackCurrentTime = function trackCurrentTime() {\n if (this.currentTimeInterval) {\n this.stopTrackingCurrentTime();\n }\n this.currentTimeInterval = this.setInterval(function () {\n /**\n * Triggered at an interval of 250ms to indicated that time is passing in the video.\n *\n * @event Tech#timeupdate\n * @type {EventTarget~Event}\n */\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n\n // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n }, 250);\n };\n\n /**\n * Stop the interval function created in {@link Tech#trackCurrentTime} so that the\n * `timeupdate` event is no longer triggered.\n *\n * @listens {Tech#pause}\n */\n\n\n Tech.prototype.stopTrackingCurrentTime = function stopTrackingCurrentTime() {\n this.clearInterval(this.currentTimeInterval);\n\n // #1002 - if the video ends right before the next timeupdate would happen,\n // the progress bar won't make it all the way to the end\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n };\n\n /**\n * Turn off all event polyfills, clear the `Tech`s {@link AudioTrackList},\n * {@link VideoTrackList}, and {@link TextTrackList}, and dispose of this Tech.\n *\n * @fires Component#dispose\n */\n\n\n Tech.prototype.dispose = function dispose() {\n\n // clear out all tracks because we can't reuse them between techs\n this.clearTracks(NORMAL.names);\n\n // Turn off any manual progress or timeupdate tracking\n if (this.manualProgress) {\n this.manualProgressOff();\n }\n\n if (this.manualTimeUpdates) {\n this.manualTimeUpdatesOff();\n }\n\n _Component.prototype.dispose.call(this);\n };\n\n /**\n * Clear out a single `TrackList` or an array of `TrackLists` given their names.\n *\n * > Note: Techs without source handlers should call this between sources for `video`\n * & `audio` tracks. You don't want to use them between tracks!\n *\n * @param {string[]|string} types\n * TrackList names to clear, valid names are `video`, `audio`, and\n * `text`.\n */\n\n\n Tech.prototype.clearTracks = function clearTracks(types) {\n var _this3 = this;\n\n types = [].concat(types);\n // clear out all tracks because we can't reuse them between techs\n types.forEach(function (type) {\n var list = _this3[type + 'Tracks']() || [];\n var i = list.length;\n\n while (i--) {\n var track = list[i];\n\n if (type === 'text') {\n _this3.removeRemoteTextTrack(track);\n }\n list.removeTrack(track);\n }\n });\n };\n\n /**\n * Remove any TextTracks added via addRemoteTextTrack that are\n * flagged for automatic garbage collection\n */\n\n\n Tech.prototype.cleanupAutoTextTracks = function cleanupAutoTextTracks() {\n var list = this.autoRemoteTextTracks_ || [];\n var i = list.length;\n\n while (i--) {\n var track = list[i];\n\n this.removeRemoteTextTrack(track);\n }\n };\n\n /**\n * Reset the tech, which will removes all sources and reset the internal readyState.\n *\n * @abstract\n */\n\n\n Tech.prototype.reset = function reset() {};\n\n /**\n * Get or set an error on the Tech.\n *\n * @param {MediaError} [err]\n * Error to set on the Tech\n *\n * @return {MediaError|null}\n * The current error object on the tech, or null if there isn't one.\n */\n\n\n Tech.prototype.error = function error(err) {\n if (err !== undefined) {\n this.error_ = new MediaError(err);\n this.trigger('error');\n }\n return this.error_;\n };\n\n /**\n * Returns the `TimeRange`s that have been played through for the current source.\n *\n * > NOTE: This implementation is incomplete. It does not track the played `TimeRange`.\n * It only checks wether the source has played at all or not.\n *\n * @return {TimeRange}\n * - A single time range if this video has played\n * - An empty set of ranges if not.\n */\n\n\n Tech.prototype.played = function played() {\n if (this.hasStarted_) {\n return createTimeRanges(0, 0);\n }\n return createTimeRanges();\n };\n\n /**\n * Causes a manual time update to occur if {@link Tech#manualTimeUpdatesOn} was\n * previously called.\n *\n * @fires Tech#timeupdate\n */\n\n\n Tech.prototype.setCurrentTime = function setCurrentTime() {\n // improve the accuracy of manual timeupdates\n if (this.manualTimeUpdates) {\n /**\n * A manual `timeupdate` event.\n *\n * @event Tech#timeupdate\n * @type {EventTarget~Event}\n */\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }\n };\n\n /**\n * Turn on listeners for {@link VideoTrackList}, {@link {AudioTrackList}, and\n * {@link TextTrackList} events.\n *\n * This adds {@link EventTarget~EventListeners} for `addtrack`, and `removetrack`.\n *\n * @fires Tech#audiotrackchange\n * @fires Tech#videotrackchange\n * @fires Tech#texttrackchange\n */\n\n\n Tech.prototype.initTrackListeners = function initTrackListeners() {\n var _this4 = this;\n\n /**\n * Triggered when tracks are added or removed on the Tech {@link AudioTrackList}\n *\n * @event Tech#audiotrackchange\n * @type {EventTarget~Event}\n */\n\n /**\n * Triggered when tracks are added or removed on the Tech {@link VideoTrackList}\n *\n * @event Tech#videotrackchange\n * @type {EventTarget~Event}\n */\n\n /**\n * Triggered when tracks are added or removed on the Tech {@link TextTrackList}\n *\n * @event Tech#texttrackchange\n * @type {EventTarget~Event}\n */\n NORMAL.names.forEach(function (name) {\n var props = NORMAL[name];\n var trackListChanges = function trackListChanges() {\n _this4.trigger(name + 'trackchange');\n };\n\n var tracks = _this4[props.getterName]();\n\n tracks.addEventListener('removetrack', trackListChanges);\n tracks.addEventListener('addtrack', trackListChanges);\n\n _this4.on('dispose', function () {\n tracks.removeEventListener('removetrack', trackListChanges);\n tracks.removeEventListener('addtrack', trackListChanges);\n });\n });\n };\n\n /**\n * Emulate TextTracks using vtt.js if necessary\n *\n * @fires Tech#vttjsloaded\n * @fires Tech#vttjserror\n */\n\n\n Tech.prototype.addWebVttScript_ = function addWebVttScript_() {\n var _this5 = this;\n\n if (window.WebVTT) {\n return;\n }\n\n // Initially, Tech.el_ is a child of a dummy-div wait until the Component system\n // signals that the Tech is ready at which point Tech.el_ is part of the DOM\n // before inserting the WebVTT script\n if (document.body.contains(this.el())) {\n\n // load via require if available and vtt.js script location was not passed in\n // as an option. novtt builds will turn the above require call into an empty object\n // which will cause this if check to always fail.\n if (!this.options_['vtt.js'] && isPlain(vtt) && Object.keys(vtt).length > 0) {\n this.trigger('vttjsloaded');\n return;\n }\n\n // load vtt.js via the script location option or the cdn of no location was\n // passed in\n var script = document.createElement('script');\n\n script.src = this.options_['vtt.js'] || 'https://vjs.zencdn.net/vttjs/0.12.4/vtt.min.js';\n script.onload = function () {\n /**\n * Fired when vtt.js is loaded.\n *\n * @event Tech#vttjsloaded\n * @type {EventTarget~Event}\n */\n _this5.trigger('vttjsloaded');\n };\n script.onerror = function () {\n /**\n * Fired when vtt.js was not loaded due to an error\n *\n * @event Tech#vttjsloaded\n * @type {EventTarget~Event}\n */\n _this5.trigger('vttjserror');\n };\n this.on('dispose', function () {\n script.onload = null;\n script.onerror = null;\n });\n // but have not loaded yet and we set it to true before the inject so that\n // we don't overwrite the injected window.WebVTT if it loads right away\n window.WebVTT = true;\n this.el().parentNode.appendChild(script);\n } else {\n this.ready(this.addWebVttScript_);\n }\n };\n\n /**\n * Emulate texttracks\n *\n */\n\n\n Tech.prototype.emulateTextTracks = function emulateTextTracks() {\n var _this6 = this;\n\n var tracks = this.textTracks();\n var remoteTracks = this.remoteTextTracks();\n var handleAddTrack = function handleAddTrack(e) {\n return tracks.addTrack(e.track);\n };\n var handleRemoveTrack = function handleRemoveTrack(e) {\n return tracks.removeTrack(e.track);\n };\n\n remoteTracks.on('addtrack', handleAddTrack);\n remoteTracks.on('removetrack', handleRemoveTrack);\n\n this.addWebVttScript_();\n\n var updateDisplay = function updateDisplay() {\n return _this6.trigger('texttrackchange');\n };\n\n var textTracksChanges = function textTracksChanges() {\n updateDisplay();\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n };\n\n textTracksChanges();\n tracks.addEventListener('change', textTracksChanges);\n tracks.addEventListener('addtrack', textTracksChanges);\n tracks.addEventListener('removetrack', textTracksChanges);\n\n this.on('dispose', function () {\n remoteTracks.off('addtrack', handleAddTrack);\n remoteTracks.off('removetrack', handleRemoveTrack);\n tracks.removeEventListener('change', textTracksChanges);\n tracks.removeEventListener('addtrack', textTracksChanges);\n tracks.removeEventListener('removetrack', textTracksChanges);\n\n for (var i = 0; i < tracks.length; i++) {\n var track = tracks[i];\n\n track.removeEventListener('cuechange', updateDisplay);\n }\n });\n };\n\n /**\n * Create and returns a remote {@link TextTrack} object.\n *\n * @param {string} kind\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata)\n *\n * @param {string} [label]\n * Label to identify the text track\n *\n * @param {string} [language]\n * Two letter language abbreviation\n *\n * @return {TextTrack}\n * The TextTrack that gets created.\n */\n\n\n Tech.prototype.addTextTrack = function addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n };\n\n /**\n * Create an emulated TextTrack for use by addRemoteTextTrack\n *\n * This is intended to be overridden by classes that inherit from\n * Tech in order to create native or custom TextTracks.\n *\n * @param {Object} options\n * The object should contain the options to initialize the TextTrack with.\n *\n * @param {string} [options.kind]\n * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata).\n *\n * @param {string} [options.label].\n * Label to identify the text track\n *\n * @param {string} [options.language]\n * Two letter language abbreviation.\n *\n * @return {HTMLTrackElement}\n * The track element that gets created.\n */\n\n\n Tech.prototype.createRemoteTextTrack = function createRemoteTextTrack(options) {\n var track = mergeOptions(options, {\n tech: this\n });\n\n return new REMOTE.remoteTextEl.TrackClass(track);\n };\n\n /**\n * Creates a remote text track object and returns an html track element.\n *\n * > Note: This can be an emulated {@link HTMLTrackElement} or a native one.\n *\n * @param {Object} options\n * See {@link Tech#createRemoteTextTrack} for more detailed properties.\n *\n * @param {boolean} [manualCleanup=true]\n * - When false: the TextTrack will be automatically removed from the video\n * element whenever the source changes\n * - When True: The TextTrack will have to be cleaned up manually\n *\n * @return {HTMLTrackElement}\n * An Html Track Element.\n *\n * @deprecated The default functionality for this function will be equivalent\n * to \"manualCleanup=false\" in the future. The manualCleanup parameter will\n * also be removed.\n */\n\n\n Tech.prototype.addRemoteTextTrack = function addRemoteTextTrack() {\n var _this7 = this;\n\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var manualCleanup = arguments[1];\n\n var htmlTrackElement = this.createRemoteTextTrack(options);\n\n if (manualCleanup !== true && manualCleanup !== false) {\n // deprecation warning\n log$1.warn('Calling addRemoteTextTrack without explicitly setting the \"manualCleanup\" parameter to `true` is deprecated and default to `false` in future version of video.js');\n manualCleanup = true;\n }\n\n // store HTMLTrackElement and TextTrack to remote list\n this.remoteTextTrackEls().addTrackElement_(htmlTrackElement);\n this.remoteTextTracks().addTrack(htmlTrackElement.track);\n\n if (manualCleanup !== true) {\n // create the TextTrackList if it doesn't exist\n this.ready(function () {\n return _this7.autoRemoteTextTracks_.addTrack(htmlTrackElement.track);\n });\n }\n\n return htmlTrackElement;\n };\n\n /**\n * Remove a remote text track from the remote `TextTrackList`.\n *\n * @param {TextTrack} track\n * `TextTrack` to remove from the `TextTrackList`\n */\n\n\n Tech.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) {\n var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track);\n\n // remove HTMLTrackElement and TextTrack from remote list\n this.remoteTextTrackEls().removeTrackElement_(trackElement);\n this.remoteTextTracks().removeTrack(track);\n this.autoRemoteTextTracks_.removeTrack(track);\n };\n\n /**\n * Gets available media playback quality metrics as specified by the W3C's Media\n * Playback Quality API.\n *\n * @see [Spec]{@link https://wicg.github.io/media-playback-quality}\n *\n * @return {Object}\n * An object with supported media playback quality metrics\n *\n * @abstract\n */\n\n\n Tech.prototype.getVideoPlaybackQuality = function getVideoPlaybackQuality() {\n return {};\n };\n\n /**\n * A method to set a poster from a `Tech`.\n *\n * @abstract\n */\n\n\n Tech.prototype.setPoster = function setPoster() {};\n\n /**\n * A method to check for the presence of the 'playsinine'