Files

87 lines
2.6 KiB
JavaScript

/**
* fruithost | OpenSource Hosting
*
* @author Adrian Preuß
* @version 1.0.0
* @license MIT
*/
(() => {
'use strict'
window.addEventListener('DOMContentLoaded', () => {
document.body.style.overflow = 'hidden';
let destination = document.querySelector('input[name="destination"]');
let output = document.querySelector('div.output');
let command = document.querySelector('input[name="command"]');
let parser = new Terminal();
function send(cmd) {
new Ajax(destination.value).onError(function (event, error, response) {
console.warn(event, error, response);
}).onSuccess(function (response) {
if (response === '\u001B[H\u001B[2J\u001B[3J' || response === 'clear') {
output.innerHTML = '';
return;
}
output.innerHTML += parser.parse(response);
command.focus();
output.scrollTo(0, output.scrollHeight);
}).post({
action: 'command',
command: cmd
});
}
let history = [];
let position = 0;
command.addEventListener('keydown', (event) => {
switch (event.keyCode) {
/* Enter */
case 13:
let text = command.value;
history.push(text);
position = history.length;
send(text);
command.value = '';
break;
/* Up */
case 38:
if (position > 0) {
--position;
if (position < 0) {
position = history.length - 1;
}
command.blur();
command.value = history[position];
command.focus();
}
break;
/* Down */
case 40:
if (position >= history.length) {
break;
}
position++;
if (position === history.length) {
command.value = '';
} else {
command.blur();
command.focus();
command.value = history[position];
}
break;
}
});
send('motd');
command.focus();
});
})();