145 lines
3.8 KiB
JavaScript
145 lines
3.8 KiB
JavaScript
const TERMINAL_PROMPT = "barrett@ruth:~$ ";
|
|
let clearing = false;
|
|
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
const header = document.querySelector("header");
|
|
if (header) {
|
|
let headerLinks = header.querySelector(".header-links");
|
|
if (!headerLinks) {
|
|
headerLinks = document.createElement("div");
|
|
headerLinks.className = "header-links";
|
|
header.appendChild(headerLinks);
|
|
}
|
|
|
|
headerLinks.innerHTML = "";
|
|
|
|
const resumeLink = document.createElement("a");
|
|
resumeLink.href = "/public/resume.pdf";
|
|
resumeLink.target = "_blank";
|
|
resumeLink.textContent = "Resume";
|
|
headerLinks.appendChild(resumeLink);
|
|
|
|
const transcriptLink = document.createElement("a");
|
|
transcriptLink.href = "/public/transcript.pdf";
|
|
transcriptLink.target = "_blank";
|
|
transcriptLink.textContent = "Transcript";
|
|
headerLinks.appendChild(transcriptLink);
|
|
|
|
const aboutLink = document.createElement("a");
|
|
aboutLink.href = "/about.html";
|
|
aboutLink.textContent = "About";
|
|
headerLinks.appendChild(aboutLink);
|
|
}
|
|
|
|
const existingFooter = document.querySelector("footer");
|
|
if (existingFooter) {
|
|
existingFooter.remove();
|
|
}
|
|
|
|
const footer = document.createElement("footer");
|
|
|
|
const deltaSpan = document.createElement("span");
|
|
deltaSpan.className = "greek-delta";
|
|
deltaSpan.innerHTML = "Δ";
|
|
|
|
const footerLinks = document.createElement("div");
|
|
footerLinks.className = "footer-links";
|
|
|
|
const githubLink = document.createElement("a");
|
|
githubLink.href = "https://github.com/barrett-ruth/";
|
|
githubLink.target = "_blank";
|
|
githubLink.textContent = "GitHub";
|
|
footerLinks.appendChild(githubLink);
|
|
|
|
const linkedinLink = document.createElement("a");
|
|
linkedinLink.href = "https://www.linkedin.com/in/barrett-ruth/";
|
|
linkedinLink.target = "_blank";
|
|
linkedinLink.textContent = "LinkedIn";
|
|
footerLinks.appendChild(linkedinLink);
|
|
|
|
const emailLink = document.createElement("a");
|
|
emailLink.href = "mailto:br.barrettruth@gmail.com";
|
|
emailLink.target = "_blank";
|
|
emailLink.textContent = "Email";
|
|
footerLinks.appendChild(emailLink);
|
|
|
|
footer.appendChild(deltaSpan);
|
|
footer.appendChild(footerLinks);
|
|
|
|
document.body.appendChild(footer);
|
|
|
|
if (!document.querySelector("style#dynamic-styles")) {
|
|
const style = document.createElement("style");
|
|
style.id = "dynamic-styles";
|
|
style.innerHTML = `
|
|
footer {
|
|
padding: 20px;
|
|
font-size: 1.5em;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.greek-delta {
|
|
font-family: "Times New Roman", Times, serif;
|
|
font-size: 1.5em;
|
|
}
|
|
|
|
.header-links a,
|
|
.footer-links a {
|
|
margin-left: 25px;
|
|
text-decoration: none;
|
|
}
|
|
`;
|
|
document.head.appendChild(style);
|
|
}
|
|
});
|
|
|
|
function clearPrompt(delay, callback) {
|
|
if (clearing) return;
|
|
clearing = true;
|
|
|
|
const terminalPrompt = document.querySelector(".terminal-prompt");
|
|
const topicLength = terminalPrompt.innerHTML.length - TERMINAL_PROMPT.length;
|
|
let i = 0;
|
|
|
|
function removeChar() {
|
|
if (i++ < topicLength) {
|
|
terminalPrompt.textContent = terminalPrompt.textContent.slice(0, -1);
|
|
setTimeout(removeChar, delay / topicLength);
|
|
} else {
|
|
i = 0;
|
|
clearing = false;
|
|
callback && callback();
|
|
}
|
|
}
|
|
|
|
removeChar();
|
|
}
|
|
|
|
function goHome(e) {
|
|
e.preventDefault();
|
|
|
|
clearPrompt(500, () => (window.location.href = "/"));
|
|
}
|
|
|
|
const getTopicColor = (topicName) => {
|
|
switch (topicName) {
|
|
case "software":
|
|
return "#0073e6";
|
|
case "economics":
|
|
return "#009975";
|
|
case "trading":
|
|
return "#d50032";
|
|
case "algorithms":
|
|
return "#6a0dad";
|
|
default:
|
|
return "#000000";
|
|
}
|
|
};
|
|
|
|
const urlToTopic = () => {
|
|
const pathname = window.location.pathname.split("/");
|
|
if (pathname.length < 3) return "DNE";
|
|
return pathname[2];
|
|
};
|