HTMLFormControlElement
Represents the base class for all HTML form control elements.
using AngleSharp.DOM.Collections;
using AngleSharp.Html;
namespace AngleSharp.DOM.Html
{
internal abstract class HTMLFormControlElement : HTMLElement, ILabelabelElement, IValidation
{
private readonly NodeList _labels;
private readonly ValidityState _vstate;
private string _error;
public string Name {
get {
return GetAttribute(AttributeNames.Name);
}
set {
SetAttribute(AttributeNames.Name, value);
}
}
public IHtmlFormElement Form => GetAssignedForm();
public bool IsDisabled {
get {
return GetAttribute(AttributeNames.Disabled) != null;
}
set {
SetAttribute(AttributeNames.Disabled, value ? string.Empty : null);
}
}
public bool Autofocus {
get {
return GetAttribute(AttributeNames.AutoFocus) != null;
}
set {
SetAttribute(AttributeNames.AutoFocus, value ? string.Empty : null);
}
}
public bool SupportsLabels => true;
public INodeList Labels => _labels;
public string ValidationMessage {
get {
if (!_vstate.IsCustomError)
return string.Empty;
return _error;
}
}
public bool WillValidate { get; set; }
public IValidityState Validity => _vstate;
internal HTMLFormControlElement(string name, NodeFlags flags = NodeFlags.None)
: base(name, flags | NodeFlags.Special)
{
_vstate = new ValidityState();
_labels = new NodeList();
}
public bool CheckValidity()
{
Check(_vstate);
return _vstate.IsValid;
}
public void SetCustomValidity(string error)
{
_vstate.IsCustomError = !string.IsNullOrEmpty(error);
_error = error;
}
internal virtual void ConstructDataSet(FormDataSet dataSet, HTMLElement submitter)
{
}
internal virtual void Reset()
{
}
protected virtual void Check(IValidityState state)
{
}
}
}