(events)
| 220 | |
| 221 | /** @param {Array<string>} events */ |
| 222 | var event_handle = (events) => { |
| 223 | for (var i = 0; i < events.length; i++) { |
| 224 | var event_name = events[i]; |
| 225 | |
| 226 | if (registered_events.has(event_name)) continue; |
| 227 | registered_events.add(event_name); |
| 228 | |
| 229 | var passive = is_passive_event(event_name); |
| 230 | |
| 231 | // Add the event listener to both the container and the document. |
| 232 | // The container listener ensures we catch events from within in case |
| 233 | // the outer content stops propagation of the event. |
| 234 | // |
| 235 | // The document listener ensures we catch events that originate from elements that were |
| 236 | // manually moved outside of the container (e.g. via manual portals). |
| 237 | for (const node of [target, document]) { |
| 238 | var counts = listeners.get(node); |
| 239 | |
| 240 | if (counts === undefined) { |
| 241 | counts = new Map(); |
| 242 | listeners.set(node, counts); |
| 243 | } |
| 244 | |
| 245 | var count = counts.get(event_name); |
| 246 | |
| 247 | if (count === undefined) { |
| 248 | node.addEventListener(event_name, handle_event_propagation, { passive }); |
| 249 | counts.set(event_name, 1); |
| 250 | } else { |
| 251 | counts.set(event_name, count + 1); |
| 252 | } |
| 253 | } |
| 254 | } |
| 255 | }; |
| 256 | |
| 257 | event_handle(array_from(all_registered_events)); |
| 258 | root_event_handles.add(event_handle); |
no test coverage detected