{
"version": 3,
"sources": [
"node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-pack/_prelude.js",
"node_modules/global/document.js",
"node_modules/global/window.js",
"node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-resolve/empty.js",
"node_modules/lodash.isplainobject/index.js",
"node_modules/lodash.isplainobject/node_modules/lodash._basefor/index.js",
"node_modules/lodash.isplainobject/node_modules/lodash.isnative/index.js",
"node_modules/lodash.isplainobject/node_modules/lodash.keysin/index.js",
"node_modules/lodash.isplainobject/node_modules/lodash.keysin/node_modules/lodash.isarguments/index.js",
"node_modules/lodash.isplainobject/node_modules/lodash.keysin/node_modules/lodash.isarray/index.js",
"node_modules/lodash.merge/index.js",
"node_modules/lodash.merge/node_modules/lodash._arraycopy/index.js",
"node_modules/lodash.merge/node_modules/lodash._arrayeach/index.js",
"node_modules/lodash.merge/node_modules/lodash._createassigner/index.js",
"node_modules/lodash.merge/node_modules/lodash._createassigner/node_modules/lodash._bindcallback/index.js",
"node_modules/lodash.merge/node_modules/lodash._createassigner/node_modules/lodash._isiterateecall/index.js",
"node_modules/lodash.merge/node_modules/lodash._createassigner/node_modules/lodash.restparam/index.js",
"node_modules/lodash.merge/node_modules/lodash.istypedarray/index.js",
"node_modules/lodash.merge/node_modules/lodash.keys/index.js",
"node_modules/lodash.merge/node_modules/lodash.toplainobject/index.js",
"node_modules/lodash.merge/node_modules/lodash.toplainobject/node_modules/lodash._basecopy/index.js",
"node_modules/object.assign/index.js",
"node_modules/object.assign/node_modules/define-properties/index.js",
"node_modules/object.assign/node_modules/define-properties/node_modules/foreach/index.js",
"node_modules/object.assign/node_modules/object-keys/index.js",
"node_modules/object.assign/node_modules/object-keys/isArguments.js",
"node_modules/safe-json-parse/tuple.js",
"big-play-button.js",
"button.js",
"component.js",
"control-bar/control-bar.js",
"control-bar/fullscreen-toggle.js",
"control-bar/live-display.js",
"control-bar/mute-toggle.js",
"control-bar/play-toggle.js",
"control-bar/playback-rate-menu/playback-rate-menu-button.js",
"control-bar/playback-rate-menu/playback-rate-menu-item.js",
"control-bar/progress-control/load-progress-bar.js",
"control-bar/progress-control/play-progress-bar.js",
"control-bar/progress-control/progress-control.js",
"control-bar/progress-control/seek-bar.js",
"control-bar/progress-control/seek-handle.js",
"control-bar/spacer-controls/custom-control-spacer.js",
"control-bar/spacer-controls/spacer.js",
"control-bar/text-track-controls/caption-settings-menu-item.js",
"control-bar/text-track-controls/captions-button.js",
"control-bar/text-track-controls/chapters-button.js",
"control-bar/text-track-controls/chapters-track-menu-item.js",
"control-bar/text-track-controls/off-text-track-menu-item.js",
"control-bar/text-track-controls/subtitles-button.js",
"control-bar/text-track-controls/text-track-button.js",
"control-bar/text-track-controls/text-track-menu-item.js",
"control-bar/time-controls/current-time-display.js",
"control-bar/time-controls/duration-display.js",
"control-bar/time-controls/remaining-time-display.js",
"control-bar/time-controls/time-divider.js",
"control-bar/volume-control/volume-bar.js",
"control-bar/volume-control/volume-control.js",
"control-bar/volume-control/volume-handle.js",
"control-bar/volume-control/volume-level.js",
"control-bar/volume-menu-button.js",
"error-display.js",
"event-emitter.js",
"extends.js",
"fullscreen-api.js",
"global-options.js",
"loading-spinner.js",
"media-error.js",
"menu/menu-button.js",
"menu/menu-item.js",
"menu/menu.js",
"player.js",
"plugins.js",
"poster-image.js",
"setup.js",
"slider/slider-handle.js",
"slider/slider.js",
"tech/flash-rtmp.js",
"tech/flash.js",
"tech/html5.js",
"tech/loader.js",
"tech/tech.js",
"tracks/text-track-cue-list.js",
"tracks/text-track-display.js",
"tracks/text-track-enums.js",
"tracks/text-track-list.js",
"tracks/text-track-settings.js",
"tracks/text-track.js",
"utils/browser.js",
"utils/buffer.js",
"utils/dom.js",
"utils/events.js",
"utils/fn.js",
"utils/format-time.js",
"utils/guid.js",
"utils/log.js",
"utils/merge-options.js",
"utils/round-float.js",
"utils/time-ranges.js",
"utils/to-title-case.js",
"utils/url.js",
"video.js",
"xhr.js"
],
"names": [],
"mappings": "AAAA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACTA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9GA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACjRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAC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",
"file": "generated.js",
"sourceRoot": "",
"sourcesContent": [
"(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o\n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseFor = require('lodash._basefor'),\n isNative = require('lodash.isnative'),\n keysIn = require('lodash.keysin');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Native method references. */\nvar getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf;\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n return baseFor(object, iteratee, keysIn);\n}\n\n/**\n * A fallback implementation of `_.isPlainObject` which checks if `value`\n * is an object created by the `Object` constructor or has a `[[Prototype]]`\n * of `null`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n */\nfunction shimIsPlainObject(value) {\n var Ctor;\n\n // Exit early for non `Object` objects.\n if (!(isObjectLike(value) && objToString.call(value) == objectTag) ||\n (!hasOwnProperty.call(value, 'constructor') &&\n (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n return false;\n }\n // IE < 9 iterates inherited properties before own properties. If the first\n // iterated property is an object's own property then there are no inherited\n // enumerable properties.\n var result;\n // In most environments an object's own properties are iterated before\n // its inherited properties. If the last iterated property is an object's\n // own property then there are no inherited enumerable properties.\n baseForIn(value, function(subValue, key) {\n result = key;\n });\n return result === undefined || hasOwnProperty.call(value, result);\n}\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nvar isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) {\n if (!(value && objToString.call(value) == objectTag)) {\n return false;\n }\n var valueOf = value.valueOf,\n objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto);\n\n return objProto\n ? (value == objProto || getPrototypeOf(value) == objProto)\n : shimIsPlainObject(value);\n};\n\nmodule.exports = isPlainObject;\n",
"/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.2 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iterator functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var iterable = toObject(object),\n props = keysFunc(object),\n length = props.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length)) {\n var key = props[index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\n/**\n * Converts `value` to an object if it is not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return type == 'function' || (!!value && type == 'object');\n}\n\nmodule.exports = baseFor;\n",
"/**\n * lodash 3.0.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/**\n * Used to match `RegExp` [special characters](http://www.regular-expressions.info/characters.html#special).\n * In addition to special characters the forward slash is escaped to allow for\n * easier `eval` use and `Function` compilation.\n */\nvar reRegExpChars = /[.*+?^${}()|[\\]\\/\\\\]/g,\n reHasRegExpChars = RegExp(reRegExpChars.source);\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Converts `value` to a string if it is not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n if (typeof value == 'string') {\n return value;\n }\n return value == null ? '' : (value + '');\n}\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n escapeRegExp(objToString)\n .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (objToString.call(value) == funcTag) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\n/**\n * Escapes the `RegExp` special characters \"\\\", \"/\", \"^\", \"$\", \".\", \"|\", \"?\",\n * \"*\", \"+\", \"(\", \")\", \"[\", \"]\", \"{\" and \"}\" in `string`.\n *\n * @static\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https:\\/\\/lodash\\.com\\/\\)'\n */\nfunction escapeRegExp(string) {\n string = baseToString(string);\n return (string && reHasRegExpChars.test(string))\n ? string.replace(reRegExpChars, '\\\\$&')\n : string;\n}\n\nmodule.exports = isNative;\n",
"/**\n * lodash 3.0.6 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar isArguments = require('lodash.isarguments'),\n isArray = require('lodash.isarray');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n var Ctor = function() { this.x = x; },\n args = arguments,\n object = { '0': x, 'length': x },\n props = [];\n\n Ctor.prototype = { 'valueOf': x, 'y': x };\n for (var key in new Ctor) { props.push(key); }\n\n /**\n * Detect if `arguments` object indexes are non-enumerable.\n *\n * In Firefox < 4, IE < 9, PhantomJS, and Safari < 5.1 `arguments` object\n * indexes are non-enumerable. Chrome < 25 and Node.js < 0.11.0 treat\n * `arguments` object indexes as non-enumerable and fail `hasOwnProperty`\n * checks for indexes that exceed the number of function parameters and\n * whose associated argument values are `0`.\n *\n * @memberOf _.support\n * @type boolean\n */\n try {\n support.nonEnumArgs = !propertyIsEnumerable.call(args, 1);\n } catch(e) {\n support.nonEnumArgs = true;\n }\n}(1, 0));\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = +value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return type == 'function' || (!!value && type == 'object');\n}\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n length = (length && isLength(length) &&\n (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n result = Array(length),\n skipIndexes = length > 0;\n\n while (++index < length) {\n result[index] = (index + '');\n }\n for (var key in object) {\n if (!(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = keysIn;\n",
"/**\n * lodash 3.0.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n return isObjectLike(value) && isArrayLike(value) && objToString.call(value) == argsTag;\n}\n\nmodule.exports = isArguments;\n",
"/**\n * lodash 3.0.2 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n funcTag = '[object Function]';\n\n/**\n * Used to match `RegExp` [special characters](http://www.regular-expressions.info/characters.html#special).\n * In addition to special characters the forward slash is escaped to allow for\n * easier `eval` use and `Function` compilation.\n */\nvar reRegExpChars = /[.*+?^${}()|[\\]\\/\\\\]/g,\n reHasRegExpChars = RegExp(reRegExpChars.source);\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/**\n * Converts `value` to a string if it is not one. An empty string is returned\n * for `null` or `undefined` values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n if (typeof value == 'string') {\n return value;\n }\n return value == null ? '' : (value + '');\n}\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n escapeRegExp(objToString)\n .replace(/toString|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (objToString.call(value) == funcTag) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && reIsHostCtor.test(value);\n}\n\n/**\n * Escapes the `RegExp` special characters \"\\\", \"/\", \"^\", \"$\", \".\", \"|\", \"?\",\n * \"*\", \"+\", \"(\", \")\", \"[\", \"]\", \"{\" and \"}\" in `string`.\n *\n * @static\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https:\\/\\/lodash\\.com\\/\\)'\n */\nfunction escapeRegExp(string) {\n string = baseToString(string);\n return (string && reHasRegExpChars.test(string))\n ? string.replace(reRegExpChars, '\\\\$&')\n : string;\n}\n\nmodule.exports = isArray;\n",
"/**\n * lodash 3.2.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar arrayCopy = require('lodash._arraycopy'),\n arrayEach = require('lodash._arrayeach'),\n createAssigner = require('lodash._createassigner'),\n isArguments = require('lodash.isarguments'),\n isArray = require('lodash.isarray'),\n isNative = require('lodash.isnative'),\n isPlainObject = require('lodash.isplainobject'),\n isTypedArray = require('lodash.istypedarray'),\n keys = require('lodash.keys'),\n keysIn = require('lodash.keysin'),\n toPlainObject = require('lodash.toplainobject');\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar arrayProto = Array.prototype;\n\n/** Native method references. */\nvar getOwnPropertySymbols = isNative(getOwnPropertySymbols = Object.getOwnPropertySymbols) && getOwnPropertySymbols,\n push = arrayProto.push;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merging properties.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n if (!isObject(object)) {\n return object;\n }\n var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source));\n if (!isSrcArr) {\n var props = keys(source);\n push.apply(props, getSymbols(source));\n }\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObjectLike(srcValue)) {\n stackA || (stackA = []);\n stackB || (stackB = []);\n baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n }\n else {\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n }\n if ((isSrcArr || result !== undefined) &&\n (isCommon || (result === result ? (result !== value) : (value === value)))) {\n object[key] = result;\n }\n }\n });\n return object;\n}\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merging properties.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n var length = stackA.length,\n srcValue = source[key];\n\n while (length--) {\n if (stackA[length] == srcValue) {\n object[key] = stackB[length];\n return;\n }\n }\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n result = isArray(value)\n ? value\n : (isArrayLike(value) ? arrayCopy(value) : []);\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n result = isArguments(value)\n ? toPlainObject(value)\n : (isPlainObject(value) ? value : {});\n }\n else {\n isCommon = false;\n }\n }\n // Add the source value to the stack of traversed objects and associate\n // it with its merged value.\n stackA.push(srcValue);\n stackB.push(result);\n\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n } else if (result === result ? (result !== value) : (value === value)) {\n object[key] = result;\n }\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Creates an array of the own symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !getOwnPropertySymbols ? constant([]) : function(object) {\n return getOwnPropertySymbols(toObject(object));\n};\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Converts `value` to an object if it is not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n return isObject(value) ? value : Object(value);\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return type == 'function' || (!!value && type == 'object');\n}\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it is invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n * 'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n * 'fruits': ['apple'],\n * 'vegetables': ['beet']\n * };\n *\n * var other = {\n * 'fruits': ['banana'],\n * 'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n * if (_.isArray(a)) {\n * return a.concat(b);\n * }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\n/**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var object = { 'user': 'fred' };\n * var getter = _.constant(object);\n *\n * getter() === object;\n * // => true\n */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nmodule.exports = merge;\n",
"/**\n * lodash 3.0.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.7.0 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n",
"/**\n * lodash 3.0.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.7.0 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands or `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n",
"/**\n * lodash 3.1.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar bindCallback = require('lodash._bindcallback'),\n isIterateeCall = require('lodash._isiterateecall'),\n restParam = require('lodash.restparam');\n\n/**\n * Creates a function that assigns properties of source object(s) to a given\n * destination object.\n *\n * **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 && sources[length - 2],\n guard = length > 2 && sources[2],\n thisArg = length > 1 && sources[length - 1];\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : null;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? null : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n",
"/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\n/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = bindCallback;\n",
"/**\n * lodash 3.0.7 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = +value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return type == 'function' || (!!value && type == 'object');\n}\n\nmodule.exports = isIterateeCall;\n",
"/**\n * lodash 3.6.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n",
"/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.2 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n",
"/**\n * lodash 3.0.7 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar isArguments = require('lodash.isarguments'),\n isArray = require('lodash.isarray'),\n isNative = require('lodash.isnative');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;\n\n/**\n * Used as the [maximum length](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n var Ctor = function() { this.x = x; },\n args = arguments,\n object = { '0': x, 'length': x },\n props = [];\n\n Ctor.prototype = { 'valueOf': x, 'y': x };\n for (var key in new Ctor) { props.push(key); }\n\n /**\n * Detect if `arguments` object indexes are non-enumerable.\n *\n * In Firefox < 4, IE < 9, PhantomJS, and Safari < 5.1 `arguments` object\n * indexes are non-enumerable. Chrome < 25 and Node.js < 0.11.0 treat\n * `arguments` object indexes as non-enumerable and fail `hasOwnProperty`\n * checks for indexes that exceed the number of function parameters and\n * whose associated argument values are `0`.\n *\n * @memberOf _.support\n * @type boolean\n */\n try {\n support.nonEnumArgs = !propertyIsEnumerable.call(args, 1);\n } catch(e) {\n support.nonEnumArgs = true;\n }\n}(1, 0));\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = +value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = length && isLength(length) &&\n (isArray(object) || (support.nonEnumArgs && isArguments(object)));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return type == 'function' || (!!value && type == 'object');\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object != null && object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object != 'function' && isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n length = (length && isLength(length) &&\n (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n isProto = typeof Ctor == 'function' && Ctor.prototype === object,\n result = Array(length),\n skipIndexes = length > 0;\n\n while (++index < length) {\n result[index] = (index + '');\n }\n for (var key in object) {\n if (!(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = keys;\n",
"/**\n * lodash 3.0.0 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.7.0 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\nvar baseCopy = require('lodash._basecopy'),\n keysIn = require('lodash.keysin');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n",
"/**\n * lodash 3.0.1 (Custom Build) \n * Build: `lodash modern modularize exports=\"npm\" -o ./`\n * Copyright 2012-2015 The Dojo Foundation \n * Based on Underscore.js 1.8.3 \n * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n * Available under MIT license \n */\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n",
"'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\nvar defineProperties = require('define-properties');\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\nvar isEnumerableOn = function (obj) {\n\treturn function isEnumerable(prop) {\n\t\treturn propIsEnumerable.call(obj, prop);\n\t};\n};\n\nvar assignShim = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = Object(target);\n\tvar s, source, i, props;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = Object(arguments[s]);\n\t\tprops = keys(source);\n\t\tif (hasSymbols && Object.getOwnPropertySymbols) {\n\t\t\tprops.push.apply(props, Object.getOwnPropertySymbols(source).filter(isEnumerableOn(source)));\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tobjTarget[props[i]] = source[props[i]];\n\t\t}\n\t}\n\treturn objTarget;\n};\n\nassignShim.shim = function shimObjectAssign() {\n\tif (Object.assign && Object.preventExtensions) {\n\t\tvar assignHasPendingExceptions = (function () {\n\t\t\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t\t\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\t\t\tvar thrower = Object.preventExtensions({ 1: 2 });\n\t\t\ttry {\n\t\t\t\tObject.assign(thrower, 'xy');\n\t\t\t} catch (e) {\n\t\t\t\treturn thrower[1] === 'y';\n\t\t\t}\n\t\t}());\n\t\tif (assignHasPendingExceptions) {\n\t\t\tdelete Object.assign;\n\t\t}\n\t}\n\tif (!Object.assign) {\n\t\tdefineProperties(Object, {\n\t\t\tassign: assignShim\n\t\t});\n\t}\n\treturn Object.assign || assignShim;\n};\n\nmodule.exports = assignShim;\n\n",
"'use strict';\n\nvar keys = require('object-keys');\nvar foreach = require('foreach');\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { value: obj });\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tvalue: value\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tforeach(keys(map), function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n",
"\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n",
"'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar ctor = object.constructor;\n\t\tvar skipConstructor = ctor && ctor.prototype === object;\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (!Object.keys) {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n",
"'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]'\n\t\t\t&& value !== null\n\t\t\t&& typeof value === 'object'\n\t\t\t&& typeof value.length === 'number'\n\t\t\t&& value.length >= 0\n\t\t\t&& toStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n",
"module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n",
"import Button from './button.js';\nimport Component from './component.js';\n\n/* Big Play Button\n================================================================================ */\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n * @param {Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nclass BigPlayButton extends Button {\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-big-play-button',\n innerHTML: '',\n 'aria-label': 'play video'\n });\n }\n\n handleClick() {\n this.player_.play();\n }\n\n}\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n",
"import Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/* Button - Base class for all buttons\n================================================================================ */\n/**\n * Base class for all buttons\n * @param {Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nclass Button extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n createEl(type, props) {\n // Add standard Aria and Tabindex info\n props = assign({\n className: this.buildCSSClass(),\n 'role': 'button',\n 'aria-live': 'polite', // let the screen reader user know that the text of the button may change\n tabIndex: 0\n }, props);\n\n let el = super.createEl(type, props);\n\n // if innerHTML hasn't been overridden (bigPlayButton), add content elements\n if (!props.innerHTML) {\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-control-content'\n });\n\n this.controlText_ = Dom.createEl('span', {\n className: 'vjs-control-text',\n innerHTML: this.localize(this.buttonText) || 'Need Text'\n });\n\n this.contentEl_.appendChild(this.controlText_);\n el.appendChild(this.contentEl_);\n }\n\n return el;\n }\n\n buildCSSClass() {\n return `vjs-control vjs-button ${super.buildCSSClass()}`;\n }\n\n // Click - Override with specific functionality for button\n handleClick() {}\n\n // Focus - Add keyboard functionality to element\n handleFocus() {\n Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n // KeyPress (document level) - Trigger click when keys are pressed\n handleKeyPress(event) {\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick();\n }\n }\n\n // Blur - Remove keyboard triggers\n handleBlur() {\n Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n}\n\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n",
"/**\n * @fileoverview Player Component - Base class for all UI objects\n *\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n *\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n *\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n *\n *
\n *
Button
\n *
\n *\n * Components are also event emitters.\n *\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n *\n * button.trigger('customevent');\n *\n * @param {Object} player Main Player\n * @param {Object=} options\n * @class\n * @constructor\n */\nclass Component {\n\n constructor(player, options, ready) {\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(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 let id = player && player.id && player.id() || 'no_player';\n\n this.id_ = `${id}_component_${Guid.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 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 // Temp for ES6 class transition, remove before 5.0\n init() {\n // console.log('init called on Component');\n Component.apply(this, arguments);\n }\n\n /**\n * Dispose of the component and all child components\n */\n dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (let 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 // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n }\n\n /**\n * Return the component's player\n *\n * @return {Player}\n */\n player() {\n return this.player_;\n }\n\n /**\n * Deep merge of options objects\n *\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n *\n * This is used for merging options for child components. We\n * want it to be easy to override individual options on a child\n * component without having to rewrite all the other default options.\n *\n * Parent.prototype.options_ = {\n * children: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * children: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n *\n * RESULT\n *\n * {\n * children: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n */\n options(obj) {\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 * var domEl = myComponent.el();\n *\n * @return {Element}\n */\n el() {\n return this.el_;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} attributes An object of element attributes that should be set on the element\n * @return {Element}\n */\n createEl(tagName, attributes) {\n return Dom.createEl(tagName, attributes);\n }\n\n localize(string) {\n let lang = this.player_.language();\n let languages = this.player_.languages();\n\n if (languages && languages[lang] && languages[lang][string]) {\n return languages[lang][string];\n }\n\n return string;\n }\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n */\n contentEl() {\n return this.contentEl_ || this.el_;\n }\n\n /**\n * Get the component's ID\n *\n * var id = myComponent.id();\n *\n * @return {String}\n */\n id() {\n return this.id_;\n }\n\n /**\n * Get the component's name. The name is often used to reference the component.\n *\n * var name = myComponent.name();\n *\n * @return {String}\n */\n name() {\n return this.name_;\n }\n\n /**\n * Get an array of all child components\n *\n * var kids = myComponent.children();\n *\n * @return {Array} The children\n */\n children() {\n return this.children_;\n }\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n */\n getChildById(id) {\n return this.childIndex_[id];\n }\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n */\n getChild(name) {\n return this.childNameIndex_[name];\n }\n\n /**\n * Adds a child component inside this component\n *\n * myComponent.el();\n * // -> \n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // ->
myButton\n * // -> myButton === myComonent.children()[0];\n *\n * Pass in options for child constructors and options for children of the child\n *\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * children: {\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * }\n * });\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @suppress {accessControls|checkRegExp|checkTypes|checkVars|const|constantProperty|deprecated|duplicate|es5Strict|fileoverviewTags|globalThis|invalidCasts|missingProperties|nonStandardJsDocs|strictModuleDepCheck|undefinedNames|undefinedVars|unknownDefines|uselessCode|visibility}\n */\n addChild(child, options={}) {\n let component;\n let componentName;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n let componentClassName = options.componentClass || toTitleCase(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 let ComponentClass = Component.getComponent(componentClassName);\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_.push(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 && 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 this.contentEl().appendChild(component.el());\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, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n */\n removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n let childFound = false;\n\n for (let 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 let 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 components from options\n *\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_.children = {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n *\n * // Or when creating the component\n * var myComp = new MyComponent(player, {\n * children: {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n * });\n *\n * The children option can also be an Array of child names or\n * child options objects (that also include a 'name' key).\n *\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * }\n * ]\n * });\n *\n */\n initChildren() {\n let children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n let parentOptions = this.options();\n let handleAdd = (name, opts) => {\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 // 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 this[name] = this.addChild(name, opts);\n };\n\n // Allow for an array of children details to passed in the options\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n let name;\n let opts;\n\n if (typeof child === 'string') {\n // ['myComponent']\n name = child;\n opts = {};\n } else {\n // [{ name: 'myComponent', otherOption: true }]\n name = child.name;\n opts = child;\n }\n\n handleAdd(name, opts);\n }\n } else {\n Object.getOwnPropertyNames(children).forEach(function(name){\n handleAdd(name, children[name]);\n });\n }\n }\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n */\n buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n\n /**\n * Add an event listener to this component's element\n *\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n *\n * The context of myFunc will be myComponent unless previously bound.\n *\n * Alternatively, you can add a listener to another element or component.\n *\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n *\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n *\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component} self\n */\n on(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n // When this component is disposed, remove the listener from the other component\n const removeOnDispose = () => this.off(target, type, fn);\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n this.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n }\n\n return this;\n }\n\n /**\n * Remove an event listener from this component's element\n *\n * myComponent.off('eventType', myFunc);\n *\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n *\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n *\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n */\n off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n const target = first;\n const type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n const fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n }\n\n /**\n * Add an event listener to be triggered only once and then removed\n *\n * myComponent.one('eventName', myFunc);\n *\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n *\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n */\n one(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n const newFunc = () => {\n this.off(target, type, newFunc);\n fn.apply(null, arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n this.on(target, type, newFunc);\n }\n\n return this;\n }\n\n /**\n * Trigger an event on an element\n *\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @return {Component} self\n */\n trigger(event) {\n Events.trigger(this.el_, event);\n return this;\n }\n\n /**\n * Bind a listener to the component's ready state\n *\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @return {Component}\n */\n ready(fn) {\n if (fn) {\n if (this.isReady_) {\n fn.call(this);\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n }\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n */\n triggerReady() {\n this.isReady_ = true;\n\n let readyQueue = this.readyQueue_;\n\n if (readyQueue && readyQueue.length > 0) {\n\n for (let i = 0; i < readyQueue.length; i++) {\n readyQueue[i].call(this);\n }\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n\n // Allow for using event listeners also, in case you want to do something everytime a source is ready.\n this.trigger('ready');\n }\n }\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n */\n hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n }\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n */\n addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n }\n\n /**\n * Remove a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n */\n removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n }\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n */\n show() {\n this.removeClass('vjs-hidden');\n return this;\n }\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n */\n hide() {\n this.addClass('vjs-hidden');\n return this;\n }\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n */\n lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n */\n unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Set or get the width of the component (CSS values)\n *\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n */\n width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n\n /**\n * Get or set the height of the component (CSS values)\n *\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n */\n height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width\n * @param {Number|String} height\n * @return {Component} The component\n */\n dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n }\n\n /**\n * Get or set width or height\n *\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n *\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n */\n 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 this.trigger('resize');\n }\n\n // Return component\n return this;\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 let val = this.el_.style[widthOrHeight];\n let 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 * Emit 'tap' events when touch events are supported\n *\n * This is used to support toggling the controls through a tap on the video.\n *\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n * @private\n */\n emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n let touchStart = 0;\n let 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, so 10 seems like a nice, round number.\n const tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n const touchTimeThreshold = 200;\n\n let couldBeTap;\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 the touches object to prevent modifying the original\n firstTouch = assign({}, event.touches[0]);\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 const xdiff = event.touches[0].pageX - firstTouch.pageX;\n const ydiff = event.touches[0].pageY - firstTouch.pageY;\n const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n const noTap = function() {\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 const 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 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 * Report user touch activity when touch events occur\n *\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n *\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n *\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n *\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n */\n 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 const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n let touchHolding;\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 const touchEnd = function(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 * Creates timeout and sets up disposal automatically.\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n */\n setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n let timeoutId = window.setTimeout(fn, timeout);\n\n const disposeFn = function() {\n this.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 and removes the associated dispose listener\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n */\n clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Creates an interval and sets up disposal automatically.\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n */\n setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n let intervalId = window.setInterval(fn, interval);\n\n const disposeFn = function() {\n this.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 and removes the associated dispose listener\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n */\n clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n }\n\n static registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n }\n\n static getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (window && window.videojs && window.videojs[name]) {\n log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n return window.videojs[name];\n }\n }\n\n static extend(props) {\n props = props || {};\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n let subObj = function() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n // Make a function for creating instances\n // subObj.create = CoreObject.create;\n\n // Extend subObj's prototype with functions and other properties from props\n for (let name in props) {\n if (props.hasOwnProperty(name)) {\n subObj.prototype[name] = props[name];\n }\n }\n\n return subObj;\n }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n",
"import Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n * @param {Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n * @extends Component\n */\nclass ControlBar extends Component {\n createEl() {\n return super.createEl('div', {\n className: 'vjs-control-bar'\n });\n }\n}\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: [\n 'playToggle',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'liveDisplay',\n 'remainingTimeDisplay',\n 'customControlSpacer',\n 'playbackRateMenuButton',\n 'muteToggle',\n 'volumeControl',\n 'chaptersButton',\n 'subtitlesButton',\n 'captionsButton',\n 'volumeMenuButton',\n 'fullscreenToggle'\n ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n",
"import Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n * @param {Player|Object} player\n * @param {Object=} options\n * @class\n * @extends vjs.Button\n */\nclass FullscreenToggle extends Button {\n\n buildCSSClass() {\n return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n }\n\n handleClick() {\n if (!this.player_.isFullscreen()) {\n this.player_.requestFullscreen();\n this.controlText_.innerHTML = this.localize('Non-Fullscreen');\n } else {\n this.player_.exitFullscreen();\n this.controlText_.innerHTML = this.localize('Fullscreen');\n }\n }\n\n}\n\nFullscreenToggle.prototype.buttonText = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n",
"import Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass LiveDisplay extends Component {\n\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: `${this.localize('Stream Type')}${this.localize('LIVE')}`,\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n",
"import Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass MuteToggle extends Button {\n\n constructor(player, options) {\n super(player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass(),\n innerHTML: `
${this.localize('Mute')}
`\n });\n }\n\n buildCSSClass() {\n return `vjs-mute-control ${super.buildCSSClass()}`;\n }\n\n handleClick() {\n this.player_.muted( this.player_.muted() ? false : true );\n }\n\n update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n let localizedMute = this.localize(toMute);\n if (this.el_.children[0].children[0].innerHTML !== localizedMute) {\n this.el_.children[0].children[0].innerHTML = localizedMute;\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n }\n Dom.addElClass(this.el_, `vjs-vol-${level}`);\n }\n\n}\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n",
"import Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n * @param {Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nclass PlayToggle extends Button {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'play', this.handlePlay);\n this.on(player, 'pause', this.handlePause);\n }\n\n buildCSSClass() {\n return `vjs-play-control ${super.buildCSSClass()}`;\n }\n\n // handleClick - Toggle between play and pause\n handleClick() {\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n }\n\n // handlePlay - Add the vjs-playing class to the element so it can change appearance\n handlePlay() {\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n this.el_.children[0].children[0].innerHTML = this.localize('Pause'); // change the button text to \"Pause\"\n }\n\n // handlePause - Add the vjs-paused class to the element so it can change appearance\n handlePause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.el_.children[0].children[0].innerHTML = this.localize('Play'); // change the button text to \"Play\"\n }\n\n}\n\nPlayToggle.prototype.buttonText = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n",
"import MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n createEl() {\n let el = super.createEl();\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n }\n\n // Menu creation\n createMenu() {\n let menu = new Menu(this.player());\n let rates = this.player().options()['playbackRates'];\n\n if (rates) {\n for (let i = rates.length - 1; i >= 0; i--) {\n menu.addChild(\n new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n );\n }\n }\n\n return menu;\n }\n\n updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n }\n\n handleClick() {\n // select next rate option\n let currentRate = this.player().playbackRate();\n let rates = this.player().options()['playbackRates'];\n // this will select first one if the last one currently selected\n let newRate = rates[0];\n for (let i = 0; i currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n }\n\n playbackRateSupported() {\n return this.player().tech\n && this.player().tech['featuresPlaybackRate']\n && this.player().options()['playbackRates']\n && this.player().options()['playbackRates'].length > 0\n ;\n }\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n */\n updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n }\n\n /**\n * Update button label when rate changed\n */\n updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n }\n\n}\n\nPlaybackRateMenuButton.prototype.buttonText = 'Playback Rate';\nPlaybackRateMenuButton.prototype.className = 'vjs-playback-rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n",
"import MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @constructor\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n constructor(player, options){\n let label = options['rate'];\n let rate = parseFloat(label, 10);\n\n // Modify options for parent MenuItem class's init.\n options['label'] = label;\n options['selected'] = rate === 1;\n super(player, options);\n\n this.label = label;\n this.rate = rate;\n\n this.on(player, 'ratechange', this.update);\n }\n\n handleClick() {\n super.handleClick();\n this.player().playbackRate(this.rate);\n }\n\n update() {\n this.selected(this.player().playbackRate() === this.rate);\n }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n",
"import Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass LoadProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'progress', this.update);\n }\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-load-progress',\n innerHTML: `${this.localize('Loaded')}: 0%`\n });\n }\n\n update() {\n let buffered = this.player_.buffered();\n let duration = this.player_.duration();\n let bufferedEnd = this.player_.bufferedEnd();\n let children = this.el_.children;\n\n // get the percent width of a time compared to the total end\n let percentify = function (time, end){\n let percent = (time / end) || 0; // no NaN\n return ((percent >= 1 ? 1 : percent) * 100) + '%';\n };\n\n // update the width of the progress bar\n this.el_.style.width = percentify(bufferedEnd, duration);\n\n // add child elements to represent the individual buffered time ranges\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n let part = children[i];\n\n if (!part) {\n part = this.el_.appendChild(Dom.createEl());\n }\n\n // set the percent based on the width of the progress bar (bufferedEnd)\n part.style.left = percentify(start, bufferedEnd);\n part.style.width = percentify(end - start, bufferedEnd);\n }\n\n // remove unused buffered range elements\n for (let i = children.length; i > buffered.length; i--) {\n this.el_.removeChild(children[i-1]);\n }\n }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n",
"import Component from '../../component.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass PlayProgressBar extends Component {\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-play-progress',\n innerHTML: `${this.localize('Progress')}: 0%`\n });\n }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n",
"import Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass ProgressControl extends Component {\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control vjs-control'\n });\n }\n}\n\nProgressControl.prototype.options_ = {\n children: {\n 'seekBar': {}\n }\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n",
"import Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport SeekHandle from './seek-handle.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport roundFloat from '../../utils/round-float.js';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass SeekBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-holder',\n 'aria-label': 'video progress bar'\n });\n }\n\n updateARIAAttributes() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('aria-valuenow', roundFloat(this.getPercent()*100, 2)); // machine readable value of progress bar (percentage complete)\n this.el_.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n }\n\n getPercent() {\n let percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n }\n\n handleMouseDown(event) {\n super.handleMouseDown(event);\n\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n }\n\n handleMouseMove(event) {\n let newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n }\n\n handleMouseUp(event) {\n super.handleMouseUp(event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n }\n\n stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n }\n\n stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n }\n\n}\n\nSeekBar.prototype.options_ = {\n children: {\n 'loadProgressBar': {},\n 'playProgressBar': {},\n 'seekHandle': {}\n },\n 'barName': 'playProgressBar',\n 'handleName': 'seekHandle'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n",
"import SliderHandle from '../../slider/slider-handle.js';\nimport Component from '../../component.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * The Seek Handle shows the current position of the playhead during playback,\n * and can be dragged to adjust the playhead.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass SeekHandle extends SliderHandle {\n\n constructor(player, options) {\n super(player, options);\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /** @inheritDoc */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-seek-handle',\n 'aria-live': 'off'\n });\n }\n\n updateContent() {\n let time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.innerHTML = `${formatTime(time, this.player_.duration())}`;\n }\n\n}\n\n/**\n * The default value for the handle content, which may be read by screen readers\n *\n * @type {String}\n * @private\n */\nSeekHandle.prototype.defaultValue = '00:00';\n\nComponent.registerComponent('SeekHandle', SeekHandle);\nexport default SeekHandle;\n",
"import Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @param {Player|Object} player\n * @param {Obect=} options\n */\nclass CustomControlSpacer extends Spacer {\n buildCSSClass() {\n return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n }\n\n createEl() {\n return super.createEl({\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n",
"import Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n */\nclass Spacer extends Component {\n buildCSSClass() {\n return `vjs-spacer ${super.buildCSSClass()}`;\n }\n\n createEl(props) {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n",
"import TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\nclass CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n constructor(player, options) {\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' settings',\n 'default': false,\n mode: 'disabled'\n };\n\n super(player, options);\n this.addClass('vjs-texttrack-settings');\n }\n\n handleClick() {\n this.player().getChild('textTrackSettings').show();\n }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n",
"import TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @constructor\n */\nclass CaptionsButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Captions Menu');\n }\n\n update() {\n let threshold = 2;\n super.update();\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech && this.player().tech['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n createItems() {\n let items = [];\n\n if (!(this.player().tech && this.player().tech['featuresNativeTextTracks'])) {\n items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n }\n\n return super.createItems(items);\n }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.buttonText = 'Captions';\nCaptionsButton.prototype.className = 'vjs-captions-button';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n",
"import TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n// Chapters act much differently than other text tracks\n// Cues are navigation vs. other tracks of alternative languages\n/**\n * The button component for toggling and selecting chapters\n *\n * @constructor\n */\nclass ChaptersButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Chapters Menu');\n }\n\n // Create a menu item for each text track\n createItems() {\n let items = [];\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n createMenu() {\n let tracks = this.player_.textTracks() || [];\n let chaptersTrack;\n let items = this.items = [];\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n if (!track.cues) {\n track['mode'] = 'hidden';\n /* jshint loopfunc:true */\n // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864\n window.setTimeout(Fn.bind(this, function() {\n this.createMenu();\n }), 100);\n /* jshint loopfunc:false */\n } else {\n chaptersTrack = track;\n break;\n }\n }\n }\n\n let menu = this.menu;\n if (menu === undefined) {\n menu = new Menu(this.player_);\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.kind_),\n tabindex: -1\n }));\n }\n\n if (chaptersTrack) {\n let cues = chaptersTrack['cues'], cue;\n\n for (let i = 0, l = cues.length; i < l; i++) {\n cue = cues[i];\n\n let mi = new ChaptersTrackMenuItem(this.player_, {\n 'track': chaptersTrack,\n 'cue': cue\n });\n\n items.push(mi);\n\n menu.addChild(mi);\n }\n this.addChild(menu);\n }\n\n if (this.items.length > 0) {\n this.show();\n }\n\n return menu;\n }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.buttonText = 'Chapters';\nChaptersButton.prototype.className = 'vjs-chapters-button';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n",
"import MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * @constructor\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let cue = options['cue'];\n let currentTime = player.currentTime();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = cue.text;\n options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n super(player, options);\n\n this.track = track;\n this.cue = cue;\n track.addEventListener('cuechange', Fn.bind(this, this.update));\n }\n\n handleClick() {\n super.handleClick();\n this.player_.currentTime(this.cue.startTime);\n this.update(this.cue.startTime);\n }\n\n update() {\n let cue = this.cue;\n let currentTime = this.player_.currentTime();\n\n // vjs.log(currentTime, cue.startTime);\n this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n",
"import TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @constructor\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n constructor(player, options){\n // Create pseudo track info\n // Requires options['kind']\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' off',\n 'default': false,\n 'mode': 'disabled'\n };\n\n super(player, options);\n this.selected(true);\n }\n\n handleTracksChange(event){\n let tracks = this.player().textTracks();\n let selected = true;\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n selected = false;\n break;\n }\n }\n\n this.selected(selected);\n }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n",
"import TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @constructor\n */\nclass SubtitlesButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Subtitles Menu');\n }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.buttonText = 'Subtitles';\nSubtitlesButton.prototype.className = 'vjs-subtitles-button';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n",
"import MenuButton from '../../menu/menu-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @constructor\n */\nclass TextTrackButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n let tracks = this.player_.textTracks();\n\n if (this.items.length <= 1) {\n this.hide();\n }\n\n if (!tracks) {\n return;\n }\n\n let updateHandler = Fn.bind(this, this.update);\n tracks.addEventListener('removetrack', updateHandler);\n tracks.addEventListener('addtrack', updateHandler);\n\n this.player_.on('dispose', function() {\n tracks.removeEventListener('removetrack', updateHandler);\n tracks.removeEventListener('addtrack', updateHandler);\n });\n }\n\n // Create a menu item for each text track\n createItems(items=[]) {\n // Add an OFF menu item to turn all tracks off\n items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // only add tracks that are of the appropriate kind and have a label\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n",
"import MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @constructor\n */\nclass TextTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let tracks = player.textTracks();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = track['label'] || track['language'] || 'Unknown';\n options['selected'] = track['default'] || track['mode'] === 'showing';\n super(player, options);\n\n this.track = track;\n\n if (tracks) {\n let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', function() {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n // iOS7 doesn't dispatch change events to TextTrackLists when an\n // associated track's mode changes. Without something like\n // Object.observe() (also not present on iOS7), it's not\n // possible to detect changes to the mode attribute and polyfill\n // the change event. As a poor substitute, we manually dispatch\n // change events whenever the controls modify the mode.\n if (tracks && tracks.onchange === undefined) {\n let event;\n\n this.on(['tap', 'click'], function() {\n if (typeof window.Event !== 'object') {\n // Android 2.3 throws an Illegal Constructor error for window.Event\n try {\n event = new window.Event('change');\n } catch(err){}\n }\n\n if (!event) {\n event = document.createEvent('Event');\n event.initEvent('change', true, true);\n }\n\n tracks.dispatchEvent(event);\n });\n }\n }\n\n handleClick(event) {\n let kind = this.track['kind'];\n let tracks = this.player_.textTracks();\n\n super.handleClick(event);\n\n if (!tracks) return;\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n if (track['kind'] !== kind) {\n continue;\n }\n\n if (track === this.track) {\n track['mode'] = 'showing';\n } else {\n track['mode'] = 'disabled';\n }\n }\n }\n\n handleTracksChange(event){\n this.selected(this.track['mode'] === 'showing');\n }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n",
"import Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass CurrentTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n innerHTML: 'Current Time ' + '0:00', // label the current time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n let localizedText = this.localize('Current Time');\n let formattedTime = formatTime(time, this.player_.duration());\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`;\n }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n",
"import Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass DurationDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n innerHTML: `${this.localize('Duration Time')} 0:00`, // label the duration time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n updateContent() {\n let duration = this.player_.duration();\n if (duration) {\n let localizedText = this.localize('Duration Time');\n let formattedTime = formatTime(duration);\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`; // label the duration time for screen reader users\n }\n }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n",
"import Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass RemainingTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n innerHTML: `${this.localize('Remaining Time')} -0:00`, // label the remaining time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n updateContent() {\n if (this.player_.duration()) {\n const localizedText = this.localize('Remaining Time');\n const formattedTime = formatTime(this.player_.remainingTime());\n this.contentEl_.innerHTML = `${localizedText} -${formattedTime}`;\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n",
"import Component from '../../component.js';\n\n/**\n * The separator between the current time and duration\n *\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass TimeDivider extends Component {\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-time-control vjs-time-divider',\n innerHTML: '
/
'\n });\n }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n",
"import Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport roundFloat from '../../utils/round-float.js';\n\n// Required children\nimport VolumeHandle from './volume-handle.js';\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass VolumeBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-bar',\n 'aria-label': 'volume level'\n });\n }\n\n handleMouseMove(event) {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n\n this.player_.volume(this.calculateDistance(event));\n }\n\n getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n }\n\n stepForward() {\n this.player_.volume(this.player_.volume() + 0.1);\n }\n\n stepBack() {\n this.player_.volume(this.player_.volume() - 0.1);\n }\n\n updateARIAAttributes() {\n // Current value of volume bar as a percentage\n this.el_.setAttribute('aria-valuenow', roundFloat(this.player_.volume()*100, 2));\n this.el_.setAttribute('aria-valuetext', roundFloat(this.player_.volume()*100, 2)+'%');\n }\n\n}\n\nVolumeBar.prototype.options_ = {\n children: {\n 'volumeLevel': {},\n 'volumeHandle': {}\n },\n 'barName': 'volumeLevel',\n 'handleName': 'volumeHandle'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n",
"import Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass VolumeControl extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-control vjs-control'\n });\n }\n\n}\n\nVolumeControl.prototype.options_ = {\n children: {\n 'volumeBar': {}\n }\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n",
"import SliderHandle from '../../slider/slider-handle.js';\nimport Component from '../../component.js';\n\n/**\n * The volume handle can be dragged to adjust the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass VolumeHandle extends SliderHandle {\n\n /** @inheritDoc */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-handle'\n });\n }\n\n}\n\nVolumeHandle.prototype.defaultValue = '00:00';\n\nComponent.registerComponent('VolumeHandle', VolumeHandle);\nexport default VolumeHandle;\n",
"import Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass VolumeLevel extends Component {\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-level',\n innerHTML: ''\n });\n }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n",
"import Button from '../button.js';\nimport Component from '../component.js';\nimport Menu from '../menu/menu.js';\nimport MenuButton from '../menu/menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Menu button with a popup for showing the volume slider.\n * @constructor\n */\nclass VolumeMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n this.addClass('vjs-menu-button');\n }\n\n createMenu() {\n let menu = new Menu(this.player_, {\n contentElType: 'div'\n });\n\n // The volumeBar is vertical by default in the base theme when used with a VolumeMenuButton\n var options = this.options_['volumeBar'] || {};\n options['vertical'] = options['vertical'] || true;\n\n let vc = new VolumeBar(this.player_, options);\n\n vc.on('focus', function() {\n menu.lockShowing();\n });\n vc.on('blur', function() {\n menu.unlockShowing();\n });\n menu.addChild(vc);\n return menu;\n }\n\n handleClick() {\n MuteToggle.prototype.handleClick.call(this);\n super.handleClick();\n }\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-menu-button vjs-menu-button vjs-control vjs-button',\n innerHTML: `
${this.localize('Mute')}
`\n });\n }\n\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n",
"import Component from './component';\nimport * as Dom from './utils/dom.js';\n\n/**\n * Display that an error has occurred making the video unplayable\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass ErrorDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update();\n this.on(player, 'error', this.update);\n }\n\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-error-display'\n });\n\n this.contentEl_ = Dom.createEl('div');\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n update() {\n if (this.player().error()) {\n this.contentEl_.innerHTML = this.localize(this.player().error().message);\n }\n }\n}\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n",
"import * as Events from './utils/events.js';\n\nvar EventEmitter = function() {};\n\nEventEmitter.prototype.allowedEvents_ = {};\n\nEventEmitter.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 let ael = this.addEventListener;\n this.addEventListener = Function.prototype;\n Events.on(this, type, fn);\n this.addEventListener = ael;\n};\nEventEmitter.prototype.addEventListener = EventEmitter.prototype.on;\n\nEventEmitter.prototype.off = function(type, fn) {\n Events.off(this, type, fn);\n};\nEventEmitter.prototype.removeEventListener = EventEmitter.prototype.off;\n\nEventEmitter.prototype.one = function(type, fn) {\n Events.one(this, type, fn);\n};\n\nEventEmitter.prototype.trigger = function(event) {\n let type = event.type || event;\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n event = Events.fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventEmitter.prototype.dispatchEvent = EventEmitter.prototype.trigger;\n\nexport default EventEmitter;\n",
"/**\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _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\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/**\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n *\n * ```\n * var Button = videojs.getComponent('Button');\n *\n * var MyButton = videojs.extends(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n *\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nconst extendsFn = function(superClass, subClassMethods={}) {\n let subClass = function() {\n superClass.apply(this, arguments);\n };\n let methods = {};\n\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexport default extendsFn;\n",
"import document from 'global/document';\n\n/**\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror'\n ],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror'\n ],\n // Microsoft\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError'\n ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let 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 (let i=0; i 1) {\n this.show();\n }\n }\n\n createMenu() {\n var menu = new Menu(this.player_);\n\n // Add a title list item to the top\n if (this.options().title) {\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.options().title),\n tabindex: -1\n }));\n }\n\n this.items = this['createItems']();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n }\n\n /**\n * Create the list of menu items. Specific to each subclass.\n */\n createItems(){}\n\n /** @inheritDoc */\n buildCSSClass() {\n return `${this.className} vjs-menu-button ${super.buildCSSClass()}`;\n }\n\n // Focus - Add keyboard functionality to element\n // This function is not needed anymore. Instead, the keyboard functionality is handled by\n // treating the button as triggering a submenu. When the button is pressed, the submenu\n // appears. Pressing the button again makes the submenu disappear.\n handleFocus() {}\n\n // Can't turn off list display that we turned on with focus, because list would go away.\n handleBlur() {}\n\n handleClick() {\n // When you click the button it adds focus, which will show the menu indefinitely.\n // So we'll remove focus when the mouse leaves the button.\n // Focus is needed for tab navigation.\n this.one('mouseout', Fn.bind(this, function(){\n this.menu.unlockShowing();\n this.el_.blur();\n }));\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n }\n\n handleKeyPress(event) {\n\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n event.preventDefault();\n // Check for escape (27) key\n } else if (event.which === 27){\n if (this.buttonPressed_){\n this.unpressButton();\n }\n event.preventDefault();\n }\n }\n\n pressButton() {\n this.buttonPressed_ = true;\n this.menu.lockShowing();\n this.el_.setAttribute('aria-pressed', true);\n if (this.items && this.items.length > 0) {\n this.items[0].el().focus(); // set the focus to the title of the submenu\n }\n }\n\n unpressButton() {\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-pressed', false);\n }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n",
"import Button from '../button.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `
`\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nclass MenuItem extends Button {\n\n constructor(player, options) {\n super(player, options);\n this.selected(options['selected']);\n }\n\n /** @inheritDoc */\n createEl(type, props) {\n return super.createEl('li', assign({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label'])\n }, props));\n }\n\n /**\n * Handle a click on the menu item, and set it to selected\n */\n handleClick() {\n this.selected(true);\n }\n\n /**\n * Set this menu item as selected or not\n * @param {Boolean} selected\n */\n selected(selected) {\n if (selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-selected',true);\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-selected',false);\n }\n }\n\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n",
"import Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/* Menu\n================================================================================ */\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @class\n * @constructor\n */\nclass Menu extends Component {\n\n /**\n * Add a menu item to the menu\n * @param {Object|String} component Component or component type to add\n */\n addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function(){\n this.unlockShowing();\n }));\n }\n\n createEl() {\n let contentElType = this.options().contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n var el = super.createEl('div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Menu Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function(event){\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n",
"// Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport globalOptions from './global-options.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n *\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n *\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n *\n * ```html\n * \n * ```\n *\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @class\n * @extends Component\n */\nclass Player extends Component {\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n constructor(tag, options, ready){\n // Make sure tag ID exists\n tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = assign(Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n super(null, options, ready);\n\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ ||\n !this.options_.techOrder ||\n !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' +\n 'videojs.options instead of just changing the ' +\n 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update Current Language\n this.language_ = options['language'] || globalOptions['language'];\n\n // Update Supported Languages\n this.languages_ = options['languages'] || globalOptions['languages'];\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options['poster'] || '';\n\n // Set controls\n this.controls_ = !!options['controls'];\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /**\n * Store the internal state of scrubbing\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // Load plugins\n if (options['plugins']) {\n let plugins = options['plugins'];\n\n Object.getOwnPropertyNames(plugins).forEach(function(name){\n this[name](plugins[name]);\n }, this);\n }\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive_ = true;\n this.reportUserActivity();\n this.listenForUserActivity();\n\n this.on('fullscreenchange', this.handleFullscreenChange);\n this.on('stageclick', this.handleStageClick);\n }\n\n /**\n * Destroys the video player and does any necessary cleanup\n *\n * myPlayer.dispose();\n *\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n */\n dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag['player']) { this.tag['player'] = null; }\n if (this.el_ && this.el_['player']) { this.el_['player'] = null; }\n\n if (this.tech) { this.tech.dispose(); }\n\n super.dispose();\n }\n\n createEl() {\n let el = this.el_ = super.createEl('div');\n let tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n const attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function(attr){\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag['player'] = el['player'] = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n this.styleEl_ = document.createElement('style');\n el.appendChild(this.styleEl_);\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_['width']);\n this.height(this.options_['height']);\n this.fluid(this.options_['fluid']);\n this.aspectRatio(this.options_['aspectRatio']);\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n this.el_ = el;\n\n return el;\n }\n\n width(value) {\n return this.dimension('width', value);\n }\n\n height(value) {\n return this.dimension('height', value);\n }\n\n dimension(dimension, value) {\n let privDimension = dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n let parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n }\n\n fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n }\n\n aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value suplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n }\n\n updateStyleEl_() {\n let width;\n let height;\n let aspectRatio;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n let ratioParts = aspectRatio.split(':');\n let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n let idClass = this.id()+'-dimensions';\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n // Create the width/height CSS\n var css = `.${idClass} { width: ${width}px; height: ${height}px; }`;\n // Add the aspect ratio CSS for when using a fluid layout\n css += `.${idClass}.vjs-fluid { padding-top: ${ratioMultiplier * 100}%; }`;\n\n // Update the style el\n if (this.styleEl_.styleSheet){\n this.styleEl_.styleSheet.cssText = css;\n } else {\n this.styleEl_.innerHTML = css;\n }\n }\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n */\n loadTech(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech) {\n this.unloadTech();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n Component.getComponent('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n var techReady = Fn.bind(this, function() {\n this.triggerReady();\n });\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = assign({\n 'source': source,\n 'playerId': this.id(),\n 'techId': `${this.id()}_${techName}_api`,\n 'textTracks': this.textTracks_,\n 'autoplay': this.options_.autoplay,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions['startTime'] = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n let techComponent = Component.getComponent(techName);\n this.tech = new techComponent(techOptions);\n\n this.on(this.tech, 'ready', this.handleTechReady);\n this.on(this.tech, 'usenativecontrols', this.handleTechUseNativeControls);\n\n // Listen to every HTML5 events and trigger them back on the player for the plugins\n this.on(this.tech, 'loadstart', this.handleTechLoadStart);\n this.on(this.tech, 'waiting', this.handleTechWaiting);\n this.on(this.tech, 'canplay', this.handleTechCanPlay);\n this.on(this.tech, 'canplaythrough', this.handleTechCanPlayThrough);\n this.on(this.tech, 'playing', this.handleTechPlaying);\n this.on(this.tech, 'ended', this.handleTechEnded);\n this.on(this.tech, 'seeking', this.handleTechSeeking);\n this.on(this.tech, 'seeked', this.handleTechSeeked);\n this.on(this.tech, 'play', this.handleTechPlay);\n this.on(this.tech, 'firstplay', this.handleTechFirstPlay);\n this.on(this.tech, 'pause', this.handleTechPause);\n this.on(this.tech, 'progress', this.handleTechProgress);\n this.on(this.tech, 'durationchange', this.handleTechDurationChange);\n this.on(this.tech, 'fullscreenchange', this.handleTechFullscreenChange);\n this.on(this.tech, 'error', this.handleTechError);\n this.on(this.tech, 'suspend', this.handleTechSuspend);\n this.on(this.tech, 'abort', this.handleTechAbort);\n this.on(this.tech, 'emptied', this.handleTechEmptied);\n this.on(this.tech, 'stalled', this.handleTechStalled);\n this.on(this.tech, 'loadedmetadata', this.handleTechLoadedMetaData);\n this.on(this.tech, 'loadeddata', this.handleTechLoadedData);\n this.on(this.tech, 'timeupdate', this.handleTechTimeUpdate);\n this.on(this.tech, 'ratechange', this.handleTechRateChange);\n this.on(this.tech, 'volumechange', this.handleTechVolumeChange);\n this.on(this.tech, 'texttrackchange', this.onTextTrackChange);\n this.on(this.tech, 'loadedmetadata', this.updateStyleEl_);\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners();\n }\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n\n this.tech.ready(techReady);\n }\n\n unloadTech() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.textTracks_ = this.textTracks();\n\n this.isReady_ = false;\n\n this.tech.dispose();\n\n this.tech = false;\n }\n\n addTechControlsListeners() {\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech, 'mousedown', this.handleTechClick);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech, 'touchstart', this.handleTechTouchStart);\n this.on(this.tech, 'touchmove', this.handleTechTouchMove);\n this.on(this.tech, 'touchend', this.handleTechTouchEnd);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech, 'tap', this.handleTechTap);\n }\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n */\n removeTechControlsListeners() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech, 'tap', this.handleTechTap);\n this.off(this.tech, 'touchstart', this.handleTechTouchStart);\n this.off(this.tech, 'touchmove', this.handleTechTouchMove);\n this.off(this.tech, 'touchend', this.handleTechTouchEnd);\n this.off(this.tech, 'mousedown', this.handleTechClick);\n }\n\n /**\n * Player waits for the tech to be ready\n * @private\n */\n handleTechReady() {\n this.triggerReady();\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n }\n\n /**\n * Fired when the native controls are used\n * @private\n */\n handleTechUseNativeControls() {\n this.usingNativeControls(true);\n }\n\n /**\n * Fired when the user agent begins looking for media data\n * @event loadstart\n */\n handleTechLoadStart() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n }\n\n hasStarted(hasStarted) {\n if (hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== hasStarted) {\n this.hasStarted_ = hasStarted;\n if (hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n }\n\n /**\n * Fired whenever the media begins or resumes playback\n * @event play\n */\n handleTechPlay() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n }\n\n /**\n * Fired whenever the media begins waiting\n * @event waiting\n */\n handleTechWaiting() {\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n * @event canplay\n */\n handleTechCanPlay() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n * @event canplaythrough\n */\n handleTechCanPlayThrough() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n * @event playing\n */\n handleTechPlaying() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n }\n\n /**\n * Fired whenever the player is jumping to a new time\n * @event seeking\n */\n handleTechSeeking() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n }\n\n /**\n * Fired when the player has finished jumping to a new time\n * @event seeked\n */\n handleTechSeeked() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n }\n\n /**\n * Fired the first time a video is played\n *\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event firstplay\n */\n handleTechFirstPlay() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if(this.options_['starttime']){\n this.currentTime(this.options_['starttime']);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n }\n\n /**\n * Fired whenever the media has been paused\n * @event pause\n */\n handleTechPause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n }\n\n /**\n * Fired while the user agent is downloading media data\n * @event progress\n */\n handleTechProgress() {\n this.trigger('progress');\n\n // Add custom event for when source is finished downloading.\n if (this.bufferedPercent() === 1) {\n this.trigger('loadedalldata');\n }\n }\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n * @event ended\n */\n handleTechEnded() {\n this.addClass('vjs-ended');\n if (this.options_['loop']) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n }\n\n /**\n * Fired when the duration of the media resource is first known or changed\n * @event durationchange\n */\n handleTechDurationChange() {\n this.updateDuration();\n this.trigger('durationchange');\n }\n\n /**\n * Handle a click on the media element to play/pause\n */\n handleTechClick(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n }\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n */\n handleTechTap() {\n this.userActive(!this.userActive());\n }\n\n handleTechTouchStart() {\n this.userWasActive = this.userActive();\n }\n\n handleTechTouchMove() {\n if (this.userWasActive){\n this.reportUserActivity();\n }\n }\n\n handleTechTouchEnd(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n }\n\n /**\n * Update the duration of the player using the tech\n * @private\n */\n updateDuration() {\n // Allows for caching value instead of asking player each time.\n // We need to get the techGet response and check for a value so we don't\n // accidentally cause the stack to blow up.\n var duration = this.techGet('duration');\n if (duration) {\n if (duration < 0) {\n duration = Infinity;\n }\n this.duration(duration);\n // Determine if the stream is live and propagate styles down to UI.\n if (duration === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n }\n }\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n * @event fullscreenchange\n */\n handleFullscreenChange() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n }\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n * @private\n */\n handleStageClick() {\n this.reportUserActivity();\n }\n\n handleTechFullscreenChange() {\n this.trigger('fullscreenchange');\n }\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n * @event error\n */\n handleTechError() {\n this.error(this.tech.error().code);\n }\n\n /**\n * Fires when the browser is intentionally not getting media data\n * @event suspend\n */\n handleTechSuspend() {\n this.trigger('suspend');\n }\n\n /**\n * Fires when the loading of an audio/video is aborted\n * @event abort\n */\n handleTechAbort() {\n this.trigger('abort');\n }\n\n /**\n * Fires when the current playlist is empty\n * @event emptied\n */\n handleTechEmptied() {\n this.trigger('emptied');\n }\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n * @event stalled\n */\n handleTechStalled() {\n this.trigger('stalled');\n }\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n * @event loadedmetadata\n */\n handleTechLoadedMetaData() {\n this.trigger('loadedmetadata');\n }\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n * @event loaddata\n */\n handleTechLoadedData() {\n this.trigger('loadeddata');\n }\n\n /**\n * Fires when the current playback position has changed\n * @event timeupdate\n */\n handleTechTimeUpdate() {\n this.trigger('timeupdate');\n }\n\n /**\n * Fires when the playing speed of the audio/video is changed\n * @event ratechange\n */\n handleTechRateChange() {\n this.trigger('ratechange');\n }\n\n /**\n * Fires when the volume has been changed\n * @event volumechange\n */\n handleTechVolumeChange() {\n this.trigger('volumechange');\n }\n\n /**\n * Fires when the text track has been changed\n * @event texttrackchange\n */\n onTextTrackChange() {\n this.trigger('texttrackchange');\n }\n\n /**\n * Object for cached values.\n */\n getCache() {\n return this.cache_;\n }\n\n // Pass values to the playback tech\n techCall(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech && !this.tech.isReady_) {\n this.tech.ready(function(){\n this[method](arg);\n });\n\n // Otherwise call method now\n } else {\n try {\n this.tech[method](arg);\n } catch(e) {\n log(e);\n throw e;\n }\n }\n }\n\n // Get calls can't wait for the tech, and sometimes don't need to.\n techGet(method) {\n if (this.tech && this.tech.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech[method]();\n } catch(e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech[method] === undefined) {\n log(`Video.js: ${method} method not defined for ${this.techName} playback technology.`, e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n log(`Video.js: ${method} unavailable on ${this.techName} playback technology element.`, e);\n this.tech.isReady_ = false;\n } else {\n log(e);\n }\n }\n throw e;\n }\n }\n\n return;\n }\n\n /**\n * start media playback\n *\n * myPlayer.play();\n *\n * @return {Player} self\n */\n play() {\n this.techCall('play');\n return this;\n }\n\n /**\n * Pause the video playback\n *\n * myPlayer.pause();\n *\n * @return {Player} self\n */\n pause() {\n this.techCall('pause');\n return this;\n }\n\n /**\n * Check if the player is paused\n *\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n */\n paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return (this.techGet('paused') === false) ? false : true;\n }\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n */\n scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n }\n\n /**\n * Get or set the current time (in seconds)\n *\n * // get\n * var whereYouAt = myPlayer.currentTime();\n *\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n */\n currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = (this.techGet('currentTime') || 0);\n }\n\n /**\n * Get the length in time of the video in seconds\n *\n * var lengthOfVideo = myPlayer.duration();\n *\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @return {Number} The duration of the video in seconds\n */\n duration(seconds) {\n if (seconds !== undefined) {\n\n // cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = parseFloat(seconds);\n\n return this;\n }\n\n if (this.cache_.duration === undefined) {\n this.updateDuration();\n }\n\n return this.cache_.duration || 0;\n }\n\n /**\n * Calculates how much time is left.\n *\n * var timeLeft = myPlayer.remainingTime();\n *\n * Not a native video element function, but useful\n * @return {Number} The time remaining in seconds\n */\n remainingTime() {\n return this.duration() - this.currentTime();\n }\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n *\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n *\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n *\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n *\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n *\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n */\n buffered() {\n var buffered = this.techGet('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0,0);\n }\n\n return buffered;\n }\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n *\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n *\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration());\n }\n\n /**\n * Get the ending time of the last buffered time range\n *\n * This is used in the progress bar to encapsulate all time ranges.\n * @return {Number} The end of the last buffered time range\n */\n bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length-1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n }\n\n /**\n * Get or set the current volume of the media\n *\n * // get\n * var howLoudIsIt = myPlayer.volume();\n *\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n *\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume, when getting\n * @return {Player} self, when setting\n */\n volume(percentAsDecimal) {\n let vol;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet('volume'));\n return (isNaN(vol)) ? 1 : vol;\n }\n\n\n /**\n * Get the current muted state, or turn mute on or off\n *\n * // get\n * var isVolumeMuted = myPlayer.muted();\n *\n * // set\n * myPlayer.muted(true); // mute the volume\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not, when getting\n * @return {Player} self, when setting mute\n */\n muted(muted) {\n if (muted !== undefined) {\n this.techCall('setMuted', muted);\n return this;\n }\n return this.techGet('muted') || false; // Default to false\n }\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n supportsFullScreen() {\n return this.techGet('supportsFullScreen') || false;\n }\n\n /**\n * Check if the player is in fullscreen mode\n *\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n *\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n *\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen, false if not\n * @return {Player} self, when setting\n */\n isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n }\n\n /**\n * Old naming for isFullscreen()\n * @deprecated for lowercase 's' version\n */\n isFullScreen(isFS) {\n log.warn('player.isFullScreen() has been deprecated, use player.isFullscreen() with a lowercase \"s\")');\n return this.isFullscreen(isFS);\n }\n\n /**\n * Increase the size of the video to full screen\n *\n * myPlayer.requestFullscreen();\n *\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n */\n requestFullscreen() {\n var fsApi = FullscreenApi;\n\n this.isFullscreen(true);\n\n if (fsApi) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(document, fsApi['fullscreenchange'], Fn.bind(this, function documentFullscreenChange(e){\n this.isFullscreen(document[fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(document, fsApi['fullscreenchange'], documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n\n } else if (this.tech.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Old naming for requestFullscreen\n * @deprecated for lower case 's' version\n */\n requestFullScreen() {\n log.warn('player.requestFullScreen() has been deprecated, use player.requestFullscreen() with a lowercase \"s\")');\n return this.requestFullscreen();\n }\n\n /**\n * Return the video to its normal size after having been in full screen mode\n *\n * myPlayer.exitFullscreen();\n *\n * @return {Player} self\n */\n exitFullscreen() {\n var fsApi = FullscreenApi;\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi) {\n document[fsApi.exitFullscreen]();\n } else if (this.tech.supportsFullScreen()) {\n this.techCall('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Old naming for exitFullscreen\n * @deprecated for exitFullscreen\n */\n cancelFullScreen() {\n log.warn('player.cancelFullScreen() has been deprecated, use player.exitFullscreen()');\n return this.exitFullscreen();\n }\n\n // When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = document.documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n document.documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(document.body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n }\n\n fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n }\n\n exitFullWindow() {\n this.isFullWindow = false;\n Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n document.documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(document.body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n }\n\n selectSource(sources) {\n // Loop through each playback technology in the options order\n for (var i=0,j=this.options_['techOrder'];i 0) {\n // In milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n }\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n */\n playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech && this.tech['featuresPlaybackRate']) {\n return this.techGet('playbackRate');\n } else {\n return 1.0;\n }\n }\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n */\n isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n }\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n * @return {Number} the current network activity state\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n */\n networkState() {\n return this.techGet('networkState');\n }\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n * @return {Number} the current playback rendering state\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n */\n readyState() {\n return this.techGet('readyState');\n }\n\n /**\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n * @return {Array} Array of track objects\n */\n textTracks() {\n // cannot use techGet directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech && this.tech['textTracks']();\n }\n\n remoteTextTracks() {\n return this.tech && this.tech['remoteTextTracks']();\n }\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n */\n addTextTrack(kind, label, language) {\n return this.tech && this.tech['addTextTrack'](kind, label, language);\n }\n\n addRemoteTextTrack(options) {\n return this.tech && this.tech['addRemoteTextTrack'](options);\n }\n\n removeRemoteTextTrack(track) {\n this.tech && this.tech['removeRemoteTextTrack'](track);\n }\n\n videoWidth() {\n return this.tech && this.tech.videoWidth && this.tech.videoWidth() || 0;\n }\n\n videoHeight() {\n return this.tech && this.tech.videoHeight && this.tech.videoHeight() || 0;\n }\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall('initialTime'); },\n // startOffsetTime: function(){ return this.techCall('startOffsetTime'); },\n // played: function(){ return this.techCall('played'); },\n // seekable: function(){ return this.techCall('seekable'); },\n // videoTracks: function(){ return this.techCall('videoTracks'); },\n // audioTracks: function(){ return this.techCall('audioTracks'); },\n // defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },\n // mediaGroup: function(){ return this.techCall('mediaGroup'); },\n // controller: function(){ return this.techCall('controller'); },\n // defaultMuted: function(){ return this.techCall('defaultMuted'); }\n\n // TODO\n // currentSrcList: the array of sources including other formats and bitrates\n // playList: array of source lists in order of playback\n\n /**\n * The player's language code\n * @param {String} languageCode The locale string\n * @return {String} The locale string when getting\n * @return {Player} self, when setting\n */\n language(languageCode) {\n if (languageCode === undefined) {\n return this.language_;\n }\n\n this.language_ = languageCode;\n return this;\n }\n\n /**\n * Get the player's language dictionary\n */\n languages() {\n return this.languages_;\n }\n\n toJSON() {\n let options = mergeOptions(this.options());\n let tracks = options.tracks;\n\n options.tracks = [];\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = mergeOptions(track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n }\n\n static getTagSettings(tag) {\n let baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n const tagOptions = Dom.getElAttributes(tag);\n const dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null){\n // Parse options JSON\n // If empty string, make it a parsable json object.\n const [err, data] = safeParseTuple(dataSetup || '{}');\n if (err) {\n log.error(err);\n }\n assign(tagOptions, data);\n }\n\n assign(baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n const children = tag.childNodes;\n\n for (let i=0, j=children.length; i 0) {\n for(let i=0, e=vids.length; i 0) {\n for(let i=0, e=audios.length; i 0) {\n\n for (let i=0, e=mediaEls.length; i${this.defaultValue || 0}`\n }, props);\n\n return super.createEl('div', props);\n }\n\n}\n\nComponent.registerComponent('SliderHandle', SliderHandle);\nexport default SliderHandle;\n",
"import Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport roundFloat from '../utils/round-float.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/* Slider\n================================================================================ */\n/**\n * The base functionality for sliders like the volume bar and seek bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @constructor\n */\nclass Slider extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n // Set property names to bar and handle to match with the child Slider class is looking for\n this.bar = this.getChild(this.options_['barName']);\n this.handle = this.getChild(this.options_['handleName']);\n\n // Set a horizontal or vertical class on the slider depending on the slider type\n this.vertical(!!this.options()['vertical']);\n\n this.on('mousedown', this.handleMouseDown);\n this.on('touchstart', this.handleMouseDown);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n this.on('click', this.handleClick);\n\n this.on(player, 'controlsvisible', this.update);\n this.on(player, this.playerEvent, this.update);\n }\n\n createEl(type, props={}) {\n // Add the slider element class to all sub classes\n props.className = props.className + ' vjs-slider';\n props = assign({\n 'role': 'slider',\n 'aria-valuenow': 0,\n 'aria-valuemin': 0,\n 'aria-valuemax': 100,\n tabIndex: 0\n }, props);\n\n return super.createEl(type, props);\n }\n\n handleMouseDown(event) {\n event.preventDefault();\n Dom.blockTextSelection();\n this.addClass('vjs-sliding');\n\n this.on(document, 'mousemove', this.handleMouseMove);\n this.on(document, 'mouseup', this.handleMouseUp);\n this.on(document, 'touchmove', this.handleMouseMove);\n this.on(document, 'touchend', this.handleMouseUp);\n\n this.handleMouseMove(event);\n }\n\n // To be overridden by a subclass\n handleMouseMove() {}\n\n handleMouseUp() {\n Dom.unblockTextSelection();\n this.removeClass('vjs-sliding');\n\n this.off(document, 'mousemove', this.handleMouseMove);\n this.off(document, 'mouseup', this.handleMouseUp);\n this.off(document, 'touchmove', this.handleMouseMove);\n this.off(document, 'touchend', this.handleMouseUp);\n\n this.update();\n }\n\n update() {\n // In VolumeBar init we have a setTimeout for update that pops and update to the end of the\n // execution stack. The player is destroyed before then update will cause an error\n if (!this.el_) return;\n\n // If scrubbing, we could use a cached value to make the handle keep up with the user's mouse.\n // On HTML5 browsers scrubbing is really smooth, but some flash players are slow, so we might want to utilize this later.\n // var progress = (this.player_.scrubbing) ? this.player_.getCache().currentTime / this.player_.duration() : this.player_.currentTime() / this.player_.duration();\n let progress = this.getPercent();\n let bar = this.bar;\n\n // If there's no bar...\n if (!bar) return;\n\n // Protect against no duration and other division issues\n if (typeof progress !== 'number' ||\n progress !== progress ||\n progress < 0 ||\n progress === Infinity) {\n progress = 0;\n }\n\n // If there is a handle, we need to account for the handle in our calculation for progress bar\n // so that it doesn't fall short of or extend past the handle.\n let barProgress = this.updateHandlePosition(progress);\n\n // Convert to a percentage for setting\n let percentage = roundFloat(barProgress * 100, 2) + '%';\n\n // Set the new bar width or height\n if (this.vertical()) {\n bar.el().style.height = percentage;\n } else {\n bar.el().style.width = percentage;\n }\n }\n\n /**\n * Update the handle position.\n */\n updateHandlePosition(progress) {\n let handle = this.handle;\n if (!handle) return;\n\n let vertical = this.vertical();\n let box = this.el_;\n\n let boxSize, handleSize;\n if (vertical) {\n boxSize = box.offsetHeight;\n handleSize = handle.el().offsetHeight;\n } else {\n boxSize = box.offsetWidth;\n handleSize = handle.el().offsetWidth;\n }\n\n // The width of the handle in percent of the containing box\n // In IE, widths may not be ready yet causing NaN\n let handlePercent = (handleSize) ? handleSize / boxSize : 0;\n\n // Get the adjusted size of the box, considering that the handle's center never touches the left or right side.\n // There is a margin of half the handle's width on both sides.\n let boxAdjustedPercent = 1 - handlePercent;\n\n // Adjust the progress that we'll use to set widths to the new adjusted box width\n let adjustedProgress = progress * boxAdjustedPercent;\n\n // The bar does reach the left side, so we need to account for this in the bar's width\n let barProgress = adjustedProgress + (handlePercent / 2);\n\n let percentage = roundFloat(adjustedProgress * 100, 2) + '%';\n\n if (vertical) {\n handle.el().style.bottom = percentage;\n } else {\n handle.el().style.left = percentage;\n }\n\n return barProgress;\n }\n\n calculateDistance(event){\n let el = this.el_;\n let box = Dom.findElPosition(el);\n let boxW = el.offsetWidth;\n let boxH = el.offsetHeight;\n let handle = this.handle;\n\n if (this.options()['vertical']) {\n let boxY = box.top;\n\n let pageY;\n if (event.changedTouches) {\n pageY = event.changedTouches[0].pageY;\n } else {\n pageY = event.pageY;\n }\n\n if (handle) {\n var handleH = handle.el().offsetHeight;\n // Adjusted X and Width, so handle doesn't go outside the bar\n boxY = boxY + (handleH / 2);\n boxH = boxH - handleH;\n }\n\n // Percent that the click is through the adjusted area\n return Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n\n } else {\n let boxX = box.left;\n\n let pageX;\n if (event.changedTouches) {\n pageX = event.changedTouches[0].pageX;\n } else {\n pageX = event.pageX;\n }\n\n if (handle) {\n var handleW = handle.el().offsetWidth;\n\n // Adjusted X and Width, so handle doesn't go outside the bar\n boxX = boxX + (handleW / 2);\n boxW = boxW - handleW;\n }\n\n // Percent that the click is through the adjusted area\n return Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n }\n }\n\n handleFocus() {\n this.on(document, 'keydown', this.handleKeyPress);\n }\n\n handleKeyPress(event) {\n if (event.which === 37 || event.which === 40) { // Left and Down Arrows\n event.preventDefault();\n this.stepBack();\n } else if (event.which === 38 || event.which === 39) { // Up and Right Arrows\n event.preventDefault();\n this.stepForward();\n }\n }\n\n handleBlur() {\n this.off(document, 'keydown', this.handleKeyPress);\n }\n\n /**\n * Listener for click events on slider, used to prevent clicks\n * from bubbling up to parent elements like button menus.\n * @param {Object} event Event object\n */\n handleClick(event) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n\n vertical(bool) {\n if (bool === undefined) {\n return this.vertical_ || false;\n }\n\n this.vertical_ = !!bool;\n\n if (this.vertical_) {\n this.addClass('vjs-slider-vertical');\n } else {\n this.addClass('vjs-slider-horizontal');\n }\n\n return this;\n }\n\n}\n\nComponent.registerComponent('Slider', Slider);\nexport default Slider;\n",
"function FlashRtmpDecorator(Flash) {\n Flash.streamingFormats = {\n 'rtmp/mp4': 'MP4',\n 'rtmp/flv': 'FLV'\n };\n\n Flash.streamFromParts = function(connection, stream) {\n return connection + '&' + stream;\n };\n\n Flash.streamToParts = function(src) {\n let parts = {\n connection: '',\n stream: ''\n };\n\n if (!src) return parts;\n\n // Look for the normal URL separator we expect, '&'.\n // If found, we split the URL into two pieces around the\n // first '&'.\n let connEnd = src.indexOf('&');\n let streamBegin;\n if (connEnd !== -1) {\n streamBegin = connEnd + 1;\n }\n else {\n // If there's not a '&', we use the last '/' as the delimiter.\n connEnd = streamBegin = src.lastIndexOf('/') + 1;\n if (connEnd === 0) {\n // really, there's not a '/'?\n connEnd = streamBegin = src.length;\n }\n }\n parts.connection = src.substring(0, connEnd);\n parts.stream = src.substring(streamBegin, src.length);\n\n return parts;\n };\n\n Flash.isStreamingType = function(srcType) {\n return srcType in Flash.streamingFormats;\n };\n\n // RTMP has four variations, any string starting\n // with one of these protocols should be valid\n Flash.RTMP_RE = /^rtmp[set]?:\\/\\//i;\n\n Flash.isStreamingSrc = function(src) {\n return Flash.RTMP_RE.test(src);\n };\n\n /**\n * A source handler for RTMP urls\n * @type {Object}\n */\n Flash.rtmpSourceHandler = {};\n\n /**\n * Check Flash can handle the source natively\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n Flash.rtmpSourceHandler.canHandleSource = function(source){\n if (Flash.isStreamingType(source.type) || Flash.isStreamingSrc(source.src)) {\n return 'maybe';\n }\n\n return '';\n };\n\n /**\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\n Flash.rtmpSourceHandler.handleSource = function(source, tech){\n let srcParts = Flash.streamToParts(source.src);\n\n tech['setRtmpConnection'](srcParts.connection);\n tech['setRtmpStream'](srcParts.stream);\n };\n\n // Register the native source handler\n Flash.registerSourceHandler(Flash.rtmpSourceHandler);\n\n return Flash;\n}\n\nexport default FlashRtmpDecorator;\n",
"/**\n * @fileoverview VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\nimport Tech from './tech';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport { createTimeRange } from '../utils/time-ranges.js';\nimport FlashRtmpDecorator from './flash-rtmp';\nimport Component from '../component';\nimport window from 'global/window';\nimport assign from 'object.assign';\n\nlet navigator = window.navigator;\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {Player} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nclass Flash extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n let { source, parentEl } = options;\n\n // Generate ID for swf object\n let objId = options.techId;\n\n // Merge default flashvars with ones passed in to init\n let flashVars = assign({\n\n // SWF Callback Functions\n 'readyFunction': 'videojs.Flash.onReady',\n 'eventProxyFunction': 'videojs.Flash.onEvent',\n 'errorEventProxyFunction': 'videojs.Flash.onError',\n\n // Player Settings\n 'autoplay': options.autoplay,\n 'preload': options.preload,\n 'loop': options.loop,\n 'muted': options.muted\n\n }, options.flashVars);\n\n // Merge default parames with ones passed in\n let params = assign({\n 'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n 'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n }, options.params);\n\n // Merge default attributes with ones passed in\n let attributes = assign({\n 'id': objId,\n 'name': objId, // Both ID and Name needed or swf to identify itself\n 'class': 'vjs-tech'\n }, options.attributes);\n\n // If source was supplied pass as a flash var.\n if (source) {\n this.ready(function(){\n this.setSource(source);\n });\n }\n\n // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n // This allows resetting the playhead when we catch the reload\n if (options.startTime) {\n this.ready(function(){\n this.load();\n this.play();\n this.currentTime(options.startTime);\n });\n }\n\n window.videojs = window.videojs || {};\n window.videojs.Flash = window.videojs.Flash || {};\n window.videojs.Flash.onReady = Flash.onReady;\n window.videojs.Flash.onEvent = Flash.onEvent;\n window.videojs.Flash.onError = Flash.onError;\n\n this.el_ = Flash.embed(options.swf, flashVars, params, attributes);\n this.el_.tech = this;\n }\n\n play() {\n this.el_.vjs_play();\n }\n\n pause() {\n this.el_.vjs_pause();\n }\n\n src(src) {\n if (src === undefined) {\n return this.currentSrc();\n }\n\n // Setting src through `src` not `setSrc` will be deprecated\n return this.setSrc(src);\n }\n\n setSrc(src) {\n // Make sure source URL is absolute.\n src = Url.getAbsoluteURL(src);\n this.el_.vjs_src(src);\n\n // Currently the SWF doesn't autoplay if you load a source later.\n // e.g. Load player w/ no source, wait 2s, set src.\n if (this.autoplay()) {\n var tech = this;\n this.setTimeout(function(){ tech.play(); }, 0);\n }\n }\n\n setCurrentTime(time) {\n this.lastSeekTarget_ = time;\n this.el_.vjs_setProperty('currentTime', time);\n super.setCurrentTime();\n }\n\n currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n }\n\n currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n }\n\n load() {\n this.el_.vjs_load();\n }\n\n poster() {\n this.el_.vjs_getProperty('poster');\n }\n\n // poster images are not handled by the Flash tech so make this a no-op\n setPoster() {}\n\n buffered() {\n return createTimeRange(0, this.el_.vjs_getProperty('buffered'));\n }\n\n supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n }\n\n enterFullScreen() {\n return false;\n }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'error,networkState,readyState,seeking,initialTime,duration,startOffsetTime,paused,played,seekable,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/**\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/**\n * Check Flash can handle the source natively\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return `video/${ext}`;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/**\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/**\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n let el = Dom.getEl(currSwf);\n let tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function(){\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n let tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n const tech = Dom.getEl(swfID).tech;\n const msg = 'FLASH: '+err;\n\n if (err === 'srcnotfound') {\n tech.trigger('error', { code: 4, message: msg });\n\n // errors we haven't categorized into the media errors\n } else {\n tech.trigger('error', msg);\n }\n};\n\n// Flash Version Check\nFlash.version = function(){\n let version = '0,0,0';\n\n // IE\n try {\n version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch(e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch(err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n const objTag = '`;\n });\n\n attributes = assign({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function(key){\n attrsString += `${key}=\"${attributes[key]}\" `;\n });\n\n return `${objTag}${attrsString}>${paramsString}`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nexport default Flash;\n",
"/**\n * @fileoverview HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n * @param {Player|Object} player\n * @param {Object=} options\n * @param {Function=} ready\n * @constructor\n */\nclass Html5 extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n const source = options.source;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n this.setSource(source);\n }\n\n if (this.el_.hasChildNodes()) {\n\n let nodes = this.el_.childNodes;\n let nodesLength = nodes.length;\n let removeNodes = [];\n\n while (nodesLength--) {\n let node = nodes[nodesLength];\n let nodeName = node.nodeName.toLowerCase();\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n this.remoteTextTracks().addTrack_(node.track);\n }\n }\n }\n\n for (let i=0; i= 0; i--) {\n const attr = settingsAttrs[i];\n let overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n }\n\n\n hideCaptions() {\n let tracks = this.el_.querySelectorAll('track');\n let i = tracks.length;\n const kinds = {\n 'captions': 1,\n 'subtitles': 1\n };\n\n while (i--) {\n let track = tracks[i].track;\n if ((track && track['kind'] in kinds) &&\n (!tracks[i]['default'])) {\n track.mode = 'disabled';\n }\n }\n }\n\n play() { this.el_.play(); }\n pause() { this.el_.pause(); }\n paused() { return this.el_.paused; }\n\n currentTime() { return this.el_.currentTime; }\n setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch(e) {\n log(e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n }\n\n duration() { return this.el_.duration || 0; }\n\n buffered() { return this.el_.buffered; }\n\n volume() { return this.el_.volume; }\n setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n muted() { return this.el_.muted; }\n setMuted(muted) { this.el_.muted = muted; }\n\n width() { return this.el_.offsetWidth; }\n height() { return this.el_.offsetHeight; }\n\n supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n let userAgent = window.navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n }\n\n enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function() {\n this.one('webkitendfullscreen', function() {\n this.trigger('fullscreenchange');\n });\n\n this.trigger('fullscreenchange');\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.el_.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function(){\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n }\n\n exitFullScreen() {\n this.el_.webkitExitFullScreen();\n }\n\n src(src) {\n if (src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(src);\n }\n }\n\n setSrc(src) { this.el_.src = src; }\n\n load(){ this.el_.load(); }\n\n currentSrc() { return this.el_.currentSrc; }\n\n poster() { return this.el_.poster; }\n setPoster(val) { this.el_.poster = val; }\n\n preload() { return this.el_.preload; }\n setPreload(val) { this.el_.preload = val; }\n\n autoplay() { return this.el_.autoplay; }\n setAutoplay(val) { this.el_.autoplay = val; }\n\n controls() { return this.el_.controls; }\n setControls(val) { this.el_.controls = !!val; }\n\n loop() { return this.el_.loop; }\n setLoop(val) { this.el_.loop = val; }\n\n error() { return this.el_.error; }\n seeking() { return this.el_.seeking; }\n ended() { return this.el_.ended; }\n defaultMuted() { return this.el_.defaultMuted; }\n\n playbackRate() { return this.el_.playbackRate; }\n setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n networkState() { return this.el_.networkState; }\n readyState() { return this.el_.readyState; }\n\n videoWidth() { return this.el_.videoWidth; }\n videoHeight() { return this.el_.videoHeight; }\n\n textTracks() {\n if (!this['featuresNativeTextTracks']) {\n return super.textTracks();\n }\n\n return this.el_.textTracks;\n }\n addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return super.addTextTrack(kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n }\n\n addRemoteTextTrack(options={}) {\n if (!this['featuresNativeTextTracks']) {\n return super.addRemoteTextTrack(options);\n }\n\n var track = document.createElement('track');\n\n if (options['kind']) {\n track['kind'] = options['kind'];\n }\n if (options['label']) {\n track['label'] = options['label'];\n }\n if (options['language'] || options['srclang']) {\n track['srclang'] = options['language'] || options['srclang'];\n }\n if (options['default']) {\n track['default'] = options['default'];\n }\n if (options['id']) {\n track['id'] = options['id'];\n }\n if (options['src']) {\n track['src'] = options['src'];\n }\n\n this.el().appendChild(track);\n\n if (track.track['kind'] === 'metadata') {\n track['track']['mode'] = 'hidden';\n } else {\n track['track']['mode'] = 'disabled';\n }\n\n track['onload'] = function() {\n var tt = track['track'];\n if (track.readyState >= 2) {\n if (tt['kind'] === 'metadata' && tt['mode'] !== 'hidden') {\n tt['mode'] = 'hidden';\n } else if (tt['kind'] !== 'metadata' && tt['mode'] !== 'disabled') {\n tt['mode'] = 'disabled';\n }\n track['onload'] = null;\n }\n };\n\n this.remoteTextTracks().addTrack_(track.track);\n\n return track;\n }\n\n removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return super.removeRemoteTextTrack(track);\n }\n\n var tracks, i;\n\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.el()['querySelectorAll']('track');\n\n for (i = 0; i < tracks.length; i++) {\n if (tracks[i] === track || tracks[i]['track'] === track) {\n tracks[i]['parentNode']['removeChild'](tracks[i]);\n break;\n }\n }\n }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/**\n * Element for testing browser HTML5 video capabilities\n * @type {Element}\n * @constant\n * @private\n */\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/**\n * Check if HTML5 video is supported by this browser/device\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/**\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/**\n * Check if the video element can handle the source natively\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n var match, ext;\n\n function canPlayType(type){\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch(e) {\n return '';\n }\n }\n\n // If a type was provided we should rely on that\n if (source.type) {\n return canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return canPlayType(`video/${ext}`);\n }\n\n return '';\n};\n\n/**\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/**\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/**\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = (volume / 2) + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/**\n * Check if playbackRate is supported in this browser/device.\n * @return {[type]} [description]\n */\nHtml5.canControlPlaybackRate = function(){\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/**\n * Check to see if native text tracks are supported by this browser/device\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n var supportsTextTracks;\n\n // Figure out native text track support\n // If mode is a number, we cannot change it because it'll disappear from view.\n // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n // Firefox isn't playing nice either with modifying the mode\n // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n supportsTextTracks = !!Html5.TEST_VID.textTracks;\n if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n }\n if (supportsTextTracks && browser.IS_FIREFOX) {\n supportsTextTracks = false;\n }\n\n return supportsTextTracks;\n};\n\n/**\n * Set the tech's volume control support status\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/**\n * Set the tech's playbackRate support status\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/**\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/**\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/**\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/**\n * Sets the tech's status on native text track support\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function() {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n if (!el) { return; }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while(el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function() {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nComponent.registerComponent('Html5', Html5);\nexport default Html5;\n",
"import Component from '../component';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @constructor\n */\nclass MediaLoader extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n if (!player.options_['sources'] || player.options_['sources'].length === 0) {\n for (let i=0, j=player.options_['techOrder']; i 0) {\n this.trigger('loadstart');\n }\n });\n }\n\n /* Fallbacks for unsupported event types\n ================================================================================ */\n // Manually trigger progress events based on changes to the buffered amount\n // Many flash players and older HTML5 browsers don't send progress or progress-like events\n manualProgressOn() {\n this.on('durationchange', this.onDurationChange);\n\n this.manualProgress = true;\n\n // Trigger progress watching when a source begins loading\n this.trackProgress();\n }\n\n manualProgressOff() {\n this.manualProgress = false;\n this.stopTrackingProgress();\n\n this.off('durationchange', this.onDurationChange);\n }\n\n trackProgress() {\n this.progressInterval = this.setInterval(Fn.bind(this, function(){\n // Don't trigger unless buffered amount is greater than last time\n\n let numBufferedPercent = this.bufferedPercent();\n\n if (this.bufferedPercent_ !== numBufferedPercent) {\n this.trigger('progress');\n }\n\n this.bufferedPercent_ = numBufferedPercent;\n\n if (numBufferedPercent === 1) {\n this.stopTrackingProgress();\n }\n }), 500);\n }\n\n onDurationChange() {\n this.duration_ = this.duration();\n }\n\n buffered() {\n return createTimeRange(0, 0);\n }\n\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration_);\n }\n\n stopTrackingProgress() {\n this.clearInterval(this.progressInterval);\n }\n\n /*! Time Tracking -------------------------------------------------------------- */\n manualTimeUpdatesOn() {\n this.manualTimeUpdates = true;\n\n this.on('play', this.trackCurrentTime);\n this.on('pause', this.stopTrackingCurrentTime);\n }\n\n manualTimeUpdatesOff() {\n this.manualTimeUpdates = false;\n this.stopTrackingCurrentTime();\n this.off('play', this.trackCurrentTime);\n this.off('pause', this.stopTrackingCurrentTime);\n }\n\n trackCurrentTime() {\n if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n this.currentTimeInterval = this.setInterval(function(){\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n }\n\n // Turn off play progress tracking (when paused or dragging)\n 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 dispose() {\n // Turn off any manual progress or timeupdate tracking\n if (this.manualProgress) { this.manualProgressOff(); }\n\n if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n super.dispose();\n }\n\n setCurrentTime() {\n // improve the accuracy of manual timeupdates\n if (this.manualTimeUpdates) { this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true }); }\n }\n\n initTextTrackListeners() {\n let textTrackListChanges = Fn.bind(this, function() {\n this.trigger('texttrackchange');\n });\n\n let tracks = this.textTracks();\n\n if (!tracks) return;\n\n tracks.addEventListener('removetrack', textTrackListChanges);\n tracks.addEventListener('addtrack', textTrackListChanges);\n\n this.on('dispose', Fn.bind(this, function() {\n tracks.removeEventListener('removetrack', textTrackListChanges);\n tracks.removeEventListener('addtrack', textTrackListChanges);\n }));\n }\n\n emulateTextTracks() {\n if (!window['WebVTT'] && this.el().parentNode != null) {\n let script = document.createElement('script');\n script.src = this.options_['vtt.js'] || '../node_modules/vtt.js/dist/vtt.js';\n this.el().parentNode.appendChild(script);\n window['WebVTT'] = true;\n }\n\n let tracks = this.textTracks();\n if (!tracks) {\n return;\n }\n\n let textTracksChanges = function() {\n let updateDisplay = Fn.bind(this, function() {\n this.trigger('texttrackchange');\n });\n\n this.trigger('texttrackchange');\n\n for (let i = 0; i < this.length; i++) {\n let track = this[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n };\n\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', Fn.bind(this, function() {\n tracks.removeEventListener('change', textTracksChanges);\n }));\n }\n\n /**\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n textTracks() {\n this.textTracks_ = this.textTracks_ || new TextTrackList();\n return this.textTracks_;\n }\n\n remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n return this.remoteTextTracks_;\n }\n\n 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 addRemoteTextTrack(options) {\n let track = createTrackHelper(this, options.kind, options.label, options.language, options);\n this.remoteTextTracks().addTrack_(track);\n return {\n track: track\n };\n }\n\n removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n this.remoteTextTracks().removeTrack_(track);\n }\n\n /**\n * Provide a default setPoster method for techs\n *\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n */\n setPoster() {}\n\n}\n\n/**\n * List of associated text tracks\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n let 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 let track = new TextTrack(options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/**\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n /**\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function(handler, index){\n let handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /**\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function(source){\n let handlers = _Tech.sourceHandlers || [];\n let can;\n\n for (let i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /**\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function(srcObj){\n let sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n /**\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function(source){\n let sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n log.error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n this.currentSource_ = source;\n this.sourceHandler_ = sh.handleSource(source, this);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n /**\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function(){\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.sourceHandler_.dispose();\n }\n };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nexport default Tech;\n",
"import * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n * readonly attribute unsigned long length;\n * getter TextTrackCue (unsigned long index);\n * TextTrackCue? getCueById(DOMString id);\n * };\n */\n\nlet TextTrackCueList = function(cues) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackCueList.prototype) {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.length_;\n }\n });\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackCueList.prototype.setCues_ = function(cues) {\n let oldLength = this.length || 0;\n let i = 0;\n let l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n let defineProp = function(i) {\n if (!(''+i in this)) {\n Object.defineProperty(this, '' + i, {\n get: function() {\n return this.cues_[i];\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\nTextTrackCueList.prototype.getCueById = function(id) {\n let result = null;\n for (let i = 0, l = this.length; i < l; i++) {\n let cue = this[i];\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackCueList;\n",
"import Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @constructor\n */\nclass TextTrackDisplay extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.toggleDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function() {\n if (player.tech && player.tech['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n let tracks = player.options_['tracks'] || [];\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n }));\n }\n\n toggleDisplay() {\n if (this.player_.tech && this.player_.tech['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-text-track-display'\n });\n }\n\n clearDisplay() {\n if (typeof window['WebVTT'] === 'function') {\n window['WebVTT']['processCues'](window, [], this.el_);\n }\n }\n\n updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n for (let i=0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['mode'] === 'showing') {\n this.updateForTrack(track);\n }\n }\n }\n\n updateForTrack(track) {\n if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n let overrides = this.player_['textTrackSettings'].getValues();\n\n let cues = [];\n for (let i = 0; i < track['activeCues'].length; i++) {\n cues.push(track['activeCues'][i]);\n }\n\n window['WebVTT']['processCues'](window, track['activeCues'], this.el_);\n\n let i = cues.length;\n while (i--) {\n let cueDiv = cues[i].displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'color',\n constructColor(overrides.color || '#fff',\n overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'backgroundColor',\n constructColor(overrides.backgroundColor || '#000',\n overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv,\n 'backgroundColor',\n constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n const fontSize = window.parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n }\n\n}\n\n// Add cue HTML to display\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' +\n parseInt(color[2] + color[2], 16) + ',' +\n parseInt(color[3] + color[3], 16) + ',' +\n opacity + ')';\n}\n\nfunction tryUpdateStyle(el, style, rule) {\n // some style changes will throw an error, particularly in IE8. Those should be noops.\n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n",
"/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\", \"hidden\", \"showing\" };\n */\nvar TextTrackMode = {\n 'disabled': 'disabled',\n 'hidden': 'hidden',\n 'showing': 'showing'\n};\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind { \"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\" };\n */\nvar TextTrackKind = {\n 'subtitles': 'subtitles',\n 'captions': 'captions',\n 'descriptions': 'descriptions',\n 'chapters': 'chapters',\n 'metadata': 'metadata'\n};\n\nexport { TextTrackMode, TextTrackKind };\n",
"import EventEmitter from '../event-emitter';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter TextTrack (unsigned long index);\n * TextTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n */\nlet TextTrackList = function(tracks) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackList.prototype) {\n list[prop] = TextTrackList.prototype[prop];\n }\n }\n\n tracks = tracks || [];\n list.tracks_ = [];\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.tracks_.length;\n }\n });\n\n for (let i = 0; i < tracks.length; i++) {\n list.addTrack_(tracks[i]);\n }\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackList.prototype = Object.create(EventEmitter.prototype);\nTextTrackList.prototype.constructor = TextTrackList;\n\n/*\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n*/\nTextTrackList.prototype.allowedEvents_ = {\n 'change': 'change',\n 'addtrack': 'addtrack',\n 'removetrack': 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TextTrackList.prototype.allowedEvents_) {\n TextTrackList.prototype['on' + event] = null;\n}\n\nTextTrackList.prototype.addTrack_ = function(track) {\n let index = this.tracks_.length;\n if (!(''+index in this)) {\n Object.defineProperty(this, index, {\n get: function() {\n return this.tracks_[index];\n }\n });\n }\n\n track.addEventListener('modechange', Fn.bind(this, function() {\n this.trigger('change');\n }));\n this.tracks_.push(track);\n\n this.trigger({\n type: 'addtrack',\n track: track\n });\n};\n\nTextTrackList.prototype.removeTrack_ = function(rtrack) {\n let result = null;\n let track;\n\n for (let i = 0, l = this.length; i < l; i++) {\n track = this[i];\n if (track === rtrack) {\n this.tracks_.splice(i, 1);\n break;\n }\n }\n\n this.trigger({\n type: 'removetrack',\n track: track\n });\n};\n\nTextTrackList.prototype.getTrackById = function(id) {\n let result = null;\n\n for (let i = 0, l = this.length; i < l; i++) {\n let track = this[i];\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackList;\n",
"import Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\nclass TextTrackSettings extends Component {\n\n constructor(player, options) {\n super(player, options);\n this.hide();\n\n Events.on(this.el().querySelector('.vjs-done-button'), 'click', Fn.bind(this, function() {\n this.saveSettings();\n this.hide();\n }));\n\n Events.on(this.el().querySelector('.vjs-default-button'), 'click', Fn.bind(this, function() {\n this.el().querySelector('.vjs-fg-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-color > select').selectedIndex = 0;\n this.el().querySelector('.window-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-text-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-window-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-edge-style select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-family select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-percent select').selectedIndex = 2;\n this.updateDisplay();\n }));\n\n Events.on(this.el().querySelector('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n if (player.options()['persistTextTrackSettings']) {\n this.restoreSettings();\n }\n }\n\n createEl() {\n return super.createEl('div', {\n className: 'vjs-caption-settings vjs-modal-overlay',\n innerHTML: captionOptionsMenuTemplate()\n });\n }\n\n getValues() {\n const el = this.el();\n\n const textEdge = getSelectedOptionValue(el.querySelector('.vjs-edge-style select'));\n const fontFamily = getSelectedOptionValue(el.querySelector('.vjs-font-family select'));\n const fgColor = getSelectedOptionValue(el.querySelector('.vjs-fg-color > select'));\n const textOpacity = getSelectedOptionValue(el.querySelector('.vjs-text-opacity > select'));\n const bgColor = getSelectedOptionValue(el.querySelector('.vjs-bg-color > select'));\n const bgOpacity = getSelectedOptionValue(el.querySelector('.vjs-bg-opacity > select'));\n const windowColor = getSelectedOptionValue(el.querySelector('.window-color > select'));\n const windowOpacity = getSelectedOptionValue(el.querySelector('.vjs-window-opacity > select'));\n const fontPercent = window['parseFloat'](getSelectedOptionValue(el.querySelector('.vjs-font-percent > select')));\n\n let result = {\n 'backgroundOpacity': bgOpacity,\n 'textOpacity': textOpacity,\n 'windowOpacity': windowOpacity,\n 'edgeStyle': textEdge,\n 'fontFamily': fontFamily,\n 'color': fgColor,\n 'backgroundColor': bgColor,\n 'windowColor': windowColor,\n 'fontPercent': fontPercent\n };\n for (let name in result) {\n if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n delete result[name];\n }\n }\n return result;\n }\n\n setValues(values) {\n const el = this.el();\n\n setSelectedOption(el.querySelector('.vjs-edge-style select'), values.edgeStyle);\n setSelectedOption(el.querySelector('.vjs-font-family select'), values.fontFamily);\n setSelectedOption(el.querySelector('.vjs-fg-color > select'), values.color);\n setSelectedOption(el.querySelector('.vjs-text-opacity > select'), values.textOpacity);\n setSelectedOption(el.querySelector('.vjs-bg-color > select'), values.backgroundColor);\n setSelectedOption(el.querySelector('.vjs-bg-opacity > select'), values.backgroundOpacity);\n setSelectedOption(el.querySelector('.window-color > select'), values.windowColor);\n setSelectedOption(el.querySelector('.vjs-window-opacity > select'), values.windowOpacity);\n\n let fontPercent = values.fontPercent;\n\n if (fontPercent) {\n fontPercent = fontPercent.toFixed(2);\n }\n\n setSelectedOption(el.querySelector('.vjs-font-percent > select'), fontPercent);\n }\n\n restoreSettings() {\n let [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n if (err) {\n log.error(err);\n }\n\n if (values) {\n this.setValues(values);\n }\n }\n\n saveSettings() {\n if (!this.player_.options()['persistTextTrackSettings']) {\n return;\n }\n\n let values = this.getValues();\n try {\n if (Object.getOwnPropertyNames(values).length > 0) {\n window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n } else {\n window.localStorage.removeItem('vjs-text-track-settings');\n }\n } catch (e) {}\n }\n\n updateDisplay() {\n let ttDisplay = this.player_.getChild('textTrackDisplay');\n if (ttDisplay) {\n ttDisplay.updateDisplay();\n }\n }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n let selectedOption;\n // not all browsers support selectedOptions, so, fallback to options\n if (target.selectedOptions) {\n selectedOption = target.selectedOptions[0];\n } else if (target.options) {\n selectedOption = target.options[target.options.selectedIndex];\n }\n\n return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n if (!value) {\n return;\n }\n\n let i;\n for (i = 0; i < target.options.length; i++) {\n const option = target.options[i];\n if (option.value === value) {\n break;\n }\n }\n\n target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n let template = `
\n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n
\n \n \n
`;\n\n return template;\n}\n\nexport default TextTrackSettings;\n",
"import TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventEmitter from '../event-emitter';\nimport document from 'global/document';\nimport window from 'global/window';\nimport XHR from '../xhr.js';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n */\nlet TextTrack = function(options={}) {\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n let tt = this;\n if (browser.IS_IE8) {\n tt = document.createElement('custom');\n\n for (let prop in TextTrack.prototype) {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n\n tt.tech_ = options.tech;\n\n let mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled';\n let kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles';\n let label = options['label'] || '';\n let language = options['language'] || options['srclang'] || '';\n let id = options['id'] || 'vjs_text_track_' + Guid.newGUID();\n\n if (kind === 'metadata' || kind === 'chapters') {\n mode = 'hidden';\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n let cues = new TextTrackCueList(tt.cues_);\n let activeCues = new TextTrackCueList(tt.activeCues_);\n\n let changed = false;\n let timeupdateHandler = Fn.bind(tt, function() {\n this['activeCues'];\n if (changed) {\n this['trigger']('cuechange');\n changed = false;\n }\n });\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'kind', {\n get: function() {\n return kind;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'label', {\n get: function() {\n return label;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'language', {\n get: function() {\n return language;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'id', {\n get: function() {\n return id;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function() {\n return mode;\n },\n set: function(newMode) {\n if (!TextTrackEnum.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n if (this['cues'].length === 0) {\n return activeCues; // nothing to do\n }\n\n let ct = this.tech_.currentTime();\n let active = [];\n\n for (let i = 0, l = this['cues'].length; i < l; i++) {\n let cue = this['cues'][i];\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 (let i = 0; i < active.length; i++) {\n if (indexOf.call(this.activeCues_, 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 set: Function.prototype\n });\n\n if (options.src) {\n loadTrack(options.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n if (browser.IS_IE8) {\n return tt;\n }\n};\n\nTextTrack.prototype = Object.create(EventEmitter.prototype);\nTextTrack.prototype.constructor = TextTrack;\n\n/*\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n 'cuechange': 'cuechange'\n};\n\nTextTrack.prototype.addCue = function(cue) {\n let tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this['cues'].setCues_(this.cues_);\n};\n\nTextTrack.prototype.removeCue = function(removeCue) {\n let removed = false;\n\n for (let i = 0, l = this.cues_.length; i < l; i++) {\n let cue = this.cues_[i];\n if (cue === removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n};\n\n/*\n * Downloading stuff happens below this point\n */\nvar parseCues = function(srcContent, track) {\n if (typeof window['WebVTT'] !== 'function') {\n //try again a bit later\n return window.setTimeout(function() {\n parseCues(srcContent, track);\n }, 25);\n }\n\n let parser = new window['WebVTT']['Parser'](window, window['vttjs'], window['WebVTT']['StringDecoder']());\n\n parser['oncue'] = function(cue) {\n track.addCue(cue);\n };\n parser['onparsingerror'] = function(error) {\n log.error(error);\n };\n\n parser['parse'](srcContent);\n parser['flush']();\n};\n\nvar loadTrack = function(src, track) {\n XHR(src, Fn.bind(this, function(err, response, responseBody){\n if (err) {\n return log.error(err);\n }\n\n\n track.loaded_ = true;\n parseCues(responseBody, track);\n }));\n};\n\nvar indexOf = function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n let O = Object(this);\n\n let len = O.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n let n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n if (n >= len) {\n return -1;\n }\n\n let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n};\n\nexport default TextTrack;\n",
"import document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\n\n/**\n * Device is an iPhone\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT);\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const 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 major,\n minor;\n\n if (!match) {\n return null;\n }\n\n major = match[1] && parseFloat(match[1]);\n 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 } else {\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\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_CHROME = (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n",
"import { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n * @param {Object} Buffered object\n * @param {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n */\nexport function bufferedPercent(buffered, duration) {\n var bufferedDuration = 0,\n start, end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0, 0);\n }\n\n for (let 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",
"import document from 'global/document';\nimport window from 'global/window';\nimport * as Guid from './guid.js';\nimport roundFloat from './round-float.js';\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n */\nexport function getEl(id){\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n * @param {String=} tagName Name of tag to be created.\n * @param {Object=} properties Element properties to be applied.\n * @return {Element}\n */\nexport function createEl(tagName='div', properties={}){\n let el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function(propName){\n let val = properties[propName];\n\n // Not remembering why we were checking for dash\n // but using setAttribute means you have to use getAttribute\n\n // The check for dash checks for the aria-* attributes, like aria-label, aria-valuemin.\n // The additional check for \"role\" is because the default method for adding attributes does not\n // add the attribute \"role\". My guess is because it's not a valid attribute in some namespaces, although\n // browsers handle the attribute just fine. The W3C allows for aria-* attributes to be used in pre-HTML5 docs.\n // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n if (propName.indexOf('aria-') !== -1 || propName === 'role') {\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n * @param {Element} child Element to insert\n * @param {[type]} parent Element to insert child into\n * @private\n */\nexport function insertElFirst(child, parent){\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/**\n * Unique attribute name to store an element's guid in\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n * @param {Element} el Element to store data for.\n * @return {Object}\n */\nexport function getElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.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 * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n */\nexport function hasElData(el) {\n const 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 * @param {Element} el Remove data for an element\n * @private\n */\nexport function removeElData(el) {\n let 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 * Check if an element has a CSS class\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n */\nexport function hasElClass(element, classToCheck) {\n return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n}\n\n/**\n * Add a CSS class name to an element\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n */\nexport function addElClass(element, classToAdd) {\n if (!hasElClass(element, classToAdd)) {\n element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n }\n}\n\n/**\n * Remove a CSS class name from an element\n * @param {Element} element Element to remove from class name\n * @param {String} classToAdd Classname to remove\n */\nexport function removeElClass(element, classToRemove) {\n if (!hasElClass(element, classToRemove)) {return;}\n\n let classNames = element.className.split(' ');\n\n // no arr.indexOf in ie8, and we don't want to add a big shim\n for (let i = classNames.length - 1; i >= 0; i--) {\n if (classNames[i] === classToRemove) {\n classNames.splice(i,1);\n }\n }\n\n element.className = classNames.join(' ');\n}\n\n/**\n * Apply attributes to an HTML element.\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n */\nexport function setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let 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 * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n */\nexport function getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n 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 knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n 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// Attempt to block the ability to select text while dragging controls\nexport function blockTextSelection() {\n document.body.focus();\n document.onselectstart = function() {\n return false;\n };\n}\n\n// Turn off text selection blocking\nexport function unblockTextSelection() {\n document.onselectstart = function() {\n return true;\n };\n}\n\n// Offset Left\n// getBoundingClientRect technique from John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\nexport function findElPosition(el) {\n let box;\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 const docEl = document.documentElement;\n const body = document.body;\n\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n const scrollLeft = window.pageXOffset || body.scrollLeft;\n const left = box.left + scrollLeft - clientLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const scrollTop = window.pageYOffset || body.scrollTop;\n const top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: roundFloat(left),\n top: roundFloat(top)\n };\n}\n",
"/**\n * @fileoverview 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\nimport * as Dom from './dom.js';\nimport * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\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 * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n */\nexport function on(elem, type, fn){\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n let data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event){\n\n if (data.disabled) return;\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 handlersCopy[m].call(elem, event);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\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 * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n */\nexport function off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n let data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) { return; }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function(t){\n data.handlers[t] = [];\n _cleanUpEvents(elem,t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (let t in data.handlers) removeType(t);\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (let 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 * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n */\nexport function trigger(elem, event) {\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 = (Dom.hasElData(elem)) ? Dom.getElData(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 }\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);\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 !== false) {\n trigger(parent, event);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(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 * @param {Element|Object} elem Element or object to\n * @param {String|Array} type\n * @param {Function} fn\n */\nexport function one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function(){\n off(elem, type, func);\n fn.apply(this, arguments);\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 || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n */\nexport function fixEvent(event) {\n\n function returnTrue() { return true; }\n function returnFalse() { return false; }\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 if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation') {\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 event.relatedTarget = event.fromElement === event.target ?\n event.toElement :\n event.fromElement;\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.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 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) {\n var doc = document.documentElement, body = document.body;\n\n event.pageX = event.clientX +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (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) {\n event.button = (event.button & 1 ? 0 :\n (event.button & 4 ? 1 :\n (event.button & 2 ? 2 : 0)));\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(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 Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\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",
"import { newGUID } from './guid.js';\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 * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n * @private\n */\nexport const bind = function(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) { fn.guid = newGUID(); }\n\n // Create the new function that changes the context\n let ret = function() {\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 ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n return ret;\n};\n",
"/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @private\n */\nfunction formatTime(seconds, guide=seconds) {\n let s = Math.floor(seconds % 60);\n let m = Math.floor(seconds / 60 % 60);\n let h = Math.floor(seconds / 3600);\n const gm = Math.floor(guide / 60 % 60);\n const gh = Math.floor(guide / 3600);\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-';\n }\n\n // Check if we need to show hours\n h = (h > 0 || gh > 0) ? h + ':' : '';\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n // Check if leading zero is need for seconds\n s = (s < 10) ? '0' + s : s;\n\n return h + m + s;\n}\n\nexport default formatTime;\n",
"/**\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n */\nexport function newGUID() {\n return _guid++;\n}\n",
"import window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param {String} type The type of message, or `null` for `log`\n * @param {[type]} args The args to be passed to the log\n * @private\n */\nfunction _logType(type, args){\n // convert args to an array to get array functions\n let argsArray = Array.prototype.slice.call(args);\n // if there's no console then don't try to output messages\n // they will still be stored in log.history\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 let noop = function(){};\n\n let console = window['console'] || {\n 'log': noop,\n 'warn': noop,\n 'error': noop\n };\n\n if (type) {\n // add the type to the front of the message\n argsArray.unshift(type.toUpperCase()+':');\n } else {\n // default to log with no prefix\n type = 'log';\n }\n\n // add to history\n log.history.push(argsArray);\n\n // add console prefix after adding to history\n argsArray.unshift('VIDEOJS:');\n\n // call appropriate log function\n if (console[type].apply) {\n console[type].apply(console, argsArray);\n } else {\n // ie8 doesn't allow error.apply, but it will just join() the array anyway\n console[type](argsArray.join(' '));\n }\n}\n\nexport default log;\n",
"import merge from 'lodash.merge';\nimport isPlainObject from 'lodash.isplainobject';\n\n/**\n * Merge two options objects, recursively merging **only** plain object\n * properties. Previously `deepMerge`.\n *\n * @param {Object} object The destination object\n * @param {...Object} source One or more objects to merge into the first\n *\n * @returns {Object} The updated first object\n */\nexport default function mergeOptions(object={}) {\n\n // Allow for infinite additional object args to merge\n Array.prototype.slice.call(arguments, 1).forEach(function(source){\n\n // Recursively merge only plain objects\n // All other values will be directly copied\n merge(object, source, function(a, b) {\n\n // If we're not working with a plain object, copy the value as is\n if (!isPlainObject(b)) {\n return b;\n }\n\n // If the new value is a plain object but the first object value is not\n // we need to create a new object for the first object to merge with.\n // This makes it consistent with how merge() works by default\n // and also protects from later changes the to first object affecting\n // the second object's values.\n if (!isPlainObject(a)) {\n return mergeOptions({}, b);\n }\n });\n });\n\n return object;\n}\n",
"/**\n * Should round off a number to a decimal place\n * @param {Number} num Number to round\n * @param {Number} dec Number of decimal places to round to\n * @return {Number} Rounded number\n * @private\n */\nconst roundFloat = function(num, dec=0) {\n return Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);\n};\n\nexport default roundFloat;\n",
"/**\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n * @param {Number} start Start time in seconds\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @private\n */\nexport function createTimeRange(start, end){\n return {\n length: 1,\n start: function() { return start; },\n end: function() { return end; }\n };\n}\n",
"/**\n * Uppercase the first letter of a string\n * @param {String} string String to be uppercased\n * @return {String}\n * @private\n */\nfunction toTitleCase(string){\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n",
"import document from 'global/document';\n\n/**\n * Resolve and parse the elements of a URL\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n */\nexport const parseUrl = function(url) {\n const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n let a = document.createElement('a');\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 let addToBody = (a.host === '' && a.protocol !== 'file:');\n let div;\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 let details = {};\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 if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\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 * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n */\nexport const getAbsoluteURL = function(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 let div = document.createElement('div');\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 if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n */\nexport const getFileExtension = function(path) {\n if(typeof path === 'string'){\n let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n let pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n",
"import document from 'global/document';\nimport * as setup from './setup';\nimport Component from './component';\nimport globalOptions from './global-options.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\n\nimport assign from 'object.assign';\nimport log from './utils/log.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport extendsFn from './extends.js';\nimport merge from 'lodash.merge';\n\n// Include the built-in techs\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n document.createElement('video');\n document.createElement('audio');\n document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n *\n * The `videojs` function can be used to initialize or retrieve a player.\n *\n * var myPlayer = videojs('my_video_id');\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @namespace\n */\nvar videojs = function(id, options, ready){\n var tag; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (Player.players[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n }\n\n if (ready) {\n Player.players[id].ready(ready);\n }\n\n return Player.players[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || new Player(tag, options, ready);\n};\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/**\n * Current software version (semver)\n * @type {String}\n */\nvideojs['VERSION'] = '__VERSION__';\n\n/**\n * Get the global options object\n *\n * @returns {Object} The global options object\n */\nvideojs.getGlobalOptions = () => globalOptions;\n\n/**\n * Set options that will apply to every player\n *\n * videojs.setGlobalOptions({\n * autoplay: true\n * });\n * // -> all players will autoplay by default\n *\n * NOTE: This will do a deep merge with the new options,\n * not overwrite the entire global options object.\n *\n * @returns {Object} The updated global options object\n */\nvideojs.setGlobalOptions = function(newOptions) {\n return mergeOptions(globalOptions, newOptions);\n};\n\n// Set CDN Version of swf\nconst MINOR_VERSION = '__VERSION_NO_PATCH__';\nconst ACCESS_PROTOCOL = ('https:' === document.location.protocol ? 'https://' : 'http://');\n\n// The added (+) blocks the replace from changing this _VERSION_NO_PATCH_ string\nif (MINOR_VERSION !== '__VERSION_'+'NO_PATCH__') {\n globalOptions['flash']['swf'] = `${ACCESS_PROTOCOL}vjs.zencdn.net/${MINOR_VERSION}/video-js.swf`;\n}\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @returns {Object} The created players\n */\nvideojs.getPlayers = function() {\n return Player.players;\n};\n\n/**\n * Get a component class object by name\n *\n * var VjsButton = videojs.getComponent('Button');\n *\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n *\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n *\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n *\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n *\n * // Subclass the component (see 'extends' doc for more info)\n * var MySpecialButton = videojs.extends(VjsButton, {});\n *\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n *\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n *\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @returns {Component} The newly registered component\n */\nvideojs.registerComponent = Component.registerComponent;\n\n/**\n * A suite of browser and device tests\n * @type {Object}\n */\nvideojs.browser = browser;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extends` keyword\n *\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n *\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n *\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extends(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n *\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n *\n * @returns {Function} The newly created subclass\n */\nvideojs.extends = extendsFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n *\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n *\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n *\n * @param {Object} The options object whose values will be overriden\n * @param {Object} The options object with values to override the first\n * @param {Object} Any number of additional options objects\n *\n * @returns {Object} a new object with the merged values\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Create a Video.js player plugin\n *\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n *\n * **See the plugin guide in the docs for a more detailed example**\n *\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n *\n * // USAGE EXAMPLES\n *\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n *\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n *\n * @param {String} The plugin name\n * @param {Function} The plugin function that will be called with options\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n *\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n *\n * @return {Object} The resulting language dictionary object\n */\nvideojs.addLanguage = function(code, data){\n return merge(globalOptions.languages, { [code]: data })[code];\n};\n\n// REMOVING: We probably should add this to the migration plugin\n// // Expose but deprecate the window[componentName] method for accessing components\n// Object.getOwnPropertyNames(Component.components).forEach(function(name){\n// let component = Component.components[name];\n//\n// // A deprecation warning as the constuctor\n// module.exports[name] = function(player, options, ready){\n// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent(\"componentName\")');\n//\n// return new Component(player, options, ready);\n// };\n//\n// // Allow the prototype and class methods to be accessible still this way\n// // Though anything that attempts to override class methods will no longer work\n// assign(module.exports[name], component);\n// });\n\n/**\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n}\n\nexport default videojs;\n",
"import * as Url from './utils/url.js';\nimport log from './utils/log.js';\nimport mergeOptions from './utils/merge-options.js';\nimport window from 'global/window';\n\n/**\n * Simple http request for retrieving external files (e.g. text tracks)\n *\n * ##### Example\n *\n * // using url string\n * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){});\n *\n * // or options block\n * videojs.xhr({\n * uri: 'http://example.com/myfile.vtt',\n * method: 'GET',\n * responseType: 'text'\n * }, function(error, response, responseBody){\n * if (error) {\n * // log the error\n * } else {\n * // successful, do something with the response\n * }\n * });\n *\n *\n * API is modeled after the Raynos/xhr, which we hope to use after\n * getting browserify implemented.\n * https://github.com/Raynos/xhr/blob/master/index.js\n *\n * @param {Object|String} options Options block or URL string\n * @param {Function} callback The callback function\n * @returns {Object} The request\n */\nvar xhr = function(options, callback){\n let abortTimeout;\n\n // If options is a string it's the url\n if (typeof options === 'string') {\n options = {\n uri: options\n };\n }\n\n // Merge with default options\n mergeOptions({\n method: 'GET',\n timeout: 45 * 1000\n }, options);\n\n callback = callback || function(){};\n\n let XHR = window.XMLHttpRequest;\n\n if (typeof XHR === 'undefined') {\n // Shim XMLHttpRequest for older IEs\n XHR = function () {\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}\n throw new Error('This browser does not support XMLHttpRequest.');\n };\n }\n\n let request = new XHR();\n // Store a reference to the url on the request instance\n request.uri = options.uri;\n\n let urlInfo = Url.parseUrl(options.uri);\n let winLoc = window.location;\n\n let successHandler = function(){\n window.clearTimeout(abortTimeout);\n callback(null, request, request.response || request.responseText);\n };\n\n let errorHandler = function(err){\n window.clearTimeout(abortTimeout);\n\n if (!err || typeof err === 'string') {\n err = new Error(err);\n }\n\n callback(err, request);\n };\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 const crossOrigin = (urlInfo.protocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n // XDomainRequest -- Use for IE if XMLHTTPRequest2 isn't available\n // 'withCredentials' is only available in XMLHTTPRequest2\n // Also XDomainRequest has a lot of gotchas, so only use if cross domain\n if (crossOrigin && window.XDomainRequest && !('withCredentials' in request)) {\n request = new window.XDomainRequest();\n request.onload = successHandler;\n request.onerror = errorHandler;\n // These blank handlers need to be set to fix ie9\n // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/\n request.onprogress = function(){};\n request.ontimeout = function(){};\n\n // XMLHTTPRequest\n } else {\n const fileUrl = (urlInfo.protocol === 'file:' || winLoc.protocol === 'file:');\n\n request.onreadystatechange = function() {\n if (request.readyState === 4) {\n if (request.timedout) {\n return errorHandler('timeout');\n }\n\n if (request.status === 200 || fileUrl && request.status === 0) {\n successHandler();\n } else {\n errorHandler();\n }\n }\n };\n\n if (options.timeout) {\n abortTimeout = window.setTimeout(function() {\n if (request.readyState !== 4) {\n request.timedout = true;\n request.abort();\n }\n }, options.timeout);\n }\n }\n\n // open the connection\n try {\n // Third arg is async, or ignored by XDomainRequest\n request.open(options.method || 'GET', options.uri, true);\n } catch(err) {\n return errorHandler(err);\n }\n\n // withCredentials only supported by XMLHttpRequest2\n if(options.withCredentials) {\n request.withCredentials = true;\n }\n\n if (options.responseType) {\n request.responseType = options.responseType;\n }\n\n // send the request\n try {\n request.send();\n } catch(err) {\n return errorHandler(err);\n }\n\n return request;\n};\n\nexport default xhr;\n"
]
}