We don't need React -- we'll reinvent it ourselves! Signed-off-by: Sean Cross <sean@xobs.io>
77 lines
2.7 KiB
TypeScript
77 lines
2.7 KiB
TypeScript
import { FarpatchWidget, makeNavView } from "../interfaces";
|
|
import { Terminal } from '@xterm/xterm';
|
|
import { FitAddon } from '@xterm/addon-fit';
|
|
import { SerializeAddon } from '@xterm/addon-serialize';
|
|
|
|
export class DebugWidget implements FarpatchWidget {
|
|
name: string;
|
|
icon: string = "scroll";
|
|
title: string = "Debug";
|
|
index: number = 0;
|
|
|
|
view: HTMLElement;
|
|
navItem: HTMLElement;
|
|
|
|
terminal: Terminal;
|
|
fitAddon: FitAddon;
|
|
serializeAddon: SerializeAddon;
|
|
resizeFunction: () => void;
|
|
initialized: boolean = false;
|
|
constructor(name: string) {
|
|
this.name = name;
|
|
this.navItem = makeNavView(name, this.icon, this.title);
|
|
this.view = document.createElement("div");
|
|
this.view.classList.add("terminal");
|
|
this.terminal = new Terminal({ theme: { background: "#000000" } });
|
|
this.fitAddon = new FitAddon();
|
|
this.serializeAddon = new SerializeAddon();
|
|
this.resizeFunction = this.resizeTerminal.bind(this);
|
|
}
|
|
|
|
updateIndex(index: number): void {
|
|
this.index = index;
|
|
}
|
|
|
|
onInit(): void {
|
|
console.log("Initialized Debug Widget");
|
|
}
|
|
onFocus(element: HTMLElement): void {
|
|
console.log("Displaying Debug Widget");
|
|
if (!this.initialized) {
|
|
// Ensure the parent frame doesn't get any scrollbars, since we're taking up the whole view
|
|
element.style.overflow = "hidden";
|
|
console.log("Initializing xterm.js");
|
|
// var terminalContainer = document.createElement("div");
|
|
// this.view.appendChild(terminalContainer);
|
|
this.terminal.loadAddon(this.fitAddon);
|
|
this.terminal.loadAddon(this.serializeAddon);
|
|
this.terminal.onKey((e) => {
|
|
console.log("Key pressed: " + e.key);
|
|
this.terminal.write(e.key);
|
|
if (e.key === '\r') {
|
|
this.terminal.write('\n');
|
|
}
|
|
});
|
|
this.terminal.open(this.view);
|
|
this.terminal.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n');
|
|
this.initialized = true;
|
|
}
|
|
element.appendChild(this.view);
|
|
window.addEventListener('resize', this.resizeFunction);
|
|
window.setTimeout(() => {
|
|
this.terminal.focus();
|
|
this.resizeFunction();
|
|
}, 10);
|
|
}
|
|
onBlur(element: HTMLElement): void {
|
|
console.log("Archiving UART Widget");
|
|
element.removeChild(this.view);
|
|
window.removeEventListener('resize', this.resizeFunction);
|
|
}
|
|
|
|
// Whenever the window is resized, update the size of the terminal
|
|
resizeTerminal() {
|
|
this.fitAddon.fit();
|
|
}
|
|
}
|