2020-09-12 23:15:17 +02:00
|
|
|
import { FixedUiElement } from "./FixedUiElement"
|
|
|
|
import { Utils } from "../../Utils"
|
2021-06-10 01:36:20 +02:00
|
|
|
import BaseUIElement from "../BaseUIElement"
|
2020-07-21 01:37:48 +02:00
|
|
|
|
2021-06-10 01:36:20 +02:00
|
|
|
export default class Combine extends BaseUIElement {
|
|
|
|
private readonly uiElements: BaseUIElement[]
|
2020-07-21 01:37:48 +02:00
|
|
|
|
2021-06-10 01:36:20 +02:00
|
|
|
constructor(uiElements: (string | BaseUIElement)[]) {
|
2020-09-12 23:15:17 +02:00
|
|
|
super()
|
|
|
|
this.uiElements = Utils.NoNull(uiElements).map((el) => {
|
|
|
|
if (typeof el === "string") {
|
|
|
|
return new FixedUiElement(el)
|
|
|
|
}
|
|
|
|
return el
|
|
|
|
})
|
2020-07-21 01:37:48 +02:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
|
|
|
|
AsMarkdown(): string {
|
2022-01-14 19:34:00 +01:00
|
|
|
let sep = " "
|
2022-01-18 18:52:42 +01:00
|
|
|
if (this.HasClass("flex-col")) {
|
2022-01-14 19:34:00 +01:00
|
|
|
sep = "\n\n"
|
|
|
|
}
|
|
|
|
return this.uiElements.map((el) => el.AsMarkdown()).join(sep)
|
2021-09-09 00:05:51 +02:00
|
|
|
}
|
|
|
|
|
2022-01-06 18:51:52 +01:00
|
|
|
Destroy() {
|
|
|
|
super.Destroy()
|
|
|
|
for (const uiElement of this.uiElements) {
|
|
|
|
uiElement.Destroy()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-01-26 21:40:38 +01:00
|
|
|
public getElements(): BaseUIElement[] {
|
|
|
|
return this.uiElements
|
|
|
|
}
|
|
|
|
|
2021-06-10 01:36:20 +02:00
|
|
|
protected InnerConstructElement(): HTMLElement {
|
|
|
|
const el = document.createElement("span")
|
2021-09-09 00:05:51 +02:00
|
|
|
try {
|
2022-07-20 12:04:14 +02:00
|
|
|
if (this.uiElements === undefined) {
|
2022-08-30 20:25:31 +02:00
|
|
|
console.error(
|
|
|
|
"PANIC: this.uiElements is undefined. (This might indicate a constructor which did not call 'super'. The constructor name is",
|
|
|
|
this.constructor /*Disable code quality: used for debugging*/.name + ")"
|
|
|
|
)
|
2022-07-20 12:04:14 +02:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
for (const subEl of this.uiElements) {
|
|
|
|
if (subEl === undefined || subEl === null) {
|
|
|
|
continue
|
|
|
|
}
|
2021-11-07 16:34:51 +01:00
|
|
|
try {
|
|
|
|
const subHtml = subEl.ConstructElement()
|
|
|
|
if (subHtml !== undefined) {
|
|
|
|
el.appendChild(subHtml)
|
|
|
|
}
|
|
|
|
} catch (e) {
|
2021-10-08 04:33:39 +02:00
|
|
|
console.error("Could not generate subelement in combine due to ", e)
|
|
|
|
}
|
2020-09-27 20:51:37 +02:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
} catch (e) {
|
2021-06-16 14:23:53 +02:00
|
|
|
const domExc = e as DOMException
|
|
|
|
console.error("DOMException: ", domExc.name)
|
|
|
|
el.appendChild(
|
|
|
|
new FixedUiElement("Could not generate this combine!")
|
|
|
|
.SetClass("alert")
|
|
|
|
.ConstructElement()
|
2022-09-08 21:40:48 +02:00
|
|
|
)
|
2021-06-16 14:23:53 +02:00
|
|
|
}
|
2021-09-09 00:05:51 +02:00
|
|
|
|
2021-06-10 01:36:20 +02:00
|
|
|
return el
|
2020-07-21 01:37:48 +02:00
|
|
|
}
|
|
|
|
}
|