File: Infrastructure\ElementNode.cs
Web Access
Project: src\src\Components\WebView\WebView\test\Microsoft.AspNetCore.Components.WebView.Test.csproj (Microsoft.AspNetCore.Components.WebView.Test)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Microsoft.AspNetCore.Components.WebView.Document;
 
internal class ElementNode : ContainerNode
{
    private readonly Dictionary<string, object> _attributes;
    private readonly Dictionary<string, object> _properties;
    private readonly Dictionary<string, ElementEventDescriptor> _events;
 
    public ElementNode(string elementName)
    {
        TagName = elementName;
        _attributes = new Dictionary<string, object>(StringComparer.Ordinal);
        _properties = new Dictionary<string, object>(StringComparer.Ordinal);
        _events = new Dictionary<string, ElementEventDescriptor>(StringComparer.Ordinal);
    }
 
    public string TagName { get; }
 
    public IReadOnlyDictionary<string, object> Attributes => _attributes;
 
    public IReadOnlyDictionary<string, object> Properties => _properties;
 
    public IReadOnlyDictionary<string, ElementEventDescriptor> Events => _events;
 
    internal void RemoveAttribute(string key)
    {
        _attributes.Remove(key);
    }
 
    internal void SetAttribute(string key, object value)
    {
        _attributes[key] = value;
    }
 
    internal void SetEvent(string eventName, ElementEventDescriptor descriptor)
    {
        ArgumentNullException.ThrowIfNull(eventName);
        ArgumentNullException.ThrowIfNull(descriptor);
 
        _events[eventName] = descriptor;
    }
 
    internal void SetProperty(string key, object value)
    {
        _properties[key] = value;
    }
 
    public class ElementEventDescriptor
    {
        public ElementEventDescriptor(string eventName, ulong eventId)
        {
            EventName = eventName ?? throw new ArgumentNullException(nameof(eventName));
            EventId = eventId;
        }
 
        public string EventName { get; }
 
        public ulong EventId { get; }
    }
}