mirror of
https://github.com/andwati/andwati.com.git
synced 2026-10-18 09:22:53 +00:00
109 lines
2.9 KiB
JavaScript
109 lines
2.9 KiB
JavaScript
(function () {
|
|
'use strict';
|
|
|
|
var body = document.getElementById('term-body');
|
|
if (!body) return;
|
|
|
|
var path = window.location.pathname;
|
|
var promptUser = body.dataset.prompt || 'user@pwnbox';
|
|
var hostname = body.dataset.hostname || 'pwnbox';
|
|
var whoami = body.dataset.whoami || 'l0st_r3ader';
|
|
|
|
var links = [
|
|
{ href: body.dataset.linkHome, label: '~/home' },
|
|
{ href: body.dataset.linkPosts, label: '~/posts' },
|
|
{ href: body.dataset.linkTags, label: '~/tags' },
|
|
];
|
|
|
|
var steps = [
|
|
{ type: 'cmd', text: 'cd ' + path },
|
|
{ type: 'out-error', text: 'bash: cd: ' + path + ': No such file or directory' },
|
|
{ type: 'cmd', text: 'whoami' },
|
|
{ type: 'out', text: whoami },
|
|
{ type: 'cmd', text: 'ls ~/recovery/' },
|
|
{ type: 'ls' },
|
|
];
|
|
|
|
var CHAR_DELAY = 28;
|
|
var LINE_DELAY = 180;
|
|
|
|
function ps1() {
|
|
var s = document.createElement('span');
|
|
s.className = 'term-ps1';
|
|
s.textContent = promptUser + '@' + hostname + ':~$ ';
|
|
return s;
|
|
}
|
|
|
|
function appendCmdLine(text, callback) {
|
|
var row = document.createElement('div');
|
|
row.className = 'term-row';
|
|
row.appendChild(ps1());
|
|
var input = document.createElement('span');
|
|
input.className = 'term-input';
|
|
row.appendChild(input);
|
|
body.appendChild(row);
|
|
|
|
var i = 0;
|
|
function tick() {
|
|
if (i < text.length) {
|
|
input.textContent += text[i++];
|
|
setTimeout(tick, CHAR_DELAY);
|
|
} else {
|
|
setTimeout(callback, LINE_DELAY);
|
|
}
|
|
}
|
|
tick();
|
|
}
|
|
|
|
function appendOut(text, extraClass, callback) {
|
|
var div = document.createElement('div');
|
|
div.className = 'term-out' + (extraClass ? ' ' + extraClass : '');
|
|
div.textContent = text;
|
|
body.appendChild(div);
|
|
setTimeout(callback, LINE_DELAY);
|
|
}
|
|
|
|
function appendLs(callback) {
|
|
var div = document.createElement('div');
|
|
div.className = 'term-out-ls';
|
|
links.forEach(function (l) {
|
|
var a = document.createElement('a');
|
|
a.href = l.href;
|
|
a.textContent = l.label;
|
|
div.appendChild(a);
|
|
});
|
|
body.appendChild(div);
|
|
setTimeout(callback, LINE_DELAY);
|
|
}
|
|
|
|
function appendCursor() {
|
|
var row = document.createElement('div');
|
|
row.className = 'term-row';
|
|
row.appendChild(ps1());
|
|
var cur = document.createElement('span');
|
|
cur.className = 'term-cursor';
|
|
cur.setAttribute('aria-hidden', 'true');
|
|
row.appendChild(cur);
|
|
body.appendChild(row);
|
|
}
|
|
|
|
function runSteps(i) {
|
|
if (i >= steps.length) {
|
|
appendCursor();
|
|
return;
|
|
}
|
|
var step = steps[i];
|
|
var next = function () {
|
|
runSteps(i + 1);
|
|
};
|
|
|
|
if (step.type === 'cmd') appendCmdLine(step.text, next);
|
|
else if (step.type === 'out-error') appendOut(step.text, 'term-out-error', next);
|
|
else if (step.type === 'out') appendOut(step.text, 'term-out-muted', next);
|
|
else if (step.type === 'ls') appendLs(next);
|
|
else next();
|
|
}
|
|
|
|
runSteps(0);
|
|
})();
|