AngleSharp by AngleSharp

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

.NET API 1,214,976 bytes

 HtmlElement

Represents a standard HTML element in the node tree.
using AngleSharp.Dom.Collections; using AngleSharp.Dom.Css; using AngleSharp.Dom.Events; using AngleSharp.Extensions; using AngleSharp.Html; using AngleSharp.Network; using AngleSharp.Services; using AngleSharp.Services.Scripting; using System.Threading; namespace AngleSharp.Dom.Html { internal class HtmlElement : Element, IHtmlElement, IElement, INode, IEventTarget, IMarkupFormattable, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle, IGlobalEventHandlers { private StringMap _dataset; private IHtmlMenuElement _menu; private SettableTokenList _dropZone; public bool IsHidden { get { return this.HasOwnAttribute(AttributeNames.Hidden); } set { this.SetOwnAttribute(AttributeNames.Hidden, value ? string.Empty : null, false); } } public IHtmlMenuElement ContextMenu { get { if (_menu == null) { string ownAttribute = this.GetOwnAttribute(AttributeNames.ContextMenu); if (!string.IsNullOrEmpty(ownAttribute)) return base.Owner.GetElementById(ownAttribute) as IHtmlMenuElement; } return _menu; } set { _menu = value; } } public ISettableTokenList DropZone { get { if (_dropZone == null) { _dropZone = new SettableTokenList(this.GetOwnAttribute(AttributeNames.DropZone)); _dropZone.Changed += delegate(string value) { UpdateAttribute(AttributeNames.DropZone, value); }; } return _dropZone; } } public bool IsDraggable { get { return this.GetOwnAttribute(AttributeNames.Draggable).ToBoolean(false); } set { this.SetOwnAttribute(AttributeNames.Draggable, value.ToString(), false); } } public string AccessKey { get { return this.GetOwnAttribute(AttributeNames.AccessKey) ?? string.Empty; } set { this.SetOwnAttribute(AttributeNames.AccessKey, value, false); } } public string AccessKeyLabel => AccessKey; public string Language { get { return this.GetOwnAttribute(AttributeNames.Lang) ?? GetDefaultLanguage(); } set { this.SetOwnAttribute(AttributeNames.Lang, value, false); } } public string Title { get { return this.GetOwnAttribute(AttributeNames.Title); } set { this.SetOwnAttribute(AttributeNames.Title, value, false); } } public string Direction { get { return this.GetOwnAttribute(AttributeNames.Dir); } set { this.SetOwnAttribute(AttributeNames.Dir, value, false); } } public bool IsSpellChecked { get { return this.GetOwnAttribute(AttributeNames.Spellcheck).ToBoolean(false); } set { this.SetOwnAttribute(AttributeNames.Spellcheck, value.ToString(), false); } } public int TabIndex { get { return this.GetOwnAttribute(AttributeNames.TabIndex).ToInteger(0); } set { this.SetOwnAttribute(AttributeNames.TabIndex, value.ToString(), false); } } public IStringMap Dataset => _dataset ?? (_dataset = new StringMap("data-", this)); public string ContentEditable { get { return this.GetOwnAttribute(AttributeNames.ContentEditable); } set { this.SetOwnAttribute(AttributeNames.ContentEditable, value, false); } } public bool IsContentEditable { get { ContentEditableMode contentEditableMode = ContentEditable.ToEnum(ContentEditableMode.Inherited); if (contentEditableMode != ContentEditableMode.True) { IHtmlElement htmlElement = base.ParentElement as IHtmlElement; if (contentEditableMode == ContentEditableMode.Inherited && htmlElement != null) return htmlElement.IsContentEditable; return false; } return true; } } public bool IsTranslated { get { return this.GetOwnAttribute(AttributeNames.Translate).ToEnum(SimpleChoice.Yes) == SimpleChoice.Yes; } set { this.SetOwnAttribute(AttributeNames.Translate, value ? Keywords.Yes : Keywords.No, false); } } public event DomEventHandler Aborted { add { AddEventListener(EventNames.Abort, value, false); } remove { RemoveEventListener(EventNames.Abort, value, false); } } public event DomEventHandler Blurred { add { AddEventListener(EventNames.Blur, value, false); } remove { RemoveEventListener(EventNames.Blur, value, false); } } public event DomEventHandler Cancelled { add { AddEventListener(EventNames.Cancel, value, false); } remove { RemoveEventListener(EventNames.Cancel, value, false); } } public event DomEventHandler CanPlay { add { AddEventListener(EventNames.CanPlay, value, false); } remove { RemoveEventListener(EventNames.CanPlay, value, false); } } public event DomEventHandler CanPlayThrough { add { AddEventListener(EventNames.CanPlayThrough, value, false); } remove { RemoveEventListener(EventNames.CanPlayThrough, value, false); } } public event DomEventHandler Changed { add { AddEventListener(EventNames.Change, value, false); } remove { RemoveEventListener(EventNames.Change, value, false); } } public event DomEventHandler Clicked { add { AddEventListener(EventNames.Click, value, false); } remove { RemoveEventListener(EventNames.Click, value, false); } } public event DomEventHandler CueChanged { add { AddEventListener(EventNames.CueChange, value, false); } remove { RemoveEventListener(EventNames.CueChange, value, false); } } public event DomEventHandler DoubleClick { add { AddEventListener(EventNames.DblClick, value, false); } remove { RemoveEventListener(EventNames.DblClick, value, false); } } public event DomEventHandler Drag { add { AddEventListener(EventNames.Drag, value, false); } remove { RemoveEventListener(EventNames.Drag, value, false); } } public event DomEventHandler DragEnd { add { AddEventListener(EventNames.DragEnd, value, false); } remove { RemoveEventListener(EventNames.DragEnd, value, false); } } public event DomEventHandler DragEnter { add { AddEventListener(EventNames.DragEnter, value, false); } remove { RemoveEventListener(EventNames.DragEnter, value, false); } } public event DomEventHandler DragExit { add { AddEventListener(EventNames.DragExit, value, false); } remove { RemoveEventListener(EventNames.DragExit, value, false); } } public event DomEventHandler DragLeave { add { AddEventListener(EventNames.DragLeave, value, false); } remove { RemoveEventListener(EventNames.DragLeave, value, false); } } public event DomEventHandler DragOver { add { AddEventListener(EventNames.DragOver, value, false); } remove { RemoveEventListener(EventNames.DragOver, value, false); } } public event DomEventHandler DragStart { add { AddEventListener(EventNames.DragStart, value, false); } remove { RemoveEventListener(EventNames.DragStart, value, false); } } public event DomEventHandler Dropped { add { AddEventListener(EventNames.Drop, value, false); } remove { RemoveEventListener(EventNames.Drop, value, false); } } public event DomEventHandler DurationChanged { add { AddEventListener(EventNames.DurationChange, value, false); } remove { RemoveEventListener(EventNames.DurationChange, value, false); } } public event DomEventHandler Emptied { add { AddEventListener(EventNames.Emptied, value, false); } remove { RemoveEventListener(EventNames.Emptied, value, false); } } public event DomEventHandler Ended { add { AddEventListener(EventNames.Ended, value, false); } remove { RemoveEventListener(EventNames.Ended, value, false); } } public event DomEventHandler Error { add { AddEventListener(EventNames.Error, value, false); } remove { RemoveEventListener(EventNames.Error, value, false); } } public event DomEventHandler Focused { add { AddEventListener(EventNames.Focus, value, false); } remove { RemoveEventListener(EventNames.Focus, value, false); } } public event DomEventHandler Input { add { AddEventListener(EventNames.Input, value, false); } remove { RemoveEventListener(EventNames.Input, value, false); } } public event DomEventHandler Invalid { add { AddEventListener(EventNames.Invalid, value, false); } remove { RemoveEventListener(EventNames.Invalid, value, false); } } public event DomEventHandler KeyDown { add { AddEventListener(EventNames.Keydown, value, false); } remove { RemoveEventListener(EventNames.Keydown, value, false); } } public event DomEventHandler KeyPress { add { AddEventListener(EventNames.Keypress, value, false); } remove { RemoveEventListener(EventNames.Keypress, value, false); } } public event DomEventHandler KeyUp { add { AddEventListener(EventNames.Keyup, value, false); } remove { RemoveEventListener(EventNames.Keyup, value, false); } } public event DomEventHandler Loaded { add { AddEventListener(EventNames.Load, value, false); } remove { RemoveEventListener(EventNames.Load, value, false); } } public event DomEventHandler LoadedData { add { AddEventListener(EventNames.LoadedData, value, false); } remove { RemoveEventListener(EventNames.LoadedData, value, false); } } public event DomEventHandler LoadedMetadata { add { AddEventListener(EventNames.LoadedMetaData, value, false); } remove { RemoveEventListener(EventNames.LoadedMetaData, value, false); } } public event DomEventHandler Loading { add { AddEventListener(EventNames.LoadStart, value, false); } remove { RemoveEventListener(EventNames.LoadStart, value, false); } } public event DomEventHandler MouseDown { add { AddEventListener(EventNames.Mousedown, value, false); } remove { RemoveEventListener(EventNames.Mousedown, value, false); } } public event DomEventHandler MouseEnter { add { AddEventListener(EventNames.Mouseenter, value, false); } remove { RemoveEventListener(EventNames.Mouseenter, value, false); } } public event DomEventHandler MouseLeave { add { AddEventListener(EventNames.Mouseleave, value, false); } remove { RemoveEventListener(EventNames.Mouseleave, value, false); } } public event DomEventHandler MouseMove { add { AddEventListener(EventNames.Mousemove, value, false); } remove { RemoveEventListener(EventNames.Mousemove, value, false); } } public event DomEventHandler MouseOut { add { AddEventListener(EventNames.Mouseout, value, false); } remove { RemoveEventListener(EventNames.Mouseout, value, false); } } public event DomEventHandler MouseOver { add { AddEventListener(EventNames.Mouseover, value, false); } remove { RemoveEventListener(EventNames.Mouseover, value, false); } } public event DomEventHandler MouseUp { add { AddEventListener(EventNames.Mouseup, value, false); } remove { RemoveEventListener(EventNames.Mouseup, value, false); } } public event DomEventHandler MouseWheel { add { AddEventListener(EventNames.Wheel, value, false); } remove { RemoveEventListener(EventNames.Wheel, value, false); } } public event DomEventHandler Paused { add { AddEventListener(EventNames.Pause, value, false); } remove { RemoveEventListener(EventNames.Pause, value, false); } } public event DomEventHandler Played { add { AddEventListener(EventNames.Play, value, false); } remove { RemoveEventListener(EventNames.Play, value, false); } } public event DomEventHandler Playing { add { AddEventListener(EventNames.Playing, value, false); } remove { RemoveEventListener(EventNames.Playing, value, false); } } public event DomEventHandler Progress { add { AddEventListener(EventNames.Progress, value, false); } remove { RemoveEventListener(EventNames.Progress, value, false); } } public event DomEventHandler RateChanged { add { AddEventListener(EventNames.RateChange, value, false); } remove { RemoveEventListener(EventNames.RateChange, value, false); } } public event DomEventHandler Resetted { add { AddEventListener(EventNames.Reset, value, false); } remove { RemoveEventListener(EventNames.Reset, value, false); } } public event DomEventHandler Resized { add { AddEventListener(EventNames.Resize, value, false); } remove { RemoveEventListener(EventNames.Resize, value, false); } } public event DomEventHandler Scrolled { add { AddEventListener(EventNames.Scroll, value, false); } remove { RemoveEventListener(EventNames.Scroll, value, false); } } public event DomEventHandler Seeked { add { AddEventListener(EventNames.Seeked, value, false); } remove { RemoveEventListener(EventNames.Seeked, value, false); } } public event DomEventHandler Seeking { add { AddEventListener(EventNames.Seeking, value, false); } remove { RemoveEventListener(EventNames.Seeking, value, false); } } public event DomEventHandler Selected { add { AddEventListener(EventNames.Select, value, false); } remove { RemoveEventListener(EventNames.Select, value, false); } } public event DomEventHandler Shown { add { AddEventListener(EventNames.Show, value, false); } remove { RemoveEventListener(EventNames.Show, value, false); } } public event DomEventHandler Stalled { add { AddEventListener(EventNames.Stalled, value, false); } remove { RemoveEventListener(EventNames.Stalled, value, false); } } public event DomEventHandler Submitted { add { AddEventListener(EventNames.Submit, value, false); } remove { RemoveEventListener(EventNames.Submit, value, false); } } public event DomEventHandler Suspended { add { AddEventListener(EventNames.Suspend, value, false); } remove { RemoveEventListener(EventNames.Suspend, value, false); } } public event DomEventHandler TimeUpdated { add { AddEventListener(EventNames.TimeUpdate, value, false); } remove { RemoveEventListener(EventNames.TimeUpdate, value, false); } } public event DomEventHandler Toggled { add { AddEventListener(EventNames.Toggle, value, false); } remove { RemoveEventListener(EventNames.Toggle, value, false); } } public event DomEventHandler VolumeChanged { add { AddEventListener(EventNames.VolumeChange, value, false); } remove { RemoveEventListener(EventNames.VolumeChange, value, false); } } public event DomEventHandler Waiting { add { AddEventListener(EventNames.Waiting, value, false); } remove { RemoveEventListener(EventNames.Waiting, value, false); } } static HtmlElement() { Element.RegisterCallback(AttributeNames.Style, delegate(HtmlElement element, string value) { element.UpdateStyle(value); }); Element.RegisterCallback(AttributeNames.DropZone, delegate(HtmlElement element, string value) { element._dropZone?.Update(value); }); RegisterEventCallback<HtmlElement>(EventNames.Load); RegisterEventCallback<HtmlElement>(EventNames.Abort); RegisterEventCallback<HtmlElement>(EventNames.Blur); RegisterEventCallback<HtmlElement>(EventNames.Cancel); RegisterEventCallback<HtmlElement>(EventNames.CanPlay); RegisterEventCallback<HtmlElement>(EventNames.CanPlayThrough); RegisterEventCallback<HtmlElement>(EventNames.Change); RegisterEventCallback<HtmlElement>(EventNames.Click); RegisterEventCallback<HtmlElement>(EventNames.CueChange); RegisterEventCallback<HtmlElement>(EventNames.DblClick); RegisterEventCallback<HtmlElement>(EventNames.Drag); RegisterEventCallback<HtmlElement>(EventNames.DragEnd); RegisterEventCallback<HtmlElement>(EventNames.DragEnter); RegisterEventCallback<HtmlElement>(EventNames.DragExit); RegisterEventCallback<HtmlElement>(EventNames.DragLeave); RegisterEventCallback<HtmlElement>(EventNames.DragOver); RegisterEventCallback<HtmlElement>(EventNames.DragStart); RegisterEventCallback<HtmlElement>(EventNames.Drop); RegisterEventCallback<HtmlElement>(EventNames.DurationChange); RegisterEventCallback<HtmlElement>(EventNames.Emptied); RegisterEventCallback<HtmlElement>(EventNames.Ended); RegisterEventCallback<HtmlElement>(EventNames.Error); RegisterEventCallback<HtmlElement>(EventNames.Focus); RegisterEventCallback<HtmlElement>(EventNames.Input); RegisterEventCallback<HtmlElement>(EventNames.Invalid); RegisterEventCallback<HtmlElement>(EventNames.Keydown); RegisterEventCallback<HtmlElement>(EventNames.Keypress); RegisterEventCallback<HtmlElement>(EventNames.Keyup); RegisterEventCallback<HtmlElement>(EventNames.LoadedData); RegisterEventCallback<HtmlElement>(EventNames.LoadedMetaData); RegisterEventCallback<HtmlElement>(EventNames.LoadStart); RegisterEventCallback<HtmlElement>(EventNames.Mousedown); RegisterEventCallback<HtmlElement>(EventNames.Mouseup); RegisterEventCallback<HtmlElement>(EventNames.Mouseenter); RegisterEventCallback<HtmlElement>(EventNames.Mouseleave); RegisterEventCallback<HtmlElement>(EventNames.Mouseover); RegisterEventCallback<HtmlElement>(EventNames.Mousemove); RegisterEventCallback<HtmlElement>(EventNames.Wheel); RegisterEventCallback<HtmlElement>(EventNames.Pause); RegisterEventCallback<HtmlElement>(EventNames.Play); RegisterEventCallback<HtmlElement>(EventNames.Playing); RegisterEventCallback<HtmlElement>(EventNames.Progress); RegisterEventCallback<HtmlElement>(EventNames.RateChange); RegisterEventCallback<HtmlElement>(EventNames.Reset); RegisterEventCallback<HtmlElement>(EventNames.Resize); RegisterEventCallback<HtmlElement>(EventNames.Scroll); RegisterEventCallback<HtmlElement>(EventNames.Seeked); RegisterEventCallback<HtmlElement>(EventNames.Seeking); RegisterEventCallback<HtmlElement>(EventNames.Select); RegisterEventCallback<HtmlElement>(EventNames.Show); RegisterEventCallback<HtmlElement>(EventNames.Stalled); RegisterEventCallback<HtmlElement>(EventNames.Submit); RegisterEventCallback<HtmlElement>(EventNames.Suspend); RegisterEventCallback<HtmlElement>(EventNames.TimeUpdate); RegisterEventCallback<HtmlElement>(EventNames.Toggle); RegisterEventCallback<HtmlElement>(EventNames.VolumeChange); RegisterEventCallback<HtmlElement>(EventNames.Waiting); } public HtmlElement(Document owner, string localName, string prefix = null, NodeFlags flags = NodeFlags.None) : base(owner, Combine(prefix, localName), localName, prefix, NamespaceNames.HtmlUri, flags | NodeFlags.HtmlMember) { } public void DoSpellCheck() { base.Owner.Options.GetSpellCheck(Language); } public virtual void DoClick() { IsClickedCancelled(); } public virtual void DoFocus() { } public virtual void DoBlur() { } public override INode Clone(bool deep = true) { HtmlElement htmlElement = base.Owner.Options.GetFactory<IHtmlElementFactory>().Create(base.Owner, base.LocalName, base.Prefix); CloneElement(htmlElement, deep); return htmlElement; } internal override void SetupElement() { base.SetupElement(); string ownAttribute = this.GetOwnAttribute(AttributeNames.Style); if (ownAttribute != null) UpdateStyle(ownAttribute); } protected bool IsClickedCancelled() { return this.Fire(delegate(MouseEvent m) { m.Init(EventNames.Click, true, true, base.Owner.DefaultView, 0, 0, 0, 0, 0, false, false, false, false, MouseButton.Primary, this); }, null); } protected IHtmlFormElement GetAssignedForm() { INode node = base.Parent; while (node != null && !(node is IHtmlFormElement)) { node = node.ParentElement; } if (node == null) { string ownAttribute = this.GetOwnAttribute(AttributeNames.Form); Document owner = base.Owner; if (owner == null || node != null || string.IsNullOrEmpty(ownAttribute)) return null; node = owner.GetElementById(ownAttribute); } return node as IHtmlFormElement; } protected static void RegisterEventCallback<TElement>(string eventName) where TElement : Element { string name = "on" + eventName; Element.RegisterCallback(name, delegate(TElement element, string value) { Document owner = element.Owner; IScriptEngine scriptEngine = owner.Options.GetScriptEngine(MimeTypeNames.DefaultJavaScript); if (scriptEngine != null) { string function = "undefined"; if (!string.IsNullOrEmpty(value)) function = "function () { " + value + " }"; IResponse response = VirtualResponse.Create(delegate(VirtualResponse res) { res.Content(string.Format("element.{0} = {1};", new object[2] { name, function })); }); ScriptOptions options = new ScriptOptions(owner); scriptEngine.EvaluateScriptAsync(response, options, CancellationToken.None); } }); } private string GetDefaultLanguage() { IHtmlElement htmlElement = base.ParentElement as IHtmlElement; if (htmlElement == null) return base.Owner.Options.GetLanguage(); return htmlElement.Language; } private static string Combine(string prefix, string localName) { return ((prefix != null) ? (prefix + ":" + localName) : localName).ToUpperInvariant(); } } }