mapcomplete/UI/Base/List.ts

52 lines
1.6 KiB
TypeScript

import { Utils } from "../../Utils"
import BaseUIElement from "../BaseUIElement"
import Translations from "../i18n/Translations"
export default class List extends BaseUIElement {
private readonly uiElements: BaseUIElement[]
private readonly _ordered: boolean
constructor(uiElements: (string | BaseUIElement)[], ordered = false) {
super()
this._ordered = ordered
this.uiElements = Utils.NoNull(uiElements).map((s) => Translations.W(s))
}
AsMarkdown(): string {
if (this._ordered) {
return (
"\n\n" +
this.uiElements
.map((el, i) => " " + i + ". " + el.AsMarkdown().replace(/\n/g, " \n"))
.join("\n") +
"\n"
)
} else {
return (
"\n\n" +
this.uiElements
.map((el) => " - " + el.AsMarkdown().replace(/\n/g, " \n"))
.join("\n") +
"\n"
)
}
}
protected InnerConstructElement(): HTMLElement {
const el = document.createElement(this._ordered ? "ol" : "ul")
for (const subEl of this.uiElements) {
if (subEl === undefined || subEl === null) {
continue
}
const subHtml = subEl.ConstructElement()
if (subHtml !== undefined) {
const item = document.createElement("li")
item.appendChild(subHtml)
el.appendChild(item)
}
}
return el
}
}