MCPcopy Create free account
hub / github.com/angular/angular / patchEventTargetMethods

Function patchEventTargetMethods

packages/zone.js/lib/common/events.ts:310–898  ·  view source on GitHub ↗
(obj: any, patchOptions?: PatchEventTargetOptions)

Source from the content-addressed store, hash-verified

308 };
309
310 function patchEventTargetMethods(obj: any, patchOptions?: PatchEventTargetOptions) {
311 if (!obj) {
312 return false;
313 }
314
315 let useGlobalCallback = true;
316 if (patchOptions && patchOptions.useG !== undefined) {
317 useGlobalCallback = patchOptions.useG;
318 }
319 const validateHandler = patchOptions && patchOptions.vh;
320
321 let checkDuplicate = true;
322 if (patchOptions && patchOptions.chkDup !== undefined) {
323 checkDuplicate = patchOptions.chkDup;
324 }
325
326 let returnTarget = false;
327 if (patchOptions && patchOptions.rt !== undefined) {
328 returnTarget = patchOptions.rt;
329 }
330
331 let proto = obj;
332 while (proto && !Object.hasOwn(proto, ADD_EVENT_LISTENER)) {
333 proto = ObjectGetPrototypeOf(proto);
334 }
335 if (!proto && obj[ADD_EVENT_LISTENER]) {
336 // somehow we did not find it, but we can see it. This happens on IE for Window properties.
337 proto = obj;
338 }
339
340 if (!proto) {
341 return false;
342 }
343 if (proto[zoneSymbolAddEventListener]) {
344 return false;
345 }
346
347 const eventNameToString = patchOptions && patchOptions.eventNameToString;
348
349 // We use a shared global `taskData` to pass data for `scheduleEventTask`,
350 // eliminating the need to create a new object solely for passing data.
351 // WARNING: This object has a static lifetime, meaning it is not created
352 // each time `addEventListener` is called. It is instantiated only once
353 // and captured by reference inside the `addEventListener` and
354 // `removeEventListener` functions. Do not add any new properties to this
355 // object, as doing so would necessitate maintaining the information
356 // between `addEventListener` calls.
357 const taskData: InternalGlobalTaskData = {};
358
359 const nativeAddEventListener = (proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]);
360 const nativeRemoveEventListener = (proto[zoneSymbol(REMOVE_EVENT_LISTENER)] =
361 proto[REMOVE_EVENT_LISTENER]);
362
363 const nativeListeners = (proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] =
364 proto[LISTENERS_EVENT_LISTENER]);
365 const nativeRemoveAllListeners = (proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] =
366 proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]);
367

Callers 1

patchEventTargetFunction · 0.85

Calls 9

attachOriginToPatchedFunction · 0.90
makeAddListenerFunction · 0.85
findEventTasksFunction · 0.85
eventNameToStringFunction · 0.85
applyMethod · 0.65
cancelTaskMethod · 0.65
keysMethod · 0.65
compareFunction · 0.50
pushMethod · 0.45

Tested by

no test coverage detected