"use strict";
const { mixin } = require("../../utils");
const DOMTokenList = require("../generated/DOMTokenList");
const HTMLElementImpl = require("./HTMLElement-impl").implementation;
const HTMLHyperlinkElementUtilsImpl = require("./HTMLHyperlinkElementUtils-impl").implementation;

class HTMLAnchorElementImpl extends HTMLElementImpl {
  constructor(args, privateData) {
    super(args, privateData);

    this._htmlHyperlinkElementUtilsSetup();

    this._hasActivationBehavior = true;
  }

  _activationBehavior() {
    this._followAHyperlink();
  }

  get relList() {
    if (this._relList === undefined) {
      this._relList = DOMTokenList.createImpl([], {
        element: this,
        attributeLocalName: "rel"
      });
    }
    return this._relList;
  }

  get text() {
    return this.textContent;
  }
  set text(v) {
    this.textContent = v;
  }

  _attrModified(name, value, oldValue) {
    super._attrModified(name, value, oldValue);

    if (name === "rel" && this._relList !== undefined) {
      this._relList.attrModified();
    }
  }
}

mixin(HTMLAnchorElementImpl.prototype, HTMLHyperlinkElementUtilsImpl.prototype);

module.exports = {
  implementation: HTMLAnchorElementImpl
};
