AngleSharp by AngleSharp

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

.NET API 1,214,976 bytes

 EventTarget

public abstract class EventTarget : IEventTarget
Event target base of all DOM nodes.
using AngleSharp.Dom.Events; using AngleSharp.Extensions; using AngleSharp.Html; using System.Collections.Generic; namespace AngleSharp.Dom { 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?.Remove(new RegisteredEventListener { Type = type, Callback = callback, IsCaptured = capture }); } public void RemoveEventListeners() { if (_listeners != null) _listeners.Clear(); } public void InvokeEventListener(Event ev) { if (_listeners != null) { string type = ev.Type; RegisteredEventListener[] array = _listeners.ToArray(); IEventTarget currentTarget = ev.CurrentTarget; EventPhase phase = ev.Phase; RegisteredEventListener[] array2 = array; foreach (RegisteredEventListener registeredEventListener in array2) { if (_listeners.Contains(registeredEventListener) && registeredEventListener.Type.Is(type)) { if ((ev.Flags & EventFlags.StopImmediatePropagation) == EventFlags.StopImmediatePropagation) break; if ((!registeredEventListener.IsCaptured || phase != EventPhase.Bubbling) && (registeredEventListener.IsCaptured || phase != EventPhase.Capturing)) registeredEventListener.Callback(currentTarget, ev); } } } } public bool HasEventListener(string type) { if (_listeners != null) { foreach (RegisteredEventListener listener in _listeners) { if (listener.Type.Is(type)) return true; } } return false; } public bool Dispatch(Event ev) { if (ev == null || (ev.Flags & EventFlags.Dispatch) == EventFlags.Dispatch || (ev.Flags & EventFlags.Initialized) != EventFlags.Initialized) throw new DomException(DomError.InvalidState); ev.IsTrusted = false; return ev.Dispatch(this); } } }