root / HServer / 00.Server / 00.Program / node_modules / ultron / index.js
이력 | 보기 | 이력해설 | 다운로드 (3.04 KB)
1 |
'use strict';
|
---|---|
2 |
|
3 |
var has = Object.prototype.hasOwnProperty;
|
4 |
|
5 |
/**
|
6 |
* An auto incrementing id which we can use to create "unique" Ultron instances
|
7 |
* so we can track the event emitters that are added through the Ultron
|
8 |
* interface.
|
9 |
*
|
10 |
* @type {Number}
|
11 |
* @private
|
12 |
*/
|
13 |
var id = 0; |
14 |
|
15 |
/**
|
16 |
* Ultron is high-intelligence robot. It gathers intelligence so it can start improving
|
17 |
* upon his rudimentary design. It will learn from your EventEmitting patterns
|
18 |
* and exterminate them.
|
19 |
*
|
20 |
* @constructor
|
21 |
* @param {EventEmitter} ee EventEmitter instance we need to wrap.
|
22 |
* @api public
|
23 |
*/
|
24 |
function Ultron(ee) { |
25 |
if (!(this instanceof Ultron)) return new Ultron(ee); |
26 |
|
27 |
this.id = id++;
|
28 |
this.ee = ee;
|
29 |
} |
30 |
|
31 |
/**
|
32 |
* Register a new EventListener for the given event.
|
33 |
*
|
34 |
* @param {String} event Name of the event.
|
35 |
* @param {Functon} fn Callback function.
|
36 |
* @param {Mixed} context The context of the function.
|
37 |
* @returns {Ultron}
|
38 |
* @api public
|
39 |
*/
|
40 |
Ultron.prototype.on = function on(event, fn, context) { |
41 |
fn.__ultron = this.id;
|
42 |
this.ee.on(event, fn, context);
|
43 |
|
44 |
return this; |
45 |
}; |
46 |
/**
|
47 |
* Add an EventListener that's only called once.
|
48 |
*
|
49 |
* @param {String} event Name of the event.
|
50 |
* @param {Function} fn Callback function.
|
51 |
* @param {Mixed} context The context of the function.
|
52 |
* @returns {Ultron}
|
53 |
* @api public
|
54 |
*/
|
55 |
Ultron.prototype.once = function once(event, fn, context) { |
56 |
fn.__ultron = this.id;
|
57 |
this.ee.once(event, fn, context);
|
58 |
|
59 |
return this; |
60 |
}; |
61 |
|
62 |
/**
|
63 |
* Remove the listeners we assigned for the given event.
|
64 |
*
|
65 |
* @returns {Ultron}
|
66 |
* @api public
|
67 |
*/
|
68 |
Ultron.prototype.remove = function remove() { |
69 |
var args = arguments |
70 |
, ee = this.ee
|
71 |
, event; |
72 |
|
73 |
//
|
74 |
// When no event names are provided we assume that we need to clear all the
|
75 |
// events that were assigned through us.
|
76 |
//
|
77 |
if (args.length === 1 && 'string' === typeof args[0]) { |
78 |
args = args[0].split(/[, ]+/); |
79 |
} else if (!args.length) { |
80 |
if (ee.eventNames) {
|
81 |
args = ee.eventNames(); |
82 |
} else if (ee._events) { |
83 |
args = []; |
84 |
|
85 |
for (event in ee._events) { |
86 |
if (has.call(ee._events, event)) args.push(event);
|
87 |
} |
88 |
|
89 |
if (Object.getOwnPropertySymbols) {
|
90 |
args = args.concat(Object.getOwnPropertySymbols(ee._events)); |
91 |
} |
92 |
} |
93 |
} |
94 |
|
95 |
for (var i = 0; i < args.length; i++) { |
96 |
var listeners = ee.listeners(args[i]);
|
97 |
|
98 |
for (var j = 0; j < listeners.length; j++) { |
99 |
event = listeners[j]; |
100 |
|
101 |
//
|
102 |
// Once listeners have a `listener` property that stores the real listener
|
103 |
// in the EventEmitter that ships with Node.js.
|
104 |
//
|
105 |
if (event.listener) {
|
106 |
if (event.listener.__ultron !== this.id) continue; |
107 |
} else if (event.__ultron !== this.id) { |
108 |
continue;
|
109 |
} |
110 |
|
111 |
ee.removeListener(args[i], event); |
112 |
} |
113 |
} |
114 |
|
115 |
return this; |
116 |
}; |
117 |
|
118 |
/**
|
119 |
* Destroy the Ultron instance, remove all listeners and release all references.
|
120 |
*
|
121 |
* @returns {Boolean}
|
122 |
* @api public
|
123 |
*/
|
124 |
Ultron.prototype.destroy = function destroy() { |
125 |
if (!this.ee) return false; |
126 |
|
127 |
this.remove();
|
128 |
this.ee = null; |
129 |
|
130 |
return true; |
131 |
}; |
132 |
|
133 |
//
|
134 |
// Expose the module.
|
135 |
//
|
136 |
module.exports = Ultron; |