105 lines
3.1 KiB
JavaScript
105 lines
3.1 KiB
JavaScript
|
function onChooseFile(event) {
|
||
|
if (!(window.File && window.FileReader && window.FileList && window.Blob)) {
|
||
|
alert('The File APIs are not fully supported in this browser.');
|
||
|
}
|
||
|
|
||
|
var files = event.target.files;
|
||
|
|
||
|
|
||
|
var reader = new FileReader();
|
||
|
|
||
|
// Closure to capture the file information.
|
||
|
reader.onload = (function(theFile) {
|
||
|
return function(e) {
|
||
|
// Render thumbnail.
|
||
|
var span = document.createElement('span');
|
||
|
span.innerHTML = ['<img class="thumb" src="', e.target.result,
|
||
|
'" title="', escape(theFile.name), '"/>'].join('');
|
||
|
document.getElementById('list').insertBefore(span, null);
|
||
|
};
|
||
|
})(f);
|
||
|
|
||
|
// Read in the image file as a data URL.
|
||
|
reader.readAsDataURL(f);
|
||
|
}
|
||
|
|
||
|
function init() {
|
||
|
var url = "wss://" + window.location.hostname + "/pipe/" + window.location.hash.substring(1);
|
||
|
console.info("Opening:", url);
|
||
|
|
||
|
var term = new Terminal({rows: 50, cols: 200});
|
||
|
term.open(document.getElementById('terminal'));
|
||
|
term.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ')
|
||
|
|
||
|
const ws = new WebSocket(url);
|
||
|
|
||
|
// Connection opened
|
||
|
ws.addEventListener('open', function (event) {
|
||
|
console.log('Hello Server!');
|
||
|
ws.send(JSON.stringify({"type": "session-start", "cols": 200, "rows": 50}));
|
||
|
});
|
||
|
|
||
|
// Listen for messages
|
||
|
ws.addEventListener('message', function (event) {
|
||
|
var e = JSON.parse(event.data);
|
||
|
console.info(e);
|
||
|
switch (e.type) {
|
||
|
case "stdout":
|
||
|
var buf = atob(e.value);
|
||
|
term.write(buf.replace(/\n/g, '\n\r'));
|
||
|
break
|
||
|
case "exit":
|
||
|
term.write("=== Process finished, no more input accepted ===");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
// Connection opened
|
||
|
ws.addEventListener('close', function (event) {
|
||
|
console.log('Bye Server!');
|
||
|
});
|
||
|
|
||
|
function runFakeTerminal() {
|
||
|
if (term._initialized) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
term._initialized = true;
|
||
|
|
||
|
term.prompt = () => {
|
||
|
term.write('\r\n$ ');
|
||
|
};
|
||
|
|
||
|
term.writeln('Welcome to xterm.js');
|
||
|
term.writeln('This is a local terminal emulation, without a real terminal in the back-end.');
|
||
|
term.writeln('Type some keys and commands to play around.');
|
||
|
term.writeln('');
|
||
|
term.prompt();
|
||
|
|
||
|
term.on('key', function(key, ev) {
|
||
|
const printable = !ev.altKey && !ev.altGraphKey && !ev.ctrlKey && !ev.metaKey;
|
||
|
|
||
|
/* if (ev.keyCode === 13) {
|
||
|
term.prompt();
|
||
|
} else if (ev.keyCode === 8) {
|
||
|
// Do not delete the prompt
|
||
|
if (term._core.buffer.x > 2) {
|
||
|
term.write('\b \b');
|
||
|
}
|
||
|
} else if (printable) {
|
||
|
// term.write(key);
|
||
|
}*/
|
||
|
console.log("Got keypress:", key);
|
||
|
if (key == "\r") key = "\n";
|
||
|
ws.send(JSON.stringify({"type":"stdin", "value":btoa(key)}));
|
||
|
});
|
||
|
|
||
|
term.on('paste', function(data) {
|
||
|
term.write(data);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
runFakeTerminal();
|
||
|
}
|