42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
import { AnsiTerminalDisplay } from "./ansi.ts";
|
|
import { UIConfig } from "./config.ts";
|
|
import { Display } from "./display.ts";
|
|
import { TextUI } from "./ui.ts";
|
|
import { CanvasTerminalDisplay, DivTerminalDisplay } from "./web.ts";
|
|
|
|
export { TextUI };
|
|
|
|
export const UI_DISPLAY_TYPES = {
|
|
autodetect: undefined,
|
|
ansi: AnsiTerminalDisplay,
|
|
web_div: DivTerminalDisplay,
|
|
web_canvas: CanvasTerminalDisplay,
|
|
dummy: Display,
|
|
} as const;
|
|
|
|
export async function createTextUI(
|
|
config: Partial<UIConfig>,
|
|
display_type: keyof typeof UI_DISPLAY_TYPES = "autodetect",
|
|
): Promise<TextUI> {
|
|
if (display_type == "autodetect") {
|
|
if (typeof (window as any).document != "undefined") {
|
|
display_type = "web_canvas";
|
|
// TODO if canvas is not available, fall back to div
|
|
} else if (typeof (Deno as any) != "undefined") {
|
|
display_type = "ansi";
|
|
} else {
|
|
const message = "Cannot initialize display";
|
|
if (typeof alert == "function") {
|
|
alert(message);
|
|
}
|
|
throw new Error(message);
|
|
}
|
|
}
|
|
|
|
var display = new UI_DISPLAY_TYPES[display_type]();
|
|
|
|
var ui = new TextUI(display, config);
|
|
await ui.init();
|
|
|
|
return ui;
|
|
}
|