electron-kit
Version:
Utility kits for middle-scale electron app
115 lines (92 loc) • 3.36 kB
JavaScript
// Generated by CoffeeScript 1.10.0
(function() {
var CompositeDisposable, Disposable, Emitter, EventEmitter3, ref,
extend = 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; },
hasProp = {}.hasOwnProperty;
ref = require("event-kit"), CompositeDisposable = ref.CompositeDisposable, Disposable = ref.Disposable;
EventEmitter3 = require("eventemitter3");
module.exports = Emitter = (function(superClass) {
extend(Emitter, superClass);
Emitter.prototype.eventObservers = null;
Emitter.prototype.disposed = false;
function Emitter() {
Emitter.__super__.constructor.apply(this, arguments);
this.eventObservers = new CompositeDisposable;
}
Emitter.prototype.dispose = function() {
this.eventObservers.dispose();
this._events = null;
this.eventObservers = null;
return this.disposed = true;
};
/**
* @param {String} event listening event name
* @param {Function} fn listener
* @param {Object?} context binding context to listener
*/
Emitter.prototype.on = function(event, fn, context) {
var disposer;
if (context == null) {
context = this;
}
if (this.disposed) {
throw new Error("Emitter has been disposed");
}
Emitter.__super__.on.apply(this, arguments);
disposer = new Disposable((function(_this) {
return function() {
return _this.off(event, fn, context, false);
};
})(this));
this.eventObservers.add(disposer);
return disposer;
};
/**
* @param {String} event listening event name
* @param {Function} fn listener
* @param {Object?} context binding context to listener
*/
Emitter.prototype.once = function(event, fn, context) {
var disposer;
if (context == null) {
context = this;
}
if (this.disposed) {
throw new Error("Emitter has been disposed");
}
Emitter.__super__.once.apply(this, arguments);
disposer = new Disposable((function(_this) {
return function() {
return _this.off(event, fn, context, true);
};
})(this));
this.eventObservers.add(disposer);
return disposer;
};
/**
* @param {String} event unlistening event name
* @param {Function?} fn unlistening listener
* @param {Object?} context binded context to listener
* @param {Boolean?} once unlistening once listener
*/
Emitter.prototype.off = function(event, fn, context, once) {
if (this.disposed) {
return;
}
if (fn == null) {
this.removeAllListeners();
return;
}
Emitter.__super__.off.apply(this, arguments);
};
Emitter.prototype.removeAllListeners = function(event) {
if (this.disposed) {
return;
}
return Emitter.__super__.removeAllListeners.apply(this, arguments);
};
Emitter.prototype.addListener = Emitter.prototype.on;
Emitter.prototype.removeListener = Emitter.prototype.off;
return Emitter;
})(EventEmitter3);
}).call(this);