UNPKG

3.84 kBJavaScriptView Raw
1"use strict";
2/**
3 * A registered event receiver.
4 */
5var EventReceiver = (function () {
6 function EventReceiver(
7 /**
8 * An registered identifier for this event receiver.
9 */
10 key,
11 /**
12 * The registered name of the event.
13 */
14 event,
15 /**
16 * The actual callback.
17 */
18 handler) {
19 this.key = key;
20 this.event = event;
21 this.handler = handler;
22 }
23 return EventReceiver;
24}());
25exports.EventReceiver = EventReceiver;
26/**
27 * Stores callbacks for registered events.
28 */
29var EventEmitter = (function () {
30 function EventEmitter() {
31 /**
32 * @private
33 */
34 this.n = 0;
35 /**
36 * @private
37 */
38 this.eventReceivers = {};
39 /**
40 * @private
41 */
42 this.eventsEmitted = {};
43 }
44 /**
45 * Register an event callback which gets triggered every time the event is
46 * fired.
47 *
48 * @param event
49 * The event name.
50 * @param callback
51 * A callback to attach to this event.
52 */
53 EventEmitter.prototype.on = function (event, callback) {
54 if (typeof this.eventReceivers[event] === 'undefined') {
55 this.eventReceivers[event] = {};
56 }
57 var receiver = new EventReceiver(this.n, event, callback);
58 this.n++;
59 this.eventReceivers[event][receiver.key] = receiver;
60 return receiver;
61 };
62 /**
63 * Unregister an event receiver returned from
64 * [`on()`](/api/client/eventemitter#on).
65 *
66 * @param receiver
67 * The event receiver.
68 */
69 EventEmitter.prototype.off = function (receiver) {
70 if (typeof this.eventReceivers[receiver.event] === 'undefined' ||
71 typeof this.eventReceivers[receiver.event][receiver.key] === 'undefined') {
72 throw new Error('unknown event receiver');
73 }
74 delete this.eventReceivers[receiver.event][receiver.key];
75 };
76 /**
77 * Register an event callback that gets triggered only once. If the event was
78 * triggered before your callback is registered, it calls your callback
79 * immediately.
80 *
81 * @note TODO: Fix the docs for () => void syntax.
82 *
83 * @param event
84 * The event name.
85 * @param callback
86 * A callback to attach to this event. It takes no arguments.
87 */
88 EventEmitter.prototype.once = function (event, callback) {
89 var _this = this;
90 if (this.emitted(event)) {
91 callback();
92 }
93 else {
94 this.on(event, function () {
95 if (!_this.emitted(event)) {
96 callback();
97 }
98 });
99 }
100 };
101 /**
102 * Trigger an event. Call all callbacks in the order they were registered.
103 *
104 * @param event
105 * The event name.
106 * @param data
107 * An object to pass to every callback.
108 */
109 EventEmitter.prototype.emit = function (event, data) {
110 if (typeof this.eventReceivers[event] === 'undefined') {
111 this.eventReceivers[event] = {};
112 }
113 if (typeof this.eventsEmitted[event] === 'undefined') {
114 this.eventsEmitted[event] = 0;
115 }
116 for (var k in this.eventReceivers[event]) {
117 this.eventReceivers[event][k].handler(data);
118 }
119 this.eventsEmitted[event] += 1;
120 };
121 /**
122 * Return a count of the number of times an event has been triggered.
123 *
124 * @param event
125 * The event name.
126 */
127 EventEmitter.prototype.emitted = function (event) {
128 if (typeof this.eventsEmitted[event] === 'undefined') {
129 return 0;
130 }
131 return this.eventsEmitted[event];
132 };
133 return EventEmitter;
134}());
135exports.EventEmitter = EventEmitter;
136//# sourceMappingURL=events.js.map
\No newline at end of file