barrettruth.com/scripts/common.js
2025-04-15 12:59:54 -04:00

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];
};