forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			61 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {UIEventSource} from "../../Logic/UIEventSource";
 | 
						|
import BaseUIElement from "../BaseUIElement";
 | 
						|
import Combine from "./Combine";
 | 
						|
 | 
						|
export class VariableUiElement extends BaseUIElement {
 | 
						|
    private readonly _contents: UIEventSource<string | BaseUIElement | BaseUIElement[]>;
 | 
						|
 | 
						|
    constructor(contents: UIEventSource<string | BaseUIElement | BaseUIElement[]>) {
 | 
						|
        super();
 | 
						|
        this._contents = contents;
 | 
						|
    }
 | 
						|
 | 
						|
    Destroy() {
 | 
						|
        super.Destroy();
 | 
						|
        this.isDestroyed = true;
 | 
						|
    }
 | 
						|
 | 
						|
    AsMarkdown(): string {
 | 
						|
        const d = this._contents.data;
 | 
						|
        if (typeof d === "string") {
 | 
						|
            return d;
 | 
						|
        }
 | 
						|
        if (d instanceof BaseUIElement) {
 | 
						|
            return d.AsMarkdown()
 | 
						|
        }
 | 
						|
        return new Combine(<BaseUIElement[]>d).AsMarkdown()
 | 
						|
    }
 | 
						|
 | 
						|
    protected InnerConstructElement(): HTMLElement {
 | 
						|
        const el = document.createElement("span");
 | 
						|
        const self = this;
 | 
						|
        this._contents.addCallbackAndRun((contents) => {
 | 
						|
            if (self.isDestroyed) {
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
            while (el.firstChild) {
 | 
						|
                el.removeChild(el.lastChild);
 | 
						|
            }
 | 
						|
 | 
						|
            if (contents === undefined) {
 | 
						|
                return
 | 
						|
            }
 | 
						|
            if (typeof contents === "string") {
 | 
						|
                el.innerHTML = contents;
 | 
						|
            } else if (contents instanceof Array) {
 | 
						|
                for (const content of contents) {
 | 
						|
                    const c = content?.ConstructElement();
 | 
						|
                    if (c !== undefined && c !== null) {
 | 
						|
                        el.appendChild(c);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            } else {
 | 
						|
                const c = contents.ConstructElement();
 | 
						|
                if (c !== undefined && c !== null) {
 | 
						|
                    el.appendChild(c);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        });
 | 
						|
        return el;
 | 
						|
    }
 | 
						|
}
 |