main #8
21 changed files with 6326 additions and 147 deletions
9
frontend/.prettierignore
Normal file
9
frontend/.prettierignore
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Ignore artifacts:
|
||||
build
|
||||
coverage
|
||||
|
||||
# Ignore all HTML files:
|
||||
**/*.astro
|
||||
**/*.css
|
||||
**/*.html
|
||||
|
18
frontend/.prettierrc.mjs
Normal file
18
frontend/.prettierrc.mjs
Normal file
|
@ -0,0 +1,18 @@
|
|||
/** @type {import("prettier").Config} */
|
||||
export default {
|
||||
plugins: ["prettier-plugin-astro"],
|
||||
overrides: [
|
||||
{
|
||||
files: ["*.html"],
|
||||
options: {
|
||||
parser: "html",
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ["*.md"],
|
||||
options: {
|
||||
parser: "mdx",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
9
frontend/.vscode/extensions.json
vendored
9
frontend/.vscode/extensions.json
vendored
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"recommendations": [
|
||||
"astro-build.astro-vscode",
|
||||
"abusaidm.html-snippets",
|
||||
"ecmel.vscode-html-css",
|
||||
"mblode.pretty-formatter",
|
||||
"formulahendry.auto-close-tag"],
|
||||
"abusaidm.html-snippets",
|
||||
"ecmel.vscode-html-css",
|
||||
"mblode.pretty-formatter",
|
||||
"formulahendry.auto-close-tag"
|
||||
],
|
||||
"unwantedRecommendations": []
|
||||
}
|
||||
|
|
9
frontend/.vscode/settings.json
vendored
9
frontend/.vscode/settings.json
vendored
|
@ -1,7 +1,4 @@
|
|||
{
|
||||
"cSpell.words": [
|
||||
"bsod",
|
||||
"kanban"
|
||||
],
|
||||
"compile-hero.disable-compile-files-on-did-save-code": true
|
||||
}
|
||||
"cSpell.words": ["bsod", "kanban"],
|
||||
"compile-hero.disable-compile-files-on-did-save-code": true
|
||||
}
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
# astro project
|
||||
|
||||
this uses astro, duh, well, you need pnpm for this
|
||||
this uses astro, duh, well, you need pnpm for this
|
||||
|
|
|
@ -7,7 +7,7 @@ import sitemap from "@astrojs/sitemap";
|
|||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: "https://nelle.observer",
|
||||
outDir: './build',
|
||||
integrations: [mdx(), compressor(), sitemap()]
|
||||
outDir: "./build",
|
||||
integrations: [mdx(), compressor(), sitemap()],
|
||||
});
|
||||
// min and compressor always last!
|
||||
// min and compressor always last!
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "."
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"compile-hero.disable-compile-files-on-did-save-code": true
|
||||
}
|
||||
}
|
||||
"folders": [
|
||||
{
|
||||
"path": ".",
|
||||
},
|
||||
],
|
||||
"settings": {
|
||||
"compile-hero.disable-compile-files-on-did-save-code": true,
|
||||
},
|
||||
}
|
||||
|
|
6161
frontend/pnpm-lock.yaml
Normal file
6161
frontend/pnpm-lock.yaml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,55 +1,55 @@
|
|||
function handleErrors(response) {
|
||||
if (!response.ok) {
|
||||
throw Error(response.statusText);
|
||||
}
|
||||
return response;
|
||||
if (!response.ok) {
|
||||
throw Error(response.statusText);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
function sendMeow(endpoint) {
|
||||
const request = new XMLHttpRequest();
|
||||
request.open("POST", endpoint);
|
||||
request.send("superSecret=null");
|
||||
console.warn(request.response.text);
|
||||
}
|
||||
|
||||
async function getMeowTimeout(endpoint) {
|
||||
const response = await fetch(endpoint)
|
||||
if (response.status === 423) {
|
||||
meowButton.disabled=true;
|
||||
meowButton.innerHTML = "<span>sleeping...</span>";
|
||||
console.warn("MEOW TIMED OUT")
|
||||
}
|
||||
if (response.status === 100) {
|
||||
meowButton.disabled=false;
|
||||
meowButton.innerHTML = "<span>meow</span>";
|
||||
console.warn("MEOW NOT TIMED OUT")
|
||||
}
|
||||
const request = new XMLHttpRequest();
|
||||
request.open("POST", endpoint);
|
||||
request.send("superSecret=null");
|
||||
console.warn(request.response.text);
|
||||
}
|
||||
|
||||
|
||||
async function getMeowTimeout(endpoint) {
|
||||
const response = await fetch(endpoint);
|
||||
if (response.status === 423) {
|
||||
meowButton.disabled = true;
|
||||
meowButton.innerHTML = "<span>sleeping...</span>";
|
||||
console.warn("MEOW TIMED OUT");
|
||||
}
|
||||
if (response.status === 100) {
|
||||
meowButton.disabled = false;
|
||||
meowButton.innerHTML = "<span>meow</span>";
|
||||
console.warn("MEOW NOT TIMED OUT");
|
||||
}
|
||||
}
|
||||
|
||||
async function getBeepTimeout(endpoint) {
|
||||
const response = await fetch(endpoint)
|
||||
if (response.status === 423) {
|
||||
beepButton.disabled=true;
|
||||
beepButton.innerHTML = "<span>sleeping...</span>";
|
||||
console.warn("BEEP TIMED OUT")
|
||||
}
|
||||
if (response.status === 100) {
|
||||
beepButton.disabled=false;
|
||||
beepButton.innerHTML = "<span>meow</span>";
|
||||
console.warn("BEEP NOT TIMED OUT")
|
||||
}
|
||||
const response = await fetch(endpoint);
|
||||
if (response.status === 423) {
|
||||
beepButton.disabled = true;
|
||||
beepButton.innerHTML = "<span>sleeping...</span>";
|
||||
console.warn("BEEP TIMED OUT");
|
||||
}
|
||||
if (response.status === 100) {
|
||||
beepButton.disabled = false;
|
||||
beepButton.innerHTML = "<span>meow</span>";
|
||||
console.warn("BEEP NOT TIMED OUT");
|
||||
}
|
||||
}
|
||||
|
||||
async function getKaomojiTimeout(endpoint) {
|
||||
const response = await fetch(endpoint)
|
||||
if (response.status === 423) {
|
||||
kaomojiButton.disabled=true;
|
||||
kaomojiButton.innerHTML = "<span>sleeping...</span>";
|
||||
console.warn("KAOMOJI TIMED OUT")
|
||||
}
|
||||
if (response.status === 100) {
|
||||
kaomojiButton.disabled=false;
|
||||
kaomojiButton.innerHTML = "<span>meow</span>";
|
||||
console.warn("KAOMOJI NOT TIMED OUT")
|
||||
}
|
||||
}
|
||||
const response = await fetch(endpoint);
|
||||
if (response.status === 423) {
|
||||
kaomojiButton.disabled = true;
|
||||
kaomojiButton.innerHTML = "<span>sleeping...</span>";
|
||||
console.warn("KAOMOJI TIMED OUT");
|
||||
}
|
||||
if (response.status === 100) {
|
||||
kaomojiButton.disabled = false;
|
||||
kaomojiButton.innerHTML = "<span>meow</span>";
|
||||
console.warn("KAOMOJI NOT TIMED OUT");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1 @@
|
|||
function copyLink(link) {
|
||||
|
||||
}
|
||||
function copyLink(link) {}
|
||||
|
|
|
@ -44,7 +44,7 @@ fetch(url)
|
|||
// Chrome Redirect
|
||||
function redirect() {
|
||||
const chromium = /Chrome|Chromium|OPR|Opera|Edge|UC|QQ/.test(
|
||||
navigator.userAgent
|
||||
navigator.userAgent,
|
||||
);
|
||||
|
||||
if (navigator.brave) {
|
||||
|
@ -62,51 +62,49 @@ function redirect() {
|
|||
}
|
||||
}
|
||||
|
||||
// meow
|
||||
// meow
|
||||
const meowButton = document.getElementById("meow-button");
|
||||
const beepButton = document.getElementById("beep-button");
|
||||
const kaomojiButton = document.getElementById("kaomoji-button");
|
||||
|
||||
// on send meow button click
|
||||
async function meowClick() {
|
||||
meowButton.disabled=true;
|
||||
meowButton.disabled = true;
|
||||
meowButton.innerHTML = "<span>sleeping...</span>";
|
||||
sendMeow(meowEndpoint);
|
||||
sendMeow(meowEndpoint);
|
||||
}
|
||||
|
||||
// on send beep button click
|
||||
async function beepClick() {
|
||||
beepButton.disabled=true;
|
||||
beepButton.disabled = true;
|
||||
beepButton.innerHTML = "<span>sleeping...</span>";
|
||||
sendMeow(beepEndpoint);
|
||||
sendMeow(beepEndpoint);
|
||||
}
|
||||
|
||||
// on send kaomoji button click
|
||||
async function kaomojiClick() {
|
||||
kaomojiButton.disabled=true;
|
||||
kaomojiButton.disabled = true;
|
||||
kaomojiButton.innerHTML = "<span>sleeping...</span>";
|
||||
sendMeow(kaomojiEndpoint);
|
||||
}
|
||||
|
||||
|
||||
// Show/Hide Info Boxes
|
||||
const posterInfoButton = document.getElementById("poster-info-button");
|
||||
const posterInfo = document.getElementById("poster-info");
|
||||
let isPosterInfoHidden = true
|
||||
let isPosterInfoHidden = true;
|
||||
|
||||
const ntfyInfoButton = document.getElementById("ntfy-info-button");
|
||||
const ntfyInfo = document.getElementById("ntfy-info");
|
||||
let isNtfyInfoHidden = true
|
||||
let isNtfyInfoHidden = true;
|
||||
|
||||
function showPosterInfo() {
|
||||
if (isPosterInfoHidden) {
|
||||
posterInfo.style.display = "initial";
|
||||
posterInfoButton.innerHTML = "[hide more info]"
|
||||
posterInfoButton.innerHTML = "[hide more info]";
|
||||
isPosterInfoHidden = false;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
posterInfo.style.display = "none";
|
||||
posterInfoButton.innerHTML = "[show more info]"
|
||||
posterInfoButton.innerHTML = "[show more info]";
|
||||
isPosterInfoHidden = true;
|
||||
}
|
||||
}
|
||||
|
@ -114,29 +112,31 @@ function showPosterInfo() {
|
|||
function showNtfyInfo() {
|
||||
if (isNtfyInfoHidden) {
|
||||
ntfyInfo.style.display = "initial";
|
||||
ntfyInfoButton.innerHTML = "[hide more info]"
|
||||
ntfyInfoButton.innerHTML = "[hide more info]";
|
||||
isNtfyInfoHidden = false;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
ntfyInfo.style.display = "none";
|
||||
ntfyInfoButton.innerHTML = "[show more info]"
|
||||
ntfyInfoButton.innerHTML = "[show more info]";
|
||||
isNtfyInfoHidden = true;
|
||||
}
|
||||
}
|
||||
|
||||
//// color scheme change
|
||||
const headTag = document.getElementsByTagName('head')[0];
|
||||
const headTag = document.getElementsByTagName("head")[0];
|
||||
const styleTag = document.createElement("style");
|
||||
|
||||
function checkThemeStorage() {
|
||||
if (sessionStorage.getItem("themeGreen")) {
|
||||
setGreen()
|
||||
setGreen();
|
||||
}
|
||||
if (sessionStorage.getItem("themeOrange")) {
|
||||
setOrange()
|
||||
setOrange();
|
||||
}
|
||||
if (!sessionStorage.getItem("themeOrange") && !sessionStorage.getItem("themeGreen")) {
|
||||
getTheme()
|
||||
if (
|
||||
!sessionStorage.getItem("themeOrange") &&
|
||||
!sessionStorage.getItem("themeGreen")
|
||||
) {
|
||||
getTheme();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -342,10 +342,9 @@ function setOrange() {
|
|||
function getTheme() {
|
||||
if (colorBool) {
|
||||
// if true: green
|
||||
setGreen()
|
||||
}
|
||||
else {
|
||||
setGreen();
|
||||
} else {
|
||||
// if false: orange
|
||||
setOrange()
|
||||
setOrange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,11 +32,10 @@ const msgPFX = "message: ";
|
|||
const attachPFX = "attachment: ";
|
||||
const clickPFX = "click-action: ";
|
||||
|
||||
|
||||
// Ctrl + Enter to send
|
||||
document.addEventListener("keydown", (event) => {
|
||||
if (event.ctrlKey && event.key === "Enter") {
|
||||
ntfyClick()
|
||||
ntfyClick();
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -193,15 +192,15 @@ function sendAll(endpoint, title, message, attachment, click) {
|
|||
|
||||
// send notification
|
||||
function sendNotification() {
|
||||
sendAll(
|
||||
ntfyEndpoint,
|
||||
ntfyTitle.value,
|
||||
ntfyMessage.value,
|
||||
ntfyAttach.value,
|
||||
ntfyClickAction.value
|
||||
);
|
||||
ntfyTitle.value = "";
|
||||
ntfyMessage.value = "";
|
||||
ntfyAttach.value = "";
|
||||
ntfyClickAction.value = "";
|
||||
sendAll(
|
||||
ntfyEndpoint,
|
||||
ntfyTitle.value,
|
||||
ntfyMessage.value,
|
||||
ntfyAttach.value,
|
||||
ntfyClickAction.value,
|
||||
);
|
||||
ntfyTitle.value = "";
|
||||
ntfyMessage.value = "";
|
||||
ntfyAttach.value = "";
|
||||
ntfyClickAction.value = "";
|
||||
}
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
const clickSound = new Audio(
|
||||
"/assets/sounds/ui/zapsplat_button_click_2.mp3"
|
||||
);
|
||||
const clickSound = new Audio("/assets/sounds/ui/zapsplat_button_click_2.mp3");
|
||||
const hoverSound = new Audio(
|
||||
"/assets/sounds/ui/zapsplat_button_click_bright_2.mp3"
|
||||
"/assets/sounds/ui/zapsplat_button_click_bright_2.mp3",
|
||||
);
|
||||
const phonewaveSound = new Audio(
|
||||
"/assets/sounds/sciadv/phonewave/phonewave.ogg"
|
||||
"/assets/sounds/sciadv/phonewave/phonewave.ogg",
|
||||
);
|
||||
const startLeapSound = new Audio(
|
||||
"/assets/sounds/sciadv/phonewave/begin-leap.ogg"
|
||||
"/assets/sounds/sciadv/phonewave/begin-leap.ogg",
|
||||
);
|
||||
|
||||
// Sound effects
|
||||
|
@ -28,7 +26,6 @@ const links = document.querySelectorAll("a");
|
|||
const image = document.querySelectorAll("img");
|
||||
const phonewave = document.getElementById("phonewave");
|
||||
|
||||
|
||||
// biome-ignore lint/complexity/noForEach: <explanation>
|
||||
links.forEach((a) => {
|
||||
a.addEventListener("click", () => {
|
||||
|
@ -71,7 +68,6 @@ image.forEach((button) => {
|
|||
*/
|
||||
});
|
||||
|
||||
|
||||
phonewave.addEventListener("click", () => {
|
||||
phonewaveSound.play();
|
||||
setTimeout(() => {
|
||||
|
@ -82,4 +78,4 @@ phonewave.addEventListener("click", () => {
|
|||
}, 8000);
|
||||
return;
|
||||
}, 10000);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
***Note of the author***
|
||||
**_Note of the author_**
|
||||
|
||||
From "Commander Keen"
|
||||
From "Commander Keen"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// Place any global data in this file.
|
||||
// You can import this data from anywhere in your site by using the `import` keyword.
|
||||
|
||||
export const SITE_TITLE = 'nelle observer';
|
||||
export const SITE_DESCRIPTION = 'personal site of nelle';
|
||||
export const SITE_TITLE = "nelle observer";
|
||||
export const SITE_DESCRIPTION = "personal site of nelle";
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: 'cool stuff!'
|
||||
description: 'cool/interesting things i found on the internet.'
|
||||
pubDate: 'July 10 2024'
|
||||
title: "cool stuff!"
|
||||
description: "cool/interesting things i found on the internet."
|
||||
pubDate: "July 10 2024"
|
||||
---
|
||||
|
||||
### be sure to check back for more
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: 'minecraft 88x31 badges'
|
||||
description: '88x31 badges for your minecraft projects!'
|
||||
pubDate: 'June 17 2024'
|
||||
title: "minecraft 88x31 badges"
|
||||
description: "88x31 badges for your minecraft projects!"
|
||||
pubDate: "June 17 2024"
|
||||
---
|
||||
|
||||
## i made (and still am making), a few 88x31 badges for minecraft mods and such, in aseprite heres what i have so far
|
||||
|
@ -16,4 +16,4 @@ pubDate: 'June 17 2024'
|
|||
|
||||
<img src="/assets/images/badges/mc-badges/made-with-neoforged.png" />
|
||||
|
||||
<img src="/assets/images/badges/mc-badges/made-with-quilt.png"/>
|
||||
<img src="/assets/images/badges/mc-badges/made-with-quilt.png" />
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: 'my setup(s)!'
|
||||
description: 'whats your setup like? i hear nobody asking, im glad you asked!'
|
||||
pubDate: 'April 17 2024'
|
||||
title: "my setup(s)!"
|
||||
description: "whats your setup like? i hear nobody asking, im glad you asked!"
|
||||
pubDate: "April 17 2024"
|
||||
---
|
||||
|
||||
## my personal machine currently has
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: 'a new pc has entered the chat'
|
||||
description: 'i have received some free computers!'
|
||||
pubDate: 'June 30 2024'
|
||||
title: "a new pc has entered the chat"
|
||||
description: "i have received some free computers!"
|
||||
pubDate: "June 30 2024"
|
||||
---
|
||||
|
||||
recently i received two free computers, thanks to bryan of [l33t.codes](https://l33t.codes/), one was a thinkcentre, the other an old mediacenter.
|
||||
|
@ -32,7 +32,7 @@ this is a configure-to-order model, so ill need to check the parts ive already r
|
|||
|
||||
i was really interested by this, I love ThinkPads, So i immediately took up the offer. When i got home i worked on pluggin it in and seeing if it worked, took me a bit to find the VGA cable hiding somewhere in storage but i was able to get it. This machine did not come with a drive, and was unable to post whatsoever.
|
||||
|
||||
After a bit of testing (and a long search for DDR3 modules), i can confirm that something *other* than the memory is the issue (it tested fine in a known-good machine), so more testing will need to be done there.
|
||||
After a bit of testing (and a long search for DDR3 modules), i can confirm that something _other_ than the memory is the issue (it tested fine in a known-good machine), so more testing will need to be done there.
|
||||
|
||||
i really want(ed) to shove my current main build inside this thing as it would be really funny, unfortunately, this only has one fan slot, and thats the loud and poor, outtake. definitely not enough for my modern computer, ill figure out what to do with it eventually!
|
||||
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import { defineCollection } from 'astro:content';
|
||||
import { rssSchema } from '@astrojs/rss';
|
||||
// @ts-ignore
|
||||
import { defineCollection } from "astro:content";
|
||||
import { rssSchema } from "@astrojs/rss";
|
||||
|
||||
const blog = defineCollection({
|
||||
schema: rssSchema,
|
||||
});
|
||||
|
||||
export const collections = { blog };
|
||||
export const collections = { blog };
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import type { APIRoute } from 'astro';
|
||||
import type { APIRoute } from "astro";
|
||||
|
||||
const getRobotsTxt = (sitemapURL: URL) => `
|
||||
|
||||
|
@ -101,6 +101,6 @@ Disallow: /
|
|||
`;
|
||||
|
||||
export const GET: APIRoute = ({ site }) => {
|
||||
const sitemapURL = new URL('sitemap-index.xml', site);
|
||||
return new Response(getRobotsTxt(sitemapURL));
|
||||
};
|
||||
const sitemapURL = new URL("sitemap-index.xml", site);
|
||||
return new Response(getRobotsTxt(sitemapURL));
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue