first commit! 🎉
This commit is contained in:
commit
32189ecd21
3 changed files with 174 additions and 0 deletions
87
public/scripts/main.js
Normal file
87
public/scripts/main.js
Normal file
|
@ -0,0 +1,87 @@
|
|||
var TERM_INTERVAL = 0;
|
||||
var buffer = "";
|
||||
var content;
|
||||
|
||||
const banner =
|
||||
`OpenTerminal v0.1.0
|
||||
made with <3 by ari melody
|
||||
|
||||
`;
|
||||
|
||||
function start() {
|
||||
content = document.getElementById("content");
|
||||
send_text(banner);
|
||||
loop();
|
||||
}
|
||||
|
||||
function loop() {
|
||||
if (buffer.length > 0) {
|
||||
const carat = content.querySelector("#carat");
|
||||
if (carat) carat.remove();
|
||||
|
||||
const char = buffer.slice(0, 1);
|
||||
if (char == "\b") {
|
||||
content.innerText = content.innerText.slice(0, content.innerText.length - 1);
|
||||
} else {
|
||||
content.innerText += char;
|
||||
}
|
||||
buffer = buffer.slice(1);
|
||||
|
||||
const new_carat = document.createElement("div");
|
||||
new_carat.id = "carat";
|
||||
content.appendChild(new_carat);
|
||||
}
|
||||
|
||||
setTimeout(loop, TERM_INTERVAL);
|
||||
}
|
||||
|
||||
function handle_input(event) {
|
||||
// console.debug(event.key);
|
||||
|
||||
if (event.key == "Backspace") {
|
||||
if (event.ctrlKey) {
|
||||
const last_space = content.innerText.lastIndexOf(" ");
|
||||
const last_newline = content.innerText.lastIndexOf("\n");
|
||||
|
||||
var break_at = last_space;
|
||||
if (last_newline > last_space) {
|
||||
break_at = last_newline;
|
||||
}
|
||||
|
||||
const word_length = content.innerText.length - break_at;
|
||||
send_text("\b".repeat(word_length));
|
||||
return;
|
||||
}
|
||||
send_text("\b");
|
||||
return;
|
||||
}
|
||||
if (event.key.startsWith("Arrow")) {
|
||||
return;
|
||||
}
|
||||
switch (event.key) {
|
||||
case 'Shift':
|
||||
case 'Control':
|
||||
case 'Alt':
|
||||
return;
|
||||
case 'Enter':
|
||||
send_text('\n');
|
||||
break;
|
||||
}
|
||||
if (event.key.length > 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
send_text(event.key);
|
||||
}
|
||||
|
||||
function send_text(char) {
|
||||
content.scrollTop = content.scrollHeight;
|
||||
buffer += char;
|
||||
}
|
||||
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
start();
|
||||
});
|
||||
|
||||
document.addEventListener("keydown", handle_input);
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue