atriusmaps-node-sdk
Version:
This project provides an API to Atrius Personal Wayfinder maps within a Node environment. See the README.md for more information
59 lines (56 loc) • 1.21 kB
JavaScript
;
function fire(...args) {
const observers = this._observers;
if (!observers) {
return void 0;
}
for (let x = 0; x < observers.length; x++) {
try {
observers[x].apply(this, args);
} catch (err) {
console.error(err);
}
}
return this;
}
function observe(cb) {
if (!this._observers) {
this._observers = [];
}
this._observers.push(cb);
return {
detach: detach.bind(this, cb),
ob: this
};
}
function detach(cb) {
this._observers?.splice(this._observers.indexOf(cb), 1);
}
function filter(fn) {
const filteredObserver = create();
this.observe(function(...args) {
if (fn.apply(this, args)) {
filteredObserver.fire(...args);
}
});
return filteredObserver;
}
function filterByName(eventName) {
return filter.call(this, function(name) {
return eventName === name;
});
}
function on(value, cb) {
return filterByName.call(this, value).observe(cb);
}
const observable = { detach, filter, fire, observe, on };
function extend(to, from) {
return Object.assign(to, from);
}
function create(ob) {
if (ob) {
return extend(ob, observable);
}
return Object.create(observable);
}
module.exports = create;