6614be4599c6782681a8cce45008d7d3bbc10524
[yaffs-website] / tracks / html-track-element.js
1 'use strict';
2
3 exports.__esModule = true;
4
5 var _browser = require('../utils/browser.js');
6
7 var browser = _interopRequireWildcard(_browser);
8
9 var _document = require('global/document');
10
11 var _document2 = _interopRequireDefault(_document);
12
13 var _eventTarget = require('../event-target');
14
15 var _eventTarget2 = _interopRequireDefault(_eventTarget);
16
17 var _textTrack = require('../tracks/text-track');
18
19 var _textTrack2 = _interopRequireDefault(_textTrack);
20
21 function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
22
23 function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
24
25 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
26
27 function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
28
29 function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
30                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 * @file html-track-element.js
31                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 */
32
33 /**
34  * @typedef {HTMLTrackElement~ReadyState}
35  * @enum {number}
36  */
37 var NONE = 0;
38 var LOADING = 1;
39 var LOADED = 2;
40 var ERROR = 3;
41
42 /**
43  * A single track represented in the DOM.
44  *
45  * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement}
46  * @extends EventTarget
47  */
48
49 var HTMLTrackElement = function (_EventTarget) {
50   _inherits(HTMLTrackElement, _EventTarget);
51
52   /**
53    * Create an instance of this class.
54    *
55    * @param {Object} options={}
56    *        Object of option names and values
57    *
58    * @param {Tech} options.tech
59    *        A reference to the tech that owns this HTMLTrackElement.
60    *
61    * @param {TextTrack~Kind} [options.kind='subtitles']
62    *        A valid text track kind.
63    *
64    * @param {TextTrack~Mode} [options.mode='disabled']
65    *        A valid text track mode.
66    *
67    * @param {string} [options.id='vjs_track_' + Guid.newGUID()]
68    *        A unique id for this TextTrack.
69    *
70    * @param {string} [options.label='']
71    *        The menu label for this track.
72    *
73    * @param {string} [options.language='']
74    *        A valid two character language code.
75    *
76    * @param {string} [options.srclang='']
77    *        A valid two character language code. An alternative, but deprioritized
78    *        vesion of `options.language`
79    *
80    * @param {string} [options.src]
81    *        A url to TextTrack cues.
82    *
83    * @param {boolean} [options.default]
84    *        If this track should default to on or off.
85    */
86   function HTMLTrackElement() {
87     var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
88
89     _classCallCheck(this, HTMLTrackElement);
90
91     var _this = _possibleConstructorReturn(this, _EventTarget.call(this));
92
93     var readyState = void 0;
94     var trackElement = _this; // eslint-disable-line
95
96     if (browser.IS_IE8) {
97       trackElement = _document2['default'].createElement('custom');
98
99       for (var prop in HTMLTrackElement.prototype) {
100         if (prop !== 'constructor') {
101           trackElement[prop] = HTMLTrackElement.prototype[prop];
102         }
103       }
104     }
105
106     var track = new _textTrack2['default'](options);
107
108     trackElement.kind = track.kind;
109     trackElement.src = track.src;
110     trackElement.srclang = track.language;
111     trackElement.label = track.label;
112     trackElement['default'] = track['default'];
113
114     /**
115      * @member {HTMLTrackElement~ReadyState} readyState
116      *         The current ready state of the track element.
117      */
118     Object.defineProperty(trackElement, 'readyState', {
119       get: function get() {
120         return readyState;
121       }
122     });
123
124     /**
125      * @member {TextTrack} track
126      *         The underlying TextTrack object.
127      */
128     Object.defineProperty(trackElement, 'track', {
129       get: function get() {
130         return track;
131       }
132     });
133
134     readyState = NONE;
135
136     /**
137      * @listens TextTrack#loadeddata
138      * @fires HTMLTrackElement#load
139      */
140     track.addEventListener('loadeddata', function () {
141       readyState = LOADED;
142
143       trackElement.trigger({
144         type: 'load',
145         target: trackElement
146       });
147     });
148
149     if (browser.IS_IE8) {
150       var _ret;
151
152       return _ret = trackElement, _possibleConstructorReturn(_this, _ret);
153     }
154     return _this;
155   }
156
157   return HTMLTrackElement;
158 }(_eventTarget2['default']);
159
160 HTMLTrackElement.prototype.allowedEvents_ = {
161   load: 'load'
162 };
163
164 HTMLTrackElement.NONE = NONE;
165 HTMLTrackElement.LOADING = LOADING;
166 HTMLTrackElement.LOADED = LOADED;
167 HTMLTrackElement.ERROR = ERROR;
168
169 exports['default'] = HTMLTrackElement;