Make core file, and update some people

This commit is contained in:
Clove 2026-06-18 17:28:30 +01:00
parent 3a7f4238ad
commit 3a905f2182
17 changed files with 154 additions and 168 deletions

View File

@ -109,9 +109,7 @@
</div>
</div>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/flavors.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/terminal.js"></script>
</body>

View File

Before

Width:  |  Height:  |  Size: 680 KiB

After

Width:  |  Height:  |  Size: 680 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -66,9 +66,7 @@
<div id="friends-root"></div>
</div>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/flavors.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/friends.js"></script>
</body>

View File

@ -272,11 +272,9 @@
</div>
</main>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/flavors.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/dev-info.js"></script>
<script src="/js/contrib-heatmap.js"></script>
<script src="/js/heatmap.js"></script>
<script>ContribHeatmap.render("#contrib", { theme: "trans" });</script>
</body>

View File

@ -177,9 +177,7 @@
</section>
</main>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/flavors.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
</body>
</html>

View File

@ -64,10 +64,8 @@
<div id="now-playing"></div>
</main>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/now-playing.js" data-user="1464890289922641993"></script>
<script src="/js/flavors.js"></script>
</body>
</html>

View File

@ -101,9 +101,7 @@
</div>
</div>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/flavors.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/guestbook.js"
data-api="https://guestbook.doughmination.uk"
data-turnstile-key="0x4AAAAAAB08ZhSxKn5rAD3d"></script>

View File

