/** * 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(); }); })();