71 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { FixedUiElement } from "./FixedUiElement"
 | 
						|
import { Utils } from "../../Utils"
 | 
						|
import BaseUIElement from "../BaseUIElement"
 | 
						|
 | 
						|
export default class Combine extends BaseUIElement {
 | 
						|
    private readonly uiElements: BaseUIElement[]
 | 
						|
 | 
						|
    constructor(uiElements: (string | BaseUIElement)[]) {
 | 
						|
        super()
 | 
						|
        this.uiElements = Utils.NoNull(uiElements).map((el) => {
 | 
						|
            if (typeof el === "string") {
 | 
						|
                return new FixedUiElement(el)
 | 
						|
            }
 | 
						|
            return el
 | 
						|
        })
 | 
						|
    }
 | 
						|
 | 
						|
    AsMarkdown(): string {
 | 
						|
        let sep = " "
 | 
						|
        if (this.HasClass("flex-col")) {
 | 
						|
            sep = "\n\n"
 | 
						|
        }
 | 
						|
        return this.uiElements.map((el) => el.AsMarkdown()).join(sep)
 | 
						|
    }
 | 
						|
 | 
						|
    Destroy() {
 | 
						|
        super.Destroy()
 | 
						|
        for (const uiElement of this.uiElements) {
 | 
						|
            uiElement.Destroy()
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    public getElements(): BaseUIElement[] {
 | 
						|
        return this.uiElements
 | 
						|
    }
 | 
						|
 | 
						|
    protected InnerConstructElement(): HTMLElement {
 | 
						|
        const el = document.createElement("span")
 | 
						|
        try {
 | 
						|
            if (this.uiElements === undefined) {
 | 
						|
                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 + ")"
 | 
						|
                )
 | 
						|
            }
 | 
						|
            for (const subEl of this.uiElements) {
 | 
						|
                if (subEl === undefined || subEl === null) {
 | 
						|
                    continue
 | 
						|
                }
 | 
						|
                try {
 | 
						|
                    const subHtml = subEl.ConstructElement()
 | 
						|
                    if (subHtml !== undefined) {
 | 
						|
                        el.appendChild(subHtml)
 | 
						|
                    }
 | 
						|
                } catch (e) {
 | 
						|
                    console.error("Could not generate subelement in combine due to ", e)
 | 
						|
                }
 | 
						|
            }
 | 
						|
        } catch (e) {
 | 
						|
            const domExc = e as DOMException
 | 
						|
            console.error("DOMException: ", domExc.name)
 | 
						|
            el.appendChild(
 | 
						|
                new FixedUiElement("Could not generate this combine!")
 | 
						|
                    .SetClass("alert")
 | 
						|
                    .ConstructElement()
 | 
						|
            )
 | 
						|
        }
 | 
						|
 | 
						|
        return el
 | 
						|
    }
 | 
						|
}
 |