@ -66,9 +66,7 @@
<div id="visitor-counter" role="status" aria-label="Visitor count"></div>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/flavors.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/terminal.js"></script>
<script src="/js/fronting.js"></script>
<!-- lanyard.cafe keyring (webring) — styled to match the site in css/main.css (#lc-embed) -->

View File

@ -1,3 +1,143 @@
// Ari was here uwu
// Professional boob lover
// girls kissing,,,
console.log(`
`);
// mmmmmmmmmmmmmmmmm girls kissing,,,,,
document.querySelectorAll("[data-href]").forEach((el) => {
el.style.cursor = "pointer";
if (!el.hasAttribute("role")) el.setAttribute("role", "link");
if (!el.hasAttribute("tabindex")) el.setAttribute("tabindex", "0");
const go = () => {
const url = el.dataset.href;
if (!url) return;
location.href = url;
};
el.addEventListener("click", go);
el.addEventListener("keydown", (e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
go();
}
});
});
/* ========================== flavors.js ========================= */
(function flavors() {
// Metadata only — colors are defined in the per-flavor CSS files.
const FLAVORS = {
mocha: { label: "Mocha", dot: "#f5c2e7" },
macchiato: { label: "Macchiato", dot: "#f5bde6" },
frappe: { label: "Frappé", dot: "#f4b8e4" },
latte: { label: "Latte", dot: "#ea76cb" },
};
const ORDER = ["mocha", "macchiato", "frappe", "latte"];
const root = document.documentElement;
const ls = window.localStorage;
function apply(name) {
const f = FLAVORS[name] || FLAVORS.mocha;
root.setAttribute("data-flavor", name); // CSS does the rest
const meta = document.querySelector('meta[name="theme-color"]');
if (meta) meta.setAttribute("content", f.dot);
}
let current = ls.getItem("ctpFlavor");
if (!ORDER.includes(current)) current = "mocha";
apply(current); // the <head> snippet already set this to avoid a flash
// ---- top-right corner icon button ----
const bar = document.createElement("div");
bar.className = "beta-bar";
bar.innerHTML = `
<button class="beta-btn" id="flavor-btn" type="button">
<img class="beta-icon" alt="">
</button>`;
// Group the single-item widgets (now-playing + theme toggle) into one
// top bar. On mobile they sit side by side; on desktop both stay
// position:fixed, so this wrapper is zero-size and invisible.
let topbar = document.querySelector(".topbar");
if (!topbar) {
topbar = document.createElement("div");
topbar.className = "topbar";
document.body.insertBefore(topbar, document.body.firstChild);
const np = document.getElementById("now-playing");
// Don't hijack the presence card when it's the centerpiece of the
// dedicated /discord page (it lives inside .presence-stage there).
if (np && !np.closest(".presence-stage")) topbar.appendChild(np);
}
topbar.appendChild(bar);
const btn = bar.querySelector("#flavor-btn");
const icon = bar.querySelector(".beta-icon");
function paintBtn() {
const f = FLAVORS[current];
icon.src = `/assets/theme/${current}.png`; // e.g. /assets/theme/mocha.png
icon.alt = f.label;
btn.title = `Theme: ${f.label} (click to cycle)`;
}
paintBtn();
btn.addEventListener("click", () => {
current = ORDER[(ORDER.indexOf(current) + 1) % ORDER.length];
ls.setItem("ctpFlavor", current);
apply(current);
paintBtn();
});
// ---- cat collection button (sits next to the theme button) ----
const catBtn = document.createElement("button");
catBtn.className = "beta-btn";
catBtn.id = "cat-btn";
catBtn.type = "button";
catBtn.title = "Cat collection";
catBtn.setAttribute("aria-label", "Open cat collection");
catBtn.innerHTML = `<span class="beta-cat-icon" aria-hidden="true"></span>`;
bar.appendChild(catBtn);
catBtn.addEventListener("click", () => {
if (typeof window.toggleCatPicker === "function") window.toggleCatPicker();
});
})();
/* ===================== cat.js (oneko.js) ======================= */
// oneko.js: https://github.com/adryd325/oneko.js
(function oneko() {

View File

@ -1,78 +0,0 @@
(function flavors() {
// Metadata only — colors are defined in the per-flavor CSS files.
const FLAVORS = {
mocha: { label: "Mocha", dot: "#f5c2e7" },
macchiato: { label: "Macchiato", dot: "#f5bde6" },
frappe: { label: "Frappé", dot: "#f4b8e4" },
latte: { label: "Latte", dot: "#ea76cb" },
};
const ORDER = ["mocha", "macchiato", "frappe", "latte"];
const root = document.documentElement;
const ls = window.localStorage;
function apply(name) {
const f = FLAVORS[name] || FLAVORS.mocha;
root.setAttribute("data-flavor", name); // CSS does the rest
const meta = document.querySelector('meta[name="theme-color"]');
if (meta) meta.setAttribute("content", f.dot);
}
let current = ls.getItem("ctpFlavor");
if (!ORDER.includes(current)) current = "mocha";
apply(current); // the <head> snippet already set this to avoid a flash
// ---- top-right corner icon button ----
const bar = document.createElement("div");
bar.className = "beta-bar";
bar.innerHTML = `
<button class="beta-btn" id="flavor-btn" type="button">
<img class="beta-icon" alt="">
</button>`;
// Group the single-item widgets (now-playing + theme toggle) into one
// top bar. On mobile they sit side by side; on desktop both stay
// position:fixed, so this wrapper is zero-size and invisible.
let topbar = document.querySelector(".topbar");
if (!topbar) {
topbar = document.createElement("div");
topbar.className = "topbar";
document.body.insertBefore(topbar, document.body.firstChild);
const np = document.getElementById("now-playing");
// Don't hijack the presence card when it's the centerpiece of the
// dedicated /discord page (it lives inside .presence-stage there).
if (np && !np.closest(".presence-stage")) topbar.appendChild(np);
}
topbar.appendChild(bar);
const btn = bar.querySelector("#flavor-btn");
const icon = bar.querySelector(".beta-icon");
function paintBtn() {
const f = FLAVORS[current];
icon.src = `/assets/theme/${current}.png`; // e.g. /assets/theme/mocha.png
icon.alt = f.label;
btn.title = `Theme: ${f.label} (click to cycle)`;
}
paintBtn();
btn.addEventListener("click", () => {
current = ORDER[(ORDER.indexOf(current) + 1) % ORDER.length];
ls.setItem("ctpFlavor", current);
apply(current);
paintBtn();
});
// ---- cat collection button (sits next to the theme button) ----
const catBtn = document.createElement("button");
catBtn.className = "beta-btn";
catBtn.id = "cat-btn";
catBtn.type = "button";
catBtn.title = "Cat collection";
catBtn.setAttribute("aria-label", "Open cat collection");
catBtn.innerHTML = `<span class="beta-cat-icon" aria-hidden="true"></span>`;
bar.appendChild(catBtn);
catBtn.addEventListener("click", () => {
if (typeof window.toggleCatPicker === "function") window.toggleCatPicker();
});
})();

View File

@ -20,6 +20,7 @@
{
title: "Friends",
members: [
{ name: "Aureal", img: "/assets/friends/aureal.gif", tier: "friend", discordId: "1498977251134279900", link: "https://aureal.dev/" },
{ name: "Fin", img: "/assets/friends/fin.png", tier: "friend", discordId: "867818211574808607", link: null },
{ name: "Meme", img: "/assets/friends/meme.png", tier: "friend", discordId: "812998699667161098", link: null },
{ name: "N", img: "/assets/friends/n.png", tier: "friend", discordId: "639399972407869450", link: null },
@ -31,7 +32,7 @@
title: "Other Peeps",
subtitle: "You can request to be added here!",
members: [
{ name: "Aureal", img: "/assets/known-people/aureal.gif", tier: "known", discordId: "1498977251134279900", link: "https://aureal.dev/" },
{ name: "pokemon", img: "/assets/known-people/pokemon.png", tier: "known", discordId: "784443338627612673", link: "https://devmatei.com/" },
{ name: "Sy", img: "/assets/known-people/sy.png", tier: "known", discordId: "1354212422839308469", link: "https://synapsexen.xyz/"}
]
},

View File

@ -135,7 +135,7 @@
const root = typeof target === "string" ? document.querySelector(target) : target;
if (!root) {
console.warn("[contrib-heatmap] target not found:", target);
console.warn("[heatmap] target not found:", target);
return Promise.resolve(null);
}
@ -250,7 +250,7 @@
.catch(err => {
if (err.name === "AbortError") return null; // superseded by a newer render
if (countEl) countEl.textContent = "Couldn't load contributions.";
console.error("[contrib-heatmap]", err);
console.error("[heatmap]", err);
return null;
});
}

View File

@ -1,42 +1,3 @@
// Ari was here uwu
// Professional boob lover
// girls kissing,,,
console.log(`
`);
// mmmmmmmmmmmmmmmmm girls kissing,,,,,
(function music() {
"use strict";

View File

@ -1,22 +0,0 @@
// Navigate via data-href so the destination URL never shows in the
// browser status bar on hover. Pairs with the CSS View Transitions
// (@view-transition) for a smooth cross-fade between pages.
document.querySelectorAll("[data-href]").forEach((el) => {
el.style.cursor = "pointer";
if (!el.hasAttribute("role")) el.setAttribute("role", "link");
if (!el.hasAttribute("tabindex")) el.setAttribute("tabindex", "0");
const go = () => {
const url = el.dataset.href;
if (!url) return;
location.href = url;
};
el.addEventListener("click", go);
el.addEventListener("keydown", (e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
go();
}
});
});

View File

@ -121,7 +121,7 @@
out += "\n\nTip: type a social's name (try 'socials') to open it.";
return { text: out };
},
ls() {return this.help()},
ls() { return COMMANDS.help(); },
code() {
window.open("https://git.gay/doughmination/c.stupid.cat", "_blank");
return { text: "Opening site source code..." }

View File

@ -78,10 +78,8 @@
</main>
<script src="/js/cat.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/nav.js"></script>
<script src="/js/core.js" data-cat="/assets/oneko/classics/classic.png"></script>
<script src="/js/music.js"></script>
<script src="/js/flavors.js"></script>
</body>
</html>