{"version":3,"sources":["webpack:///./node_modules/vue-video-player/node_modules/videojs-vtt.js/lib/vtt.js","webpack:///./node_modules/es-abstract/es5.js","webpack:///./node_modules/function-bind/index.js","webpack:///./node_modules/string.prototype.trim/polyfill.js","webpack:///./node_modules/tsml/tsml.js","webpack:///./node_modules/vue-video-player/node_modules/videojs-vtt.js/lib/vttcue.js","webpack:///./node_modules/es-abstract/helpers/isNaN.js","webpack:///./node_modules/is-callable/index.js","webpack:///./node_modules/es-to-primitive/es5.js","webpack:///./node_modules/vue-video-player/node_modules/videojs-vtt.js/lib/browser-index.js","webpack:///./node_modules/es-to-primitive/helpers/isPrimitive.js","webpack:///./node_modules/xtend/immutable.js","webpack:///./node_modules/string.prototype.trim/implementation.js","webpack:///./node_modules/es-abstract/helpers/sign.js","webpack:///./node_modules/parse-headers/parse-headers.js","webpack:///./node_modules/function-bind/implementation.js","webpack:///./node_modules/vue-video-player/node_modules/videojs-vtt.js/lib/vttregion.js","webpack:///./node_modules/is-function/index.js","webpack:///./node_modules/safe-json-parse/tuple.js","webpack:///./node_modules/has/src/index.js","webpack:///./node_modules/vue-video-player/node_modules/video.js/dist/video.cjs.js","webpack:///./node_modules/string.prototype.trim/shim.js","webpack:///./node_modules/es-abstract/helpers/mod.js","webpack:///./node_modules/global/window.js","webpack:///./node_modules/es-abstract/helpers/isFinite.js","webpack:///./node_modules/string.prototype.trim/index.js","webpack:///./node_modules/for-each/index.js","webpack:///./node_modules/object-keys/isArguments.js","webpack:///./node_modules/object-keys/index.js","webpack:///./node_modules/vue-video-player/dist/vue-video-player.js","webpack:///./node_modules/es-abstract/GetIntrinsic.js","webpack:///./node_modules/xhr/index.js","webpack:///./node_modules/global/document.js","webpack:///./node_modules/define-properties/index.js"],"names":["_objCreate","Object","create","F","o","arguments","length","Error","prototype","ParsingError","errorData","message","this","name","code","parseTimeStamp","input","computeSeconds","h","m","s","f","match","replace","Settings","values","parseOptions","callback","keyValueDelim","groupDelim","groups","split","i","kv","k","v","parseCue","cue","regionList","oInput","consumeTimeStamp","ts","Errors","BadTimeStamp","consumeCueSettings","settings","id","set","region","alt","vals","vals0","integer","percent","get","vertical","line","lineAlign","snapToLines","size","align","position","start","left","middle","end","right","positionAlign","skipWhitespace","startTime","substr","endTime","constructor","BadSignature","dflt","defaultKey","has","a","n","test","parseInt","parseFloat","ESCAPE","TAG_NAME","c","b","u","ruby","rt","lang","TAG_ANNOTATION","NEEDS_PARENT","parseContent","window","nextToken","consume","result","unescape1","e","unescape","shouldAdd","current","element","localName","createElement","type","annotation","tagName","document","trim","t","rootDiv","tagStack","appendChild","createTextNode","pop","parentNode","node","createProcessingInstruction","className","push","strongRTLRanges","isStrongRTLChar","charCode","currentRange","determineBidi","cueDiv","nodeStack","text","childNodes","pushNodes","nextTextNode","textContent","innerText","charCodeAt","computeLinePos","track","textTrackList","mediaElement","trackList","count","mode","StyleBox","CueStyleBox","styleOptions","isIE8","navigator","userAgent","color","backgroundColor","call","styles","top","bottom","display","writingMode","unicodeBidi","applyStyles","div","textAlign","font","whiteSpace","direction","stylesunicodeBidi","textPos","formatStyle","width","height","move","box","BoxPosition","obj","lh","offsetHeight","offsetWidth","offsetTop","rects","getClientRects","getBoundingClientRect","Math","max","lineHeight","undefined","moveBoxToLinePosition","styleBox","containerBox","boxPositions","findBestPosition","axis","bestPosition","specifiedPosition","percentage","overlapsOppositeAxis","within","overlapsAny","p","intersectPercentage","boxPosition","linePos","step","round","maxPosition","initialAxis","abs","ceil","reverse","calculatedPercentage","toCSSCompatValues","WebVTT","prop","hasOwnProperty","style","val","unit","toMove","overlaps","b2","boxes","container","x","min","y","intersectArea","reference","getSimpleBoxPosition","ret","StringDecoder","decode","data","decodeURIComponent","encodeURIComponent","convertCueToDOMTree","cuetext","FONT_SIZE_PERCENT","FONT_STYLE","CUE_BACKGROUND_PADDING","processCues","cues","overlay","firstChild","removeChild","paddedOverlay","shouldCompute","hasBeenReset","displayState","margin","fontSize","Parser","vttjs","decoder","state","buffer","TextDecoder","reportOrThrowError","onparsingerror","parse","self","collectNextLine","pos","parseRegion","xy","anchor","VTTRegion","lines","regionAnchorX","regionAnchorY","viewportAnchorX","viewportAnchorY","scroll","onregion","parseTimestampMap","ontimestampmap","parseHeader","stream","alreadyCollectedLine","VTTCue","indexOf","hasSubstring","oncue","flush","onflush","module","exports","GetIntrinsic","$Object","$TypeError","$String","$isNaN","$isFinite","sign","mod","IsCallable","toPrimitive","ES5","ToPrimitive","ToBoolean","value","ToNumber","ToInteger","number","floor","ToInt32","ToUint32","ToUint16","posInt","ToString","ToObject","CheckObjectCoercible","optMessage","SameValue","Type","IsPropertyDescriptor","Desc","allowed","key","isData","IsAccessor","IsAccessorDescriptor","IsDataDescriptor","IsGenericDescriptor","FromPropertyDescriptor","writable","enumerable","configurable","ToPropertyDescriptor","Obj","desc","getter","TypeError","setter","implementation","Function","bind","zeroWidthSpace","String","clean","sa","autoKeyword","directionSetting","alignSetting","findDirectionSetting","dir","toLowerCase","findAlignSetting","extend","cobj","baseObj","_id","_pauseOnExit","_startTime","_endTime","_text","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","defineProperty","setting","SyntaxError","getCueAsHTML","Number","isNaN","fnToStr","toString","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","toStr","fnClass","genClass","hasToStringTag","Symbol","toStringTag","strClass","isPrimitive","isCallable","ES5internalSlots","O","actualHint","methods","cueShim","regionShim","nativeVTTCue","nativeVTTRegion","shim","restore","target","source","ES","leftWhitespace","rightWhitespace","S","forEach","isArray","arg","headers","row","index","slice","ERROR_MESSAGE","Array","funcType","that","bound","args","binder","apply","concat","boundLength","boundArgs","join","Empty","scrollSetting","findScrollSetting","isValidPercentValue","_width","_lines","_regionAnchorX","_regionAnchorY","_viewportAnchorX","_viewportAnchorY","_scroll","defineProperties","isFunction","fn","string","setTimeout","alert","confirm","prompt","SafeParseTuple","reviver","json","error","JSON","err","_interopDefault","ex","tsml","safeParseTuple","xhr","vtt","version","USER_AGENT","webkitVersionMap","exec","appleWebkitVersion","IS_IPAD","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","IS_SAFARI","IS_ANY_SAFARI","TOUCH_ENABLED","isReal","maxTouchPoints","DocumentTouch","BACKGROUND_SIZE_SUPPORTED","browser","freeze","_typeof","iterator","classCallCheck","instance","Constructor","inherits","subClass","superClass","setPrototypeOf","__proto__","possibleConstructorReturn","ReferenceError","taggedTemplateLiteralLoose","strings","raw","keys","object","isObject","each","reduce","initial","accum","assign","_len","sources","_key","isPlain","history","LogByTypeFactory","log","level","stringify","lvl","levels","lvlRegExp","RegExp","unshift","toUpperCase","console","info","map","createLogger$1","logByType","createLogger","subname","all","off","debug","warn","DEFAULT","filter","fname","historyItem","clear","disable","enable","_len2","_key2","_len3","_key3","_len4","_key4","computedStyle","el","getComputedStyle","cs","currentStyle","_templateObject","isNonBlankString","str","throwIfWhitespace","classRegExp","isEl","nodeType","isInFrame","parent","createQuerier","method","selector","context","querySelector","ctx","createEl","properties","attributes","content","getOwnPropertyNames","propName","setAttribute","attrName","appendContent","prependTo","child","insertBefore","hasClass","classToCheck","classList","contains","addClass","classToAdd","add","removeClass","classToRemove","remove","toggleClass","classToToggle","predicate","setAttributes","attrValue","removeAttribute","getAttributes","tag","knownBooleans","attrs","attrVal","getAttribute","attribute","blockTextSelection","body","focus","onselectstart","unblockTextSelection","rect","findPosition","docEl","documentElement","clientLeft","scrollLeft","pageXOffset","clientTop","scrollTop","pageYOffset","getPointerPosition","event","boxW","boxH","boxY","boxX","pageY","pageX","changedTouches","isTextNode","emptyEl","normalizeContent","insertContent","isSingleLeftClick","button","buttons","$","$$","Dom","_guid","newGUID","elData","elIdAttr","Date","getTime","getData","hasData","removeData","_cleanUpEvents","elem","handlers","removeEventListener","dispatcher","detachEvent","disabled","_handleMultipleEvents","types","fixEvent","returnTrue","returnFalse","isPropagationStopped","old","preventDefault","srcElement","relatedTarget","fromElement","toElement","returnValue","defaultPrevented","stopPropagation","cancelBubble","stopImmediatePropagation","isImmediatePropagationStopped","clientX","doc","clientY","which","keyCode","_supportsPassive","opts","addEventListener","passiveEvents","on","guid","hash","handlersCopy","options","passive","attachEvent","removeType","splice","trigger","elemData","ownerDocument","bubbles","targetData","one","func","Events","_windowLoaded","videojs$2","autoSetup","vids","getElementsByTagName","audios","divs","mediaEls","_i","_e","_i2","_e2","_i3","_e3","mediaEl","autoSetupTimeout","player","wait","vjs","readyState","createStyleElement","setTextContent","styleSheet","cssText","uid","throttle","last","now","throttled","debounce","immediate","timeout","cancel","clearTimeout","debounced","_later","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","setState","stateUpdates","changes","from","to","stateful","defaultState","handleStateChanged","toTitleCase","charAt","titleCaseEquals","str1","str2","mergeOptions","Component","ready","play","player_","options_","id_","name_","el_","children_","childIndex_","childNameIndex_","initChildren","reportTouchActivity","enableTouchActivity","dispose","localize","tokens","defaultValue","language","languages","primaryCode","primaryLang","localizedString","contentEl","contentEl_","children","getChildById","getChild","addChild","component","componentName","componentClassName","componentClass","ComponentClass","getComponent","refNode","childFound","compEl","parentOptions","handleAdd","playerOptions","newChild","workingChildren","Tech","some","wchild","isTech","buildCSSClass","sync","isReady_","readyQueue_","triggerReady","readyQueue","show","hide","lockShowing","unlockShowing","num","skipListeners","dimension","dimensions","widthOrHeight","pxIndex","currentDimension","computedWidthOrHeight","getPropertyValue","rule","currentDimensions","currentWidth","currentHeight","blur","emitTapEvents","touchStart","firstTouch","tapMovementThreshold","touchTimeThreshold","couldBeTap","touches","xdiff","ydiff","touchDistance","sqrt","noTap","touchTime","reportUserActivity","report","touchHolding","clearInterval","setInterval","touchEnd","timeoutId","disposeFn","interval","_this3","intervalId","requestAnimationFrame","_this4","supportsRaf_","cancelAnimationFrame","registerComponent","ComponentToRegister","isComp","isPrototypeOf","reason","components_","Player","players","playerNames","pname","Boolean","rangeCheck","fnName","maxIndex","getRange","valueIndex","ranges","rangeIndex","createTimeRangesObj","createTimeRanges","bufferedPercent","buffered","duration","bufferedDuration","FullscreenApi","apiMap","specApi","browserApi","MediaError","defaultMessages","status","errorTypes","1","2","3","4","5","errNum","isPromise","then","silencePromise","trackToJson_","acc","textTracksToJson","tech","trackEls","trackObjs","tracks","trackEl","src","textTracks","jsonToTextTracks","addedTrack","addRemoteTextTrack","addCue","textTrackConverter","MODAL_CLASS_NAME","ESC","ModalDialog","_Component","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","role","descEl_","description","tabIndex","label","previouslyActiveEl_","handleKeyPress","close","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","_ret","list","tracks_","addTrack","removeTrack","rtrack","l","getTrackById","change","addtrack","removetrack","disableOthers","enabled","AudioTrackList","_TrackList","_prop","changing_","disableOthers$1","selected","VideoTrackList","TextTrackList","nonLanguageTextTrackKind","kind","HtmlTrackElementList","trackElements","trackElements_","addTrackElement_","trackElement","getTrackElementByTrack_","trackElement_","removeTrackElement_","TextTrackCueList","setCues_","length_","oldLength","cues_","defineProp","getCueById","VideoTrackKind","alternative","captions","main","subtitles","commentary","AudioTrackKind","TextTrackKind","descriptions","chapters","metadata","TextTrackMode","hidden","showing","Track","trackProps","_loop","parseUrl","url","props","href","addToBody","host","protocol","innerHTML","details","location","getAbsoluteURL","getFileExtension","path","splitPathRe","pathParts","isCrossOrigin","winLoc","urlInfo","srcProtocol","crossOrigin","Url","parseCues","srcContent","parser","errors","groupCollapsed","groupEnd","loadTrack","uri","cors","response","responseBody","loaded_","tech_","loadHandler","TextTrack","_Track","srclang","default_","tt","activeCues_","activeCues","changed","timeupdateHandler","newMode","ct","currentTime","active","originalCue","originalCue_","removeCue","_removeCue","cuechange","AudioTrack","newEnabled","VideoTrack","newSelected","NONE","LOADING","LOADED","ERROR","HTMLTrackElement","load","NORMAL","audio","ListClass","TrackClass","capitalName","video","getterName","privateName","REMOTE","remoteText","remoteTextEl","ALL","createTrackHelper","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","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","deferrable","originalFn","sourceHandler_","setSource","nativeSourceHandler","disposeSourceHandler","currentSource_","handleSource","middlewares","middlewareInstances","TERMINATOR","use","middleware","next","setSourceHelper","setTech","mw","get$1","reduceRight","middlewareIterator","set$1","mediate","callMethod","middlewareValue","terminated","executeRight","allowedGetters","seekable","allowedSetters","allowedMediators","mws","clearCacheForPlayer","getOrCreateFactory","mwFactory","_mws$i","mwf","mwi","lastRun","mwrest","_src","MimetypesKind","opus","ogv","mp4","mov","m4v","mkv","mp3","aac","oga","m3u8","getMimetype","ext","mimetype","findMimetype","cache_","matchingSources","filterSource","newsrc","srcobj","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","darkGray","lightGray","fontMap","monospace","sansSerif","serif","monospaceSansSerif","monospaceSerif","proportionalSansSerif","proportionalSerif","casual","smallcaps","constructColor","opacity","hex","tryUpdateStyle","TextTrackDisplay","updateDisplayHandler","toggleDisplay","preselectTrack","modes","userPref","selectedLanguage","firstDesc","firstCaptions","preferredTrack","clearDisplay","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","textTrackSettings","overrides","getValues","textOpacity","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontFamily","fontVariant","LoadingSpinner","isAudio","playerType","Button","BigPlayButton","_Button","mouseused_","handleMouseDown","playPromise","cb","playToggle","playFocus","CloseButton","PlayToggle","handlePlay","handlePause","handleEnded","handleSeeked","defaultImplementation","seconds","guide","gm","gh","Infinity","setFormatTime","customImplementation","resetFormatTime","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","playerEvent","handleMouseMove","handleMouseUp","progress","getPercent","toFixed","calculateDistance","stepBack","stepForward","bool","vertical_","LoadProgressBar","partEls_","bufferedEnd","percentify","part","TimeTooltip","seekBarRect","seekBarPoint","tooltipRect","playerRect","seekBarPointPx","spaceLeftOfPoint","spaceRightOfPoint","pullTooltipBy","PlayProgressBar","rafId_","timeTooltip","MouseTimeDisplay","STEP_SECONDS","UPDATE_REFRESH_INTERVAL","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","checkMuteSupport","MuteToggle","vol","lastVolume","volumeToSet","updateIcon_","updateControlText_","soundOff","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","LOCAL_STORAGE_KEY","COLOR_BLACK","COLOR_BLUE","COLOR_CYAN","COLOR_GREEN","COLOR_MAGENTA","COLOR_RED","COLOR_WHITE","COLOR_YELLOW","OPACITY_OPAQUE","OPACITY_SEMI","OPACITY_TRANS","selectConfigs","parseOptionValue","getSelectedOptionValue","selectedIndex","setSelectedOption","TextTrackSettings","endDialog","setDefaults","persistTextTrackSettings","saveSettings","config","restoreSettings","createElSelect_","legendId","selectLabelledbyIds","optionId","createElFgColor_","createElBgColor_","createElWinColor_","createElColors_","createElFont_","createElControls_","defaultsDescription","setValues","localStorage","getItem","setItem","removeItem","ttDisplay","controlBar","subsCapsBtn","subsCapsButton","ccBtn","captionsButton","ResizeManager","RESIZE_OBSERVER_AVAILABLE","ResizeObserver","loadListener_","resizeObserver_","debouncedHandler_","resizeHandler","observe","contentWindow","unobserve","disconnect","resizeObserver","sourcesetLoad","srcUrls","innerHTMLDescriptorPolyfill","cloneNode","dummy","docFrag","createDocumentFragment","Element","getDescriptor","priority","descriptor","getOwnPropertyDescriptor","getInnerHTMLDescriptor","HTMLMediaElement","firstSourceWatch","resetSourceWatch_","innerDescriptor","appendWrapper","appendFn","retval","srcDescriptorPolyfill","getSrcDescriptor","setupSourceset","resetSourceset_","srcDescriptor","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","tagAttributes","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","BREAKPOINT_ORDER","BREAKPOINT_CLASSES","substring","DEFAULT_BREAKPOINTS","tiny","xsmall","small","medium","large","xlarge","huge","getTagSettings","closest","isPosterFromTech_","queuedCallbacks_","userActive_","languagesToLower","name$$1","languages_","poster_","controls_","autoplay","scrubbing_","lastPlaybackRate","defaultPlaybackRate","playerOptionsCopy","plugins","middleware_","flexNotSupported_","majorVersion","userActive","listenForUserActivity_","handleFullscreenChange_","handleStageClick_","breakpoints","responsive","changingSrc_","playWaitingForReady_","playOnLoadstart_","styleEl_","playerElIngest_","divEmbed","tabindex","VIDEOJS_NO_DYNAMIC_STYLE","defaultsStyleEl","head","fill_","fluid_","fluid","aspectRatio","links","linkEl","_dimension","privDimension","updateStyleEl_","parsedVal","ratio","aspectRatio_","idClass","videoWidth","videoHeight","ratioParts","ratioMultiplier","width_","height_","_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","updateSourceCaches","playerSrc","currentSource","eventSrc","lastSource_","updateCache","techSrc","techGet","request","queued","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechSeeked_","starttime","userWasActive","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","foundSourceAndTech","flip","finder","_ref2","sourceOrder","_this10","middlewareSource","src_","notSupportedMessage","_this11","sourceTech","currentSources","currentType","techAutoplay","newPoster","usingNativeControls_","errorDisplay","userActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","inactivityTimeout","isAudio_","_ref3","_ref3$track","toJSON","createModal","_this12","modal","updateCurrentBreakpoint_","currentBreakpoint","candidateBreakpoint","maxWidth","breakpoints_","breakpoint_","removeCurrentBreakpoint_","currentBreakpointClass","_breakpoints","responsive_","baseOptions","tagOptions","dataSetup","_safeParseTuple","childName","html5","flash","userLanguage","BASE_PLUGIN_NAME","PLUGIN_CACHE_KEY","pluginStorage","pluginExists","getPlugin","markPluginAsActive","triggerSetupEvent","before","createBasicPlugin","plugin","basicPluginWrapper","createPluginFactory","PluginSubClass","getEventHash","Plugin","VERSION","isBasic","registerPlugin","deregisterPlugin","getPlugins","getPluginVersion","usingPlugin","hasPlugin","_inherits","super_","extendFn","subClassMethods","HTMLVideoElement","normalizeId","getPlayer","hooks","hookFunction","PlayerComponent","hooks_","hook","hookOnce","original","removeHook","getPlayers","nId","_tag","_player","getAllPlayers","comp","writeable","addLanguage","_mergeOptions","createTimeRange","dom","define","getPolyfill","polyfill","modulo","remain","win","global","isFinite","boundTrim","forEachArray","array","receiver","len","forEachString","forEachObject","thisArg","isArgs","callee","isEnumerable","propertyIsEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","isArguments","isString","theKeys","skipProto","skipConstructor","keysWorksWithArguments","originalKeys","d","__esModule","default","customEventName","required","events","globalOptions","progressControl","fullscreenToggle","volumeMenuButton","globalEvents","reseted","mounted","initialize","beforeDestroy","$refs","$emit","__ob__","$nextTick","watch","deep","install","videoPlayer","render","staticRenderFns","_compiled","functional","_scopeId","$vnode","ssrContext","__VUE_SSR_CONTEXT__","_registeredComponents","_ssrRegister","beforeCreate","_injectStyles","esModule","$createElement","_self","_c","staticClass","ref","generator","asyncFn","asyncGen","ThrowTypeError","hasSymbols","getProto","getPrototypeOf","generatorFunction","asyncFunction","asyncGenFunction","asyncGenIterator","TypedArray","Uint8Array","INTRINSICS","ArrayBuffer","entries","asyncIterator","Atomics","DataView","decodeURI","encodeURI","eval","EvalError","Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Map","valueOf","reject","Proxy","RangeError","Reflect","Set","SharedArrayBuffer","Uint8ClampedArray","Uint16Array","Uint32Array","URIError","WeakMap","WeakSet","allowMissing","parseHeaders","xtend","isEmpty","initParams","params","createXHR","_createXHR","called","readystatechange","loadFunc","getBody","responseText","getXml","isJson","errorFunc","evt","timeoutTimer","statusCode","failureResponse","aborted","useXDR","rawRequest","getAllResponseHeaders","XDomainRequest","XMLHttpRequest","onreadystatechange","onprogress","onabort","ontimeout","username","password","withCredentials","abort","setRequestHeader","responseType","beforeSend","send","responseXML","firefoxBugTakenEffect","doccy","minDoc","topLevel","origDefineProperty","arePropertyDescriptorsSupported","_","supportsDescriptors","predicates","getOwnPropertySymbols"],"mappings":"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","file":"js/chunk-49225848.8fa53285.js","sourcesContent":["/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\nvar _objCreate = Object.create || (function() {\n function F() {}\n return function(o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n F.prototype = o;\n return new F();\n };\n})();\n\n// Creates a new ParserError object from an errorData object. The errorData\n// object should have default code and message properties. The default message\n// property can be overriden by passing in a message parameter.\n// See ParsingError.Errors below for acceptable errors.\nfunction ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n}\nParsingError.prototype = _objCreate(Error.prototype);\nParsingError.prototype.constructor = ParsingError;\n\n// ParsingError metadata for acceptable ParsingErrors.\nParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n};\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{2})(:\\d{2})?\\.(\\d{3})/);\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nfunction Settings() {\n this.values = _objCreate(null);\n}\n\nSettings.prototype = {\n // Only accept the first assignment to any key.\n set: function(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function(k, v) {\n if (/^-?\\d+$/.test(v)) { // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function(k, v) {\n var m;\n if ((m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/))) {\n v = parseFloat(v);\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n return false;\n }\n};\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interprete each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n var kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n var k = kv[0];\n var v = kv[1];\n callback(k, v);\n }\n}\n\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed timestamp: \" + oInput);\n }\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n break;\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n break;\n case \"size\":\n settings.percent(k, v);\n break;\n case \"align\":\n settings.alt(k, v, [\"start\", \"middle\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n cue.line = settings.get(\"line\", \"auto\");\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n cue.align = settings.get(\"align\", \"middle\");\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n middle: \"middle\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.substr(0, 3) !== \"-->\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\nvar ESCAPE = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \"‎\": \"\\u200e\",\n \"‏\": \"\\u200f\",\n \" \": \"\\u00a0\"\n};\n\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\n\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\n\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n};\n\n// Parse content into a document fragment.\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n // Unescape a string 's'.\n function unescape1(e) {\n return ESCAPE[e];\n }\n function unescape(s) {\n while ((m = s.match(/&(amp|lt|gt|lrm|rlm|nbsp);/))) {\n s = s.replace(m[0], unescape1);\n }\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n element.localName = tagName;\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n node.className = m[2].substr(1).replace('.', ' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n}\n\n// This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n}\n\nfunction StyleBox() {\n}\n\n// Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\nStyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n};\n\n// Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\nfunction CueStyleBox(window, cue, styleOptions) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var color = \"rgba(255, 255, 255, 1)\";\n var backgroundColor = \"rgba(0, 0, 0, 0.8)\";\n\n if (isIE8) {\n color = \"rgb(255, 255, 255)\";\n backgroundColor = \"rgb(0, 0, 0)\";\n }\n\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: color,\n backgroundColor: backgroundColor,\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\"\n };\n\n if (!isIE8) {\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\";\n styles.unicodeBidi = \"plaintext\";\n }\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except \"middle\" which is \"center\" in CSS.\n this.div = window.document.createElement(\"div\");\n styles = {\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n if (!isIE8) {\n styles.direction = determineBidi(this.cueDiv);\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\".\n stylesunicodeBidi = \"plaintext\";\n }\n\n this.applyStyles(styles);\n\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n textPos = cue.position;\n break;\n case \"middle\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox;\n\n// Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\nfunction BoxPosition(obj) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n\n if (isIE8 && !this.lineHeight) {\n this.lineHeight = 13;\n }\n}\n\n// Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\nBoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n};\n\n// Check if this box overlaps another box, b2.\nBoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n};\n\n// Check if this box overlaps any other boxes in boxes.\nBoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n};\n\n// Check if this box is within another box.\nBoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n};\n\n// Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\nBoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n};\n\n// Find the percentage of the area that this box is overlapping with another\n// box.\nBoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n};\n\n// Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\nBoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n};\n\n// Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\nBoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n};\n\n// Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"middle\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {\n // Nothing\n}\n\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\nWebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\";\n\n// Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\nWebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line;\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n};\n\nmodule.exports = WebVTT;\n","'use strict';\n\nvar GetIntrinsic = require('./GetIntrinsic');\n\nvar $Object = GetIntrinsic('%Object%');\nvar $TypeError = GetIntrinsic('%TypeError%');\nvar $String = GetIntrinsic('%String%');\n\nvar $isNaN = require('./helpers/isNaN');\nvar $isFinite = require('./helpers/isFinite');\n\nvar sign = require('./helpers/sign');\nvar mod = require('./helpers/mod');\n\nvar IsCallable = require('is-callable');\nvar toPrimitive = require('es-to-primitive/es5');\n\nvar has = require('has');\n\n// https://es5.github.io/#x9\nvar ES5 = {\n\tToPrimitive: toPrimitive,\n\n\tToBoolean: function ToBoolean(value) {\n\t\treturn !!value;\n\t},\n\tToNumber: function ToNumber(value) {\n\t\treturn +value; // eslint-disable-line no-implicit-coercion\n\t},\n\tToInteger: function ToInteger(value) {\n\t\tvar number = this.ToNumber(value);\n\t\tif ($isNaN(number)) { return 0; }\n\t\tif (number === 0 || !$isFinite(number)) { return number; }\n\t\treturn sign(number) * Math.floor(Math.abs(number));\n\t},\n\tToInt32: function ToInt32(x) {\n\t\treturn this.ToNumber(x) >> 0;\n\t},\n\tToUint32: function ToUint32(x) {\n\t\treturn this.ToNumber(x) >>> 0;\n\t},\n\tToUint16: function ToUint16(value) {\n\t\tvar number = this.ToNumber(value);\n\t\tif ($isNaN(number) || number === 0 || !$isFinite(number)) { return 0; }\n\t\tvar posInt = sign(number) * Math.floor(Math.abs(number));\n\t\treturn mod(posInt, 0x10000);\n\t},\n\tToString: function ToString(value) {\n\t\treturn $String(value);\n\t},\n\tToObject: function ToObject(value) {\n\t\tthis.CheckObjectCoercible(value);\n\t\treturn $Object(value);\n\t},\n\tCheckObjectCoercible: function CheckObjectCoercible(value, optMessage) {\n\t\t/* jshint eqnull:true */\n\t\tif (value == null) {\n\t\t\tthrow new $TypeError(optMessage || 'Cannot call method on ' + value);\n\t\t}\n\t\treturn value;\n\t},\n\tIsCallable: IsCallable,\n\tSameValue: function SameValue(x, y) {\n\t\tif (x === y) { // 0 === -0, but they are not identical.\n\t\t\tif (x === 0) { return 1 / x === 1 / y; }\n\t\t\treturn true;\n\t\t}\n\t\treturn $isNaN(x) && $isNaN(y);\n\t},\n\n\t// https://www.ecma-international.org/ecma-262/5.1/#sec-8\n\tType: function Type(x) {\n\t\tif (x === null) {\n\t\t\treturn 'Null';\n\t\t}\n\t\tif (typeof x === 'undefined') {\n\t\t\treturn 'Undefined';\n\t\t}\n\t\tif (typeof x === 'function' || typeof x === 'object') {\n\t\t\treturn 'Object';\n\t\t}\n\t\tif (typeof x === 'number') {\n\t\t\treturn 'Number';\n\t\t}\n\t\tif (typeof x === 'boolean') {\n\t\t\treturn 'Boolean';\n\t\t}\n\t\tif (typeof x === 'string') {\n\t\t\treturn 'String';\n\t\t}\n\t},\n\n\t// https://ecma-international.org/ecma-262/6.0/#sec-property-descriptor-specification-type\n\tIsPropertyDescriptor: function IsPropertyDescriptor(Desc) {\n\t\tif (this.Type(Desc) !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\tvar allowed = {\n\t\t\t'[[Configurable]]': true,\n\t\t\t'[[Enumerable]]': true,\n\t\t\t'[[Get]]': true,\n\t\t\t'[[Set]]': true,\n\t\t\t'[[Value]]': true,\n\t\t\t'[[Writable]]': true\n\t\t};\n\t\t// jscs:disable\n\t\tfor (var key in Desc) { // eslint-disable-line\n\t\t\tif (has(Desc, key) && !allowed[key]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\t// jscs:enable\n\t\tvar isData = has(Desc, '[[Value]]');\n\t\tvar IsAccessor = has(Desc, '[[Get]]') || has(Desc, '[[Set]]');\n\t\tif (isData && IsAccessor) {\n\t\t\tthrow new $TypeError('Property Descriptors may not be both accessor and data descriptors');\n\t\t}\n\t\treturn true;\n\t},\n\n\t// https://ecma-international.org/ecma-262/5.1/#sec-8.10.1\n\tIsAccessorDescriptor: function IsAccessorDescriptor(Desc) {\n\t\tif (typeof Desc === 'undefined') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.IsPropertyDescriptor(Desc)) {\n\t\t\tthrow new $TypeError('Desc must be a Property Descriptor');\n\t\t}\n\n\t\tif (!has(Desc, '[[Get]]') && !has(Desc, '[[Set]]')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t// https://ecma-international.org/ecma-262/5.1/#sec-8.10.2\n\tIsDataDescriptor: function IsDataDescriptor(Desc) {\n\t\tif (typeof Desc === 'undefined') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.IsPropertyDescriptor(Desc)) {\n\t\t\tthrow new $TypeError('Desc must be a Property Descriptor');\n\t\t}\n\n\t\tif (!has(Desc, '[[Value]]') && !has(Desc, '[[Writable]]')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t// https://ecma-international.org/ecma-262/5.1/#sec-8.10.3\n\tIsGenericDescriptor: function IsGenericDescriptor(Desc) {\n\t\tif (typeof Desc === 'undefined') {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.IsPropertyDescriptor(Desc)) {\n\t\t\tthrow new $TypeError('Desc must be a Property Descriptor');\n\t\t}\n\n\t\tif (!this.IsAccessorDescriptor(Desc) && !this.IsDataDescriptor(Desc)) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t// https://ecma-international.org/ecma-262/5.1/#sec-8.10.4\n\tFromPropertyDescriptor: function FromPropertyDescriptor(Desc) {\n\t\tif (typeof Desc === 'undefined') {\n\t\t\treturn Desc;\n\t\t}\n\n\t\tif (!this.IsPropertyDescriptor(Desc)) {\n\t\t\tthrow new $TypeError('Desc must be a Property Descriptor');\n\t\t}\n\n\t\tif (this.IsDataDescriptor(Desc)) {\n\t\t\treturn {\n\t\t\t\tvalue: Desc['[[Value]]'],\n\t\t\t\twritable: !!Desc['[[Writable]]'],\n\t\t\t\tenumerable: !!Desc['[[Enumerable]]'],\n\t\t\t\tconfigurable: !!Desc['[[Configurable]]']\n\t\t\t};\n\t\t} else if (this.IsAccessorDescriptor(Desc)) {\n\t\t\treturn {\n\t\t\t\tget: Desc['[[Get]]'],\n\t\t\t\tset: Desc['[[Set]]'],\n\t\t\t\tenumerable: !!Desc['[[Enumerable]]'],\n\t\t\t\tconfigurable: !!Desc['[[Configurable]]']\n\t\t\t};\n\t\t} else {\n\t\t\tthrow new $TypeError('FromPropertyDescriptor must be called with a fully populated Property Descriptor');\n\t\t}\n\t},\n\n\t// https://ecma-international.org/ecma-262/5.1/#sec-8.10.5\n\tToPropertyDescriptor: function ToPropertyDescriptor(Obj) {\n\t\tif (this.Type(Obj) !== 'Object') {\n\t\t\tthrow new $TypeError('ToPropertyDescriptor requires an object');\n\t\t}\n\n\t\tvar desc = {};\n\t\tif (has(Obj, 'enumerable')) {\n\t\t\tdesc['[[Enumerable]]'] = this.ToBoolean(Obj.enumerable);\n\t\t}\n\t\tif (has(Obj, 'configurable')) {\n\t\t\tdesc['[[Configurable]]'] = this.ToBoolean(Obj.configurable);\n\t\t}\n\t\tif (has(Obj, 'value')) {\n\t\t\tdesc['[[Value]]'] = Obj.value;\n\t\t}\n\t\tif (has(Obj, 'writable')) {\n\t\t\tdesc['[[Writable]]'] = this.ToBoolean(Obj.writable);\n\t\t}\n\t\tif (has(Obj, 'get')) {\n\t\t\tvar getter = Obj.get;\n\t\t\tif (typeof getter !== 'undefined' && !this.IsCallable(getter)) {\n\t\t\t\tthrow new TypeError('getter must be a function');\n\t\t\t}\n\t\t\tdesc['[[Get]]'] = getter;\n\t\t}\n\t\tif (has(Obj, 'set')) {\n\t\t\tvar setter = Obj.set;\n\t\t\tif (typeof setter !== 'undefined' && !this.IsCallable(setter)) {\n\t\t\t\tthrow new $TypeError('setter must be a function');\n\t\t\t}\n\t\t\tdesc['[[Set]]'] = setter;\n\t\t}\n\n\t\tif ((has(desc, '[[Get]]') || has(desc, '[[Set]]')) && (has(desc, '[[Value]]') || has(desc, '[[Writable]]'))) {\n\t\t\tthrow new $TypeError('Invalid property descriptor. Cannot both specify accessors and a value or writable attribute');\n\t\t}\n\t\treturn desc;\n\t}\n};\n\nmodule.exports = ES5;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar zeroWidthSpace = '\\u200b';\n\nmodule.exports = function getPolyfill() {\n\tif (String.prototype.trim && zeroWidthSpace.trim() === zeroWidthSpace) {\n\t\treturn String.prototype.trim;\n\t}\n\treturn implementation;\n};\n","function clean (s) {\n return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n var s = ''\n , i = 0\n\n for (; i < arguments.length; i++)\n s += clean(sa[i]) + (arguments[i + 1] || '')\n\n return s\n}","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": true,\n \"lr\": true,\n \"rl\": true\n};\nvar alignSetting = {\n \"start\": true,\n \"middle\": true,\n \"end\": true,\n \"left\": true,\n \"right\": true\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction extend(obj) {\n var i = 1;\n for (; i < arguments.length; i++) {\n var cobj = arguments[i];\n for (var p in cobj) {\n obj[p] = cobj[p];\n }\n }\n\n return obj;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n var cue = this;\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var baseObj = {};\n\n if (isIE8) {\n cue = document.createElement('custom');\n } else {\n baseObj.enumerable = true;\n }\n\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n cue.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = 50;\n var _positionAlign = \"middle\";\n var _size = 50;\n var _align = \"middle\";\n\n Object.defineProperty(cue,\n \"id\", extend({}, baseObj, {\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n }));\n\n Object.defineProperty(cue,\n \"pauseOnExit\", extend({}, baseObj, {\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n }));\n\n Object.defineProperty(cue,\n \"startTime\", extend({}, baseObj, {\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"endTime\", extend({}, baseObj, {\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"text\", extend({}, baseObj, {\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"region\", extend({}, baseObj, {\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"vertical\", extend({}, baseObj, {\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"snapToLines\", extend({}, baseObj, {\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"line\", extend({}, baseObj, {\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"An invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"lineAlign\", extend({}, baseObj, {\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"position\", extend({}, baseObj, {\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"positionAlign\", extend({}, baseObj, {\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"size\", extend({}, baseObj, {\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"align\", extend({}, baseObj, {\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }));\n\n /**\n * Other spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n cue.displayState = undefined;\n\n if (isIE8) {\n return cue;\n }\n}\n\n/**\n * VTTCue methods\n */\n\nVTTCue.prototype.getCueAsHTML = function() {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n};\n\nmodule.exports = VTTCue;\n","module.exports = Number.isNaN || function isNaN(a) {\n\treturn a !== a;\n};\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';\n\nmodule.exports = function isCallable(value) {\n\tif (!value) { return false; }\n\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\tif (typeof value === 'function' && !value.prototype) { return true; }\n\tif (hasToStringTag) { return tryFunctionObject(value); }\n\tif (isES6ClassFn(value)) { return false; }\n\tvar strClass = toStr.call(value);\n\treturn strClass === fnClass || strClass === genClass;\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nvar isPrimitive = require('./helpers/isPrimitive');\n\nvar isCallable = require('is-callable');\n\n// http://ecma-international.org/ecma-262/5.1/#sec-8.12.8\nvar ES5internalSlots = {\n\t'[[DefaultValue]]': function (O) {\n\t\tvar actualHint;\n\t\tif (arguments.length > 1) {\n\t\t\tactualHint = arguments[1];\n\t\t} else {\n\t\t\tactualHint = toStr.call(O) === '[object Date]' ? String : Number;\n\t\t}\n\n\t\tif (actualHint === String || actualHint === Number) {\n\t\t\tvar methods = actualHint === String ? ['toString', 'valueOf'] : ['valueOf', 'toString'];\n\t\t\tvar value, i;\n\t\t\tfor (i = 0; i < methods.length; ++i) {\n\t\t\t\tif (isCallable(O[methods[i]])) {\n\t\t\t\t\tvalue = O[methods[i]]();\n\t\t\t\t\tif (isPrimitive(value)) {\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new TypeError('No default value');\n\t\t}\n\t\tthrow new TypeError('invalid [[DefaultValue]] hint supplied');\n\t}\n};\n\n// http://ecma-international.org/ecma-262/5.1/#sec-9.1\nmodule.exports = function ToPrimitive(input) {\n\tif (isPrimitive(input)) {\n\t\treturn input;\n\t}\n\tif (arguments.length > 1) {\n\t\treturn ES5internalSlots['[[DefaultValue]]'](input, arguments[1]);\n\t}\n\treturn ES5internalSlots['[[DefaultValue]]'](input);\n};\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Default exports for Node. Export the extended versions of VTTCue and\n// VTTRegion in Node since we likely want the capability to convert back and\n// forth between JSON. If we don't then it's not that big of a deal since we're\n// off browser.\n\nvar window = require('global/window');\n\nvar vttjs = module.exports = {\n WebVTT: require(\"./vtt.js\"),\n VTTCue: require(\"./vttcue.js\"),\n VTTRegion: require(\"./vttregion.js\")\n};\n\nwindow.vttjs = vttjs;\nwindow.WebVTT = vttjs.WebVTT;\n\nvar cueShim = vttjs.VTTCue;\nvar regionShim = vttjs.VTTRegion;\nvar nativeVTTCue = window.VTTCue;\nvar nativeVTTRegion = window.VTTRegion;\n\nvttjs.shim = function() {\n window.VTTCue = cueShim;\n window.VTTRegion = regionShim;\n};\n\nvttjs.restore = function() {\n window.VTTCue = nativeVTTCue;\n window.VTTRegion = nativeVTTRegion;\n};\n\nif (!window.VTTCue) {\n vttjs.shim();\n}\n","module.exports = function isPrimitive(value) {\n\treturn value === null || (typeof value !== 'function' && typeof value !== 'object');\n};\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","'use strict';\n\nvar bind = require('function-bind');\nvar ES = require('es-abstract/es5');\nvar replace = bind.call(Function.call, String.prototype.replace);\n\nvar leftWhitespace = /^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+/;\nvar rightWhitespace = /[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+$/;\n\nmodule.exports = function trim() {\n\tvar S = ES.ToString(ES.CheckObjectCoercible(this));\n\treturn replace(replace(S, leftWhitespace, ''), rightWhitespace, '');\n};\n","module.exports = function sign(number) {\n\treturn number >= 0 ? 1 : -1;\n};\n","var trim = require('string.prototype.trim')\n , forEach = require('for-each')\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n forEach(\n trim(headers).split('\\n')\n , function (row) {\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n )\n\n return result\n}\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar slice = Array.prototype.slice;\nvar toStr = Object.prototype.toString;\nvar funcType = '[object Function]';\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.call(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slice.call(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n args.concat(slice.call(arguments))\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n } else {\n return target.apply(\n that,\n args.concat(slice.call(arguments))\n );\n }\n };\n\n var boundLength = Math.max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs.push('$' + i);\n }\n\n bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar scrollSetting = {\n \"\": true,\n \"up\": true\n};\n\nfunction findScrollSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var scroll = scrollSetting[value.toLowerCase()];\n return scroll ? value.toLowerCase() : false;\n}\n\nfunction isValidPercentValue(value) {\n return typeof value === \"number\" && (value >= 0 && value <= 100);\n}\n\n// VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface\nfunction VTTRegion() {\n var _width = 100;\n var _lines = 3;\n var _regionAnchorX = 0;\n var _regionAnchorY = 100;\n var _viewportAnchorX = 0;\n var _viewportAnchorY = 100;\n var _scroll = \"\";\n\n Object.defineProperties(this, {\n \"width\": {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"Width must be between 0 and 100.\");\n }\n _width = value;\n }\n },\n \"lines\": {\n enumerable: true,\n get: function() {\n return _lines;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lines must be set to a number.\");\n }\n _lines = value;\n }\n },\n \"regionAnchorY\": {\n enumerable: true,\n get: function() {\n return _regionAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorX must be between 0 and 100.\");\n }\n _regionAnchorY = value;\n }\n },\n \"regionAnchorX\": {\n enumerable: true,\n get: function() {\n return _regionAnchorX;\n },\n set: function(value) {\n if(!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorY must be between 0 and 100.\");\n }\n _regionAnchorX = value;\n }\n },\n \"viewportAnchorY\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorY must be between 0 and 100.\");\n }\n _viewportAnchorY = value;\n }\n },\n \"viewportAnchorX\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorX;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorX must be between 0 and 100.\");\n }\n _viewportAnchorX = value;\n }\n },\n \"scroll\": {\n enumerable: true,\n get: function() {\n return _scroll;\n },\n set: function(value) {\n var setting = findScrollSetting(value);\n // Have to check for false as an empty string is a legal value.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _scroll = setting;\n }\n }\n });\n}\n\nmodule.exports = VTTRegion;\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n","'use strict';\n\nvar bind = require('function-bind');\n\nmodule.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);\n","/**\n * @license\n * Video.js 6.13.0 \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.13.0\";\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 create-logger.js\n * @module create-logger\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 */\nvar LogByTypeFactory = function LogByTypeFactory(name, log) {\n return function (type, level, args, stringify) {\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 console prefix after adding to history.\n args.unshift(name + ':');\n\n // Add a clone of the args at this point to history.\n if (history) {\n history.push([].concat(args));\n }\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\nfunction createLogger$1(name) {\n // This is the private tracking variable for logging level.\n var level = 'info';\n\n // the curried logByType bound to the specific log and history\n var logByType = void 0;\n\n /**\n * Logs plain debug messages. Similar to `console.log`.\n *\n * Due to [limitations](https://github.com/jsdoc3/jsdoc/issues/955#issuecomment-313829149)\n * of our JSDoc template, we cannot properly document this as both a function\n * and a namespace, so its function signature is documented here.\n *\n * #### Arguments\n * ##### *args\n * Mixed[]\n *\n * Any combination of values that could be passed to `console.log()`.\n *\n * #### Return Value\n *\n * `undefined`\n *\n * @namespace\n * @param {Mixed[]} args\n * One or more messages or objects that should be logged.\n */\n var log = function log() {\n var stringify = log.stringify || IE_VERSION && IE_VERSION < 11;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n logByType('log', level, args, stringify);\n };\n\n // This is the logByType helper that the logging methods below use\n logByType = LogByTypeFactory(name, log);\n\n /**\n * Create a new sublogger which chains the old name to the new name.\n *\n * For example, doing `videojs.log.createLogger('player')` and then using that logger will log the following:\n * ```js\n * mylogger('foo');\n * // > VIDEOJS: player: foo\n * ```\n *\n * @param {string} name\n * The name to add call the new logger\n * @return {Object}\n */\n log.createLogger = function (subname) {\n return createLogger$1(name + ': ' + subname);\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 */\n log.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.\n *\n * If a string matching a key from {@link module:log.levels} is provided, acts\n * as a setter.\n *\n * @param {string} [lvl]\n * Pass a valid level to set a new logging level.\n *\n * @return {string}\n * The current logging level.\n */\n log.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 */\n log.history = function () {\n return history ? [].concat(history) : [];\n };\n\n /**\n * Allows you to filter the history by the given logger name\n *\n * @param {string} fname\n * The name to filter by\n *\n * @return {Array}\n * The filtered list to return\n */\n log.history.filter = function (fname) {\n return (history || []).filter(function (historyItem) {\n // if the first item in each historyItem includes `fname`, then it's a match\n return new RegExp('.*' + fname + '.*').test(historyItem[0]);\n });\n };\n\n /**\n * Clears the internal history tracking, but does not prevent further history\n * tracking.\n */\n log.history.clear = function () {\n if (history) {\n history.length = 0;\n }\n };\n\n /**\n * Disable history tracking if it is currently enabled.\n */\n log.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 */\n log.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 */\n log.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', level, 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 */\n log.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', level, 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 */\n log.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', level, args);\n };\n\n return log;\n}\n\n/**\n * @file log.js\n * @module log\n */\nvar log = createLogger$1('VIDEOJS');\nvar createLogger = log.createLogger;\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.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.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 var cancel = function cancel() {\n context.clearTimeout(timeout);\n timeout = null;\n };\n\n /* eslint-disable consistent-this */\n var debounced = function debounced() {\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 debounced.cancel = cancel;\n\n return debounced;\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.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 computed width or the height of the component's element.\n *\n * Uses `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 computed width and height values of the\n * component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {Component~DimensionObject}\n * The computed dimensions of the component's 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 computed width of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {number}\n * The computed width of the component's element.\n */\n\n\n Component.prototype.currentWidth = function currentWidth() {\n return this.currentDimension('width');\n };\n\n /**\n * Get the computed height of the component's element.\n *\n * Uses `window.getComputedStyle`.\n *\n * @return {number}\n * The computed height of the component's element.\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.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.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.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 !== 'disabled') {\n\n this.tech_.ready(function () {\n _this2.tech_.on('timeupdate', timeupdateHandler);\n }, true);\n } else {\n this.tech_.off('timeupdate', timeupdateHandler);\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.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'