AngleSharp by AngleSharp

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

.NET API 1,214,976 bytes

 HtmlSelectElement

Represents the select element.
using AngleSharp.Dom.Collections; using AngleSharp.Dom.Css; using AngleSharp.Dom.Events; using AngleSharp.Extensions; using AngleSharp.Html; using System.Linq; namespace AngleSharp.Dom.Html { internal sealed class HtmlSelectElement : HtmlFormControlElementWithState, IHtmlSelectElement, IHtmlElement, IElement, INode, IEventTarget, IMarkupFormattable, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle, IGlobalEventHandlers, IValidation { private OptionsCollection _options; private HtmlCollection<IHtmlOptionElement> _selected; public IHtmlOptionElement this[int index] { get { return Options.GetOptionAt(index); } set { Options.SetOptionAt(index, value); } } public int Size { get { return this.GetOwnAttribute(AttributeNames.Size).ToInteger(0); } set { this.SetOwnAttribute(AttributeNames.Size, value.ToString(), false); } } public bool IsRequired { get { return this.HasOwnAttribute(AttributeNames.Required); } set { this.SetOwnAttribute(AttributeNames.Required, value ? string.Empty : null, false); } } public IHtmlCollection<IHtmlOptionElement> SelectedOptions => _selected ?? (_selected = new HtmlCollection<IHtmlOptionElement>(from m in Options where m.IsSelected select m)); public int SelectedIndex => Options.SelectedIndex; public string Value { get { foreach (IHtmlOptionElement option in Options) { if (option.IsSelected) return option.Value; } return null; } set { UpdateValue(value); } } public int Length => Options.Length; public bool IsMultiple { get { return this.HasOwnAttribute(AttributeNames.Multiple); } set { this.SetOwnAttribute(AttributeNames.Multiple, value ? string.Empty : null, false); } } public IHtmlOptionsCollection Options => _options ?? (_options = new OptionsCollection(this)); public string Type { get { if (!IsMultiple) return InputTypeNames.SelectOne; return InputTypeNames.SelectMultiple; } } static HtmlSelectElement() { Element.RegisterCallback(AttributeNames.Value, delegate(HtmlSelectElement element, string value) { element.UpdateValue(value); }); } public HtmlSelectElement(Document owner, string prefix = null) : base(owner, TagNames.Select, prefix, NodeFlags.None) { } public void AddOption(IHtmlOptionElement element, IHtmlElement before = null) { Options.Add(element, before); } public void AddOption(IHtmlOptionsGroupElement element, IHtmlElement before = null) { Options.Add(element, before); } public void RemoveOptionAt(int index) { Options.Remove(index); } internal override FormControlState SaveControlState() { return new FormControlState(base.Name, Type, Value); } internal override void RestoreFormControlState(FormControlState state) { if (state.Type.Is(Type) && state.Name.Is(base.Name)) Value = state.Value; } internal override void ConstructDataSet(FormDataSet dataSet, IHtmlElement submitter) { IHtmlOptionsCollection options = Options; for (int i = 0; i < options.Length; i++) { IHtmlOptionElement optionAt = options.GetOptionAt(i); if (optionAt.IsSelected && !optionAt.IsDisabled) dataSet.Append(base.Name, optionAt.Value, Type); } } internal override void SetupElement() { base.SetupElement(); string ownAttribute = this.GetOwnAttribute(AttributeNames.Value); if (ownAttribute != null) UpdateValue(ownAttribute); } internal override void Reset() { IHtmlOptionsCollection options = Options; int num = 0; int index = 0; for (int i = 0; i < options.Length; i++) { IHtmlOptionElement optionAt = options.GetOptionAt(i); optionAt.IsSelected = optionAt.IsDefaultSelected; if (optionAt.IsSelected) { index = i; num++; } } if (num != 1 && !IsMultiple && options.Length > 0) { foreach (IHtmlOptionElement item in options) { item.IsSelected = false; } options[index].IsSelected = true; } } private void UpdateValue(string value) { foreach (IHtmlOptionElement option in Options) { bool flag2 = option.IsSelected = option.Value.Isi(value); } } protected override bool CanBeValidated() { return !this.HasDataListAncestor(); } protected override void Check(ValidityState state) { string value = Value; state.IsValueMissing = (IsRequired && string.IsNullOrEmpty(value)); } } }