vasille
Version:
The first Developer eXperience Orientated front-end framework (core library).
67 lines (66 loc) • 1.64 kB
JavaScript
/**
* Represent a listener for a model
* @class Listener
*/
export class Listener {
constructor() {
/**
* Functions to run on adding new items
* @type Set
*/
this.onAdded = new Set();
/**
* Functions to run on item removing
* @type Set
*/
this.onRemoved = new Set();
}
/**
* Emits added event to listeners
* @param index {*} index of value
* @param value {*} value of added item
*/
emitAdded(index, value) {
this.onAdded.forEach(handler => {
handler(index, value);
});
}
/**
* Emits removed event to listeners
* @param index {*} index of removed value
* @param value {*} value of removed item
*/
emitRemoved(index, value) {
this.onRemoved.forEach(handler => {
handler(index, value);
});
}
/**
* Adds a handler to added event
* @param handler {function} function to run on event emitting
*/
onAdd(handler) {
this.onAdded.add(handler);
}
/**
* Adds a handler to removed event
* @param handler {function} function to run on event emitting
*/
onRemove(handler) {
this.onRemoved.add(handler);
}
/**
* Removes an handler from added event
* @param handler {function} handler to remove
*/
offAdd(handler) {
this.onAdded.delete(handler);
}
/**
* Removes an handler form removed event
* @param handler {function} handler to remove
*/
offRemove(handler) {
this.onRemoved.delete(handler);
}
}