{"version":3,"sources":["webpack:///./node_modules/video.js/dist/video.cjs.js"],"names":["_interopDefault","ex","window","r","document","tsml","safeParseTuple","xhr","vtt","version","USER_AGENT","navigator","userAgent","webkitVersionMap","exec","appleWebkitVersion","parseFloat","pop","IS_IPAD","test","IS_IPHONE","IS_IPOD","IS_IOS","IOS_VERSION","match","IS_ANDROID","ANDROID_VERSION","major","minor","IS_OLD_ANDROID","IS_NATIVE_ANDROID","IS_FIREFOX","IS_EDGE","IS_CHROME","CHROME_VERSION","IS_IE8","IE_VERSION","result","IS_SAFARI","IS_ANY_SAFARI","TOUCH_ENABLED","isReal","maxTouchPoints","DocumentTouch","BACKGROUND_SIZE_SUPPORTED","createElement","style","browser","Object","freeze","_typeof","Symbol","iterator","obj","constructor","prototype","classCallCheck","instance","Constructor","TypeError","inherits","subClass","superClass","create","value","enumerable","writable","configurable","setPrototypeOf","__proto__","possibleConstructorReturn","self","call","ReferenceError","taggedTemplateLiteralLoose","strings","raw","toString","keys","object","isObject","each","fn","forEach","key","assign","target","_len","arguments","length","sources","Array","_key","apply","concat","source","isPlain","history","log","createLogger$1","name","level","logByType","stringify","args","type","lvl","levels","lvlRegExp","RegExp","unshift","toUpperCase","push","console","info","map","a","isArray","JSON","x","String","join","LogByTypeFactory","createLogger","subname","all","off","debug","warn","error","DEFAULT","hasOwnProperty","Error","filter","fname","historyItem","clear","disable","enable","_len2","_key2","_len3","_key3","_len4","_key4","computedStyle","el","prop","getComputedStyle","cs","currentStyle","_templateObject","isNonBlankString","str","throwIfWhitespace","isEl","nodeType","isInFrame","parent","createQuerier","method","selector","context","querySelector","ctx","createEl","tagName","properties","attributes","content","getOwnPropertyNames","propName","val","indexOf","setAttribute","textContent","attrName","appendContent","text","innerText","prependTo","child","firstChild","insertBefore","appendChild","hasClass","element","classToCheck","classList","contains","className","classRegExp","addClass","classToAdd","add","trim","removeClass","classToRemove","remove","split","c","toggleClass","classToToggle","predicate","has","setAttributes","attrValue","removeAttribute","getAttributes","tag","attrs","i","attrVal","getAttribute","attribute","blockTextSelection","body","focus","onselectstart","unblockTextSelection","getBoundingClientRect","parentNode","rect","k","height","width","findPosition","box","left","top","docEl","documentElement","clientLeft","scrollLeft","pageXOffset","clientTop","scrollTop","pageYOffset","Math","round","getPointerPosition","event","position","boxW","offsetWidth","boxH","offsetHeight","boxY","boxX","pageY","pageX","changedTouches","y","max","min","isTextNode","emptyEl","removeChild","normalizeContent","createTextNode","node","insertContent","isSingleLeftClick","button","buttons","$","$$","Dom","_guid","newGUID","elData","elIdAttr","Date","getTime","getData","id","hasData","removeData","e","_cleanUpEvents","elem","data","handlers","removeEventListener","dispatcher","detachEvent","disabled","_handleMultipleEvents","types","callback","fixEvent","returnTrue","returnFalse","isPropagationStopped","old","preventDefault","srcElement","relatedTarget","fromElement","toElement","returnValue","defaultPrevented","stopPropagation","cancelBubble","stopImmediatePropagation","isImmediatePropagationStopped","clientX","doc","clientY","which","charCode","keyCode","_supportsPassive","opts","defineProperty","get","addEventListener","passiveEvents","on","guid","hash","handlersCopy","slice","m","n","options","passive","attachEvent","removeType","t","splice","trigger","elemData","ownerDocument","bubbles","targetData","one","func","this","Events","_windowLoaded","videojs$2","autoSetup","vids","getElementsByTagName","audios","divs","mediaEls","_i","_e","_i2","_e2","_i3","_e3","mediaEl","autoSetupTimeout","player","wait","vjs","setTimeout","readyState","createStyleElement","setTextContent","styleSheet","cssText","bind","uid","bound","throttle","last","now","throttled","EventTarget","allowedEvents_","ael","dispatchEvent","isEvented","eventBusEl_","every","isValidEventType","validateTarget","nodeName","validateEventType","validateListener","listener","normalizeListenArgs","isTargetingSelf","shift","listen","EventedMixin","_this","_normalizeListenArgs","removeListenerOnDispose","removeRemoverOnTargetDispose","_this2","_normalizeListenArgs2","wrapper","largs","targetOrType","typeOrListener","evented","eventBusKey","StatefulMixin","state","setState","stateUpdates","changes","from","to","stateful","defaultState","handleStateChanged","toTitleCase","string","charAt","mergeOptions","Component","ready","play","player_","options_","id_","name_","el_","children_","childIndex_","childNameIndex_","initChildren","reportTouchActivity","enableTouchActivity","dispose","localize","tokens","defaultValue","code","language","languages","primaryCode","primaryLang","localizedString","replace","index","ret","contentEl","contentEl_","children","getChildById","getChild","addChild","component","componentName","componentClassName","componentClass","ComponentClass","getComponent","refNode","childFound","compEl","parentOptions","workingChildren","Tech","some","wchild","isTech","playerOptions","newChild","handleAdd","buildCSSClass","sync","isReady_","readyQueue_","triggerReady","readyQueue","show","hide","lockShowing","unlockShowing","num","skipListeners","dimension","dimensions","widthOrHeight","pxIndex","parseInt","currentDimension","computedWidthOrHeight","getPropertyValue","rule","currentDimensions","currentWidth","currentHeight","blur","emitTapEvents","touchStart","firstTouch","couldBeTap","touches","xdiff","ydiff","sqrt","noTap","touchTime","reportUserActivity","report","touchHolding","clearInterval","setInterval","touchEnd","timeout","timeoutId","disposeFn","clearTimeout","interval","_this3","intervalId","requestAnimationFrame","_this4","supportsRaf_","cancelAnimationFrame","registerComponent","ComponentToRegister","isComp","isPrototypeOf","components_","Player","players","playerNames","pname","Boolean","getRange","fnName","valueIndex","ranges","rangeIndex","maxIndex","rangeCheck","createTimeRangesObj","start","end","createTimeRanges","bufferedPercent","buffered","duration","bufferedDuration","FullscreenApi","apiMap","specApi","browserApi","MediaError","message","defaultMessages","status","errorTypes","1","2","3","4","5","errNum","isPromise","then","silencePromise","trackToJson_","track","reduce","acc","cues","cue","startTime","endTime","textTrackConverter","tech","trackEls","trackObjs","tracks","trackEl","json","src","textTracks","addedTrack","addRemoteTextTrack","addCue","MODAL_CLASS_NAME","ModalDialog","_Component","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","role","descEl_","description","tabIndex","label","previouslyActiveEl_","handleKeyPress","close","desc","open","fillAlways","fill","wasPlaying_","paused","pauseOnOpen","pause","hadControls_","controls","conditionalFocus_","opened","conditionalBlur_","temporary","closeable_","temp","controlText","fillWith","parentEl","nextSiblingEl","nextSibling","empty","closeButton","content_","activeEl","activeElement","playerEl","handleKeyDown","focusableEls","focusableEls_","focusIndex","shiftKey","allChildren","querySelectorAll","HTMLAnchorElement","HTMLAreaElement","hasAttribute","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLButtonElement","HTMLIFrameElement","HTMLObjectElement","HTMLEmbedElement","TrackList","_EventTarget","list","tracks_","addTrack","_ret","removeTrack","rtrack","l","getTrackById","change","addtrack","removetrack","disableOthers","enabled","AudioTrackList","_TrackList","_prop","changing_","disableOthers$1","selected","VideoTrackList","set","TextTrackList","kind","HtmlTrackElementList","trackElements","trackElements_","addTrackElement_","trackElement","getTrackElementByTrack_","trackElement_","removeTrackElement_","TextTrackCueList","setCues_","length_","oldLength","cues_","defineProp","getCueById","VideoTrackKind","alternative","captions","main","sign","subtitles","commentary","AudioTrackKind","TextTrackKind","descriptions","chapters","metadata","TextTrackMode","hidden","showing","Track","trackProps","_loop","parseUrl","url","props","href","addToBody","host","protocol","div","innerHTML","details","location","getAbsoluteURL","getFileExtension","path","pathParts","toLowerCase","isCrossOrigin","winLoc","urlInfo","crossOrigin","Url","parseCues","srcContent","parser","WebVTT","Parser","vttjs","StringDecoder","errors","oncue","onparsingerror","onflush","parse","groupCollapsed","groupEnd","flush","loadTrack","uri","cors","err","response","responseBody","loaded_","tech_","loadHandler","TextTrack","_Track","settings","srclang","mode","default_","tt","activeCues_","activeCues","changed","timeupdateHandler","newMode","ct","currentTime","active","originalCue","VTTCue","originalCue_","removeCue","_removeCue","cuechange","AudioTrack","newEnabled","VideoTrack","newSelected","HTMLTrackElement","load","NONE","LOADING","LOADED","ERROR","NORMAL","audio","ListClass","TrackClass","capitalName","video","getterName","privateName","REMOTE","remoteText","remoteTextEl","ALL","names","hasStarted_","featuresProgressEvents","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","featuresNativeTextTracks","emulateTextTracks","autoRemoteTextTracks_","initTrackListeners","nativeControlsForTouch","triggerSourceset","onDurationChange","manualProgress","trackProgress","manualProgressOff","stopTrackingProgress","progressInterval","numBufferedPercent","bufferedPercent_","duration_","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","manualTimeUpdatesOff","currentTimeInterval","manuallyTriggered","clearTracks","removeRemoteTextTrack","cleanupAutoTextTracks","reset","error_","played","setCurrentTime","trackListChanges","addWebVttScript_","_this5","script","onload","onerror","_this6","remoteTracks","remoteTextTracks","handleAddTrack","handleRemoveTrack","updateDisplay","textTracksChanges","addTextTrack","createTrackHelper","createRemoteTextTrack","_this7","manualCleanup","htmlTrackElement","remoteTextTrackEls","getVideoPlaybackQuality","setPoster","playsinline","setPlaysinline","canPlayType","canPlaySource","srcObj","registerTech","techs_","defaultTechOrder_","getTech","videojs","featuresVolumeControl","featuresMuteControl","featuresFullscreenResize","featuresPlaybackRate","featuresSourceset","withSourceHandlers","_Tech","registerSourceHandler","handler","sourceHandlers","can","selectSourceHandler","canHandleSource","sh","originalFn","sourceHandler_","setSource","nativeSourceHandler","disposeSourceHandler","currentSource_","handleSource","middlewares","middlewareInstances","TERMINATOR","next","setSourceHelper","mediate","middleware","arg","callMethod","middlewareValue","middlewareIterator","terminated","mws","mw","executeRight","allowedGetters","seekable","allowedSetters","allowedMediators","lastRun","mwFactory","mwrest","_mws$i","mwf","mwi","getOrCreateFactory","_src","MimetypesKind","opus","ogv","mp4","mov","m4v","mkv","mp3","aac","oga","m3u8","getMimetype","ext","filterSource","newsrc","srcobj","fixSource","mimetype","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","fontMap","monospace","sansSerif","serif","monospaceSansSerif","monospaceSerif","proportionalSansSerif","proportionalSerif","casual","smallcaps","constructColor","color","opacity","hex","tryUpdateStyle","TextTrackDisplay","updateDisplayHandler","toggleDisplay","preselectTrack","modes","trackList","userPref","cache_","selectedLanguage","firstDesc","firstCaptions","preferredTrack","clearDisplay","processCues","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","textTrackSettings","overrides","getValues","cueDiv","displayState","textOpacity","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","bottom","fontFamily","fontVariant","LoadingSpinner","isAudio","playerType","dir","Button","BigPlayButton","_Button","mouseused_","handleMouseDown","playPromise","cb","playToggle","playFocus","CloseButton","PlayToggle","handlePlay","handlePause","handleEnded","handleSeeked","defaultImplementation","seconds","guide","s","floor","h","gm","gh","isNaN","Infinity","implementation","formatTime","TimeDisplay","throttledUpdateContent","updateContent","plainName","labelText_","updateTextNode_","textNode_","formattedTime_","formatTime_","time","updateFormattedTime_","formattedTime","CurrentTimeDisplay","_TimeDisplay","scrubbing","getCache","DurationDisplay","TimeDivider","RemainingTimeDisplay","remainingTimeDisplay","remainingTime","LiveDisplay","updateShowing","Slider","bar","barName","vertical","playerEvent","handleMouseMove","handleMouseUp","progress","getPercent","percentage","toFixed","calculateDistance","stepBack","stepForward","bool","vertical_","LoadProgressBar","partEls_","bufferedEnd","percentify","percent","part","TimeTooltip","seekBarRect","seekBarPoint","tooltipRect","playerRect","seekBarPointPx","spaceLeftOfPoint","spaceRightOfPoint","right","pullTooltipBy","PlayProgressBar","rafId_","timeTooltip","MouseTimeDisplay","SeekBar","_Slider","setEventHandlers_","updateInterval","UPDATE_REFRESH_INTERVAL","update_","getCurrentTime_","videoWasPlaying","newTime","mouseTimeDisplay","STEP_SECONDS","handleAction","ProgressControl","throttledHandleMouseSeek","handleMouseSeek","seekBar","seekBarEl","FullscreenToggle","handleFullscreenChange","fullscreenEnabled","isFullscreen","exitFullscreen","requestFullscreen","VolumeLevel","VolumeBar","updateLastVolume_","updateARIAAttributes","checkMuted","volume","muted","ariaValue","volumeAsPercentage_","volumeBeforeDrag","lastVolume_","VolumeControl","volumeBar","checkVolumeSupport","throttledHandleMouseMove","orientationClass","MuteToggle","checkMuteSupport","vol","lastVolume","volumeToSet","updateIcon_","updateControlText_","VolumePanel","inline","volumeControl","volumePanelState_","sliderActive_","sliderInactive_","muteToggle","Menu","menuButton_","menuButton","focusedChild_","addItem","unpressButton","contentElType","append","stepChild","item","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","v","Number","parseOptionValue","TextTrackSettings","endDialog","setDefaults","persistTextTrackSettings","saveSettings","config","restoreSettings","createElSelect_","legendId","selectLabelledbyIds","o","optionId","createElFgColor_","createElBgColor_","createElWinColor_","createElColors_","createElFont_","createElControls_","defaultsDescription","initial","accum","selectedIndex","getSelectedOptionValue","setValues","values","setSelectedOption","localStorage","getItem","setItem","removeItem","ttDisplay","controlBar","subsCapsBtn","subsCapsButton","ccBtn","captionsButton","ResizeManager","RESIZE_OBSERVER_AVAILABLE","ResizeObserver","loadListener_","resizeObserver_","debouncedHandler_","immediate","debounced","_later","cancel","debounce","resizeHandler","observe","contentWindow","unobserve","disconnect","resizeObserver","sourcesetLoad","srcUrls","innerHTMLDescriptorPolyfill","cloneNode","dummy","docFrag","createDocumentFragment","childNodes","Element","getDescriptor","priority","descriptor","getOwnPropertyDescriptor","getInnerHTMLDescriptor","HTMLMediaElement","firstSourceWatch","resetSourceWatch_","innerDescriptor","appendWrapper","appendFn","retval","srcDescriptorPolyfill","getSrcDescriptor","_templateObject$2","Html5","crossoriginTracks","currentSrc","initNetworkState_","handleLateInit_","enableSourceset","setupSourcesetHandling_","hasChildNodes","nodes","nodesLength","removeNodes","proxyNativeTracks_","restoreMetadataTracksInIOSNativePlayer_","setControls","proxyWebkitFullscreen_","resetSourceset_","disposeMediaElement","srcDescriptor","oldSetAttribute","oldLoad","setupSourceset","metadataTracksPreFullscreenState","takeMetadataTrackSnapshot","storedMode","restoreTrackMode","storedTrack","elTracks","techTracks","listeners","currentTarget","removeOldTracks","removeTracks","found","eventName","playerElIngest","movingMediaElementInDOM","clone","techId","playerId","preload","settingsAttrs","attr","networkState","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","checkProgress","NaN","endFn","beginFn","webkitPresentationMode","supportsFullScreen","webkitEnterFullScreen","enterFullScreen","HAVE_METADATA","exitFullScreen","webkitExitFullScreen","resetMediaElement","videoPlaybackQuality","webkitDroppedFrameCount","webkitDecodedFrameCount","droppedVideoFrames","totalVideoFrames","performance","creationTime","timing","navigationStart","TEST_VID","canControlVolume","canMuteVolume","canControlPlaybackRate","canOverrideAttributes","noop","supportsNativeTextTracks","supportsNativeVideoTracks","videoTracks","supportsNativeAudioTracks","featuresNativeVideoTracks","featuresNativeAudioTracks","mpegurlRE","mp4RE","patchCanPlayType","unpatchCanPlayType","_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_","tagAttributes","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_","clearCacheForPlayer","divEmbed","tabindex","VIDEOJS_NO_DYNAMIC_STYLE","defaultsStyleEl","head","fill_","fluid_","fluid","aspectRatio","links","linkEl","_dimension","privDimension","updateStyleEl_","parsedVal","ratio","aspectRatio_","idClass","ratioParts","videoWidth","videoHeight","ratioMultiplier","width_","height_","_width","_height","techEl","unloadTech_","titleTechName","camelTechName","techName_","techOptions","loop","techCanOverridePoster","TechClass","handleTechReady_","textTracksJson_","eventObj","seeking","handleTechLoadStart_","handleTechSourceset_","handleTechWaiting_","handleTechEnded_","handleTechSeeking_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechPosterChange_","handleTechTextData_","handleTechRateChange_","usingNativeControls","techGet_","addTechControlsListeners_","safety","removeTechControlsListeners_","handleTechClick_","handleTechTouchStart_","handleTechTouchMove_","handleTechTouchEnd_","handleTechTap_","techCall_","hasStarted","manualAutoplay_","previouslyMuted","promise","updateSourceCaches_","matchingSources","findMimetype","sourceElSources","sourceEls","matchingSourceEls","sourceObj","updateSourceCaches","playerSrc","currentSource","eventSrc","lastSource_","updateCache","techSrc","techGet","request","queued","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechSeeked_","starttime","userWasActive","set$1","reduceRight","get$1","PromiseClass","Promise","resolve","play_","_this8","isScrubbing","percentAsDecimal","_muted","defaultMuted","_defaultMuted","isFS","isFullscreen_","fsApi","fullscreenchange","documentFullscreenChange","fullscreenElement","enterFullWindow","exitFullWindow","isFullWindow","docOrigOverflow","overflow","fullWindowOnEscKey","selectSource","foundSourceAndTech","_this9","techs","_ref","findFirstPassingTechSourcePair","outerArray","innerArray","tester","outerChoice","innerChoice","finder","_ref2","sourceOrder","b","flip","_this10","middlewareSource","src_","notSupportedMessage","setTech","_this11","sourceTech","str1","str2","titleCaseEquals","currentSources","currentType","techAutoplay","newPoster","usingNativeControls_","errorDisplay","userActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","inactivityTimeout","isAudio_","_ref3$track","toJSON","createModal","_this12","modal","updateCurrentBreakpoint_","currentBreakpoint","candidateBreakpoint","breakpoints_","breakpoint_","removeCurrentBreakpoint_","currentBreakpointClass","_breakpoints","responsive_","baseOptions","tagOptions","dataSetup","_safeParseTuple","childName","html5","flash","userLanguage","BASE_PLUGIN_NAME","PLUGIN_CACHE_KEY","pluginStorage","pluginExists","getPlugin","undefined","markPluginAsActive","triggerSetupEvent","before","createPluginFactory","PluginSubClass","plugin","Function","getEventHash","Plugin","VERSION","isBasic","p","registerPlugin","basicPluginWrapper","createBasicPlugin","deregisterPlugin","getPlugins","getPluginVersion","usingPlugin","hasPlugin","HTMLVideoElement","normalizeId","getPlayer","hooks","hookFunction","PlayerComponent","hooks_","hook","hookOnce","original","removeHook","getPlayers","nId","_tag","_player","getAllPlayers","comp","use","writeable","extend","subClassMethods","methods","super_","_inherits","addLanguage","_mergeOptions","createTimeRange","setFormatTime","customImplementation","resetFormatTime","dom","module","exports"],"mappings":"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","file":"js/chunk-vendors~3d531ef3.498bcbe6.js","sourcesContent":["/**\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'