Files
Terminal-Website/public/js/terminal.js
2024-01-16 12:28:59 +01:00

88 lines
2.4 KiB
JavaScript

const hostname = `192.168.${Math.floor(Math.random()*100)}.${Math.floor(Math.random()*255)}`;
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll(".pathText").forEach((element)=> {
element.innerHTML = `guest@${hostname}`;
});
const terminalInput = document.getElementById("terminalInput");
terminalInput.addEventListener("input", function (e) {
resizeInput();
});
resizeInput()
terminalInput.addEventListener('blur', function(e) {
e.preventDefault();
setTimeout(() => {
terminalInput.focus();
}, 0);
}, false);
document.addEventListener('click', function(e) {
e.preventDefault();
setTimeout(() => {
terminalInput.focus();
}, 0);
}, false);
terminalInput.focus();
terminalInput.addEventListener("keydown", async function (e) {
if (e.key === "Enter"){
await sendCommand(e);
}
});
});
async function sendCommand(e){
const command = e.target.value;
console.log("COMMAND SENT: "+command);
const response = await fetch("/execute")
const files = await response.json();
console.log(files);
e.target.value = "";
resizeInput();
}
function resizeInput() {
const inputText = terminalInput.value;
const inputWidth = measureTextWidth(inputText);
const maxWidth = 300; // Set your desired maximum width
if (inputWidth <= maxWidth) {
terminalInput.style.width = inputWidth + "px";
} else {
terminalInput.style.width = maxWidth + "px";
terminalInput.value = inputText.slice(0, -1); // Remove the last character
}
}
function measureTextWidth(text) {
const nonBreakingSpace = '\u00A0';
const sanitizedText = text.replace(/ /g, nonBreakingSpace);
const fakeElement = document.createElement("div");
fakeElement.style.visibility = "hidden";
fakeElement.style.position = "absolute";
fakeElement.style.top = "0";
fakeElement.style.left = "0";
fakeElement.style.width = "auto";
fakeElement.style.fontFamily = "Source Code Pro";
fakeElement.style.fontSize = "16px";
fakeElement.style.whiteSpace = "nowrap";
fakeElement.innerHTML = sanitizedText;
document.body.appendChild(fakeElement);
const width = fakeElement.offsetWidth;
document.body.removeChild(fakeElement);
return width;
}