{"version":3,"sources":["webpack:///./node_modules/video.js/dist/video.cjs.js","webpack:///./node_modules/video.js/dist/video-js.css","webpack:///./node_modules/video.js/dist/font/VideoJS.eot","webpack:///./node_modules/video.js/dist/video-js.css?0145"],"names":["_interopDefault","ex","match","window","document","tsml","safeParseTuple","xhr","vtt","USER_AGENT","navigator","userAgent","webkitVersionMap","exec","appleWebkitVersion","parseFloat","pop","IS_IPAD","test","IS_IPHONE","IS_IPOD","IS_IOS","IOS_VERSION","IS_ANDROID","ANDROID_VERSION","major","minor","IS_OLD_ANDROID","IS_NATIVE_ANDROID","IS_FIREFOX","IS_EDGE","IS_CHROME","CHROME_VERSION","IS_IE8","IE_VERSION","result","version","IS_SAFARI","IS_ANY_SAFARI","TOUCH_ENABLED","isReal","maxTouchPoints","DocumentTouch","BACKGROUND_SIZE_SUPPORTED","createElement","style","browser","Object","freeze","_typeof","Symbol","iterator","obj","constructor","prototype","classCallCheck","instance","Constructor","TypeError","inherits","subClass","superClass","create","value","enumerable","writable","configurable","setPrototypeOf","__proto__","possibleConstructorReturn","self","call","ReferenceError","taggedTemplateLiteralLoose","strings","raw","toString","keys","object","isObject","each","fn","forEach","key","assign","target","_len","arguments","length","sources","Array","_key","apply","concat","source","isPlain","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","undefined","properties","attributes","content","getOwnPropertyNames","propName","val","indexOf","setAttribute","textContent","attrName","appendContent","text","innerText","prependTo","child","firstChild","insertBefore","appendChild","hasClass","element","classToCheck","classList","contains","className","addClass","classToAdd","add","trim","removeClass","classToRemove","remove","split","c","toggleClass","classToToggle","predicate","has","setAttributes","attrValue","removeAttribute","getAttributes","tag","knownBooleans","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","EventTarget","allowedEvents_","ael","dispatchEvent","isEvented","eventBusEl_","every","isValidEventType","validateTarget","nodeName","validateEventType","validateListener","listener","normalizeListenArgs","isTargetingSelf","shift","listen","EventedMixin","_this","_normalizeListenArgs","removeListenerOnDispose","removeRemoverOnTargetDispose","_this2","_normalizeListenArgs2","wrapper","largs","targetOrType","typeOrListener","evented","eventBusKey","StatefulMixin","state","setState","stateUpdates","changes","from","to","stateful","defaultState","handleStateChanged","toTitleCase","string","charAt","mergeOptions","Component","ready","play","player_","options_","id_","name_","el_","children_","childIndex_","childNameIndex_","initChildren","reportTouchActivity","enableTouchActivity","dispose","localize","tokens","defaultValue","code","language","languages","primaryCode","primaryLang","localizedString","replace","index","ret","contentEl","contentEl_","children","getChildById","getChild","addChild","component","componentName","componentClassName","componentClass","ComponentClass","getComponent","childNodes","refNode","childFound","compEl","parentOptions","workingChildren","Tech","some","wchild","isTech","playerOptions","newChild","buildCSSClass","sync","isReady_","readyQueue_","triggerReady","readyQueue","show","hide","lockShowing","unlockShowing","num","skipListeners","dimension","dimensions","widthOrHeight","pxIndex","parseInt","currentDimension","computedWidthOrHeight","getPropertyValue","rule","currentDimensions","currentWidth","currentHeight","blur","emitTapEvents","touchStart","firstTouch","couldBeTap","touches","xdiff","ydiff","sqrt","noTap","reportUserActivity","report","touchHolding","clearInterval","setInterval","touchEnd","timeout","timeoutId","disposeFn","clearTimeout","interval","_this3","intervalId","requestAnimationFrame","_this4","supportsRaf_","cancelAnimationFrame","registerComponent","ComponentToRegister","isComp","isPrototypeOf","reason","components_","Player","players","playerNames","pname","Boolean","getRange","fnName","valueIndex","ranges","rangeIndex","maxIndex","rangeCheck","createTimeRangesObj","start","end","createTimeRanges","bufferedPercent","buffered","duration","bufferedDuration","FullscreenApi","apiMap","specApi","browserApi","MediaError","message","defaultMessages","status","errorTypes","1","2","3","4","5","errNum","isPromise","then","silencePromise","trackToJson_","track","reduce","acc","cues","cue","startTime","endTime","textTrackConverter","tech","trackEls","trackObjs","trackEl","json","src","textTracks","addedTrack","addRemoteTextTrack","addCue","ModalDialog","_Component","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","MODAL_CLASS_NAME","role","descEl_","description","tabIndex","label","previouslyActiveEl_","handleKeyPress","close","desc","open","fillAlways","fill","wasPlaying_","paused","pauseOnOpen","pause","hadControls_","controls","conditionalFocus_","opened","conditionalBlur_","temporary","closeable_","temp","controlText","fillWith","parentEl","nextSiblingEl","nextSibling","empty","closeButton","content_","activeEl","activeElement","playerEl","handleKeyDown","focusableEls","focusableEls_","focusIndex","shiftKey","allChildren","querySelectorAll","HTMLAnchorElement","HTMLAreaElement","hasAttribute","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLButtonElement","HTMLIFrameElement","HTMLObjectElement","HTMLEmbedElement","TrackList","_EventTarget","tracks","list","tracks_","addTrack","removeTrack","rtrack","l","getTrackById","change","addtrack","removetrack","disableOthers","enabled","AudioTrackList","_TrackList","_prop","changing_","disableOthers$1","selected","VideoTrackList","set","TextTrackList","kind","HtmlTrackElementList","trackElements","trackElements_","addTrackElement_","trackElement","getTrackElementByTrack_","trackElement_","removeTrackElement_","TextTrackCueList","setCues_","length_","oldLength","cues_","defineProp","getCueById","VideoTrackKind","alternative","captions","main","sign","subtitles","commentary","AudioTrackKind","TextTrackKind","descriptions","chapters","metadata","TextTrackMode","hidden","showing","Track","trackProps","_loop","parseUrl","url","props","href","addToBody","host","protocol","div","innerHTML","details","location","getAbsoluteURL","getFileExtension","path","pathParts","toLowerCase","isCrossOrigin","winLoc","urlInfo","Url","parseCues","srcContent","parser","WebVTT","Parser","vttjs","StringDecoder","errors","oncue","onparsingerror","onflush","parse","groupCollapsed","groupEnd","flush","loadTrack","uri","crossOrigin","cors","err","response","responseBody","loaded_","tech_","loadHandler","TextTrack","_Track","settings","srclang","mode","default_","tt","activeCues_","activeCues","changed","timeupdateHandler","newMode","ct","currentTime","active","originalCue","VTTCue","originalCue_","removeCue","_removeCue","cuechange","AudioTrack","newEnabled","VideoTrack","newSelected","HTMLTrackElement","load","NONE","LOADING","LOADED","ERROR","NORMAL","audio","ListClass","TrackClass","capitalName","video","getterName","privateName","REMOTE","remoteText","remoteTextEl","ALL","names","hasStarted_","featuresProgressEvents","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","featuresNativeTextTracks","emulateTextTracks","autoRemoteTextTracks_","initTrackListeners","nativeControlsForTouch","triggerSourceset","onDurationChange","manualProgress","trackProgress","manualProgressOff","stopTrackingProgress","progressInterval","numBufferedPercent","bufferedPercent_","duration_","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","manualTimeUpdatesOff","currentTimeInterval","manuallyTriggered","clearTracks","removeRemoteTextTrack","cleanupAutoTextTracks","reset","error_","played","setCurrentTime","trackListChanges","addWebVttScript_","_this5","script","onload","onerror","_this6","remoteTracks","remoteTextTracks","handleAddTrack","handleRemoveTrack","updateDisplay","textTracksChanges","addTextTrack","createTrackHelper","createRemoteTextTrack","_this7","manualCleanup","htmlTrackElement","remoteTextTrackEls","getVideoPlaybackQuality","setPoster","playsinline","setPlaysinline","canPlayType","canPlaySource","srcObj","registerTech","techs_","defaultTechOrder_","getTech","videojs","featuresVolumeControl","featuresMuteControl","featuresFullscreenResize","featuresPlaybackRate","featuresSourceset","withSourceHandlers","_Tech","registerSourceHandler","handler","sourceHandlers","can","selectSourceHandler","canHandleSource","sh","originalFn","sourceHandler_","setSource","nativeSourceHandler","disposeSourceHandler","currentSource_","handleSource","middlewares","middlewareInstances","TERMINATOR","next","setSourceHelper","middleware","lastRun","mwFactory","mwrest","mw","getOrCreateFactory","_src","mediate","arg","callMethod","middlewareValue","middlewareIterator","terminated","executeRight","allowedGetters","seekable","allowedSetters","allowedMediators","mws","_mws$i","mwf","mwi","MimetypesKind","opus","ogv","mp4","mov","m4v","mkv","mp3","aac","oga","m3u8","getMimetype","ext","mimetype","findMimetype","cache_","matchingSources","s","fixSource","MediaLoader","j","techOrder","techName","isSupported","loadTech_","ClickableComponent","tabIndex_","createControlTextEl","controlTextEl_","controlText_","localizedText","nonIconControl","enabled_","handleClick","handleFocus","handleBlur","PosterImage","_ClickableComponent","update","fallbackImg_","poster","setSrc","backgroundImage","fontMap","monospace","sansSerif","serif","monospaceSansSerif","monospaceSerif","proportionalSansSerif","proportionalSerif","casual","smallcaps","constructColor","color","opacity","hex","tryUpdateStyle","TextTrackDisplay","updateDisplayHandler","toggleDisplay","preselectTrack","modes","trackList","userPref","selectedLanguage","firstDesc","firstCaptions","preferredTrack","clearDisplay","processCues","descriptionsTrack","captionsSubtitlesTrack","updateForTrack","textTrackSettings","overrides","getValues","cueDiv","displayState","textOpacity","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","bottom","fontFamily","fontVariant","LoadingSpinner","isAudio","playerType","dir","Button","BigPlayButton","_Button","mouseused_","handleMouseDown","playPromise","cb","playToggle","playFocus","CloseButton","PlayToggle","handlePlay","handlePause","handleEnded","handleSeeked","defaultImplementation","seconds","guide","floor","h","gm","gh","isNaN","Infinity","implementation","formatTime","TimeDisplay","throttledUpdateContent","updateContent","plainName","labelText_","updateTextNode_","textNode_","formattedTime_","formatTime_","time","updateFormattedTime_","formattedTime","CurrentTimeDisplay","_TimeDisplay","scrubbing","getCache","DurationDisplay","TimeDivider","RemainingTimeDisplay","remainingTimeDisplay","remainingTime","LiveDisplay","updateShowing","Slider","bar","barName","vertical","playerEvent","handleMouseMove","handleMouseUp","progress","getPercent","percentage","toFixed","calculateDistance","stepBack","stepForward","bool","vertical_","LoadProgressBar","partEls_","bufferedEnd","percentify","percent","part","TimeTooltip","seekBarRect","seekBarPoint","tooltipRect","playerRect","seekBarPointPx","spaceLeftOfPoint","spaceRightOfPoint","right","pullTooltipBy","PlayProgressBar","rafId_","timeTooltip","MouseTimeDisplay","SeekBar","_Slider","setEventHandlers_","updateInterval","update_","getCurrentTime_","videoWasPlaying","newTime","mouseTimeDisplay","handleAction","ProgressControl","throttledHandleMouseSeek","handleMouseSeek","seekBar","seekBarEl","FullscreenToggle","handleFullscreenChange","fullscreenEnabled","isFullscreen","exitFullscreen","requestFullscreen","checkVolumeSupport","VolumeLevel","VolumeBar","updateLastVolume_","updateARIAAttributes","checkMuted","volume","muted","ariaValue","volumeAsPercentage_","volumeBeforeDrag","lastVolume_","VolumeControl","volumeBar","throttledHandleMouseMove","orientationClass","MuteToggle","checkMuteSupport","vol","lastVolume","volumeToSet","updateIcon_","updateControlText_","VolumePanel","inline","volumeControl","volumePanelState_","sliderActive_","sliderInactive_","muteToggle","Menu","menuButton_","menuButton","focusedChild_","addItem","unpressButton","contentElType","append","stepChild","item","haveTitle","MenuButton","buttonClass","handleSubmenuKeyPress","menu","createMenu","buttonPressed_","items","hideThreshold_","title","createItems","buildWrapperCSSClass","menuButtonClass","pressButton","TrackButton","_MenuButton","updateHandler","MenuItem","selectable","isSelected_","multiSelectable","_selected","TextTrackMenuItem","_MenuItem","changeHandler","handleTracksChange","selectedLanguageChangeHandler","handleSelectedLanguageChange","onchange","Event","createEvent","initEvent","kinds","shouldBeSelected","OffTextTrackMenuItem","_TextTrackMenuItem","allHidden","TextTrackButton","_TrackButton","TrackMenuItem","label_","kinds_","kind_","ChaptersTrackMenuItem","ChaptersButton","_TextTrackButton","track_","setTrack","findChaptersTrack","updateHandler_","remoteTextTrackEl","_remoteTextTrackEl","getMenuCaption","mi","DescriptionsButton","SubtitlesButton","CaptionSettingsMenuItem","CaptionsButton","SubsCapsMenuItem","SubsCapsButton","language_","AudioTrackMenuItem","audioTracks","AudioTrackButton","PlaybackRateMenuItem","rate","playbackRate","PlaybackRateMenuButton","updateVisibility","updateLabel","labelEl_","rates","playbackRates","currentRate","newRate","playbackRateSupported","Spacer","CustomControlSpacer","_Spacer","ControlBar","ErrorDisplay","_ModalDialog","COLOR_BLACK","COLOR_BLUE","COLOR_CYAN","COLOR_GREEN","COLOR_MAGENTA","COLOR_RED","COLOR_WHITE","COLOR_YELLOW","OPACITY_OPAQUE","OPACITY_SEMI","OPACITY_TRANS","selectConfigs","v","Number","parseOptionValue","TextTrackSettings","endDialog","setDefaults","persistTextTrackSettings","saveSettings","config","restoreSettings","createElSelect_","legendId","selectLabelledbyIds","o","optionId","createElFgColor_","createElBgColor_","createElWinColor_","createElColors_","createElFont_","createElControls_","defaultsDescription","initial","accum","selectedIndex","setValues","values","setSelectedOption","localStorage","getItem","setItem","removeItem","ttDisplay","controlBar","subsCapsBtn","subsCapsButton","ccBtn","captionsButton","ResizeManager","RESIZE_OBSERVER_AVAILABLE","ResizeObserver","loadListener_","resizeObserver_","debouncedHandler_","immediate","cancel","debounced","_later","debounce","resizeHandler","observe","contentWindow","unobserve","disconnect","resizeObserver","sourcesetLoad","srcUrls","innerHTMLDescriptorPolyfill","cloneNode","dummy","docFrag","createDocumentFragment","Element","getDescriptor","priority","descriptor","getOwnPropertyDescriptor","firstSourceWatch","resetSourceWatch_","innerDescriptor","HTMLMediaElement","getInnerHTMLDescriptor","appendWrapper","appendFn","retval","srcDescriptorPolyfill","setupSourceset","resetSourceset_","srcDescriptor","getSrcDescriptor","oldSetAttribute","oldLoad","currentSrc","_templateObject$2","Html5","crossoriginTracks","initNetworkState_","handleLateInit_","enableSourceset","setupSourcesetHandling_","hasChildNodes","nodes","nodesLength","removeNodes","proxyNativeTracks_","restoreMetadataTracksInIOSNativePlayer_","setControls","proxyWebkitFullscreen_","disposeMediaElement","metadataTracksPreFullscreenState","takeMetadataTrackSnapshot","storedMode","restoreTrackMode","storedTrack","elTracks","techTracks","listeners","currentTarget","removeOldTracks","removeTracks","found","eventName","playerElIngest","movingMediaElementInDOM","clone","techId","playerId","preload","settingsAttrs","attr","networkState","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","checkProgress","NaN","endFn","beginFn","webkitPresentationMode","supportsFullScreen","webkitEnterFullScreen","enterFullScreen","HAVE_METADATA","exitFullScreen","webkitExitFullScreen","resetMediaElement","videoPlaybackQuality","webkitDroppedFrameCount","webkitDecodedFrameCount","droppedVideoFrames","totalVideoFrames","performance","creationTime","timing","navigationStart","TEST_VID","canControlVolume","canMuteVolume","canControlPlaybackRate","canOverrideAttributes","noop","supportsNativeTextTracks","supportsNativeVideoTracks","videoTracks","supportsNativeAudioTracks","featuresNativeVideoTracks","featuresNativeAudioTracks","mpegurlRE","mp4RE","patchCanPlayType","unpatchCanPlayType","r","_templateObject$1","TECH_EVENTS_RETRIGGER","TECH_EVENTS_QUEUE","canplay","canplaythrough","playing","seeked","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_","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_","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","_this9","techs","_ref","findFirstPassingTechSourcePair","outerArray","innerArray","tester","outerChoice","innerChoice","finder","_ref2","sourceOrder","b","_this10","filterSource","newsrc","srcobj","middlewareSource","src_","notSupportedMessage","setTech","str1","str2","_this11","sourceTech","currentSources","currentType","techAutoplay","newPoster","usingNativeControls_","errorDisplay","userActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","inactivityTimeout","isAudio_","_ref3","_ref3$track","toJSON","createModal","_this12","modal","updateCurrentBreakpoint_","currentBreakpoint","candidateBreakpoint","breakpoints_","breakpoint_","removeCurrentBreakpoint_","currentBreakpointClass","_breakpoints","responsive_","baseOptions","tagOptions","dataSetup","_safeParseTuple","childName","html5","flash","userLanguage","pluginStorage","pluginExists","getPlugin","markPluginAsActive","triggerSetupEvent","before","createPluginFactory","PluginSubClass","plugin","Function","getEventHash","Plugin","VERSION","isBasic","p","registerPlugin","basicPluginWrapper","createBasicPlugin","deregisterPlugin","getPlugins","getPluginVersion","BASE_PLUGIN_NAME","usingPlugin","hasPlugin","_inherits","super_","HTMLVideoElement","normalizeId","getPlayer","hooks","hookFunction","PlayerComponent","hooks_","hook","hookOnce","original","removeHook","getPlayers","nId","_tag","_player","getAllPlayers","comp","use","writeable","extend","subClassMethods","methods","addLanguage","_mergeOptions","createTimeRange","setFormatTime","customImplementation","resetFormatTime","dom","module","exports","___CSS_LOADER_API_IMPORT___","___CSS_LOADER_GET_URL_IMPORT___","___CSS_LOADER_URL_IMPORT_0___","___CSS_LOADER_URL_REPLACEMENT_0___","locals","default"],"mappings":"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","file":"js/npm.video.js.2ac5f94a.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'