AngleSharp by Florian Rappl

<PackageReference Include="AngleSharp" Version="0.9.0" />

.NET API 1,206,784 bytes

 EventTarget

public abstract class EventTarget : IEventTarget
Event target base of all DOM nodes.
using AngleSharp.Dom.Events; using AngleSharp.Html; using System.Collections.Generic; using System.Diagnostics; namespace AngleSharp.Dom { [DebuggerStepThrough] public abstract class EventTarget : IEventTarget { private struct RegisteredEventListener { public string Type; public DomEventHandler Callback; public bool IsCaptured; } private List<RegisteredEventListener> _listeners; private List<RegisteredEventListener> Listeners => _listeners ?? (_listeners = new List<RegisteredEventListener>()); public void AddEventListener(string type, DomEventHandler callback = null, bool capture = false) { if (callback != null) Listeners.Add(new RegisteredEventListener { Type = type, Callback = callback, IsCaptured = capture }); } public void RemoveEventListener(string type, DomEventHandler callback = null, bool capture = false) { if (callback != null && _listeners != null) _listeners.Remove(new RegisteredEventListener { Type = type, Callback = callback, IsCaptured = capture }); } internal void CallEventListener(Event ev) { if (_listeners != null) { string type = ev.Type; RegisteredEventListener[] array = _listeners.ToArray(); IEventTarget currentTarget = ev.CurrentTarget; EventPhase phase = ev.Phase; RegisteredEventListener[] array2 = array; for (int i = 0; i < array2.Length; i++) { RegisteredEventListener item = array2[i]; if (_listeners.Contains(item) && !(item.Type != type)) { if (ev.Flags.HasFlag(EventFlags.StopImmediatePropagation)) break; if ((!item.IsCaptured || phase != EventPhase.Bubbling) && (item.IsCaptured || phase != EventPhase.Capturing)) item.Callback(currentTarget, ev); } } } } internal bool HasEventListener(string type) { if (_listeners != null) { foreach (RegisteredEventListener listener in _listeners) { RegisteredEventListener current = listener; if (current.Type == type) return true; } } return false; } public bool Dispatch(Event ev) { if (ev == null || ev.Flags.HasFlag(EventFlags.Dispatch) || !ev.Flags.HasFlag(EventFlags.Initialized)) throw new DomException(DomError.InvalidState); ev.IsTrusted = false; return ev.Dispatch(this); } } }