“use strict”;

const HTMLElementImpl = require(“./HTMLElement-impl”).implementation;

const closest = require(“../helpers/traversal”).closest; const isDisabled = require(“../helpers/form-controls”).isDisabled;

class HTMLButtonElementImpl extends HTMLElementImpl {

_activationBehavior() {
  const form = this.form;
  if (form) {
    if (this.type === "submit" && !isDisabled(this)) {
      form._dispatchSubmitEvent();
    }
  }
}

_getValue() {
  const valueAttr = this.getAttribute("value");
  return valueAttr === null ? "" : valueAttr;
}

get form() {
  return closest(this, "form");
}

get type() {
  const typeAttr = (this.getAttribute("type") || "").toLowerCase();
  switch (typeAttr) {
    case "submit":
    case "reset":
    case "button":
    case "menu":
      return typeAttr;
    default:
      return "submit";
  }
}

set type(v) {
  v = String(v).toLowerCase();
  switch (v) {
    case "submit":
    case "reset":
    case "button":
    case "menu":
      this.setAttribute("type", v);
      break;
    default:
      this.setAttribute("type", "submit");
      break;
  }
}

}

module.exports = {

implementation: HTMLButtonElementImpl

};