Spent way too much time building a playground for.. reasons
This commit is contained in:
parent
4b09a8d494
commit
fdc480262d
5 changed files with 729 additions and 0 deletions
63
_site/main.js
Normal file
63
_site/main.js
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
import "xterm";
|
||||
import "wasm_exec";
|
||||
|
||||
|
||||
var term = new Terminal();
|
||||
term.open(document.getElementById('terminal'));
|
||||
|
||||
function startSession(term) {
|
||||
let buffer = "";
|
||||
let lineBuffer = "";
|
||||
|
||||
term.writeln('Interactive mode');
|
||||
term.write('> ');
|
||||
|
||||
term.onKey((ev, dom) => {
|
||||
const {key} = ev;
|
||||
|
||||
switch (key) {
|
||||
case '\r':
|
||||
// Enter
|
||||
term.writeln('');
|
||||
|
||||
let wantContinue = lineBuffer.length > 0;
|
||||
buffer += lineBuffer;
|
||||
lineBuffer = '';
|
||||
|
||||
ucl.eval(buffer, wantContinue);
|
||||
break;
|
||||
case '\u007F':
|
||||
// Backspace
|
||||
if (lineBuffer.length > 0) {
|
||||
term.write([0x08, 0x20, 0x08]);
|
||||
lineBuffer = lineBuffer.slice(0, lineBuffer.length - 1);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (key >= ' ') {
|
||||
term.write(key);
|
||||
lineBuffer += key;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
ucl.onContinue = () => {
|
||||
buffer += "\n";
|
||||
lineBuffer = '';
|
||||
term.write(': ');
|
||||
}
|
||||
ucl.onNewCommand = () => {
|
||||
term.write('> ');
|
||||
buffer = '';
|
||||
lineBuffer = '';
|
||||
}
|
||||
ucl.onOutLine = (line) => { term.writeln(line); }
|
||||
ucl.onError = (err) => { term.writeln('error: ' + err); }
|
||||
}
|
||||
|
||||
const go = new Go();
|
||||
WebAssembly.instantiateStreaming(fetch("/playwasm.wasm"), go.importObject)
|
||||
.then((result) => {
|
||||
go.run(result.instance);
|
||||
startSession(term);
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue