UNPKG

icecast-metadata-player

Version:

Simple to use Javascript class that plays an Icecast stream with real-time metadata updates

51 lines (44 loc) 1.22 kB
// support for Safari 13 // https://stackoverflow.com/a/58209729/14911733 export default class EventTargetPolyfill { constructor() { this._listeners = []; } hasEventListener(type, listener) { return this._listeners.some( (item) => item.type === type && item.listener === listener, ); } addEventListener(type, listener, options = {}) { if (!this.hasEventListener(type, listener)) { this._listeners.push({ type, listener, options }); } // console.log(`${this}-listeners:`,this._listeners); return this; } removeEventListener(type, listener) { const index = this._listeners.findIndex( (item) => item.type === type && item.listener === listener, ); if (index >= 0) this._listeners.splice(index, 1); return this; } removeEventListeners() { this._listeners = []; return this; } dispatchEvent(evt) { this._listeners .filter((item) => item.type === evt.type) .forEach((item) => { const { type, listener, options: { once }, } = item; listener.call(this, evt); if (once === true) this.removeEventListener(type, listener); }); return this; } }