- 1 :
/**
- 2 :
* @file html-track-element-list.js
- 3 :
*/
- 4 :
- 5 :
/**
- 6 :
* The current list of {@link HtmlTrackElement}s.
- 7 :
*/
- 8 :
class HtmlTrackElementList {
- 9 :
- 10 :
/**
- 11 :
* Create an instance of this class.
- 12 :
*
- 13 :
* @param {HtmlTrackElement[]} [tracks=[]]
- 14 :
* A list of `HtmlTrackElement` to instantiate the list with.
- 15 :
*/
- 16 :
constructor(trackElements = []) {
- 17 :
this.trackElements_ = [];
- 18 :
- 19 :
/**
- 20 :
* @memberof HtmlTrackElementList
- 21 :
* @member {number} length
- 22 :
* The current number of `Track`s in the this Trackist.
- 23 :
* @instance
- 24 :
*/
- 25 :
Object.defineProperty(this, 'length', {
- 26 :
get() {
- 27 :
return this.trackElements_.length;
- 28 :
}
- 29 :
});
- 30 :
- 31 :
for (let i = 0, length = trackElements.length; i < length; i++) {
- 32 :
this.addTrackElement_(trackElements[i]);
- 33 :
}
- 34 :
}
- 35 :
- 36 :
/**
- 37 :
* Add an {@link HtmlTrackElement} to the `HtmlTrackElementList`
- 38 :
*
- 39 :
* @param {HtmlTrackElement} trackElement
- 40 :
* The track element to add to the list.
- 41 :
*
- 42 :
* @private
- 43 :
*/
- 44 :
addTrackElement_(trackElement) {
- 45 :
const index = this.trackElements_.length;
- 46 :
- 47 :
if (!('' + index in this)) {
- 48 :
Object.defineProperty(this, index, {
- 49 :
get() {
- 50 :
return this.trackElements_[index];
- 51 :
}
- 52 :
});
- 53 :
}
- 54 :
- 55 :
// Do not add duplicate elements
- 56 :
if (this.trackElements_.indexOf(trackElement) === -1) {
- 57 :
this.trackElements_.push(trackElement);
- 58 :
}
- 59 :
}
- 60 :
- 61 :
/**
- 62 :
* Get an {@link HtmlTrackElement} from the `HtmlTrackElementList` given an
- 63 :
* {@link TextTrack}.
- 64 :
*
- 65 :
* @param {TextTrack} track
- 66 :
* The track associated with a track element.
- 67 :
*
- 68 :
* @return {HtmlTrackElement|undefined}
- 69 :
* The track element that was found or undefined.
- 70 :
*
- 71 :
* @private
- 72 :
*/
- 73 :
getTrackElementByTrack_(track) {
- 74 :
let trackElement_;
- 75 :
- 76 :
for (let i = 0, length = this.trackElements_.length; i < length; i++) {
- 77 :
if (track === this.trackElements_[i].track) {
- 78 :
trackElement_ = this.trackElements_[i];
- 79 :
- 80 :
break;
- 81 :
}
- 82 :
}
- 83 :
- 84 :
return trackElement_;
- 85 :
}
- 86 :
- 87 :
/**
- 88 :
* Remove a {@link HtmlTrackElement} from the `HtmlTrackElementList`
- 89 :
*
- 90 :
* @param {HtmlTrackElement} trackElement
- 91 :
* The track element to remove from the list.
- 92 :
*
- 93 :
* @private
- 94 :
*/
- 95 :
removeTrackElement_(trackElement) {
- 96 :
for (let i = 0, length = this.trackElements_.length; i < length; i++) {
- 97 :
if (trackElement === this.trackElements_[i]) {
- 98 :
if (this.trackElements_[i].track && typeof this.trackElements_[i].track.off === 'function') {
- 99 :
this.trackElements_[i].track.off();
- 100 :
}
- 101 :
- 102 :
if (typeof this.trackElements_[i].off === 'function') {
- 103 :
this.trackElements_[i].off();
- 104 :
}
- 105 :
this.trackElements_.splice(i, 1);
- 106 :
break;
- 107 :
}
- 108 :
}
- 109 :
}
- 110 :
}
- 111 :
- 112 :
export default HtmlTrackElementList;