blob: 783a60812bcd65131276804d68e46edbc0738a20 [file] [log] [blame]
"use strict";
const HTMLElementImpl = require("./HTMLElement-impl").implementation;
const DefaultConstraintValidationImpl =
require("../constraint-validation/DefaultConstraintValidation-impl").implementation;
const { mixin } = require("../../utils");
const { isDisabled, formOwner, getLabelsForLabelable } = require("../helpers/form-controls");
const { asciiLowercase } = require("../helpers/strings");
class HTMLButtonElementImpl extends HTMLElementImpl {
constructor(globalObject, args, privateData) {
super(globalObject, args, privateData);
this._customValidityErrorMessage = "";
this._labels = null;
this._hasActivationBehavior = true;
}
_activationBehavior() {
const { form } = this;
if (form && !isDisabled(this)) {
if (this.type === "submit") {
form._doSubmit();
}
if (this.type === "reset") {
form._doReset();
}
}
}
_getValue() {
const valueAttr = this.getAttributeNS(null, "value");
return valueAttr === null ? "" : valueAttr;
}
get labels() {
return getLabelsForLabelable(this);
}
get form() {
return formOwner(this);
}
get type() {
const typeAttr = asciiLowercase(this.getAttributeNS(null, "type") || "");
switch (typeAttr) {
case "submit":
case "reset":
case "button":
return typeAttr;
default:
return "submit";
}
}
set type(v) {
v = asciiLowercase(String(v));
switch (v) {
case "submit":
case "reset":
case "button":
this.setAttributeNS(null, "type", v);
break;
default:
this.setAttributeNS(null, "type", "submit");
break;
}
}
_barredFromConstraintValidationSpecialization() {
return this.type === "reset" || this.type === "button";
}
}
mixin(HTMLButtonElementImpl.prototype, DefaultConstraintValidationImpl.prototype);
module.exports = {
implementation: HTMLButtonElementImpl
};