AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.16.0-alpha-75" />

.NET API 879,104 bytes

 EventTarget

public abstract class EventTarget : IEventTarget
Event target base of all DOM nodes.
using AngleSharp.Dom.Events; using AngleSharp.Html; using AngleSharp.Text; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace AngleSharp.Dom { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public abstract class EventTarget : IEventTarget { [System.Runtime.CompilerServices.Nullable(0)] private readonly struct RegisteredEventListener { public readonly string Type; public readonly DomEventHandler Callback; public readonly bool IsCaptured; public RegisteredEventListener(string type, DomEventHandler callback, bool isCaptured) { Type = type; Callback = callback; IsCaptured = isCaptured; } } [System.Runtime.CompilerServices.Nullable(2)] private List<RegisteredEventListener> _listeners; private List<RegisteredEventListener> Listeners => _listeners ?? (_listeners = new List<RegisteredEventListener>()); internal bool HasEventListeners { get { if (_listeners != null) return _listeners.Count > 0; return false; } } public void AddEventListener(string type, [System.Runtime.CompilerServices.Nullable(2)] DomEventHandler callback = null, bool capture = false) { if (callback != null) Listeners.Add(new RegisteredEventListener(type, callback, capture)); } public void RemoveEventListener(string type, [System.Runtime.CompilerServices.Nullable(2)] DomEventHandler callback = null, bool capture = false) { if (callback != null) _listeners?.Remove(new RegisteredEventListener(type, callback, 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); } } }