HtmlInputElement
sealed class HtmlInputElement : HtmlTextFormControlElement, IHtmlInputElement, IHtmlElement, IElement, INode, IEventTarget, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle, IValidation
Represents an HTML input element.
using AngleSharp.Dom.Css;
using AngleSharp.Dom.Io;
using AngleSharp.Extensions;
using AngleSharp.Html;
using AngleSharp.Html.InputTypes;
using System;
namespace AngleSharp.Dom.Html
{
internal sealed class HtmlInputElement : HtmlTextFormControlElement, IHtmlInputElement, IHtmlElement, IElement, INode, IEventTarget, IParentNode, IChildNode, INonDocumentTypeChildNode, IElementCssInlineStyle, IValidation
{
private BaseInputType _type;
private bool? _checked;
public override string DefaultValue {
get {
return GetAttribute(AttributeNames.Value);
}
set {
SetAttribute(AttributeNames.Value, value);
}
}
public bool IsDefaultChecked {
get {
return GetAttribute(AttributeNames.Checked) != null;
}
set {
SetAttribute(AttributeNames.Checked, value ? string.Empty : null);
}
}
public bool IsChecked {
get {
if (!_checked.HasValue)
return IsDefaultChecked;
return _checked.Value;
}
set {
_checked = value;
}
}
public string Type {
get {
return _type.Name;
}
set {
SetAttribute(AttributeNames.Type, value);
}
}
public bool IsIndeterminate { get; set; }
public bool IsMultiple {
get {
return GetAttribute(AttributeNames.Multiple) != null;
}
set {
SetAttribute(AttributeNames.Multiple, value ? string.Empty : null);
}
}
public DateTime? ValueAsDate {
get {
return _type.ConvertToDate(base.Value);
}
set {
if (!value.HasValue)
base.Value = string.Empty;
else
base.Value = _type.ConvertFromDate(value.Value);
}
}
public double ValueAsNumber {
get {
return _type.ConvertToNumber(base.Value) ?? NaN;
}
set {
if (double.IsInfinity(value))
throw new DomException(ErrorCode.TypeMismatch);
if (double.IsNaN(value))
base.Value = string.Empty;
else
base.Value = _type.ConvertFromNumber(value);
}
}
public string FormAction {
get {
if (base.Form == null)
return string.Empty;
return base.Form.Action;
}
set {
if (base.Form != null)
base.Form.Action = value;
}
}
public string FormEncType {
get {
if (base.Form == null)
return string.Empty;
return base.Form.Enctype;
}
set {
if (base.Form != null)
base.Form.Enctype = value;
}
}
public string FormMethod {
get {
if (base.Form == null)
return string.Empty;
return base.Form.Method;
}
set {
if (base.Form != null)
base.Form.Method = value;
}
}
public bool FormNoValidate {
get {
if (base.Form == null)
return false;
return base.Form.NoValidate;
}
set {
if (base.Form != null)
base.Form.NoValidate = value;
}
}
public string FormTarget {
get {
if (base.Form == null)
return string.Empty;
return base.Form.Target;
}
set {
if (base.Form != null)
base.Form.Target = value;
}
}
public string Accept {
get {
return GetAttribute(AttributeNames.Accept);
}
set {
SetAttribute(AttributeNames.Accept, value);
}
}
public Alignment Align {
get {
return GetAttribute(AttributeNames.Align).ToEnum(Alignment.Left);
}
set {
SetAttribute(AttributeNames.Align, value.ToString());
}
}
public string AlternativeText {
get {
return GetAttribute(AttributeNames.Alt);
}
set {
SetAttribute(AttributeNames.Alt, value);
}
}
public string Autocomplete {
get {
return GetAttribute(AttributeNames.AutoComplete);
}
set {
SetAttribute(AttributeNames.AutoComplete, value);
}
}
public IFileList Files => (_type as FileInputType)?.Files;
public IHtmlDataListElement List {
get {
Document owner = base.Owner;
if (owner != null)
return owner.GetElementById(GetAttribute(AttributeNames.List)) as IHtmlDataListElement;
return null;
}
}
public string Maximum {
get {
return GetAttribute(AttributeNames.Max);
}
set {
SetAttribute(AttributeNames.Max, value);
}
}
public string Minimum {
get {
return GetAttribute(AttributeNames.Min);
}
set {
SetAttribute(AttributeNames.Min, value);
}
}
public string Pattern {
get {
return GetAttribute(AttributeNames.Pattern);
}
set {
SetAttribute(AttributeNames.Pattern, value);
}
}
public int Size {
get {
return GetAttribute(AttributeNames.Size).ToInteger(20);
}
set {
SetAttribute(AttributeNames.Size, value.ToString());
}
}
public string Source {
get {
return GetAttribute(AttributeNames.Src);
}
set {
SetAttribute(AttributeNames.Src, value);
}
}
public string Step {
get {
return GetAttribute(AttributeNames.Step);
}
set {
SetAttribute(AttributeNames.Step, value);
}
}
public string UseMap {
get {
return GetAttribute(AttributeNames.UseMap);
}
set {
SetAttribute(AttributeNames.UseMap, value);
}
}
public int DisplayWidth {
get {
return GetAttribute(AttributeNames.Width).ToInteger(OriginalWidth);
}
set {
SetAttribute(AttributeNames.Width, value.ToString());
}
}
public int DisplayHeight {
get {
return GetAttribute(AttributeNames.Height).ToInteger(OriginalHeight);
}
set {
SetAttribute(AttributeNames.Height, value.ToString());
}
}
public int OriginalWidth => (_type as ImageInputType)?.Width ?? 0;
public int OriginalHeight => (_type as ImageInputType)?.Height ?? 0;
internal bool IsVisited { get; set; }
internal bool IsActive { get; set; }
internal bool IsMutable {
get {
if (!base.IsDisabled)
return !base.IsReadOnly;
return false;
}
}
public HtmlInputElement(Document owner)
: base(owner, Tags.Input, NodeFlags.SelfClosing)
{
RegisterAttributeObserver(AttributeNames.Type, UpdateType);
UpdateType(null);
}
public sealed override INode Clone(bool deep = true)
{
HtmlInputElement obj = (HtmlInputElement)base.Clone(deep);
obj._checked = _checked;
obj.UpdateType(_type.Name);
return obj;
}
internal override FormControlState SaveControlState()
{
return new FormControlState(base.Name, Type, base.Value);
}
internal override void RestoreFormControlState(FormControlState state)
{
if (state.Type == Type && state.Name == base.Name)
base.Value = state.Value;
}
public void StepUp(int n = 1)
{
_type.DoStep(n);
}
public void StepDown(int n = 1)
{
_type.DoStep(-n);
}
private void UpdateType(string type)
{
_type = Factory.InputTypes.Create(this, type);
}
internal override void ConstructDataSet(FormDataSet dataSet, HtmlElement submitter)
{
_type.ConstructDataSet(dataSet);
}
internal override void Reset()
{
base.Reset();
_checked = null;
UpdateType(Type);
}
protected override void Check(ValidityState state)
{
base.Check(state);
_type.Check(state);
}
protected override bool CanBeValidated()
{
if (_type.CanBeValidated)
return base.CanBeValidated();
return false;
}
}
}