add authors note and links to my email and source code
Nightly build & deploy / build-and-deploy (push) Successful in 9m42s

This commit is contained in:
LockeShor
2026-09-20 00:52:43 -04:00
parent 9ef967574e
commit 1ef9ddab8e
4 changed files with 55 additions and 11 deletions
+40 -10
View File
@@ -109,14 +109,21 @@ function buildLayout(store: Store, config: Config): HTMLElement {
const footer = el("footer", "footer");
footer.append(
footerLine(
"Estimates spread each plan evenly across on-campus days. Informational only, not official balances."
footerLine(
"Found a problem? Like the project? Hate it? Email me at ",
createLink("mailto:jslivka@lockeshor.com", "jslivka@lockeshor.com"),
". Also, check out the source code on ",
createLink(
"https://gitea.lockeshor.com/lockeshor/cmu-meal-estimator",
"My Gitea"
),
footerLine(
"Not affiliated with, endorsed by, or officially connected to Carnegie Mellon University or CMU Dining. An independent student tool.",
"footer-disclaimer"
)
);
"."
),
footerLine(
"Not affiliated with, endorsed by, or officially connected to Carnegie Mellon University or CMU Dining. An independent student tool.",
"footer-disclaimer"
)
);
wrap.append(header, grid, footer);
return wrap;
@@ -528,9 +535,32 @@ function field(label: string): HTMLElement {
return f;
}
function footerLine(text: string, extraClass = ""): HTMLElement {
const p = el("p", `footer-line${extraClass ? ` ${extraClass}` : ""}`);
p.textContent = text;
function createLink(href: string, text: string): HTMLAnchorElement {
const a = document.createElement("a");
a.className = "tartan";
a.href = href;
a.textContent = text;
return a;
}
// Accepts text strings or DOM Nodes, with optional class name logic
function footerLine(...args: (Node | string)[]): HTMLParagraphElement {
let className = "";
const children: (Node | string)[] = [...args];
// If the last argument is a class identifier (e.g., "footer-disclaimer")
const lastArg = children[children.length - 1];
if (
children.length > 1 &&
typeof lastArg === "string" &&
lastArg.startsWith("footer-")
) {
className = children.pop() as string;
}
const p = document.createElement("p");
if (className) p.className = className;
p.append(...children);
return p;
}
+5 -1
View File
@@ -64,10 +64,14 @@ body {
letter-spacing: -0.02em;
}
.title .tartan {
.tartan {
color: var(--tartan);
}
.tartan:hover {
color: var(--tartan-soft);
}
.subtitle {
margin: 0;
color: var(--text-dim);