“use strict”; /* eslint global-require: 0 */

const DocumentImpl = require(“./nodes/Document-impl.js”);

const mappings = {

HTMLElement: {
  file: require("./generated/HTMLElement.js"),
  tags: []
},
HTMLAnchorElement: {
  file: require("./generated/HTMLAnchorElement.js"),
  tags: ["a"]
},
HTMLAppletElement: {
  file: require("./generated/HTMLAppletElement.js"),
  tags: ["applet"]
},
HTMLAreaElement: {
  file: require("./generated/HTMLAreaElement.js"),
  tags: ["area"]
},
HTMLAudioElement: {
  file: require("./generated/HTMLAudioElement.js"),
  tags: ["audio"]
},
HTMLBaseElement: {
  file: require("./generated/HTMLBaseElement.js"),
  tags: ["base"]
},
HTMLBodyElement: {
  file: require("./generated/HTMLBodyElement.js"),
  tags: ["body"]
},
HTMLBRElement: {
  file: require("./generated/HTMLBRElement.js"),
  tags: ["br"]
},
HTMLButtonElement: {
  file: require("./generated/HTMLButtonElement.js"),
  tags: ["button"]
},
HTMLCanvasElement: {
  file: require("./generated/HTMLCanvasElement.js"),
  tags: ["canvas"]
},
HTMLDataElement: {
  file: require("./generated/HTMLDataElement.js"),
  tags: ["data"]
},
HTMLDataListElement: {
  file: require("./generated/HTMLDataListElement.js"),
  tags: ["datalist"]
},
HTMLDialogElement: {
  file: require("./generated/HTMLDialogElement.js"),
  tags: ["dialog"]
},
HTMLDirectoryElement: {
  file: require("./generated/HTMLDirectoryElement.js"),
  tags: ["dir"]
},
HTMLDivElement: {
  file: require("./generated/HTMLDivElement.js"),
  tags: ["div"]
},
HTMLDListElement: {
  file: require("./generated/HTMLDListElement.js"),
  tags: ["dl"]
},
HTMLEmbedElement: {
  file: require("./generated/HTMLEmbedElement.js"),
  tags: ["embed"]
},
HTMLFieldSetElement: {
  file: require("./generated/HTMLFieldSetElement.js"),
  tags: ["fieldset"]
},
HTMLFontElement: {
  file: require("./generated/HTMLFontElement.js"),
  tags: ["font"]
},
HTMLFormElement: {
  file: require("./generated/HTMLFormElement.js"),
  tags: ["form"]
},
HTMLFrameElement: {
  file: require("./generated/HTMLFrameElement.js"),
  tags: ["frame"]
},
HTMLFrameSetElement: {
  file: require("./generated/HTMLFrameSetElement.js"),
  tags: ["frameset"]
},
HTMLHeadingElement: {
  file: require("./generated/HTMLHeadingElement.js"),
  tags: ["h1", "h2", "h3", "h4", "h5", "h6"]
},
HTMLHeadElement: {
  file: require("./generated/HTMLHeadElement.js"),
  tags: ["head"]
},
HTMLHRElement: {
  file: require("./generated/HTMLHRElement.js"),
  tags: ["hr"]
},
HTMLHtmlElement: {
  file: require("./generated/HTMLHtmlElement.js"),
  tags: ["html"]
},
HTMLIFrameElement: {
  file: require("./generated/HTMLIFrameElement.js"),
  tags: ["iframe"]
},
HTMLImageElement: {
  file: require("./generated/HTMLImageElement.js"),
  tags: ["img"]
},
HTMLInputElement: {
  file: require("./generated/HTMLInputElement.js"),
  tags: ["input"]
},
HTMLLabelElement: {
  file: require("./generated/HTMLLabelElement.js"),
  tags: ["label"]
},
HTMLLegendElement: {
  file: require("./generated/HTMLLegendElement.js"),
  tags: ["legend"]
},
HTMLLIElement: {
  file: require("./generated/HTMLLIElement.js"),
  tags: ["li"]
},
HTMLLinkElement: {
  file: require("./generated/HTMLLinkElement.js"),
  tags: ["link"]
},
HTMLMapElement: {
  file: require("./generated/HTMLMapElement.js"),
  tags: ["map"]
},
HTMLMediaElement: {
  file: require("./generated/HTMLMediaElement.js"),
  tags: []
},
HTMLMenuElement: {
  file: require("./generated/HTMLMenuElement.js"),
  tags: ["menu"]
},
HTMLMetaElement: {
  file: require("./generated/HTMLMetaElement.js"),
  tags: ["meta"]
},
HTMLMeterElement: {
  file: require("./generated/HTMLMeterElement.js"),
  tags: ["meter"]
},
HTMLModElement: {
  file: require("./generated/HTMLModElement.js"),
  tags: ["del", "ins"]
},
HTMLObjectElement: {
  file: require("./generated/HTMLObjectElement.js"),
  tags: ["object"]
},
HTMLOListElement: {
  file: require("./generated/HTMLOListElement.js"),
  tags: ["ol"]
},
HTMLOptGroupElement: {
  file: require("./generated/HTMLOptGroupElement.js"),
  tags: ["optgroup"]
},
HTMLOptionElement: {
  file: require("./generated/HTMLOptionElement.js"),
  tags: ["option"]
},
HTMLOutputElement: {
  file: require("./generated/HTMLOutputElement.js"),
  tags: ["output"]
},
HTMLParagraphElement: {
  file: require("./generated/HTMLParagraphElement.js"),
  tags: ["p"]
},
HTMLParamElement: {
  file: require("./generated/HTMLParamElement.js"),
  tags: ["param"]
},
HTMLPreElement: {
  file: require("./generated/HTMLPreElement.js"),
  tags: ["pre"]
},
HTMLProgressElement: {
  file: require("./generated/HTMLProgressElement.js"),
  tags: ["progress"]
},
HTMLQuoteElement: {
  file: require("./generated/HTMLQuoteElement.js"),
  tags: ["blockquote", "q"]
},
HTMLScriptElement: {
  file: require("./generated/HTMLScriptElement.js"),
  tags: ["script"]
},
HTMLSelectElement: {
  file: require("./generated/HTMLSelectElement.js"),
  tags: ["select"]
},
HTMLSourceElement: {
  file: require("./generated/HTMLSourceElement.js"),
  tags: ["source"]
},
HTMLSpanElement: {
  file: require("./generated/HTMLSpanElement.js"),
  tags: ["span"]
},
HTMLStyleElement: {
  file: require("./generated/HTMLStyleElement.js"),
  tags: ["style"]
},
HTMLTableCaptionElement: {
  file: require("./generated/HTMLTableCaptionElement.js"),
  tags: ["caption"]
},
HTMLTableCellElement: {
  file: require("./generated/HTMLTableCellElement.js"),
  tags: []
},
HTMLTableColElement: {
  file: require("./generated/HTMLTableColElement.js"),
  tags: ["col", "colgroup"]
},
HTMLTableDataCellElement: {
  file: require("./generated/HTMLTableDataCellElement.js"),
  tags: ["td"]
},
HTMLTableElement: {
  file: require("./generated/HTMLTableElement.js"),
  tags: ["table"]
},
HTMLTableHeaderCellElement: {
  file: require("./generated/HTMLTableHeaderCellElement.js"),
  tags: ["th"]
},
HTMLTimeElement: {
  file: require("./generated/HTMLTimeElement.js"),
  tags: ["time"]
},
HTMLTitleElement: {
  file: require("./generated/HTMLTitleElement.js"),
  tags: ["title"]
},
HTMLTableRowElement: {
  file: require("./generated/HTMLTableRowElement.js"),
  tags: ["tr"]
},
HTMLTableSectionElement: {
  file: require("./generated/HTMLTableSectionElement.js"),
  tags: ["thead", "tbody", "tfoot"]
},
HTMLTemplateElement: {
  file: require("./generated/HTMLTemplateElement.js"),
  tags: ["template"]
},
HTMLTextAreaElement: {
  file: require("./generated/HTMLTextAreaElement.js"),
  tags: ["textarea"]
},
HTMLTrackElement: {
  file: require("./generated/HTMLTrackElement.js"),
  tags: ["track"]
},
HTMLUListElement: {
  file: require("./generated/HTMLUListElement.js"),
  tags: ["ul"]
},
HTMLUnknownElement: {
  file: require("./generated/HTMLUnknownElement.js"),
  tags: []
},
HTMLVideoElement: {
  file: require("./generated/HTMLVideoElement.js"),
  tags: ["video"]
}

};

module.exports = core => {

for (const interfaceName of Object.keys(mappings)) {
  const file = mappings[interfaceName].file;
  const tags = mappings[interfaceName].tags;

  core[interfaceName] = file.interface;

  for (const tagName of tags) {
    DocumentImpl.implementation.prototype._elementBuilders[tagName] = (document, elName) => {
      return file.create([], {
        core,
        ownerDocument: document,
        localName: elName || tagName.toUpperCase()
      });
    };
  }
}

};