(function () {
/**
* @namespace observer
* @memberof Help4
*/
Help4.observer = {};
/**
* the callback function that is called in case an event occurs
* @callback Help4.observer.Callback
* @param {Object} event - the event that is caught by the observer
* @returns {*}
*/
/**
* Base class for observers.
* @augments Help4.jscore.Base
*/
Help4.observer.Observer = class extends Help4.jscore.Base {
/**
* @override
* @param {Help4.observer.Callback} callback
* @param {Object} [derived]
*/
constructor(callback, derived) {
super({
statics: {
_callback: {init: callback, destroy: false},
_connections: {init: [], destroy: false}
},
derived
});
}
/** destroys the observer */
destroy() {
this.disconnect();
super.destroy();
}
/**
* returns the number of active connections
* @returns {number}
*/
count() {
return this._connections.length;
}
/**
* starts target observation
* @param {*} target - the to be observed target
* @param {Object} [options] - configuration, options, data
* @returns {Help4.observer.Observer}
*/
observe(target, options) {
const {_connections} = this;
for (const {target: t} of _connections) {
if (t === target) {
this.disconnect();
break;
}
}
_connections.push({target, options});
return this;
}
/**
* stops all observations
* @returns {Help4.observer.Observer}
*/
disconnect() {
this._connections = [];
return this;
}
}
})();