react-native-fetch-blob
Version:
A module provides upload, download, and files access API. Supports file stream read/write for process large files.
79 lines (67 loc) • 1.88 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]
}
}
}