react-native-blob-util
Version:
A module provides upload, download, and files access API. Supports file stream read/write for process large files.
79 lines (67 loc) • 2.11 kB
JavaScript
// Copyright 2016 wkh237@github. All rights reserved.
// Use of this source code is governed by a MIT-style license that can be
// found in the LICENSE file.
import Log from '../utils/log.js';
const log = new Log('EventTarget');
log.disable();
export default class EventTarget {
listeners: any;
constructor() {
log.info('constructor called');
this.listeners = {};
}
/**
* Add an event listener to given event type
* @param {string} type Event type string
* @param {(Event) => void} cb Event handler function
*/
addEventListener(type: string, cb: () => void) {
log.info('add event listener', type, cb);
if (!(type in this.listeners)) {
this.listeners[type] = [];
}
this.listeners[type].push(cb);
}
/**
* Remove an event listener
* @param {string} type Type of the event listener
* @param {()=>void} cb Event listener function.
* @return {[type]} [description]
*/
removeEventListener(type: string, cb: () => void) {
log.info('remove event listener', type, cb);
if (!(type in this.listeners))
return;
let handlers = this.listeners[type];
for (let i in handlers) {
if (cb === handlers[i]) {
handlers.splice(i, 1);
return this.removeEventListener(type, cb);
}
}
}
/**
* Dispatch an event
* @param {string} type Event type.
* @param {Event} event Event data payload.
*/
dispatchEvent(type: string, event: Event) {
log.info('dispatch event', event);
if (!(type in this.listeners))
return;
let handlers = this.listeners[type];
for (let i in handlers) {
handlers[i].call(this, event);
}
}
/**
* Remove all registered listeners from this object.
* @nonstandard
* @return {[type]} [description]
*/
clearEventListeners() {
for (let i in this.listeners) {
delete this.listeners[i];
}
}
}