| 1
47 | 2
48 | 3
49 | 4
50 | 5
51 | 6
52 | 7
53 | 8
54 | 9
55 | 10
56 | 11
57 | 12
58 | 13
59 | 14
60 | 15
61 | 16
62 | 17
63 | 18
64 | 19
65 | 20
66 | 21
67 | 22
68 | 23
69 | 24
70 | 25
71 | 26
72 | 27
73 | 28
74 | 29
75 | 30
76 | 31
77 | 32
78 | 33
79 | 34
80 | 35
81 | 36
82 | 37
83 | 38
84 | 39
85 | 40
86 | 41
87 | 42
88 | 43
89 | 44
90 | 45
91 | 46
92 | 47
93 | 48
94 | 49
95 | 50
96 | 51
97 | 52
98 | 53
99 | 54
100 | 55
101 | 56
102 | 57
103 | 58
104 | 59
105 | 60
106 | 61
107 | 62
108 | 63
109 | 64
110 | 65
111 | 66
112 | 67
113 | 68
114 | 69
115 | 70
116 | 71
117 | 72
118 | 73
119 | 74
120 | 75
121 | 76
122 | 77
123 | 78
124 | 79
125 | 80
126 | 81
127 | 82
128 | 83
129 | 84
130 | 85
131 | 86
132 | 87
133 | 88
134 | 89
135 | 90
136 | 91
137 | 92
138 | 93
139 | 94
140 | 95
141 | 96
142 | 97
143 | 98
144 | 99
145 | 100
146 | 101
147 | 102
148 | 103
149 | 104
150 | 105
151 | 106
152 | 107
153 | 108
154 | 109
155 | 110
156 | 111 |
157 | 2×
158 |
159 | 1×
160 |
161 | 1×
162 | 1×
163 |
164 | 1×
165 |
166 |
167 | 1×
168 |
169 |
170 | 12×
171 | 1×
172 | 1×
173 | 1×
174 | 1×
175 |
176 |
177 |
178 | 1×
179 | 3×
180 | 7×
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 | 1×
189 |
190 |
191 | 1×
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 | 1×
202 | 3×
203 | 3×
204 | 2×
205 |
206 |
207 |
208 |
209 | 3×
210 | 2×
211 |
212 | 1×
213 |
214 |
215 |
216 |
217 | 1×
218 | 5×
219 |
220 |
221 |
222 | 1×
223 | 4×
224 | 4×
225 | 4×
226 | 3×
227 |
228 |
229 |
230 | 1×
231 | 3×
232 | 3×
233 | 3×
234 | 2×
235 |
236 |
237 |
238 | 2×
239 | 2×
240 | 2×
241 |
242 | 3×
243 |
244 |
245 |
246 |
247 | 1×
248 | 5×
249 | 5×
250 | 5×
251 | 4×
252 | 4×
253 |
254 |
255 |
256 |
257 | 1×
258 | 1×
259 |
260 | 1×
261 |
262 |
263 |
264 |
265 | 1×
266 | | 'use strict';
267 | const {defineProperty, findIndex, G, WeakMap} = require('./poorlyfills.js');
268 |
269 | let EventTarget = G.EventTarget;
270 |
271 | try {
272 | new EventTarget;
273 | } catch(e) {
274 | EventTarget = (() => {
275 |
276 | // used to relate instances to listeners
277 | const wm = new WeakMap;
278 |
279 | // get listeners or relate them once to the instance
280 | const get = self => wm.get(self) || set(self);
281 | const set = self => {
282 | const dictionary = new Null;
283 | wm.set(self, dictionary);
284 | return dictionary;
285 | };
286 |
287 | // define values as configurable
288 | const define = (where, what) => {
289 | for (const key in what) {
290 | defineProperty(where, key, {
291 | configurable: true,
292 | value: what[key]
293 | });
294 | }
295 | };
296 |
297 | // no need to transpile here, it's a very simple class
298 | function EventTarget() {}
299 |
300 | // EventTarget "class" definition
301 | define(
302 | EventTarget.prototype,
303 | {
304 | addEventListener,
305 | dispatchEvent,
306 | removeEventListener
307 | }
308 | );
309 |
310 | // dispatch event for each listener
311 | function dispatch(info) {
312 | const options = info.options;
313 | if (options && options.once) {
314 | removeEventListener.call(
315 | info.target,
316 | this.type, info.listener, info.options
317 | );
318 | }
319 | if (typeof info.listener === 'function') {
320 | info.listener.call(info.target, this);
321 | } else {
322 | info.listener.handleEvent(this);
323 | }
324 | }
325 |
326 | // search for a registered listener
327 | function registered(info) {
328 | return this === info.listener;
329 | }
330 |
331 | // public methods
332 | function addEventListener(type, listener, options) {
333 | const secret = get(this);
334 | const listeners = secret[type] || (secret[type] = []);
335 | if (findIndex.call(listeners, registered, listener) < 0) {
336 | listeners.push({target: this, listener, options});
337 | }
338 | }
339 |
340 | function dispatchEvent(event) {
341 | const secret = get(this);
342 | const listeners = secret[event.type];
343 | if (listeners) {
344 | define(event, {
345 | currentTarget: this,
346 | target: this
347 | });
348 | listeners.forEach(dispatch, event);
349 | delete event.currentTarget;
350 | delete event.target;
351 | }
352 | return true;
353 | }
354 |
355 | // used both as public and private method,
356 | // to avoid method pollution/interception of private listeners
357 | function removeEventListener(type, listener, options) {
358 | const secret = get(this);
359 | const listeners = secret[type];
360 | if (listeners) {
361 | const i = findIndex.call(listeners, registered, listener);
362 | if (-1 < i) listeners.splice(i, 1);
363 | }
364 | }
365 |
366 | // private "class"
367 | function Null() {}
368 | Null.prototype = Object.create(null);
369 |
370 | return EventTarget;
371 |
372 | })();
373 | }
374 |
375 | Object.defineProperty(exports, '__esModule', {value: true}).default = EventTarget;
376 | |
377 |