var email = "mailto:martin@rstvideo.com"; help = [ `
  
.__ .__ | |__ ____ | | ______ | | \_/ __ \| | \____ \ | Y \ ___/| |_| |_> > |___| /\___ >____/ __/ \/ \/ |__| martinloquist.se 0.1
ls / dir  Lista filer. cd  Byt katalog. filnamn  Starta fil. exit  Stäng terminal.
history  Visa historik help  Visar den här sidan clear  Rensa terminal.
`, ]; starttext = [ `
Välkommen till martinloquist.se! — Skriv help för en lista över tillgängliga kommandon.
`, ]; var git = 0; var pw = false; var commands = []; var dataprompt = "guest@martinloquist.se"; var before = document.getElementById("before"); var command = document.getElementById("typer"); var textarea = document.getElementById("terminalinput"); textarea.value = ""; command.innerHTML = textarea.value; setTimeout(function () { loopLines(starttext, "", 80); textarea.focus(); }, 100); jQuery("#embedterminal").keypress(function (event) { enterKey(event); }); function typeIt(from, e) { e = e || window.event; var w = $("typer"); var tw = from.value; w.innerHTML = nl2br(tw); } function nl2br(txt) { return txt.replace(/\n/g, ""); } function $(elid) { return document.getElementById(elid); } function randomdate(start, end) { return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime())) } function timenow() { return new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' }); } function dayssince(startdate, enddate) { var totaltime = Math.abs(startdate - enddate) / 1000; var days = Math.floor(totaltime / 86400); console.log(days); totaltime -= days * 86400; var hours = Math.floor(totaltime / 3600) % 24; console.log(hours); totaltime -= hours * 3600; var minutes = Math.floor(totaltime / 60) % 60; console.log(minutes); totaltime -= minutes * 60; var uptimestring = days + " days, " + hours + ":" + minutes; return (uptimestring); } //init randomdate = randomdate(new Date(2023, 0, 1), new Date()); function enterKey(e) { if (e.keyCode == 13) { commands.push(command.innerHTML); git = commands.length; if (currentdir != '') { directory = "/" + currentdir; } else { directory = ''; } addLine("[" + dataprompt + directory + "]~$ " + command.innerHTML, "no-animation", 0); commander(command.innerHTML.toLowerCase()); command.innerHTML = ""; textarea.value = ""; } if (e.keyCode == 38 && git != 0) { git -= 1; textarea.value = commands[git]; command.innerHTML = textarea.value; } if (e.keyCode == 40 && git != commands.length) { git += 1; if (commands[git] === undefined) { textarea.value = ""; } else { textarea.value = commands[git]; } command.innerHTML = textarea.value; } } var currentdir = ''; function commander(cmd) { if (cmd.slice(0, 3) === 'cd ' || cmd.slice(0, 3) === 'cd.') { // Om vi kör 'cd ..' eller 'cd..' så går vi ner en katalog. if (cmd.substring(3) === '..' || cmd.substring(2) === '..') { currentdir = ''; jQuery('#liner').attr('data-prompt', '[' + dataprompt + ']~$'); } // Annars kollar vi om katalogen finns else { if (Array.isArray(directories[cmd.substring(3)])) { currentdir = cmd.substring(3); jQuery('#liner').attr('data-prompt', '[' + dataprompt + '/' + currentdir + ']~$'); } // Gör den inte det så berättare vi det. else { addLine("cd: no such file or directory: " + cmd.substring(3), 'directory', 80); } } } else if (currentdir != '' && cmd in directories[currentdir][0]) { jQuery('.' + cmd + 'ikon').trigger('click'); } else if (currentdir === '' && cmd in directories) { jQuery('.' + cmd + 'ikon').trigger('click'); } else { switch (cmd.toLowerCase()) { case "help": loopLines(help, "margin", 80); break; case "date": var currentdate = new Date(); addLine(currentdate, "file", 80); break; case "uptime": var currentdate = new Date(); addLine(timenow() + " " + dayssince(randomdate, currentdate) + " 1 user, load average: ", "file, 80"); break; case "pwd": addLine("/" + currentdir, "file", 80); break; case "whoami": addLine("guest", "file", 80); break; case "ls": case "dir": if (currentdir != '') { directorylisting = directories[currentdir][0]; addLine('..', "directory", 80); } else { directorylisting = directories; } Object.keys(directorylisting).forEach(function (key) { // Listar kataloger if (Array.isArray(directorylisting[key])) { addLine(key + "/", "directory", 80); } // Listar filer if (directorylisting[key] === 'file') { addLine(key, "file", 80); } }); break; case "history": loopLines(commands, "color2", 80); break; case "clear": setTimeout(function () { jQuery('.terminal-content').html(''); before = document.getElementById("before"); }, 1); break; case "start": loopLines(starttext, "", 80); break; case "exit": var window_element = document.getElementById("terminalen"); window_element.winbox.close(); break; default: addLine('Command not found. For a list of commands, type \'help\'.', "error", 100); break; } } } function newTab(link) { setTimeout(function () { window.open(link, "_blank"); }, 500); } function addLine(text, style, time) { var t = ""; setTimeout(function () { var next = document.createElement("p"); next.innerHTML = text; next.className = style; before.parentNode.insertBefore(next, before); // window.scrollTo(0, document.body.offsetHeight); }, time); } function loopLines(name, style, time) { name.forEach(function (item, index) { addLine(item, style, index * time); }); }