UNPKG

vpaid-html5-client

Version:
61 lines (48 loc) 1.74 kB
'use strict'; function Subscriber() { this._subscribers = {}; } Subscriber.prototype.subscribe = function subscribe(handler, eventName, context) { if (!this.isHandlerAttached(handler, eventName)) { this.get(eventName).push({handler: handler, context: context, eventName: eventName}); } }; Subscriber.prototype.unsubscribe = function unsubscribe(handler, eventName) { this._subscribers[eventName] = this.get(eventName).filter(function (subscriber) { return handler !== subscriber.handler; }); }; Subscriber.prototype.unsubscribeAll = function unsubscribeAll() { this._subscribers = {}; }; Subscriber.prototype.trigger = function(eventName, data) { var that = this; var subscribers = this.get(eventName) .concat(this.get('*')); subscribers.forEach(function (subscriber) { setTimeout(function () { if (that.isHandlerAttached(subscriber.handler, subscriber.eventName)) { subscriber.handler.call(subscriber.context, data); } }, 0); }); }; Subscriber.prototype.triggerSync = function(eventName, data) { var subscribers = this.get(eventName) .concat(this.get('*')); subscribers.forEach(function (subscriber) { subscriber.handler.call(subscriber.context, data); }); }; Subscriber.prototype.get = function get(eventName) { if (!this._subscribers[eventName]) { this._subscribers[eventName] = []; } return this._subscribers[eventName]; }; Subscriber.prototype.isHandlerAttached = function isHandlerAttached(handler, eventName) { return this.get(eventName).some(function(subscriber) { return handler === subscriber.handler; }) }; module.exports = Subscriber;