123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- (function() {
- var Mixin, Signal, Subscriber, Subscription, WeakMap, _ref, _ref1,
- __hasProp = {}.hasOwnProperty,
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
- __slice = [].slice;
- Mixin = require('mixto');
- Signal = null;
- WeakMap = (_ref = global.WeakMap) != null ? _ref : require('es6-weak-map');
- Subscription = require('./subscription');
- module.exports = Subscriber = (function(_super) {
- __extends(Subscriber, _super);
- function Subscriber() {
- _ref1 = Subscriber.__super__.constructor.apply(this, arguments);
- return _ref1;
- }
- Subscriber.prototype.subscribeWith = function(eventEmitter, methodName, args) {
- var callback, eventNames;
- if (eventEmitter[methodName] == null) {
- throw new Error("Object does not have method '" + methodName + "' with which to subscribe");
- }
- eventEmitter[methodName].apply(eventEmitter, args);
- eventNames = args[0];
- callback = args[args.length - 1];
- return this.addSubscription(new Subscription(eventEmitter, eventNames, callback));
- };
- Subscriber.prototype.addSubscription = function(subscription) {
- var emitter;
- if (this._subscriptions == null) {
- this._subscriptions = [];
- }
- this._subscriptions.push(subscription);
- emitter = subscription.emitter;
- if (emitter != null) {
- if (this._subscriptionsByObject == null) {
- this._subscriptionsByObject = new WeakMap;
- }
- if (this._subscriptionsByObject.has(emitter)) {
- this._subscriptionsByObject.get(emitter).push(subscription);
- } else {
- this._subscriptionsByObject.set(emitter, [subscription]);
- }
- }
- return subscription;
- };
- Subscriber.prototype.subscribe = function() {
- var args, eventEmitterOrSubscription;
- eventEmitterOrSubscription = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
- if (args.length === 0) {
- return this.addSubscription(eventEmitterOrSubscription);
- } else {
- if (args.length === 1 && eventEmitterOrSubscription.isSignal) {
- args.unshift('value');
- }
- return this.subscribeWith(eventEmitterOrSubscription, 'on', args);
- }
- };
- Subscriber.prototype.subscribeToCommand = function() {
- var args, eventEmitter;
- eventEmitter = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
- return this.subscribeWith(eventEmitter, 'command', args);
- };
- Subscriber.prototype.unsubscribe = function(object) {
- var index, subscription, _i, _j, _len, _len1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
- if (object != null) {
- _ref4 = (_ref2 = (_ref3 = this._subscriptionsByObject) != null ? _ref3.get(object) : void 0) != null ? _ref2 : [];
- for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
- subscription = _ref4[_i];
- if (typeof subscription.dispose === 'function') {
- subscription.dispose();
- } else {
- subscription.off();
- }
- index = this._subscriptions.indexOf(subscription);
- if (index >= 0) {
- this._subscriptions.splice(index, 1);
- }
- }
- return (_ref5 = this._subscriptionsByObject) != null ? _ref5["delete"](object) : void 0;
- } else {
- _ref7 = (_ref6 = this._subscriptions) != null ? _ref6 : [];
- for (_j = 0, _len1 = _ref7.length; _j < _len1; _j++) {
- subscription = _ref7[_j];
- if (typeof subscription.dispose === 'function') {
- subscription.dispose();
- } else {
- subscription.off();
- }
- }
- this._subscriptions = null;
- return this._subscriptionsByObject = null;
- }
- };
- return Subscriber;
- })(Mixin);
- }).call(this);
|