diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d7b3a1e..0000000 --- a/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.DS_Store -canvas/ -chaos/ \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 8f96409..0000000 --- a/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# luminousherbs.github.io ->
this is my website
you can view it online
at [luminousherbs.github.io](https://luminousherbs.github.io)
that is all
thank you for your time

- - \ No newline at end of file diff --git a/_config.yml b/_config.yml deleted file mode 100644 index d662219..0000000 --- a/_config.yml +++ /dev/null @@ -1,2 +0,0 @@ -title: Test -# theme: minima \ No newline at end of file diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 4e3525d..0000000 --- a/_layouts/default.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - {{ page.title }} - - - -

{{ page.title }}

- - - - -
- {{ content }} -
- < luminousherbs - - \ No newline at end of file diff --git a/aeiouniverse/index.html b/aeiouniverse/index.html deleted file mode 100644 index 6e25852..0000000 --- a/aeiouniverse/index.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - Aeiouniverse - - - -

Aeiouniverse

- - - - -
-

The Aeiouniverse is a showcase for creations that only use vowels. Here are some of them:

- -

Want to add your own? Share it to Mastodon with #aeiouniverse or submit a pull request on GitHub.

-
- < luminousherbs - - \ No newline at end of file diff --git a/aeiouniverse/script.js b/aeiouniverse/script.js deleted file mode 100644 index f771065..0000000 --- a/aeiouniverse/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world!"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad); diff --git a/aoo/index.html b/aoo/index.html deleted file mode 100644 index a321462..0000000 --- a/aoo/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - Aoo: Mastodon but only the vowels - - - -

aoo

-

It's just like Mastodon but with only the vowels

- - - - -
- - -
- < Things - - diff --git a/aoo/script.js b/aoo/script.js deleted file mode 100644 index dbae12d..0000000 --- a/aoo/script.js +++ /dev/null @@ -1,48 +0,0 @@ -console.log("Hello world!"); - -let input, output; - -function removeConsonants(str) { - return str.replace(/[bcdfghjklmnpqrstvwxyz]/gi, ''); -} - -async function getText(url) { - const response = await fetch(url); - const jdata = await response.json(); - return { - author: `@${jdata.account.username}`, - content: jdata.content.replace("

", "").replace("

", ""), - }; -} - -function getApiUrl(postUrl) { - const items = postUrl.split("/"); - const id = items[items.length - 1]; - return `https://mas.to/api/v1/statuses/${id}`; -} - -async function getMastodonPost(url) { - const apiUrl = getApiUrl(url); - const content = await getText(apiUrl); - return content; -} - -function onInput() { - fixWidth(input); - getMastodonPost(input.value).then((res) => ( - output.innerHTML = `${removeConsonants(res.author)}
${removeConsonants(res.content)}` - )) -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - input = document.getElementById("input"); - output = document.getElementById("output"); - input.addEventListener("input", onInput); - - onInput(); -} - -document.addEventListener("DOMContentLoaded", onLoad); diff --git a/assets/favicons/android.png b/assets/favicons/android.png deleted file mode 100644 index 856ebaa..0000000 Binary files a/assets/favicons/android.png and /dev/null differ diff --git a/assets/favicons/default-16x16.png b/assets/favicons/default-16x16.png deleted file mode 100644 index bdeff77..0000000 Binary files a/assets/favicons/default-16x16.png and /dev/null differ diff --git a/assets/favicons/default-32x32.png b/assets/favicons/default-32x32.png deleted file mode 100644 index 28dbb85..0000000 Binary files a/assets/favicons/default-32x32.png and /dev/null differ diff --git a/assets/favicons/ios.png b/assets/favicons/ios.png deleted file mode 100644 index a744e77..0000000 Binary files a/assets/favicons/ios.png and /dev/null differ diff --git a/assets/favicons/windows.ico b/assets/favicons/windows.ico deleted file mode 100644 index 63e3eec..0000000 Binary files a/assets/favicons/windows.ico and /dev/null differ diff --git a/assets/images/dinosaur.jpg b/assets/images/dinosaur.jpg deleted file mode 100644 index 2edcf67..0000000 Binary files a/assets/images/dinosaur.jpg and /dev/null differ diff --git a/assets/images/frog.jpg b/assets/images/frog.jpg deleted file mode 100644 index 6ce35bf..0000000 Binary files a/assets/images/frog.jpg and /dev/null differ diff --git a/assets/images/shifty0.jpg b/assets/images/shifty0.jpg deleted file mode 100644 index d949a97..0000000 Binary files a/assets/images/shifty0.jpg and /dev/null differ diff --git a/assets/images/shifty1.jpg b/assets/images/shifty1.jpg deleted file mode 100644 index 4299953..0000000 Binary files a/assets/images/shifty1.jpg and /dev/null differ diff --git a/assets/images/shifty2.jpg b/assets/images/shifty2.jpg deleted file mode 100644 index ba39ed9..0000000 Binary files a/assets/images/shifty2.jpg and /dev/null differ diff --git a/assets/images/shifty3.jpg b/assets/images/shifty3.jpg deleted file mode 100644 index 14c2cec..0000000 Binary files a/assets/images/shifty3.jpg and /dev/null differ diff --git a/assets/images/shifty4.jpg b/assets/images/shifty4.jpg deleted file mode 100644 index d65d681..0000000 Binary files a/assets/images/shifty4.jpg and /dev/null differ diff --git a/assets/images/shifty5.jpg b/assets/images/shifty5.jpg deleted file mode 100644 index d8a7aec..0000000 Binary files a/assets/images/shifty5.jpg and /dev/null differ diff --git a/assets/images/shifty6.jpg b/assets/images/shifty6.jpg deleted file mode 100644 index f805f21..0000000 Binary files a/assets/images/shifty6.jpg and /dev/null differ diff --git a/assets/images/shifty7.jpg b/assets/images/shifty7.jpg deleted file mode 100644 index fbdb54c..0000000 Binary files a/assets/images/shifty7.jpg and /dev/null differ diff --git a/assets/images/shifty8.jpg b/assets/images/shifty8.jpg deleted file mode 100644 index bccad98..0000000 Binary files a/assets/images/shifty8.jpg and /dev/null differ diff --git a/assets/images/shifty9.jpg b/assets/images/shifty9.jpg deleted file mode 100644 index 9f8aae6..0000000 Binary files a/assets/images/shifty9.jpg and /dev/null differ diff --git a/assets/scripts/tax.js b/assets/scripts/tax.js deleted file mode 100644 index db865f0..0000000 --- a/assets/scripts/tax.js +++ /dev/null @@ -1,27 +0,0 @@ -function year() { - // Date.now() -> number of milliseconds since 1970 - return 1970 + (Date.now() / (1000 * 60 * 60 * 24 * 365)); -} - -function nextMarch() { - const currentYear = year(); - const currentMonth = 12 * (currentYear % 1) + 1 - return `March 31st, ${ - Math.floor(currentYear) + ( - (currentMonth > 3) ? 1 : 0 - ) - }`; -} - -const message = `You have too much money! You must submit your tax return by ${nextMarch()} or face prosecution.`; - - -if ( - (+localStorage.coins >= 250) - && - (Math.random() < (1 / 5)) -) { - if (window.confirm(message)) { - window.location.href = "/things/tax/"; - } -} diff --git a/assets/scripts/toolbar.js b/assets/scripts/toolbar.js deleted file mode 100644 index 2aa1639..0000000 --- a/assets/scripts/toolbar.js +++ /dev/null @@ -1,25 +0,0 @@ -function downloadFile(filepath) { - const a = document.createElement("a"); - a.href = filepath; - a.download = ""; - a.hidden = true; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); -} - -function edit() { - window.location.href = `https://github.com/luminousherbs/luminousherbs.github.io/tree/main${window.location.pathname}`; -} - -function share() { - navigator.share({url: window.location.href}); -} - -function downloadHTML() { - downloadFile("index.html"); -} - -function downloadJavaScript() { - downloadFile("script.js"); -} \ No newline at end of file diff --git a/assets/style/ai/chatgpt.css b/assets/style/ai/chatgpt.css deleted file mode 100644 index 5c32c02..0000000 --- a/assets/style/ai/chatgpt.css +++ /dev/null @@ -1,220 +0,0 @@ -/* Base styles */ -body { - font-family: 'Nunito Sans', sans-serif; - line-height: 1.6; - background: linear-gradient(120deg, #f8fafc 0%, #e8eaf6 100%); - color: #222; - margin: 0; - padding: 0; -} - -h1, h2, h3 { - font-weight: 800; - line-height: 1.1; - margin-bottom: 0.5em; -} - -h1 { - font-size: 2.5rem; -} - -h2 { - font-size: 1.7rem; -} - -h3 { - font-size: 1.2rem; -} - -p { - font-size: 1.05rem; - margin-bottom: 1em; -} - -strong { - font-weight: 800; -} - -del { - text-decoration: line-through; - text-decoration-thickness: 2px; -} - -/* Layout blocks */ -aside { - border-left: 5px solid #C8BD67; - background: #f9fbe7; - padding: 12px 18px; - margin: 16px 0; - font-style: italic; - border-radius: 8px; - box-shadow: 0 2px 8px rgba(200, 189, 103, 0.08); -} - -section { - background: #fffde7; - padding: 24px 32px; - margin: 24px 0; - border-radius: 12px; - box-shadow: 0 2px 12px rgba(0,0,0,0.06); - transition: box-shadow 0.2s; -} - -section:hover { - box-shadow: 0 4px 24px rgba(0,0,0,0.10); -} - -/* Form elements */ -textarea, input { - width: 100%; - font-family: 'Nunito Sans', sans-serif; - font-size: 1rem; - padding: 10px 12px; - border: 1.5px solid #C8BD67; - border-radius: 8px; - background: #fffde7; - color: #222; - margin-bottom: 1em; - transition: border-color 0.2s, box-shadow 0.2s; - box-sizing: border-box; -} - -textarea:focus, input:focus { - border-color: #FAEC81; - outline: none; - box-shadow: 0 0 0 2px #faec8180; -} - -/* Tables */ -table { - border-collapse: separate; - border-spacing: 0; - width: 100%; - background: #fff; - border-radius: 10px; - overflow: hidden; - box-shadow: 0 1px 6px rgba(0,0,0,0.04); - margin-bottom: 2em; -} - -th, td { - border: none; - padding: 14px 16px; - text-align: left; -} - -th { - background: #FAEC81; - color: #222; - font-weight: 700; - letter-spacing: 0.05em; -} - -tr:nth-child(even) td { - background: #f6f6e9; -} - -/* Buttons */ -button { - background: linear-gradient(90deg, #FAEC81 60%, #F9D976 100%); - border: none; - border-radius: 8px; - color: #222; - font-size: 1rem; - font-weight: 700; - padding: 10px 28px; - margin: 8px 0; - cursor: pointer; - box-shadow: 0 2px 8px rgba(250, 236, 129, 0.10); - transition: background 0.2s, box-shadow 0.2s, transform 0.1s; -} - -button:hover:not(:disabled) { - background: linear-gradient(90deg, #F9D976 60%, #FAEC81 100%); - box-shadow: 0 4px 16px rgba(250, 236, 129, 0.18); - transform: translateY(-2px) scale(1.03); -} - -button:active:not(:disabled) { - transform: scale(0.98); -} - -button:disabled { - background: #e0e0e0; - color: #aaa; - cursor: not-allowed; - box-shadow: none; -} - -/* Links */ -a { - color: #5ECE63; - text-decoration: none; - transition: color 0.2s; -} - -a:hover, a:focus { - color: #388e3c; - text-decoration: underline; -} - -/* Responsive */ -@media (max-width: 700px) { - section { - padding: 14px 8px; - } - aside { - padding: 8px 8px; - } - th, td { - padding: 8px 6px; - } -} - -/* Dark mode */ -@media (prefers-color-scheme: dark) { - body { - background: linear-gradient(120deg, #232526 0%, #414345 100%); - color: #f5f5f5; - } - aside { - background: #333a2f; - border-color: #FAEC81; - color: #f5f5f5; - box-shadow: 0 2px 8px rgba(250, 236, 129, 0.08); - } - section { - background: #232526; - box-shadow: 0 2px 12px rgba(250, 236, 129, 0.04); - } - textarea, input { - background: #232526; - color: #f5f5f5; - border-color: #FAEC81; - } - table { - background: #232526; - color: #f5f5f5; - } - th { - background: #444a2f; - color: #FAEC81; - } - tr:nth-child(even) td { - background: #2c2f2f; - } - button { - background: linear-gradient(90deg, #444a2f 60%, #FAEC81 100%); - color: #FAEC81; - } - button:disabled { - background: #444444; - color: #888; - } - a { - color: #7EF984; - } - a:visited { - color: #EB80D9; - } -} \ No newline at end of file diff --git a/assets/style/ai/claude.css b/assets/style/ai/claude.css deleted file mode 100644 index 57d14c0..0000000 --- a/assets/style/ai/claude.css +++ /dev/null @@ -1,198 +0,0 @@ -body { - font-family: 'Nunito Sans', sans-serif; - line-height: 1.6; /* Slightly increased line height for better readability */ - margin: 0; /* Reset default body margin */ - padding: 0; /* Reset default body padding */ -} - -/* Dark mode styles */ -@media (prefers-color-scheme: dark) { - body { - color: #F0F0F0; /* Lighter text color for better contrast */ - background-color: #121212; /* Darker background color */ - } - - aside { - border-color: #444444; - background-color: #2B2B2B; - } - - section { - background-color: #1E1E1E; - } - - textarea { - background-color: #333333; - color: #F0F0F0; - border: 1px solid #555555; /* Added border for better definition */ - } - - th, td { - border-color: #555555; - } - - th { - background-color: #3A3A3A; - color: #FFFFFF; /* Added text color for better readability */ - } - - button:disabled { - background-color: #555555; - border-color: #333333; - color: #999999; - } - - a:link { - color: #8FFFA3; /* Slightly adjusted link color */ - } - - a:visited { - color: #F090E9; /* Slightly adjusted visited link color */ - } -} - -/* Light mode styles */ -@media (prefers-color-scheme: light) { - body { - color: #333333; /* Darker text color */ - background-color: #FAFAFA; /* Lighter background color */ - } - - aside { - border-color: #BBBBBB; - background-color: #EEEEEE; - } - - section { - background-color: #F5F5F5; - } - - textarea { - background-color: #EEEEEE; - color: #333333; - border: 1px solid #BBBBBB; /* Added border for better definition */ - } - - th, td { - border-color: #BBBBBB; - } - - th { - background-color: #DDDDDD; - } - - button:disabled { - background-color: #AAAAAA; - border-color: #888888; - color: #DDDDDD; - cursor: not-allowed; - } - - a:link { - color: #6ADE73; /* Slightly adjusted link color */ - } - - a:visited { - color: #D370C5; /* Slightly adjusted visited link color */ - } -} - -/* Typography */ -h1 { - font-size: 2.75rem; /* Slightly larger */ - font-weight: 700; /* Less bold */ - line-height: 1.2; - margin-bottom: 0.5rem; /* Added margin */ -} - -h2 { - font-size: 1.75rem; /* Slightly larger */ - font-weight: 700; /* Less bold */ - line-height: 1.2; - margin-bottom: 0.5rem; /* Added margin */ -} - -h3 { - font-size: 1.25rem; /* Slightly larger */ - font-weight: 700; /* Less bold */ - line-height: 1.2; - margin-bottom: 0.5rem; /* Added margin */ -} - -p { - font-size: 1.1rem; /* Slightly larger */ - font-weight: 400; - margin-bottom: 1rem; /* Added margin */ -} - -strong { - font-weight: 700; /* Less bold */ -} - -del { - text-decoration: line-through; - text-decoration-thickness: 1.5px; /* Adjusted thickness */ - opacity: 0.7; /* Reduced opacity for a softer look */ -} - -/* Layout & Elements */ -aside { - border-left: 4px solid; /* Adjusted border width */ - padding: 0.5rem 1rem; /* Using rem for consistent spacing */ - margin: 1rem 0; /* Adjusted margin */ - font-style: italic; - border-radius: 4px; /* Added border-radius for a softer look */ -} - -section { - padding: 1rem; /* Adjusted padding */ - margin: 1rem 0; /* Adjusted margin */ - border-radius: 6px; /* Added border-radius */ -} - -textarea { - width: 100%; /* Take full width */ - height: 150px; /* Set a default height */ - padding: 0.5rem; /* Added padding */ - border-radius: 4px; /* Added border-radius */ - resize: vertical; /* Allow vertical resizing */ -} - -table { - border-collapse: collapse; - width: 100%; /* Make table responsive */ -} - -th, td { - border: 1px solid; - padding: 0.75rem; /* Adjusted padding */ - text-align: left; -} - -/* Buttons */ -button { - background-color: #FCEE91; /* Adjusted background color */ - border-color: #D0C577; - border-style: solid; - border-width: 2px; - color: #333333; /* Darker text color */ - padding: 0.5rem 1rem; /* Adjusted padding */ - border-radius: 4px; /* Added border-radius */ - cursor: pointer; /* Add cursor pointer */ -} - -button:hover { - background-color: #F2E57A; /* Darker hover color */ -} - -button:disabled { - cursor: not-allowed; -} - -/* Inputs */ -input { - font-family: 'Nunito Sans', sans-serif; - padding: 0.5rem; /* Added padding */ - border-radius: 4px; /* Added border-radius */ - border: 1px solid #BBBBBB; /* Added border */ -} \ No newline at end of file diff --git a/assets/style/ai/default.css b/assets/style/ai/default.css deleted file mode 100644 index dc13727..0000000 --- a/assets/style/ai/default.css +++ /dev/null @@ -1,196 +0,0 @@ -/* - -DO NOT EDIT THIS FILE! - -This file is for reference only. It documents the CSS used to prompt AI models at /misc/ai-css. -Last updated: 2025-06-03 - -*/ - -body { - font-family: Nunito Sans, sans-serif; - line-height: 1.5; -} - -@media (prefers-color-scheme: dark) { - - body { - color: #FFFFFF; - background-color: #000000; - } - - aside { - border-color: #EEEEEE; - background-color: #333333; - } - - section { - background-color: #222222; - } - - textarea { - background-color: #222222; - color: #FFFFFF; - } - - th, td { - border-color: #FFFFFF; - } - - th { - background-color: #444444; - } - - button:disabled { - background-color: #444444; - border-color: #000000; - color: #CCCCCC; - } - - a:link { - color: #7EF984; - } - - a:visited { - color: #EB80D9; - } - -} - -@media (prefers-color-scheme: light) { - - body { - color: #000000; - background-color: #FFFFFF; - } - - aside { - border-color: #111111; - background-color: #CCCCCC; - } - - section { - background-color: #DDDDDD; - } - - textarea { - background-color: #DDDDDD; - color: #000000; - } - - th, td { - border-color: #000000; - } - - th { - background-color: #BBBBBB; - } - - button:disabled { - background-color: #777777; - border-color: #555555; - color: #CCCCCC; - cursor: not-allowed; - } - - a:link { - color: #5ECE63; - } - - a:visited { - color: #CD60BB; - } - -} - - - - -h1 { - font-size: 2.5rem; - font-weight: 800; - line-height: 1; -} - -h2 { - font-size: 1.5rem; - font-weight: 800; - line-height: 1; -} - -h3 { - font-size: 1.17rem; - font-weight: 800; - line-height: 1; -} - - - -p { - font-size: 1rem; - font-weight: 400; -} - - - -strong { - font-weight: 800; -} - -del { - text-decoration: line-through; - text-decoration-thickness: 2px; -} - - - -aside { - border-left: 5px solid; - padding: 5px 5px 5px 9px; - margin: 5px; - font-style: italic; -} - -section { - padding: 1px 5px 20px 15px; - margin: 5px; -} - -textarea { - width: 95%; - height: auto; -} - - - -table { - border-collapse: collapse; -} - -th, td { - border: 1px solid; - padding: 8px; - text-align: left; -} - - - -button { - background-color: #FAEC81; - border-color: #C8BD67; - border-style: solid; - border-width: 2px; - color: #000000; -} - -button:disabled { - cursor: not-allowed; -} - - - - -input { - font-family: Nunito Sans, sans-serif; -} - diff --git a/assets/style/ai/gemini.css b/assets/style/ai/gemini.css deleted file mode 100644 index 5cc4d44..0000000 --- a/assets/style/ai/gemini.css +++ /dev/null @@ -1,214 +0,0 @@ -/* General Styles */ -body { - font-family: 'Nunito Sans', sans-serif; - line-height: 1.6; - margin: 0; - padding: 0; - background-color: #f4f4f4; - color: #333; -} - -/* Dark Mode Styles */ -@media (prefers-color-scheme: dark) { - body { - background-color: #1a1a1a; - color: #fff; - } - - aside { - border-color: #555; - background-color: #333; - } - - section { - background-color: #222; - } - - textarea { - background-color: #444; - color: #fff; - border-color: #555; - } - - th, - td { - border-color: #555; - } - - th { - background-color: #666; - color: #fff; - } - - button:disabled { - background-color: #555; - border-color: #666; - color: #999; - } - - a:link { - color: #94d82d; - } - - a:visited { - color: #c77dff; - } -} - -/* Light Mode Styles */ -@media (prefers-color-scheme: light) { - body { - background-color: #f9f9f9; - color: #333; - } - - aside { - border-color: #ddd; - background-color: #eee; - } - - section { - background-color: #fff; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); - } - - textarea { - background-color: #fff; - color: #333; - border: 1px solid #ccc; - } - - th, - td { - border-color: #ccc; - } - - th { - background-color: #e0e0e0; - } - - button:disabled { - background-color: #ddd; - border-color: #ccc; - color: #999; - } - - a:link { - color: #5ECE63; - } - - a:visited { - color: #CD60BB; - } -} - -/* Typography */ -h1, -h2, -h3 { - font-weight: 700; - line-height: 1.2; - margin-bottom: 0.5rem; -} - -h1 { - font-size: 2.5rem; -} - -h2 { - font-size: 2rem; -} - -h3 { - font-size: 1.5rem; -} - -p { - font-size: 1rem; - font-weight: 400; - margin-bottom: 1rem; -} - -strong { - font-weight: 700; -} - -del { - text-decoration: line-through; - text-decoration-thickness: 2px; -} - -/* Layout and Spacing */ -aside { - border-left: 5px solid #ccc; - padding: 1rem; - margin: 1rem 0; - font-style: italic; -} - -section { - padding: 1rem; - margin: 1rem 0; - border-radius: 5px; -} - -/* Form Elements */ -textarea { - width: 100%; - padding: 0.5rem; - border: 1px solid #ccc; - border-radius: 4px; - resize: vertical; -} - -input { - font-family: 'Nunito Sans', sans-serif; - padding: 0.5rem; - border: 1px solid #ccc; - border-radius: 4px; -} - -/* Table Styles */ -table { - width: 100%; - border-collapse: collapse; - margin-bottom: 1rem; -} - -th, -td { - border: 1px solid #ccc; - padding: 0.75rem; - text-align: left; -} - -th { - background-color: #f0f0f0; - font-weight: 700; -} - -/* Button Styles */ -button { - background-color: #5cb85c; - border: none; - color: white; - padding: 0.75rem 1.5rem; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 1rem; - font-weight: 600; - border-radius: 4px; - cursor: pointer; - transition: background-color 0.3s ease; -} - -button:hover { - background-color: #449d44; -} - -button:disabled { - background-color: #ccc; - color: #666; - cursor: not-allowed; -} \ No newline at end of file diff --git a/assets/style/ai/llama.css b/assets/style/ai/llama.css deleted file mode 100644 index f59ad5c..0000000 --- a/assets/style/ai/llama.css +++ /dev/null @@ -1,211 +0,0 @@ -/* Global Styles */ - -body { - font-family: Nunito Sans, sans-serif; - line-height: 1.5; - margin: 0; - padding: 0; -} - -/* Header Styles */ - -h1 { - font-size: 2.5rem; - font-weight: 800; - line-height: 1; - margin-bottom: 0.5rem; -} - -h2 { - font-size: 1.5rem; - font-weight: 800; - line-height: 1; - margin-bottom: 0.5rem; -} - -h3 { - font-size: 1.17rem; - font-weight: 800; - line-height: 1; - margin-bottom: 0.5rem; -} - -/* Paragraph Styles */ - -p { - font-size: 1rem; - font-weight: 400; - margin-bottom: 1rem; -} - -/* Text Styles */ - -strong { - font-weight: 800; -} - -del { - text-decoration: line-through; - text-decoration-thickness: 2px; -} - -/* Aside Styles */ - -aside { - border-left: 5px solid; - padding: 5px 5px 5px 9px; - margin: 5px; - font-style: italic; - background-color: #f7f7f7; /* Added background color */ -} - -/* Section Styles */ - -section { - padding: 1px 5px 20px 15px; - margin: 5px; - background-color: #f7f7f7; /* Added background color */ -} - -/* Textarea Styles */ - -textarea { - width: 95%; - height: auto; - padding: 10px; - font-family: Nunito Sans, sans-serif; - border: 1px solid #ccc; -} - -/* Table Styles */ - -table { - border-collapse: collapse; - width: 100%; -} - -th, td { - border: 1px solid #ccc; - padding: 8px; - text-align: left; -} - -th { - background-color: #f0f0f0; -} - -/* Button Styles */ - -button { - background-color: #4CAF50; - border-color: #3e8e41; - border-style: solid; - border-width: 2px; - color: #fff; - padding: 10px 20px; - font-size: 1rem; - cursor: pointer; -} - -button:disabled { - cursor: not-allowed; - background-color: #777; - border-color: #555; - color: #ccc; -} - -/* Input Styles */ - -input { - font-family: Nunito Sans, sans-serif; - padding: 10px; - border: 1px solid #ccc; -} - -/* Media Queries */ - -@media (prefers-color-scheme: dark) { - body { - color: #fff; - background-color: #000; - } - - aside { - border-color: #ccc; - background-color: #333; - } - - section { - background-color: #222; - } - - textarea { - background-color: #222; - color: #fff; - } - - th, td { - border-color: #fff; - } - - th { - background-color: #444; - } - - button:disabled { - background-color: #444; - border-color: #000; - color: #ccc; - } - - a:link { - color: #7EF984; - } - - a:visited { - color: #EB80D9; - } -} - -@media (prefers-color-scheme: light) { - body { - color: #000; - background-color: #fff; - } - - aside { - border-color: #111; - background-color: #ccc; - } - - section { - background-color: #ddd; - } - - textarea { - background-color: #ddd; - color: #000; - } - - th, td { - border-color: #000; - } - - th { - background-color: #bbb; - } - - button:disabled { - background-color: #777; - border-color: #555; - color: #ccc; - } - - a:link { - color: #5ECE63; - } - - a:visited { - color: #CD60BB; - } -} diff --git a/assets/style/ai/mistral.css b/assets/style/ai/mistral.css deleted file mode 100644 index 9004fca..0000000 --- a/assets/style/ai/mistral.css +++ /dev/null @@ -1,180 +0,0 @@ -:root { - --font-family: 'Nunito Sans', sans-serif; - --line-height: 1.5; - --color-primary: #3498db; - --color-secondary: #2ecc71; - --color-dark: #2c3e50; - --color-light: #ecf0f1; - --color-danger: #e74c3c; - --color-warning: #f39c12; - --color-info: #1abc9c; - --color-success: #2ecc71; -} - -body { - font-family: var(--font-family); - line-height: var(--line-height); - margin: 0; - padding: 0; - transition: background-color 0.3s, color 0.3s; -} - -@media (prefers-color-scheme: dark) { - :root { - --color-text: #FFFFFF; - --color-bg: #000000; - --color-aside-border: #EEEEEE; - --color-aside-bg: #333333; - --color-section-bg: #222222; - --color-textarea-bg: #222222; - --color-textarea-text: #FFFFFF; - --color-border: #FFFFFF; - --color-th-bg: #444444; - --color-button-disabled-bg: #444444; - --color-button-disabled-border: #000000; - --color-button-disabled-text: #CCCCCC; - --color-link: #7EF984; - --color-link-visited: #EB80D9; - } -} - -@media (prefers-color-scheme: light) { - :root { - --color-text: #000000; - --color-bg: #FFFFFF; - --color-aside-border: #111111; - --color-aside-bg: #CCCCCC; - --color-section-bg: #DDDDDD; - --color-textarea-bg: #DDDDDD; - --color-textarea-text: #000000; - --color-border: #000000; - --color-th-bg: #BBBBBB; - --color-button-disabled-bg: #777777; - --color-button-disabled-border: #555555; - --color-button-disabled-text: #CCCCCC; - --color-link: #5ECE63; - --color-link-visited: #CD60BB; - } -} - -body { - color: var(--color-text); - background-color: var(--color-bg); -} - -h1, h2, h3 { - font-weight: 800; - line-height: 1; - margin: 0 0 0.5em 0; -} - -h1 { - font-size: 2.5rem; -} - -h2 { - font-size: 1.5rem; -} - -h3 { - font-size: 1.17rem; -} - -p { - font-size: 1rem; - font-weight: 400; - margin: 0 0 1em 0; -} - -strong { - font-weight: 800; -} - -del { - text-decoration: line-through; - text-decoration-thickness: 2px; -} - -aside { - border-left: 5px solid var(--color-aside-border); - padding: 1em; - margin: 1em; - font-style: italic; - background-color: var(--color-aside-bg); -} - -section { - padding: 1em; - margin: 1em; - background-color: var(--color-section-bg); - border-radius: 5px; -} - -textarea { - width: 95%; - height: auto; - padding: 0.5em; - background-color: var(--color-textarea-bg); - color: var(--color-textarea-text); - border: 1px solid var(--color-border); - border-radius: 5px; -} - -table { - border-collapse: collapse; - width: 100%; - margin: 1em 0; -} - -th, td { - border: 1px solid var(--color-border); - padding: 0.75em; - text-align: left; -} - -th { - background-color: var(--color-th-bg); -} - -button { - background-color: var(--color-warning); - border: 2px solid var(--color-dark); - color: var(--color-dark); - padding: 0.5em 1em; - border-radius: 5px; - cursor: pointer; - transition: background-color 0.3s, border-color 0.3s; -} - -button:hover { - background-color: var(--color-warning); - border-color: var(--color-dark); -} - -button:disabled { - background-color: var(--color-button-disabled-bg); - border-color: var(--color-button-disabled-border); - color: var(--color-button-disabled-text); - cursor: not-allowed; -} - -a:link { - color: var(--color-link); - text-decoration: none; - transition: color 0.3s; -} - -a:visited { - color: var(--color-link-visited); -} - -a:hover { - text-decoration: underline; -} - -input { - font-family: var(--font-family); - padding: 0.5em; - border: 1px solid var(--color-border); - border-radius: 5px; -} diff --git a/assets/style/default.css b/assets/style/default.css deleted file mode 100644 index 605f61d..0000000 --- a/assets/style/default.css +++ /dev/null @@ -1,187 +0,0 @@ -body { - font-family: Nunito Sans, sans-serif; - line-height: 1.5; -} - -@media (prefers-color-scheme: dark) { - - body { - color: #FFFFFF; - background-color: #000000; - } - - aside { - border-color: #EEEEEE; - background-color: #333333; - } - - section { - background-color: #222222; - } - - textarea { - background-color: #222222; - color: #FFFFFF; - } - - th, td { - border-color: #FFFFFF; - } - - th { - background-color: #444444; - } - - button:disabled { - background-color: #444444; - border-color: #000000; - color: #CCCCCC; - } - - a:link { - color: #7EF984; - } - - a:visited { - color: #EB80D9; - } - -} - -@media (prefers-color-scheme: light) { - - body { - color: #000000; - background-color: #FFFFFF; - } - - aside { - border-color: #111111; - background-color: #CCCCCC; - } - - section { - background-color: #DDDDDD; - } - - textarea { - background-color: #DDDDDD; - color: #000000; - } - - th, td { - border-color: #000000; - } - - th { - background-color: #BBBBBB; - } - - button:disabled { - background-color: #777777; - border-color: #555555; - color: #CCCCCC; - cursor: not-allowed; - } - - a:link { - color: #5ECE63; - } - - a:visited { - color: #CD60BB; - } - -} - - - - -h1 { - font-size: 2.5rem; - font-weight: 800; - line-height: 1; -} - -h2 { - font-size: 1.5rem; - font-weight: 800; - line-height: 1; -} - -h3 { - font-size: 1.17rem; - font-weight: 800; - line-height: 1; -} - - - -p { - font-size: 1rem; - font-weight: 400; -} - - - -strong { - font-weight: 800; -} - -del { - text-decoration: line-through; - text-decoration-thickness: 2px; -} - - - -aside { - border-left: 5px solid; - padding: 5px 5px 5px 9px; - margin: 5px; - font-style: italic; -} - -section { - padding: 1px 5px 20px 15px; - margin: 5px; -} - -textarea { - width: 95%; - height: auto; -} - - - -table { - border-collapse: collapse; -} - -th, td { - border: 1px solid; - padding: 8px; - text-align: left; -} - - - -button { - background-color: #FAEC81; - border-color: #C8BD67; - border-style: solid; - border-width: 2px; - color: #000000; -} - -button:disabled { - cursor: not-allowed; -} - - - - -input { - font-family: Nunito Sans, sans-serif; -} - diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index 63e3eec..0000000 Binary files a/favicon.ico and /dev/null differ diff --git a/index.html b/index.html deleted file mode 100644 index f7d8205..0000000 --- a/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - luminousherbs - - - -

luminousherbs

- - - - -
-

Welcome to my website. Here are some of the things on it:

- -
- View source - - diff --git a/misc/ai-css/index.html b/misc/ai-css/index.html deleted file mode 100644 index 8d76d1f..0000000 --- a/misc/ai-css/index.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AIs compete to redesign my CSS - - - -

AIs compete to redesign my CSS

- - - - -
-

I asked five language models to redesign the CSS for this website. Here are the results.

- - -

I thought this would be an interesting challenge because the AIs wouldn't be able to see how their code actually displayed. Programming benchmarks tend to focus on technical languages like JavaScript and Python, so I wanted to see how they would perform when tasked with something unfamiliar.

- -

Every model was given my original CSS for reference, with the prompt "redesign my CSS to look nicer". One drawback of this approach was that the models all made minor tweaks, relying heavily on the code I provided. Most models also tried to restructure my code to be more readable (particularly Mistral, which I personally think went a bit overboard). All the results include light and dark themes, which you can toggle between by changing your browser's theme.

- -

ChatGPT made the most changes - it added fancy button animations and alternating shading in tables. It was also the most imbalanced result, with a strong light theme but a disgusting mess of gradients and shadows in the dark theme.

- -

I think Gemini's is my favorite. The color choices were a bit weird, but everything else is very clean and well thought out. I especially like how the buttons look - I might actually prefer them to my original ones.

- -

Mistral defined lots of colors for categories like info, success and danger but confusingly never used them. This could be because it ran out of characters - most web interfaces cap the model's output at around 4000. If you're interested, the colors look like this: - - - - - - - . The only color it actually uses is warning, except it chose to use it as the default button color. Weird. -

- -

Llama's CSS is very similar to Gemini's, with some small issues. I think its square corners look worse than Gemini's rounded ones, especially on the buttons. I also don't like that it gave textarea a sans-serif font - in my opinion it should always be monospaced.

- -

Claude made the fewest changes, leaving my orginal code mostly unchanged. I really like the way it styled the textarea, and I might use it in my CSS in the future. My only complaint is that disabled buttons still light up when hovered.

- -

Every single model chose to leave no margin between the text and the edge of the window. I have no idea why, since almost all websites include a margin. My only guess is that the absence of an explicitly defined margin in my original CSS caused the AIs to forget they needed to define one.

- - - -
- -
- -

This is what a section looks like.

- -

Strong text, Emphasized text, Deleted text

- - -

- - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Table (for reference)Column 2Column 3
Row 1Row 2Row 3
Row 1Row 2Row 3
Row 1Row 2Row 3
Row 1Row 2Row 3
-
- - - - - -
-
- < luminousherbs - - \ No newline at end of file diff --git a/misc/ai-css/script.js b/misc/ai-css/script.js deleted file mode 100644 index 1d12657..0000000 --- a/misc/ai-css/script.js +++ /dev/null @@ -1,17 +0,0 @@ -console.log("Hello world!"); - -function changeTo(filename) { - document.getElementById("stylesheet").href = `/assets/style/${filename}.css`; -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - const dropdown = document.getElementById("dropdown"); - dropdown.addEventListener("input", function() { - changeTo(dropdown.value); - }) -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/misc/fake-language/index.html b/misc/fake-language/index.html deleted file mode 100644 index 00d877d..0000000 --- a/misc/fake-language/index.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JavaScript is a fake language - - - -

JavaScript is a fake language

- - - - -
-

Try to guess what these code snippets do, then run them to see if you were right. You can also edit the snippets if you want to.

- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- -
-
- - -
- < Miscellaneous - - diff --git a/misc/fake-language/script.js b/misc/fake-language/script.js deleted file mode 100644 index de9da9c..0000000 --- a/misc/fake-language/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world!"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/misc/index.html b/misc/index.html deleted file mode 100644 index f202f52..0000000 --- a/misc/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Miscellaneous - - - -

Miscellaneous

- - - - -
-

This is where the uncategorized / uncategorizable pages live.

- -
- < luminousherbs - - \ No newline at end of file diff --git a/misc/script.js b/misc/script.js deleted file mode 100644 index de9da9c..0000000 --- a/misc/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world!"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/oi/eae.md b/oi/eae.md deleted file mode 100644 index 46d42e5..0000000 --- a/oi/eae.md +++ /dev/null @@ -1,9 +0,0 @@ -# oi: oi u o e oe - -> i oue i aaiae i [oe aae o](readme.md) - -i i e oue oe o [oi](https://luminousherbs.github.io/oi/), a [oi](https://todepond.com/lab/login) ie i o ia e e 19% o e aae. - -- ie ie su i `index.html` -- uo e i `style.css` -- ee ie u o [a.o](https://www.val.town/u/todepond) (e `index.html` o i ae o e iee a) \ No newline at end of file diff --git a/oi/favicon.png b/oi/favicon.png deleted file mode 100644 index 75827d8..0000000 Binary files a/oi/favicon.png and /dev/null differ diff --git a/oi/gif.png b/oi/gif.png deleted file mode 100644 index ae8e1f1..0000000 Binary files a/oi/gif.png and /dev/null differ diff --git a/oi/index.html b/oi/index.html deleted file mode 100644 index ac0e586..0000000 --- a/oi/index.html +++ /dev/null @@ -1,942 +0,0 @@ - - - - - - - -oi - - - - - - - - - - - - - - - - - - - - - - - - - -

oi

-ie oue - - - - - -
- - -

- - -

- -
- - -

- ee -

- - -
- - - - - - diff --git a/oi/logiverse.js b/oi/logiverse.js deleted file mode 100644 index 97d4257..0000000 --- a/oi/logiverse.js +++ /dev/null @@ -1,58 +0,0 @@ -export default { - name: "oi", - admin: "luminousherbs", - feed: "https://todepond-lablogingetusers.web.val.run", -}; - -export const config = { - version: "O.O.I", - instance_name: "oi", - instance_admin: "luminousherbs", - endpoints: { - update: "https://todepond-labloginupdatestatus.web.val.run", - login: "https://todepond-lablogin.web.val.run", - delete: "https://todepond-lablogindeleteaccount.web.val.run", - ban: "https://todepond-labloginbanuser.web.val.run", - }, - instances: [ - { - name: "oeo.o", - feed: "https://todepond-lablogingetusers.web.val.run", - gifs: { - berd: { - src: "https://www.todepond.com/image/berd.gif", - alt: "A a i i", - }, - bot: { - src: "https://www.todepond.com/image/bot.gif", - alt: "A a oo i", - }, - tode: { - src: "https://www.todepond.com/image/tode.gif", - alt: "A a oa i", - }, - }, - }, - { - name: "eaa.o", - feed: "https://api.svenlaa.com/logiverse/logs", - // update: "https://svenlaa-labloginupdatestatus.web.val.run", - // login: "https://svenlaa-lablogin.web.val.run", - // delete: "https://svenlaa-lablogindeleteaccount.web.val.run", - // ban: "https://svenlaa-labloginbanuser.web.val.run", - }, - { - name: "eoe.e", - feed: "https://evol-lablogingetusers.web.val.run", - // update: "https://evol-labloginupdatestatus.web.val.run", - }, - { - name: "a.o.i", - feed: "https://blag.slonk.ing/posts/blogin?action=posts", - }, - // { - // name: "rossilaz.xyz", - // feed: "https://mittzy-loginredux_getusers.web.val.run", - // }, - ], -}; diff --git a/oi/og.png b/oi/og.png deleted file mode 100644 index cb5cfb6..0000000 Binary files a/oi/og.png and /dev/null differ diff --git a/oi/readme.md b/oi/readme.md deleted file mode 100644 index fb90c9b..0000000 --- a/oi/readme.md +++ /dev/null @@ -1,9 +0,0 @@ -# oi: Login but only the vowels - -> this document is available in [vowel form](eae.md) - -this is the source code for [oi](https://luminousherbs.github.io/oi/), a [Login](https://todepond.com/lab/login) client which only displays the best 19% of the alphabet. - -- client side stuff in `index.html` -- custom styles in `style.css` -- server side stuff on [val.town](https://www.val.town/u/todepond) (check `index.html` to find names of the different vals) diff --git a/oi/style.css b/oi/style.css deleted file mode 100644 index 097a8f0..0000000 --- a/oi/style.css +++ /dev/null @@ -1,626 +0,0 @@ -/* Todepond style stuff */ - -:root { - --green: rgb(70, 255, 129); - --cyan: rgb(70, 204, 255); - --blue: rgb(70, 128, 255); - --purple: rgb(128, 67, 255); - --pink: rgb(255, 128, 222); - --coral: rgb(255, 128, 128); - --red: rgb(255, 67, 70); - --orange: rgb(255, 128, 70); - --yellow: rgb(255, 255, 70); - --calm-yellow: rgb(255, 225, 70); - - --light-blue: rgb(80, 140, 255); - - --shade-0: rgb(6, 7, 10); - --shade-1: rgb(14, 16, 22); - --shade-2: rgb(24, 29, 39); - --shade-3: rgb(33, 39, 53); - --shade-4: rgb(47, 56, 75); - --shade-5: rgb(55, 67, 98); - --shade-6: rgb(87, 101, 147); - --shade-7: rgb(135, 146, 171); - --shade-8: rgb(159, 174, 204); - --shade-9: rgb(224, 224, 224); - --shade-10: rgb(255, 255, 255); - - --best-colour: #9faeee; - --best-colour-faded: rgb(172, 139, 255); - - --void: var(--shade-0); - --black: var(--shade-2); - --dark-grey: var(--shade-3); - --grey: var(--shade-5); - --light-grey: var(--shade-6); - --silver: var(--shade-8); - --white: var(--shade-10); - - --rainbow-1: var(--green); - --rainbow-2: var(--cyan); - --rainbow-3: var(--blue); - --rainbow-4: var(--purple); - --rainbow-5: var(--pink); - --rainbow-6: var(--coral); - --rainbow-7: var(--red); - --rainbow-8: var(--orange); - --rainbow-9: var(--yellow); - - --background: rgb(31, 39, 54); - - --rainbow-gradient: linear-gradient( - /* slanted */ 135deg, - var(--green), - var(--cyan), - var(--light-blue), - var(--purple), - var(--pink), - var(--coral), - var(--red), - var(--orange), - var(--yellow), - var(--green), - var(--cyan), - var(--light-blue), - var(--purple), - var(--pink), - var(--coral), - var(--red), - var(--orange), - var(--yellow) - ); - - --glow: 0 0px 5px var(--best-colour), 0 0px 10px var(--best-colour); -} - -code { - background-color: var(--grey); - font-size: 16px; - padding: 0px 2px; - margin: 0px; -} - -* { - accent-color: #4680ff; -} - -body { - color: white; - background-color: rgb(31, 39, 54); - font-family: sans-serif; - max-width: 750px; - margin: 0 auto; - padding: 30px 10px; - font-size: 1.1em; -} - -audio, -video { - width: 100%; -} - -a { - color: #46ff80; -} - -:target { - outline: 2px solid #4680ff; - outline-offset: 2px; -} - -a.footnote:target { - outline-offset: 0px; -} - -a.footnote::before { - content: "["; -} - -a.footnote::after { - content: "]"; -} - -label { - user-select: none; -} - -a:hover { - color: black; - background-color: #46ff80; - outline: 2px solid #46ff80; -} - -ul { - padding-inline-start: 20px; - - /* line-height: 1.2; */ -} - -*::selection { - background-color: rgb(87, 101, 147); - /* outline: 2px solid white; */ - /* color: black; */ - /* color: white; */ -} - -ul > li { - list-style: " — "; - /* margin-left: 0px; */ -} - -a.secondary { - color: #4699ff; -} - -a.secondary:hover { - color: black; - background-color: #4699ff; - outline: 2px solid #4699ff; -} - -a.black { - color: black; -} - -a.black:hover { - color: white; - background-color: black; - outline: 2px solid black; -} - -a.danger { - color: #ff4346; -} - -a.danger:hover { - color: black; - background-color: #ff4346; - outline: 2px solid #ff4346; -} - -a.warning { - color: #ffff46; -} - -a.warning:hover { - color: black; - background-color: #ffff46; - outline: 2px solid #ffff46; -} - -a.tertiary { - color: #9faeee; -} - -a.tertiary:hover { - color: black; - background-color: #9faeee; - outline: 2px solid #9faeee; -} - -a.warning { - color: #ffff46; -} - -a.warning:hover { - color: black; - background-color: #ffff46; - outline: 2px solid #ffff46; -} - -summary.button { - background-color: var(--shade-5); - /* line-height: 2.3; */ -} - -summary.button:hover { - /* transform-origin: left; */ - /* transform: scale(1.1); */ -} - -dialog h2 { - margin: 0px; -} - -dialog input[type="password"], -dialog input[type="text"], -dialog textarea { - max-width: 100%; - background-color: #9faeee; - border: 1px solid black; - color: black; - /* padding: 5px; */ - width: 100%; - font-family: sans-serif; - /* font-size: 1em; */ -} - -dialog::selection, -dialog p::selection, -dialog h2::selection { - background-color: #46ff80; -} - -dialog input[type="password"]::selection, -dialog input[type="text"]::selection, -dialog textarea::selection { - background-color: #46ff80; -} - -dialog input[type="password"]:disabled, -dialog input[type="text"]:disabled, -dialog textarea:disabled { - opacity: 0.4; - cursor: not-allowed; -} - -label.disabled { - opacity: 0.4; - cursor: not-allowed; -} - -a.button { - border: 3px solid #46ff80; - padding: 4px 5px; - text-decoration: none; - line-height: 2.3; -} - -a.button:hover { - outline: none; -} - -a.button.secondary { - border-color: #4699ff; -} - -a.button.danger { - border-color: #ff4346; -} - -a.button.tertiary { - border-color: var(--best-colour); -} - -a.button.warning { - border-color: #ffff46; -} - -label.secondary, -span.secondary, -p.secondary { - color: #9faeee; -} - -label.danger, -span.danger, -p.danger { - color: #ff7275; -} - -label.warning, -span.warning, -p.warning { - color: #ffff46; -} - -label.positive, -span.positive, -p.positive { - color: var(--green); -} - -blockquote { - color: #9faeee; - margin: 0px; - padding-left: 23px; - border-left: 1px #9faeee solid; -} - -hr { - border: none; - height: 1px; - background-color: white; -} - -hr.secondary { - background-color: #9faeee; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - width: 100%; -} - -h2 { - border-bottom: white 1px solid; - padding-bottom: 19px; - padding-top: 19px; -} - -img { - max-width: 100%; -} - -summary { - user-select: none; - cursor: pointer; - /* looks like a button */ - padding: 5px; - border: 1px solid #9faeee; - background-color: #374362; - /* color: #9faeee; */ - width: fit-content; -} - -details[open] summary { - /* margin-bottom: 10px; */ -} - -input[type="text"], -input[type="email"], -input[type="password"], -input[type="number"], -input[type="search"], -input[type="url"], -textarea { - background-color: #374362; - border: 1px solid #9faeee; - color: white; - padding: 5px; - width: 100%; - font-size: 1em; -} - -input[type="text"]::placeholder, -input[type="email"]::placeholder, -input[type="password"]::placeholder, -input[type="search"]::placeholder, -input[type="url"]::placeholder, -textarea::placeholder { - color: #9faeee; -} - -/* input[type="checkbox"] { - width: 20px; - height: 20px; - flex-shrink: 0; -} */ - -:focus { - outline-color: 2px solid #4680ff; - border-radius: 0%; -} - -button { - padding: 5px; - font-size: 1em; - cursor: pointer; - user-select: none; -} - -button:disabled { - cursor: not-allowed; -} - -button.danger { - background-color: #ff4346; - color: white; -} - -button { - background-color: var(--shade-10); - color: black; -} - -button.primary { - background-color: #4680ff; - color: white; -} - -button.warning { - background-color: #ffff46; - color: black; -} - -pre { - background-color: #374362; - /*color: white;*/ - padding: 11px; - overflow-x: auto; -} - -pre.changelog { - color: #9faeee; -} - -pre.changelog mark { - color: white; -} - -pre mark { - color: #46ff80; - background: none; -} - -input[type="checkbox"] { - /* width: 29px; */ -} - -select { - background-color: #374362; - border: 1px solid #9faeee; - color: white; - padding: 5px; - font-size: 1em; -} - -/* =========== */ -/* Login stuff */ -/* =========== */ - -html { - scroll-behavior: smooth; -} - -* { - box-sizing: border-box; -} - -.account-dashboard { - display: flex; - flex-direction: column; - align-items: flex-start; - /* justify-content: space-between; */ - /* align-items: flex-end; */ - /* align-items: center; */ - /* flex-wrap: wrap; */ - /* gap: 5px 10px; */ -} - -.account-burger { -} - -.account-settings { - display: flex; - flex-direction: column; - /* float: right; */ - align-items: flex-start; - margin-top: 10px; - flex-shrink: 0; -} - -.account-actions { - /* display: flex; */ - /* flex-direction: column; */ - /* float: right; */ - /* align-items: flex-end; */ - margin-top: 10px; - /* flex-shrink: 0; */ -} - -.account-settings > label { - display: flex; - align-items: center; - gap: 4px; - flex-shrink: 0; - /* border: 1px solid var(--best-colour); */ - cursor: pointer; - /* padding: 0px 0px 0px 5px; */ - /* color: var(--best-colour); */ - /* accent-color: var(--best-colour); */ -} - -.account-settings > label > input[type="checkbox"] { - cursor: pointer; -} - -input[type="checkbox"] { - width: 20px; - height: 20px; - flex-shrink: 0; -} - -#feed-heading { - display: flex; - justify-content: space-between; - align-items: baseline; - flex-wrap: wrap; - gap: 10px; -} - -#refresh-sign { - color: var(--best-colour); - cursor: pointer; - user-select: none; - background: none; - border: none; - padding: 0; - font-size: 16px; - float: right; - flex-shrink: 0; -} - -#refresh-sign:hover { - background-color: var(--best-colour); - color: var(--shade-3); - outline: 2px solid var(--best-colour); -} - -.post-title { - all: unset; -} - -.user-actions { - margin-top: 5px; - display: inline-block; -} - -.actions { - display: inline-block; -} - -.action-button { - font-size: 0.8em; -} - -.at { - font-weight: bold; - text-decoration: none; - color: white; -} - -.at:hover { - background-image: none; - background-color: white; - color: var(--shade-3); - outline-color: white; - background-clip: unset; - -webkit-text-fill-color: unset; -} - -.untarget :target { - outline-color: transparent; -} - -#gif-dialog { - background-color: var(--shade-4); - color: white; - z-index: 100; - position: fixed; -} - -#gif-dialog header { - align-items: baseline; - display: flex; - margin-bottom: 4px; -} - -#gif-dialog .close-button { - margin-left: auto; -} - -/* spinning animation */ -@keyframes spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -#loading-feed { - animation: spin 1s linear infinite; -} - -.status-buttons { - display: flex; - gap: 5px; - justify-content: space-between; -} diff --git a/oi/user-style.css b/oi/user-style.css deleted file mode 100644 index 191f069..0000000 --- a/oi/user-style.css +++ /dev/null @@ -1,344 +0,0 @@ -@import url("https://fonts.cdnfonts.com/css/jetbrains-mono"); -@import url("https://fonts.cdnfonts.com/css/restless-soul-bb"); -@import url("https://fonts.googleapis.com/css2?family=UnifrakturMaguntia&display=swap"); - -/* ============ */ -/* UsrBinAnnika */ -/* ============ */ -.status-UsrBinAnnika\@todepond\.com { - transform: rotate(-0.5deg); -} - -.name-UsrBinAnnika\@todepond\.com::after { - content: "⚠️ DORK"; - border: 1px solid hsl(42.2, 100%, 63.7%); - color: hsl(42.2, 100%, 63.7%); - padding: 0.1em 0.2em; - margin: 0.35em; - font-size: 0.6em; - position: relative; - top: -0.25em; - font-weight: normal; -} - -.name-maybeanerd\@todepond\.com::after { - content: "NERD"; - border: 1px dashed red; - color: red; - padding: 0.1em 0.2em; - margin: 0.35em; - font-size: 0.6em; - position: relative; - top: -0.25em; - font-weight: normal; -} - -.at-UsrBinAnnika\@todepond\.com:hover::after { - border-color: var(--shade-3); - color: var(--shade-3); -} - -/* ==== */ -/* Rosy */ -/* ==== */ -.name-Rosy\@todepond\.com { - color: var(--red); - font-family: "JetBrains Mono", sans-serif; -} -/* perhaps some sort of user tags system would be good to prevent long gradients being placed everywhere? */ -.name-Rosy\@todepond\.com::after { - content: "trans"; - background: linear-gradient( - 180deg, - rgba(91, 206, 250, 1) 0%, - rgba(91, 206, 250, 1) 19.9%, - rgba(245, 169, 184, 1) 20%, - rgba(245, 169, 184, 1) 39.9%, - rgba(255, 255, 255, 1) 40%, - rgba(255, 255, 255, 1) 59.9%, - rgba(245, 169, 184, 1) 60%, - rgba(245, 169, 184, 1) 79.9%, - rgba(91, 206, 250, 1) 80% - ); - -webkit-text-fill-color: transparent; - padding: 0.1em 0.2em; - margin: 0.35em; - font-size: 0.6em; - top: -0.25em; - position: relative; - font-weight: normal; -} - -.at-Rosy\@todepond\.com::after { - all: unset; -} - -/* ======== */ -/* lord cat */ -/* ======== */ - -.name-lord.cat\@todepond\.com, -.name-lordcat\@svenlaa\.com { - background: linear-gradient(to right, #c5a4ed, #a4a5ed 100%); - -webkit-text-fill-color: transparent; - background-clip: text; - font-family: "UnifrakturMaguntia"; - font-size: 1.2em; -} - -.at-lord.cat\@todepond\.com:hover, -.at-lordcat\@svenlaa\.com:hover { - background-image: none; - background-clip: unset; - background-color: white; - color: var(--shade-3); - -webkit-text-fill-color: unset; -} - -.name-lord.cat\@todepond\.com::after, -.name-lordcat\@svenlaa\.com::after { - content: "Blåhaj Collector"; - border-width: 1px; - border-style: solid; - border-image: linear-gradient(to right, #c5a4ed, #a4a5ed 100%) 1; - padding: 0.1em 0.2em; - margin: 0.35em; - font-size: 0.6em; - position: relative; - top: -0.25em; - font-weight: normal; - background: linear-gradient(to right, #c5a4ed, #a4a5ed 100%); - background-clip: text; -} - -.at-lord.cat\@todepond\.com::after, -.at-lordcat\@svenlaa\.com::after { - all: unset; -} - -/* ======= */ -/* Svenlaa */ -/* ======= */ -.name-Svenlaa\@todepond\.com { - background: linear-gradient(to right, var(--yellow), var(--green) 200%); - -webkit-text-fill-color: transparent; - background-clip: text; - font-family: "JetBrains Mono", sans-serif; -} - -.name-Svenlaa\@svenlaa\.com { - color: var(--green); - font-family: "JetBrains Mono", sans-serif; -} - -/* ========== */ -/* HatsuSixty */ -/* ========== */ -.name-HatsuSixty\@todepond\.com { - background: linear-gradient(to right, var(--pink), var(--purple) 200%); - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* ======== */ -/* hivemind */ -/* ======== */ -.name-hivemind\@todepond\.com { - background: linear-gradient(180deg, rgb(248 22 22) 20%, rgb(200 66 36) 100%); - -webkit-text-fill-color: transparent; - background-clip: text; - font-family: "Restless Soul BB", sans-serif; - font-size: 1.2em; -} - -/* =========== */ -/* HatsuneMiku */ -/* =========== */ -.name-HatsuneMiku\@todepond\.com { - background: linear-gradient(to right, #87e5cf, #47c8c0 100%); - -webkit-text-fill-color: transparent; - background-clip: text; -} - -/* ======== */ -/* TodePond */ -/* ======== */ -.name-TodePond\@todepond\.com { - color: var(--green); -} - -.name-TodePond\@todepond\.com::after { - content: "ADMIN"; - border: 1px solid var(--green); - padding: 0.1em 0.2em; - margin: 0.35em; - font-size: 0.6em; - top: -0.25em; - position: relative; - font-weight: normal; -} - -.at-TodePond\@todepond\.com.name-TodePond\@todepond\.com:hover::after { - border-color: var(--shade-3); -} - -/* =========== */ -/* PodeTond 💚 */ -/* =========== */ -.name-PodeTond.💚\@todepond\.com { - background: linear-gradient( to right, #eaacb8, #7acbf5 9ch, var(--green) 9ch ); - -webkit-text-fill-color: transparent; - background-clip: text; - display: inline-block; /* so it doesnt cut the heart */ - font-family: "JetBrains Mono", sans-serif; -} - -.at-PodeTond.💚\@todepond\.com:hover { - background-image: none; - background-clip: unset; - background-color: white; - color: var(--shade-3); - -webkit-text-fill-color: unset; -} - -/* ==== */ -/* El */ -/* ==== */ -@media (prefers-reduced-motion: no-preference) { - .name-El\@todepond\.com { - animation: 30s linear 0s infinite alternate el-color-shift; - } -} -@keyframes el-color-shift { - 0% { - color: lch(90% 90 209.2); - } - 50% { - color: lch(90% 90 431.4); - } - 100% { - color: lch(90% 90 368.7); - } -} - -/* ===== */ -/* sofia */ -/* ===== */ -.name-sofia\@todepond\.com { - letter-spacing: 0.5em; - color: transparent; - background: linear-gradient(to bottom, #fff 50%, #80ff00 100%); - background-clip: text; - text-shadow: 0 0 0.125em #80ff0080; -} - -/* ====== */ -/* minion */ -/* ====== */ -:root { - --minion-red: #f27878; -} - -.title-minion\@todepond\.com::after { - content: "NOT ADMIN"; - color: var(--minion-red); - border: 1px solid var(--minion-red); - padding: 0.1em 0.2em; - margin: 0.35em; - font-size: 0.6em; - top: -0.2em; - position: relative; - background-image: linear-gradient( - 120deg, - transparent 30%, - rgba(255, 200, 150, 0.5) 34%, - transparent 60% - ); - background-size: 50px; - background-repeat: no-repeat; - background-position: 200%; -} - -.name-minion\@todepond\.com { - color: var(--minion-red); -} - -.name-minion\@todepond\.com::before, -.name-minion\@todepond\.com::after { - content: "✨"; - font-size: 0.5em; - position: relative; - top: -0.3em; -} - -@media (prefers-reduced-motion: no-preference) { - .title-minion\@todepond\.com::after { - -webkit-animation: minion-badgeSwish 10s ease-in-out infinite; - -moz-animation: minion-badgeSwish 10s ease-in-out infinite; - animation: minion-badgeSwish 10s ease-in-out infinite; - } -} - -@-webkit-keyframes minion-badgeSwish { - 0% { - background-position: 500px; - } - 100% { - background-position: -50px; - } -} -@-moz-keyframes minion-badgeSwish { - 0% { - background-position: 500px; - } - 100% { - background-position: -50px; - } -} -@keyframes minion-badgeSwish { - 0% { - background-position: 500px; - } - 100% { - background-position: -50px; - } -} - -/* ==== */ -/* R74n */ -/* ==== */ -.name-R74n\@todepond\.com { - color: #00ffff; -} -.name-R74n\@todepond\.com::after { - content: " 🔒"; -} - -/* ====== */ -/* soxfox */ -/* ====== */ -.name-soxfox\@todepond\.com { - color: transparent; - background: linear-gradient(150deg, #f4218f, #ff9e00); - background-clip: text; -} - -.name-soxfox\@todepond\.com::after { - content: ""; - display: inline-block; - width: 1em; - height: 0.6em; - background: linear-gradient(150deg, #f4218f, #ff9e00); - margin-left: 0.2em; - mask: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzAwIDE4NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjIiPjxwYXRoIGQ9Im0xNDcgMTQ3LTYgMTFjLTYgOS0xNCAxNi0yNiAyMWExNDcgMTQ3IDAgMCAxLTgzIDJjLTEzLTUtMjQtMTAtMzItMTZsMTQtMzFhMTAzIDEwMyAwIDAgMCA1OSAxOWMxMiAwIDIxLTIgMjctNiA1LTMgOC04IDgtMTQgMC00LTEtNy01LTEwLTMtMy03LTUtMTMtN2wtMjEtNi0zNC05Yy04LTQtMTYtOS0yMi0xNlM0IDY4IDQgNTZjMC0xMCAyLTIwIDgtMjggNi05IDE0LTE2IDI2LTIxYTEzOCAxMzggMCAwIDEgNzUtM2MxMSAzIDIxIDcgMjkgMTJsLTEzIDMyYy0xNy0xMC0zMy0xNS01MC0xNS0xMSAwLTIwIDItMjYgNi01IDQtOCA5LTggMTVzMyAxMSAxMCAxNGM2IDMgMTYgNiAyOSA5YTI5MyAyOTMgMCAwIDEgNDQgMTRsMzUtODhoMTM2bC0xMyAzNGgtOTRsLTIwIDQ3aDg0bC0xNCAzM2gtODNsLTEyIDMwWiIvPjwvc3ZnPg==") - no-repeat center; -} - -/* ======= */ -/* Tristie */ -/* ======= */ -.name-Tristie\@todepond\.com { - background: linear-gradient(#31d0a6, #105e58); - background-clip: text; - color: transparent; -} diff --git a/script.js b/script.js deleted file mode 100644 index f3e65b8..0000000 --- a/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad) \ No newline at end of file diff --git a/tests/feeds/index.html b/tests/feeds/index.html deleted file mode 100644 index 0785f75..0000000 --- a/tests/feeds/index.html +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/tests/feeds/index.xml b/tests/feeds/index.xml deleted file mode 100644 index 2e45566..0000000 --- a/tests/feeds/index.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - Music by luminousherbs - https://luminousherbs.github.io/music - Music by luminousherbs - en - Sun, 04 May 2025 12:00:00 +0000 - - - Test Post - https://www.yourwebsite.com/post-title-1 - A short summary of the post. - Sat, 03 May 2025 14:00:00 +0000 - https://www.yourwebsite.com/post-title-1 - - - - - - diff --git a/tests/jekyll/index.md b/tests/jekyll/index.md deleted file mode 100644 index d91cb7b..0000000 --- a/tests/jekyll/index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: default -title: Home ---- - -## test -does this deploy as **html**? -does it get served to `/tests/jekyll/`? \ No newline at end of file diff --git a/tests/li/index.html b/tests/li/index.html deleted file mode 100644 index 9e363c3..0000000 --- a/tests/li/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Listless Items - - - -

Listless Items

- - - - -
-
- < luminousherbs - - \ No newline at end of file diff --git a/tests/li/script.js b/tests/li/script.js deleted file mode 100644 index de9da9c..0000000 --- a/tests/li/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world!"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/tests/og/index.html b/tests/og/index.html deleted file mode 100644 index 006b207..0000000 --- a/tests/og/index.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/tests/refactor/index.html b/tests/refactor/index.html deleted file mode 100644 index b4bc8bc..0000000 --- a/tests/refactor/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Refactor - - - -

Refactor

- - - - -
-
- < luminousherbs - - \ No newline at end of file diff --git a/tests/refactor/refactor.js b/tests/refactor/refactor.js deleted file mode 100644 index 2aa1639..0000000 --- a/tests/refactor/refactor.js +++ /dev/null @@ -1,25 +0,0 @@ -function downloadFile(filepath) { - const a = document.createElement("a"); - a.href = filepath; - a.download = ""; - a.hidden = true; - document.body.appendChild(a); - a.click(); - document.body.removeChild(a); -} - -function edit() { - window.location.href = `https://github.com/luminousherbs/luminousherbs.github.io/tree/main${window.location.pathname}`; -} - -function share() { - navigator.share({url: window.location.href}); -} - -function downloadHTML() { - downloadFile("index.html"); -} - -function downloadJavaScript() { - downloadFile("script.js"); -} \ No newline at end of file diff --git a/tests/refactor/script.js b/tests/refactor/script.js deleted file mode 100644 index de9da9c..0000000 --- a/tests/refactor/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world!"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/appear/index.html b/things/appear/index.html deleted file mode 100644 index 2988707..0000000 --- a/things/appear/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Appear - - - -

Appear

- - - - -
-
-
- < Things - - \ No newline at end of file diff --git a/things/appear/script.js b/things/appear/script.js deleted file mode 100644 index 3d6d1dc..0000000 --- a/things/appear/script.js +++ /dev/null @@ -1,52 +0,0 @@ -console.log("Hello world!"); - -let index = 0; -let words; -let intervalSpeed = 200; -let intervalId; - -async function getText(url) { - const response = await fetch(url); - const data = await response.text(); - return data; -} - -// i wanted to include a speed slider but html sucks :( -// function slide() { -// intervalSpeed = slider.value; -// clearInterval(intervalId); -// setTimeout(function(){}, intervalSpeed); -// intervalId = startRepeat(intervalSpeed); -// } - -function startRepeat(speed) { - let interval = setInterval(() => {addWord(main, interval)}, speed); -} - -function addWord(container, interval) { - if (index >= words.length) { - clearInterval(interval); - return; - } - container.innerHTML += " " + words[index]; - - // slider = document.getElementById("slider") - // if (slider) { - // slider.addEventListener("input", slide) - // } - - index++; -} - -function onLoad() { - console.log("Page loaded!"); - getText("words.txt").then((result) => { - words = result.split("\n"); - }) - - // define elements - const main = document.getElementById("main"); - intervalId = startRepeat(intervalSpeed) -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/appear/words.txt b/things/appear/words.txt deleted file mode 100644 index 670ba7f..0000000 --- a/things/appear/words.txt +++ /dev/null @@ -1,166 +0,0 @@ -

-This -page -appears -one -word -at -a -time, -one -word -every -tick, -until -the -whole -page -is -complete. -If -you're -impatient, -you -can -find -all -the -content -here. -

-The -JavaScript -process -makes -sure -every -HTML -tag -is -supported, -but -wrapping -multiple -words -in -one -tag -is -not -possible. -

-If -I -use -multiple -line -breaks, -the - - -text - - -appears - - -much - - -slower, - - -and -if -I -don't -use -any, -it all appears immediately. -

- - - - -This -means -I -can -vary -the -time -between -each -word, -like -this: - -. -. -. -. -.

- -Never -gonna -give - -you - -up,
- -Never -gonna -let - -you - -do- --o-own,
-Never -gonna -run - -a- -round - -and - -de --sert - -you.
- - - -Never -gonna -make - -you - -cry,
- -Never -gonna -SAAY - -good- -bye- - -yeye,
-Never -gonna -tell - -a -lie - - - -and -hurt - -you. - -

diff --git a/things/calculator/index.html b/things/calculator/index.html deleted file mode 100644 index 1d955d8..0000000 --- a/things/calculator/index.html +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Calculator - - - -

Calculator

- - - - -
- - - - - - - - - - - - - - - -
- - -
-
- - -
-
- - -
-
- - -
- < Things - - \ No newline at end of file diff --git a/things/calculator/script.js b/things/calculator/script.js deleted file mode 100644 index 0aa5c19..0000000 --- a/things/calculator/script.js +++ /dev/null @@ -1,217 +0,0 @@ -console.log("Hello world!"); - -let wordField, mathField, answerField; - -const wordToMath = new Map([ - ["by", ""], - ["to", ""], - ["the", ""], - ["of", ""], - ["a", ""], - ["", ""], - - ["zero", "0"], - - ["half", "(1/2)"], - ["third", "(1/3)"], - ["quarter", "(1/4)"], - ["fifth", "(1/5)"], - - ["one", "1"], - ["two", "2"], - ["three", "3"], - ["four", "4"], - ["five", "5"], - ["six", "6"], - ["seven", "7"], - ["eight", "8"], - ["nine", "9"], - ["ten", "10"], - ["eleven", "11"], - ["twelve", "12"], - ["thirteen", "13"], - ["fifteen", "15"], - ["twenty", "20"], - ["thirty", "30"], - ["forty", "40"], - ["fifty", "50"], - ["hundred", "100"], - - ["and", "+"], - ["add", "+"], - ["plus", "+"], - ["negative", "-"], - ["minus", "-"], - ["subtract", "-"], - ["times", "*"], - ["double", "2 *"], - ["triple", "3 *"], - ["doubled", "* 2"], - ["tripled", "* 3"], - ["divided", "/"], - ["divide", "/"], - ["power", "**"], - ["to the power of", "**"], - ["squared", "** 2"], - ["cubed", "** 3"], -]) - -function flipMap(map) { - const newMap = new Map(); - for (const [key, value] of map) { - newMap.set(value, key) - } - return newMap; -} - -function convertWordToMath(words) { - let newWords = []; - for (let w of words) { - w = w.toLowerCase(); - - // skip empty strings - if (w === "") { - newWords.push(""); - - // if the word is in the map, - } else if (wordToMath.get(w) !== undefined) { - // push its entry. - newWords.push(wordToMath.get(w)); - - // if it has a dash, - } else if (w.includes("-")) { - // break it into parts and add them. - const parts = w.split("-"); - newWords.push((convertWordToMath([parts[0]])[0] - - convertWordToMath([parts[1]])[0]) ?? "?"); - - // if it ends in teen, - } else if (w.includes("teen")) { - // get the entry for the base word and add ten. - newWords.push('' + ((+convertWordToMath([w.replace("teen", "")])[0] - - 10) ?? "?")); - - // if it ends in ty, - } else if (w.includes("ty")) { - // get the entry for the base word and multiply by ten. - newWords.push('' + ((+convertWordToMath([w.replace("ty", "")])[0] * 10) ?? "?")); - - // otherwise, - } else { - // fallback to "?". - newWords.push("?") - } - } - return newWords; - // newWords = substitute(words, wordToMath); - // for (let w of words) { - // if (w.contains("teen")) {newWords.push(wordToMath.get(w.replace("teen", "")) - - 10)} - // else if (w.contains("ty")) {newWords.push(wordToMath.get(w.replace("ty", "")) * 10)} - // } -} - -function convertMathToWord(math) { - let words = []; - const map = flipMap(wordToMath); - for (let m of math) { - - // skip empty strings - /* if (m === "") { - newWords.push("") - - // if the math is in the map, - } else */if (map.get(''+ m)) { - // push its entry. - words.push(map.get(''+ m)); - - // if it's more than 20 and doesn't divide by 10, - } else if (+m > 20 && +m % 10 !== 0) { - // break it into parts and hyphenate them. - words.push(convertMathToWord([''+(Math.floor(m / 10) * 10)])[0] + "-" + convertMathToWord([''+(m % 10)])[0]); - - // if it's between 13 and 19, - } else if (+m >= 13 && +m <= 19) { - // get the entry for the number minus ten and join "teen". - words.push(map.get(''+(m - 10)) + "teen"); - - // if it divides by 10, - } else if (m % 10 === 0) { - // get the entry for the base number and join "ty". - words.push(convertMathToWord([''+(m/10)])[0] + "ty"); - - // otherwise, - } else { - // fallback to "?". - words.push("?") - } - } - words = words.map(x => x === "zeroty" ? "" : x); - return words; - // newWords = substitute(words, wordToMath); - // for (let w of words) { - // if (w.contains("teen")) {newWords.push(wordToMath.get(w.replace("teen", "")) - - 10)} - // else if (w.contains("ty")) {newWords.push(wordToMath.get(w.replace("ty", "")) * 10)} - // } -} - - -function substitute(arr, map) { - newArr = []; - for (let a of arr) { - newArr.push( - map.get(a) || a - ); - } - return newArr; -} - -function onWordInput() { - const wordValue = wordField.value.split(" "); - const mathValue = convertWordToMath(wordValue).join(" "); - mathField.value = mathValue; - - try { - const answerValue = eval(mathValue); - answerField.value = answerValue; - } catch (err) { - // ignore errors - } -} - -function onMathInput() { - const mathValue = mathField.value.split(" "); - const wordValue = convertMathToWord(mathValue).join(" "); - wordField.value = wordValue; - - try { - const answerValue = eval(mathValue.join(" ")); - answerField.value = answerValue; - } catch (err) { - // ignore errors - } -} - -function onAnswerInput() { - const answerValue = answerField.value === "" ? NaN: answerField.value; - - const mathValue = `${answerValue - 1} + 1`; - mathField.value = isNaN(+answerValue) ? "": mathValue; - - const wordValue = convertMathToWord(isNaN(+answerValue) ? []: mathValue.split(" ")).join(" "); - wordField.value = wordValue; -} - - -function onLoad() { - console.log("Page loaded!"); - - // define elements - wordField = document.getElementById("field-word"); - wordField.addEventListener("input", onWordInput); - - mathField = document.getElementById("field-math"); - mathField.addEventListener("input", onMathInput); /* should be a specialised function instead of `onInput` */ - - answerField = document.getElementById("field-answer"); - answerField.addEventListener("input", onAnswerInput); /* should be a specialised function instead of `onInput` */ -} - -document.addEventListener("DOMContentLoaded", onLoad); diff --git a/things/cipher/index.html b/things/cipher/index.html deleted file mode 100644 index 25f3a7d..0000000 --- a/things/cipher/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cipher - - - -

Cipher

- - - - -
-
- 19
-
-
- < Things - - diff --git a/things/cipher/script.js b/things/cipher/script.js deleted file mode 100644 index e5d6a4c..0000000 --- a/things/cipher/script.js +++ /dev/null @@ -1,73 +0,0 @@ -console.log("Hello world!"); - -let forward = true; - -// very silly solution -const shiftReference = "abcdefghijklmnopqrstuvwxyzaABCDEFGHIJKLMNOPQRSTUVWXYZA"; - -function shiftOne(str) { - let newstr = ""; - for (let s of str) { - if (shiftReference.includes(s)) { - newstr += shiftReference[shiftReference.indexOf(s) + 1] - } else { - newstr += s - } - } - return newstr; -} - -function shiftMinusOne(str) { - let newstr = ""; - for (let s of str) { - if (shiftReference.includes(s)) { - newstr += shiftReference[shiftReference.lastIndexOf(s) - 1] - } else { - newstr += s - } - } - return newstr; -} - -function caesarShift(str, shift) { - shift %= 26; // save some time - for (let i = 0; i < Math.abs(shift); i++) { - str = (Math.abs(shift) === shift ? shiftOne: shiftMinusOne)(str) - } - return str; -} - - -function onSlideInput() { - amountField.innerText = shiftField.value; - if (forward) { - onForwardInput() - } else { - onBackwardInput() - } -} - -function onForwardInput() { - forward = true; - encodedField.value = caesarShift(decodedField.value, +shiftField.value); -} - -function onBackwardInput() { - forward = false; - decodedField.value = caesarShift(encodedField.value, -+shiftField.value); -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - const decodedField = document.getElementById("decodedField"); - const encodedField = document.getElementById("encodedField"); - const shiftField = document.getElementById("shiftField" ); - - decodedField.addEventListener("input", onForwardInput); - encodedField.addEventListener("input", onBackwardInput); - shiftField .addEventListener("input", onSlideInput); -} - -document.addEventListener("DOMContentLoaded", onLoad); diff --git a/things/clock/index.html b/things/clock/index.html deleted file mode 100644 index b1cadf3..0000000 --- a/things/clock/index.html +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Clock - - -

Clock

- - - - - -
-

- You've been looking at this page for 0 seconds. -

- -

- -

-
- < Things - - \ No newline at end of file diff --git a/things/clock/script.js b/things/clock/script.js deleted file mode 100644 index b714f0e..0000000 --- a/things/clock/script.js +++ /dev/null @@ -1,65 +0,0 @@ -console.log("Hello world!"); - -let count = 0; -let clock; - -let frozen = false; -let freezeCount = 0; -let clickFrozen = false; -let clickFrozenCount = false; - -function freezeClicking() { - if (clickFrozen) { - return false; - } else { - clickFrozen = true; - const freezeClickingButton = document.getElementById("freezeClicking"); - freezeClickingButton.innerText = "Unfreeze clicking"; - freezeClickingButton.disabled = true; - document.getElementById("freeze").disabled = true; - } -} - -function freeze() { - if (clickFrozen) {return false}; - const freezeButton = document.getElementById("freeze"); - - if (frozen) { - - frozen = false; - freezeButton.innerText = "Freeze time"; - startClock(); - - } else { - - frozen = true; - freezeButton.innerText = "Unfreeze time"; - clearInterval(clock); - - freezeCount++; - const displayFreezes = document.getElementById("displayFreezes"); - displayFreezes.innerText = `You've frozen time ${freezeCount} times.`; - - } - - return true; -} - -function tick() { - console.log("tick"); - count++; - const displayTime = document.getElementById("displayTime"); - displayTime.innerText = `You've been looking at this page for ${count} seconds.`; -} - -function startClock() { - clock = setInterval(tick, 1000); -} - -function onLoad() { - console.log("The page has loaded!"); - startClock(); - -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/color-detection/index.html b/things/color-detection/index.html deleted file mode 100644 index fc25bac..0000000 --- a/things/color-detection/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Color Detection - - -

Color Detector

- - - - - -
- - - -

-
- < Things - - diff --git a/things/color-detection/script.js b/things/color-detection/script.js deleted file mode 100644 index 112859c..0000000 --- a/things/color-detection/script.js +++ /dev/null @@ -1,29 +0,0 @@ -console.log("Hello, world!"); - -function getTextFromField() { - const input = textField.value; - let formattedInput = ""; - for (let w of input.split(" ")) { - - // red - w = `${w}`; - - // add back the space we lost by splitting on it - formattedInput += w + " "; - } - output.innerHTML = formattedInput; -} - -function onLoad() { - - console.log("The page has loaded!"); - - // define elements - const textField = document.getElementById("textField"); - const output = document.getElementById("output"); - - // listen for any change - textField.addEventListener("input", getTextFromField) -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/day/api.json b/things/day/api.json deleted file mode 100644 index bb1cd8e..0000000 --- a/things/day/api.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "ok": true, - "data": { - "day": "Wednesday" - } -} diff --git a/things/day/archive/index.html b/things/day/archive/index.html deleted file mode 100644 index 1af9a52..0000000 --- a/things/day/archive/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Day Archive - - - -

Day Archive

- - - - -
-

Our records show that it has previously been these days:

- -

To update this list, please submit a pull request on GitHub.

-

If you have trouble remembering these days, you can use the mneumonic MTWTFSS.

-
- < Day - - diff --git a/things/day/archive/script.js b/things/day/archive/script.js deleted file mode 100644 index de9da9c..0000000 --- a/things/day/archive/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world!"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/day/index.html b/things/day/index.html deleted file mode 100644 index 41bc107..0000000 --- a/things/day/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Day - - -

Day

- - - - - -
-

Today is a Wednesday.

- -

View the Archive.

-
- < Things - - diff --git a/things/day/script.js b/things/day/script.js deleted file mode 100644 index de9da9c..0000000 --- a/things/day/script.js +++ /dev/null @@ -1,7 +0,0 @@ -console.log("Hello world!"); - -function onLoad() { - console.log("Page loaded!"); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/disappear/index.html b/things/disappear/index.html deleted file mode 100644 index 783b436..0000000 --- a/things/disappear/index.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Disappear - - -

Disappear

- - - - - -
-

This page uses JavaScript to slowly delete itself as time passes.

-

Items are deleted from the bottom of the document working upwards.

-

Every single element will eventually be deleted. This includes body elements like text and images, as well as head elements like the title and styling.

-

To make sure you have time to read this, there are some extra elements below. If you've fast, you can see them before they disappear.

-

Hi! I'm a hidden element. You can see me now because the CSS got deleted.

-
- - - - -
- Photo of a green frog on a branch, facing forward and to the left. - Photo of a dinosaur attacking a city. -
-
- -
- -
- < Things - - - \ No newline at end of file diff --git a/things/disappear/script.js b/things/disappear/script.js deleted file mode 100644 index f68cc31..0000000 --- a/things/disappear/script.js +++ /dev/null @@ -1,49 +0,0 @@ -// "disappear" is hard to spell -console.log("Hello world!"); - -let count = 0; -let clock; - - -function stopDeleting() { - clearInterval(clock) -} - -function button() { - const newDiv = document.createElement("p"); - newDiv.innerText = "I'm about to be sacrificed!"; - newDiv.class = ""; - console.log(newDiv); - sacrificialTextContainer = document.getElementById("sacrificialTextContainer"); - sacrificialTextContainer.appendChild(newDiv); -} - -function tick() { - console.log("tick"); - count++; - - // get every items - items = document.querySelectorAll("*"); - console.log(items); - - // get the last item in the list - let last = items[items.length - 1]; - - // remove the element's parent's child - // because javascript - last.parentNode.removeChild(last); -} - -function createClock() { - clock = setInterval(tick, 1000); -} - -function onLoad() { - console.log("The page has loaded!"); - console.log(btn); - createClock(); - -} - -document.addEventListener("DOMContentLoaded", onLoad); -const btn = document.querySelector("#creator"); \ No newline at end of file diff --git a/things/gamble/index.html b/things/gamble/index.html deleted file mode 100644 index d7f077e..0000000 --- a/things/gamble/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gamble - - - -

Gamble

- - - - -
-

You have coins.

- - -
- < luminousherbs - - \ No newline at end of file diff --git a/things/gamble/script.js b/things/gamble/script.js deleted file mode 100644 index 2e83193..0000000 --- a/things/gamble/script.js +++ /dev/null @@ -1,78 +0,0 @@ -console.log("Hello world!"); - -let gambleButton, moneyField, coinsField; - -function getCoins() { - return +localStorage.getItem("coins") ?? 0; -} - -function onClick() { - let gambledMoney = +moneyField.value; - let coins = getCoins(); - coins += gamble(gambledMoney); - localStorage.coins = coins; - updateDisplay(); -} - -function gamble(amount) { - - // reject unnatural numbers - if ( - isNaN(amount) - || - amount % 1 !== 0 - || - amount <= 0 - ) { - alert("must be a natural number"); - return 0; - } - - // reject gambling more than the user has - if (amount > getCoins()) { - alert("you don't have that much money"); - return 0; - } - - // if we get this far then the user gambled an acceptable amount of money - - const luck = Math.random(); - - if (luck < (1/144)) { - // 1/144 chance to win 100x your wager - alert(`Congrats! You won ${amount * 100} coins.`); - return amount * 100; - - } else if (luck < (1/12)) { - // 11/144 chance to win 10x your wager - alert(`Congrats! You won ${amount * 10} coins.`); - return amount * 10; - - } else { - // 132/144 chance to win 0x your wager - alert(`Congrats! You didn't win this time.`); - return -amount; - - } -} - -function updateDisplay() { - coinsField.innerText = getCoins(); -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - gambleButton = document.getElementById("gamble"); - moneyField = document.getElementById("money"); - coinsField = document.getElementById("coins"); - - // define listeners - gambleButton.addEventListener("click", onClick); - - // initialize - updateDisplay(); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/german/index.html b/things/german/index.html deleted file mode 100644 index 5f993d2..0000000 --- a/things/german/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - German - - - -

German

- - - - -
- - -
- < Things - - \ No newline at end of file diff --git a/things/german/script.js b/things/german/script.js deleted file mode 100644 index a7c92d4..0000000 --- a/things/german/script.js +++ /dev/null @@ -1,49 +0,0 @@ -console.log("Hello world!"); - -let fieldTransliteration, fieldActual; - -const transliterationToActual = new Map([ - ["ae", "ä"], - ["oe", "ö"], - ["ss", "ß"], - ["ue", "ü"], - ["AE", "Ä"], - ["OE", "Ö"], - ["UE", "Ü"], -]) - -function flipMap(map) { - const newMap = new Map(); - for (const [key, value] of map) { - newMap.set(value, key); - } - return newMap; -} - -function substitute(str, map) { - for (const [key, value] of map) { - str = str.replaceAll(key, value); - } - return str -} - -function onTransliterationInput() { - fieldActual.value = substitute(fieldTransliteration.value, transliterationToActual); -} - -function onActualInput() { - fieldTransliteration.value = substitute(fieldActual.value, flipMap(transliterationToActual)); -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - fieldTransliteration = document.getElementById("field-transliteration"); - fieldActual = document.getElementById("field-actual"); - - fieldTransliteration.addEventListener("input", onTransliterationInput); - fieldActual.addEventListener("input", onActualInput); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/highlight/index.html b/things/highlight/index.html deleted file mode 100644 index 26d8d2f..0000000 --- a/things/highlight/index.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Highlight - - -

Highlight

- - - - - -
- -

- let - age - = - 7 -

-
- < Things - - diff --git a/things/highlight/script.js b/things/highlight/script.js deleted file mode 100644 index 9c5a26c..0000000 --- a/things/highlight/script.js +++ /dev/null @@ -1,66 +0,0 @@ -console.log("Hello world!"); - -colors = new Map([ - ["const", "lightgreen"], - ["let", "lightgreen"], - ["if", "lightgreen"], - ["else", "lightgreen"], - ["function", "lightgreen"], - ["for", "lightgreen"], - ["while", "lightgreen"], - ["of", "lightgreen"], - ["=", "white"], - ["==", "white"], - ["===", "white"], - [">", "white"], - ["<", "white"], - [">=", "white"], - ["<=", "white"], - ["!=", "white"], - ["!==", "white"], - ["+", "white"], - ["-", "white"], - ["*", "white"], - ["/", "white"], - ["**", "white"], - -]) - -let input, output; - -function updateText(text) { - let newText = ""; - for (let word of text.replaceAll("\n", "
").split(" ")) { - replacement = colors.get(word); - if (replacement) { - newText += `${word}`; - } else if (/^([0-9])+$/.test(word)) { - newText += `${word}`; - } else if ((word[0] === "\"") && (word[word.length - 1] === "\"")) { - newText += `${word}`; - } else { - newText += `${word}`; - } - newText += " "; - } - - // newText = newText.replaceAll("\n", "
"); - output.innerHTML = newText; -} - -function onInput() { - updateText(input.value); -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - input = document.getElementById("input"); - output = document.getElementById("output"); - input.addEventListener("input", onInput) - - updateText(input.value); -} - -document.addEventListener("DOMContentLoaded", onLoad); diff --git a/things/ideology/index.html b/things/ideology/index.html deleted file mode 100644 index 5daca13..0000000 --- a/things/ideology/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Ideology - - -

Ideology

- - - - - -
-

Answer these three questions and we'll calculate which political ideology you fit into.

- - -
- -
-

"Healthcare should be nationalised."

- - -
- -
-

"Gay marriage should be illegal."

- - -
- -
-

"The rich should be taxed more than they currently are."

- - -
-
- - -
-

-

- -
- < Things - - \ No newline at end of file diff --git a/things/ideology/script.js b/things/ideology/script.js deleted file mode 100644 index c1e0e62..0000000 --- a/things/ideology/script.js +++ /dev/null @@ -1,42 +0,0 @@ -console.log("Hello world!"); - -const results = new Map([ - [0, new Map([[true, "public healthcare advocate"], [false, "private healthcare advocate"]])], - [1, new Map([[true, "opposes gay marriage"], [false, "supports gay marriage"]])], - [2, new Map([[true, "prefers progressive tax"], [false, "prefers linear tax"]])], -]) - - -function getAnswers() { - answers = []; - for (let q of questions.children) { - try { - answers.push(q.children[1].children[0].checked); - } catch(err) {} - } - return answers -} - - - -function onLoad() { - console.log("Page loaded!"); - - // define elements - const questions = document.getElementById("questions"); - questions.addEventListener("submit", function(event) { - event.preventDefault(); - const answers = getAnswers(); - let counter = 0; - for (a of answers) { - answers[counter] = results.get(counter).get(a) - counter++; - } - const template = `You are a ${answers[0]} who ${answers[1]} and ${answers[2]}.` - console.log(template); - document.getElementById("result").innerText = template; - document.getElementById("subresult").innerText = "Don't tie yourself to political ideologies. Think about each isssue individually."; - }) -} - -document.addEventListener("DOMContentLoaded", onLoad); diff --git a/things/index.html b/things/index.html deleted file mode 100644 index ae3bf07..0000000 --- a/things/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Things - - -

Things

- - - - - -
-

Here are all the things I've made in JavaScript.

-
- Filter - - - -
-
- -
- < luminousherbs - - \ No newline at end of file diff --git a/things/iphone/index.html b/things/iphone/index.html deleted file mode 100644 index af9765f..0000000 --- a/things/iphone/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - iPhone - - - -

iPhone

- - - - -
- -
-
- < luminousherbs - - \ No newline at end of file diff --git a/things/iphone/readme.md b/things/iphone/readme.md deleted file mode 100644 index 3209e9c..0000000 --- a/things/iphone/readme.md +++ /dev/null @@ -1,35 +0,0 @@ -## price - -Data from: [Apple](https://apple.com/iphone), or [Apple Refurbished](https://www.apple.com/uk/shop/refurbished/iphone) where available. - -Formula: `(1199 - x) / 50`. - -## screen - -Data from: [Compare iPhone](https://apple.com/iphone/compare). - -Method: 120Hz is the most important factor. Screen size, peak brightness and pixel density are also considered. - -## performance - -Data from: [Geekbench Single Core](https://browser.geekbench.com/ios-benchmarks). - -Formula: `(12x - 27060) / 1198`. - -## camera - -Data from: [Compare iPhone](https://apple.com/iphone/compare). - -Method: 48MP is the most important factor. Next is largest zoom option, then number of zoom options. - -## battery - -Data from: [Compare iPhone](https://apple.com/iphone/compare). - -Formula: `(12x - 240) / 13`. - -## support - -Data from: Assume every iPhone is supported for one year longer than the previous year's iPhone. - -Formula: `6x - 36`. diff --git a/things/iphone/script.js b/things/iphone/script.js deleted file mode 100644 index 6be3c9d..0000000 --- a/things/iphone/script.js +++ /dev/null @@ -1,57 +0,0 @@ -console.log("Hello world!"); - -let phoneContainer; - -async function getJSON(url) { - const response = await fetch(url); - const data = await response.json(); - return data; -} - -function sortBy(collection, key) { - const objects = Object.entries(collection); - - // sort by key (descending order) - objects.sort((a, b) => b[1][key] - a[1][key]); - - return (objects); -} - -function displaySorted(collection, key) { - // clear page - phoneContainer.innerHTML = ""; - - for (let phone of sortBy(collection, key)) { - - const phoneDiv = document.createElement("div"); - phoneDiv.dataset.phoneId = phone[0]; - - const phoneHeading = document.createElement("h1"); - phoneHeading.textContent = `iPhone ${phone[0]}: ${phone[1][key]}`; - - phoneDiv.appendChild(phoneHeading); - phoneContainer.appendChild(phoneDiv); - - } -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - phoneContainer = document.getElementById("phones"); - let stats; - - // get stats - getJSON("stats.json").then((res) => { - stats = res; - displaySorted(stats, "price"); - }) - - document.getElementById("select").addEventListener("input", function() { - displaySorted(stats, document.getElementById("select").value) - }) - -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/iphone/stats.json b/things/iphone/stats.json deleted file mode 100644 index d48f841..0000000 --- a/things/iphone/stats.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - - "16 Pro Max": { - "price": 0, - "screen": 12, - "performance": 12, - "camera": 12, - "battery": 12, - "support": 12, - "other": 0 - }, - - "16 Pro": { - "price": 4, - "screen": 10, - "performance": 12, - "camera": 12, - "battery": 6, - "support": 12, - "other": 0 - }, - - "16 Plus": { - "price": 6, - "screen": 9, - "performance": 11, - "camera": 7, - "battery": 6, - "support": 12, - "other": 0 - }, - - "16": { - "price": 8, - "screen": 3, - "performance": 11, - "camera": 7, - "battery": 2, - "support": 12, - "other": 0 - }, - - "16e": { - "price": 12, - "screen": 0, - "performance": 11, - "camera": 2, - "battery": 6, - "support": 12, - "other": 0 - }, - - "15 Pro Max": { - "price": 2, - "screen": 11, - "performance": 6, - "camera": 10, - "battery": 8, - "support": 6, - "other": 0 - }, - - "15 Pro": { - "price": 9, - "screen": 9, - "performance": 6, - "camera": 10, - "battery": 3, - "support": 6, - "other": 0 - }, - - "15 Plus": { - "price": 10, - "screen": 7, - "performance": 3, - "camera": 4, - "battery": 6, - "support": 6, - "other": 0 - }, - - "15": { - "price": 8, - "screen": 2, - "performance": 3, - "camera": 4, - "battery": 0, - "support": 6, - "other": 0 - }, - - "14 Pro Max": { - "price": 3, - "screen": 10, - "performance": 3, - "camera": 9, - "battery": 8, - "support": 0, - "other": 0 - }, - - "14 Pro": { - "price": 6, - "screen": 9, - "performance": 4, - "camera": 9, - "battery": 3, - "support": 0, - "other": 0 - }, - - "14 Plus": { - "price": 8, - "screen": 2, - "performance": 0, - "camera": 1, - "battery": 6, - "support": 0, - "other": 0 - }, - - "14": { - "price": 10, - "screen": 0, - "performance": 0, - "camera": 1, - "battery": 0, - "support": 0, - "other": 0 - } - -} \ No newline at end of file diff --git a/things/javascript/index.html b/things/javascript/index.html deleted file mode 100644 index 4efa7c0..0000000 --- a/things/javascript/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JavaScript - - - -

JavaScript

- - - - -
- -
- -
-
- < Things - - \ No newline at end of file diff --git a/things/javascript/script.js b/things/javascript/script.js deleted file mode 100644 index cdef019..0000000 --- a/things/javascript/script.js +++ /dev/null @@ -1,32 +0,0 @@ -console.log("Hello world!") - -function onInput() { - const inputText = inputField.value; - let outputText = [] - let originalLog = console.log - - try { - // hijacking console.log isn't ideal but it's the best i could come up with - console.log = (...args) => { - outputText.push(args.join(" ")); - } - - eval(inputText); - } catch (error) { - outputText.push(`Line ${error.lineNumber || 0}: ${error.name}: ${error.message}`); - } finally { - console.log = originalLog; - } - outputField.innerText = outputText.join("\n"); - -} - -function onLoad() { - console.log("Page loaded!") - - // define elements - const inputField = document.getElementById("inputField"); - const outputField = document.getElementById("outputField"); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/magpie-counter/index.html b/things/magpie-counter/index.html deleted file mode 100644 index e666598..0000000 --- a/things/magpie-counter/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Magpie Counter - - - -

Magpie Counter

- - - - -
- - -
- - -
- < Things - - \ No newline at end of file diff --git a/things/magpie-counter/script.js b/things/magpie-counter/script.js deleted file mode 100644 index 9cf863c..0000000 --- a/things/magpie-counter/script.js +++ /dev/null @@ -1,67 +0,0 @@ -console.log("Hello world!"); - -const magpieConversion = new Map([ - [1, "sorrow"], - [2, "joy"], - [3, "a girl"], - [4, "a boy"], - [5, "silver"], - [6, "gold"], - [7, "a secret never to be told"], -]) - - -const magpieConversionLancashire = new Map([ - // https://en.wikipedia.org/wiki/One_for_Sorrow_(nursery_rhyme) - [1, "sorrow"], - [2, "joy"], - [3, "a girl"], - [4, "a boy"], - [5, "silver"], - [6, "gold"], - [7, "a secret never to be told"], - [8, "a wish"], - [9, "a kiss"], - [10, "a surprise you should be careful not to miss"], - [11, "health"], - [12, "wealth"], - [13, "beware it's the devil himself"], -]) - -function flipMap(map) { - const newMap = new Map(); - for (const [key, value] of map) { - newMap.set(value, key); - } - return newMap; -} - -let numberField, wordField, lancashireModeField; -let lancashireMode = false; - -function onNumberInput() { - wordField.value = (lancashireMode ? magpieConversionLancashire : magpieConversion).get(+numberField.value) || ""; -} - -function onWordInput() { - numberField.value = flipMap(lancashireMode ? magpieConversionLancashire : magpieConversion).get(wordField.value) || ""; -} - -function onToggle() { - lancashireMode = !lancashireMode; -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - numberField = document.getElementById("numberField"); - wordField = document.getElementById("wordField"); - lancashireModeField = document.getElementById("lancashireModeField"); - - numberField.addEventListener("input", onNumberInput); - wordField.addEventListener("input", onWordInput); - lancashireModeField.addEventListener("input", onToggle); -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/markdown/index.html b/things/markdown/index.html deleted file mode 100644 index 25ea0fd..0000000 --- a/things/markdown/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Markdown - - -

Markdown

- - - - - -
- - - -
- -

- - - -
- -

- - - -
-
- < Things - - \ No newline at end of file diff --git a/things/markdown/script.js b/things/markdown/script.js deleted file mode 100644 index 4602cab..0000000 --- a/things/markdown/script.js +++ /dev/null @@ -1,140 +0,0 @@ -console.log("Hello world!"); - -let input, output, html; - -const toggleables = new Map([ - ["**", ["", ""]], - ["*", ["", ""]], - ["__", ["", ""]], - ["_", ["", ""]], - ["~~", ["", ""]], - ["```", ["
", "
"]], - ["`", ["", ""]], -]) - -const lineEffects = new Map([ - ["# ", ["\n

", "

\n"]], - ["## ", ["\n

", "

\n"]], - ["### ", ["\n

", "

\n"]], - ["#### ", ["\n

", "

\n"]], - ["##### ", ["\n
", "
\n"]], - ["###### ", ["\n
", "
\n"]], - ["> ", ["\n\n"]], - ["- ", ["\n
  • ", "
  • "]], - ["---", ["\n
    ", ""]], -]) - -const defaultInput = `## Welcome to Markdown -Your text can be *italic* or **bold** or ***both***, and you can format \`code\` as well. -~~You can create lists and tables, too!~~ Lists and tables are not supported. -### This is a subheading, -And here are some horizontal lines: ---- ---- ---- -> This is a blockquote.`; - -function replaceToggleables(text) { - // loop for each tag - for (let t of toggleables.keys()) { - let opened = false; - // while this markdown tag is still present, - while (text.includes(t)) { - if (opened) { - // if the tag is already opened, replace the next markdown syntax with a html closing tag, - // e.g. replace * with - text = text.replace(t, toggleables.get(t)[1]); - opened = false; - } else { - // if the tag isn't already opened, replace the next markdown syntax with a html opening tag, - // e.g. replace * with - text = text.replace(t, toggleables.get(t)[0]); - opened = true; - } - } - } - return text; -} - -function replaceLineEffects(text) { - lines = text.split("\n"); - let newText = ""; - for (let l of lines) { - newl = l; - for (let e of lineEffects.keys()) { - if (l.startsWith(e)) { - // surround the line with the relevant opening and closing tags - newl = `${lineEffects.get(e)[0]}${l.replace(e, "")}${lineEffects.get(e)[1]}` - } - } - newText += newl; - // weird but functional - newText += (newl === l ? "
    ": ""); - } - return newText; -} - -function setHeights() { - - // set the height of the box to the height of the content - - input.style.height = "auto"; - input.style.height = input.scrollHeight + "px"; - - html.style.height = "auto"; - html.style.height = html.scrollHeight + "px"; -} - -function onInput() { - - setHeights(); - - // convert markdown to html - text = replaceLineEffects(input.value); - text = replaceToggleables(text); - - // set the text - output.innerHTML = text; - - // set the html - html.value = text; - -} - -function onHtml() { - - setHeights(); - - // set the text - output.innerHTML = html.value; - - // TODO: set the markdown - -} - - -function onLoad() { - console.log("Page loaded!"); - - // define elements - input = document.getElementById("inputField"); - output = document.getElementById("outputField"); - html = document.getElementById("htmlField"); - - // listen for events - input.addEventListener("input", onInput); - html.addEventListener("input", onHtml); - - // set default value - input.value = defaultInput; - - // trigger display update - onInput(); - - // this is required for some css reason - // it makes the page jump a bit but it's better than having a massive box - setTimeout(setHeights, 1) - -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/og.png b/things/og.png deleted file mode 100644 index 378ef9b..0000000 Binary files a/things/og.png and /dev/null differ diff --git a/things/quadratic-solver/index.html b/things/quadratic-solver/index.html deleted file mode 100644 index 1b4230c..0000000 --- a/things/quadratic-solver/index.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Quadratic Solver - - - -

    Quadratic Solver

    - - - - -
    - - x2 + - - x + - - = 0 - -

    - - x = - - , x = - - -
    - < Things - - diff --git a/things/quadratic-solver/script.js b/things/quadratic-solver/script.js deleted file mode 100644 index 37147be..0000000 --- a/things/quadratic-solver/script.js +++ /dev/null @@ -1,115 +0,0 @@ -console.log("Hello world!"); - -// wouldn't need this if js didn't suck -let fieldA, fieldB, fieldC, fieldXPositive, fieldXNegative; - -function questionInput() { - const res = solve({a: fieldA.value, b: fieldB.value, c: fieldC.value}); - console.log(res); - fieldXPositive.value = res.xPositive; - fieldXNegative.value = res.xNegative; - - fixAllWidths([fieldA, fieldB, fieldC, fieldXPositive, fieldXNegative]); -} - -function answerInput() { - let vals = {a: fieldA.value, b: fieldB.value, c: fieldC.value, xPositive: fieldXPositive.value, xNegative: fieldXNegative.value}; - let newVals = vals; - - delete newVals.a; - if (solve(newVals)) { - fieldA.value = solve(newVals); - } - newVals = vals; - - delete newVals.b; - if (solve(newVals)) { - fieldB.value = solve(newVals); - } - newVals = vals; - - delete newVals.c; - if (solve(newVals)) { - fieldC.value = solve(newVals); - } - newVals = vals; - - delete newVals.xPositive; - if (solve(newVals)) { - fieldXPositive.value = solve(newVals); - } - newVals = vals; - - delete newVals.xNegative; - if (solve(newVals)) { - fieldXNegative.value = solve(newVals); - } - newVals = vals; - - fixAllWidths([fieldA, fieldB, fieldC, fieldXPositive, fieldXNegative]); -} - -function fixAllWidths(elements) { - for (let e of elements) { - e.style.width = e.value.length + 1 + "ch"; - } -} - -function findA(values) { - const aPositive = Number(((-values.c / (values.xPositive * values.xPositive)) - (values.b / values.xPositive)).toFixed(10)); - const aNegative = Number(((-values.c / (values.xNegative * values.xNegative)) - (values.b / values.xNegative)).toFixed(10)); - return aPositive == aNegative ? aPositive: NaN; -} - -function findB(values) { - const bPositive = Number(((-values.c / values.xPositive) - (values.a * values.xPositive)).toFixed(10)); - const bNegative = Number(((-values.c / values.xNegative) - (values.a * values.xNegative)).toFixed(10)); - return bPositive == bNegative ? bPositive: NaN; -} - -function findC(values) { - const cPositive = Number((-(values.a * values.xPositive * values.xPositive) - (values.b * values.xPositive)).toFixed(10)); - const cNegative = Number((-(values.a * values.xNegative * values.xNegative) - (values.b * values.xNegative)).toFixed(10)); - return cPositive == cNegative ? cPositive: NaN; -} - -function findX(values) { - return { - xPositive: (-values.b + Math.sqrt((values.b * values.b) - (4 * values.a * values.c))) / (2 * values.a), - xNegative: (-values.b - Math.sqrt((values.b * values.b) - (4 * values.a * values.c))) / (2 * values.a) - }; -} - -function solve(values) { - if (values.a === undefined) { - return findA(values); - } else if (values.b === undefined) { - return findB(values); - } else if (values.c === undefined) { - return findC(values); - } else if (values.xPositive === undefined && values.xNegative === undefined) { - return findX(values); - } else { - return NaN; - } -} - -function onLoad() { - console.log("Page loaded!"); - - // define elements - fieldA = document.getElementById("field-a"); - fieldB = document.getElementById("field-b"); - fieldC = document.getElementById("field-c"); - fieldXPositive = document.getElementById("field-x-positive"); - fieldXNegative = document.getElementById("field-x-negative"); - - fieldA.addEventListener("input", questionInput); - fieldB.addEventListener("input", questionInput); - fieldC.addEventListener("input", questionInput); - fieldXPositive.addEventListener("input", answerInput); - fieldXNegative.addEventListener("input", answerInput); - -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/rich-people-only/index.html b/things/rich-people-only/index.html deleted file mode 100644 index 969d7b0..0000000 --- a/things/rich-people-only/index.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rich People Only - - - -

    Rich People Only

    - - - - -
    -
    - < Things - - \ No newline at end of file diff --git a/things/rich-people-only/script.js b/things/rich-people-only/script.js deleted file mode 100644 index 464ef05..0000000 --- a/things/rich-people-only/script.js +++ /dev/null @@ -1,51 +0,0 @@ -console.log("Hello world!"); - -function createPoorText() { - - const poorText = document.createDocumentFragment(); - - const poorTitle = document.createElement("h2"); - poorTitle.textContent = "You are not rich." - - const poorDescription = document.createElement("p"); - poorDescription.textContent = "Come back when you have at least 100 coins." - - poorText.append(poorTitle, poorDescription); - return poorText; - -} - -function createRichText() { - - const richText = document.createDocumentFragment(); - - const richTitle = document.createElement("h2"); - richTitle.textContent = "Congratulations! You are rich." - - const richDescription = document.createElement("p"); - richDescription.textContent = "You may bask in your wealth and glory." - - richText.append(richTitle, richDescription); - return richText; - -} - -function getCoins() { - return +localStorage.getItem("coins"); -} - -function isRich() { - return getCoins() >= 100; -} - -function onLoad() { - console.log("Page loaded!"); - - text = isRich() ? createRichText() : createPoorText(); - - // define elements - const ruleEnd = document.getElementById("rule-end"); - ruleEnd.parentNode.insertBefore(text, ruleEnd); -} - -document.addEventListener("DOMContentLoaded", onLoad); diff --git a/things/rules-for-robots/index.html b/things/rules-for-robots/index.html deleted file mode 100644 index 5ee7b58..0000000 --- a/things/rules-for-robots/index.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rules for Robots - - -

    Rules for Robots

    - - - - - -
    - - -
    - < Things - - \ No newline at end of file diff --git a/things/rules-for-robots/script.js b/things/rules-for-robots/script.js deleted file mode 100644 index 7ab6ccb..0000000 --- a/things/rules-for-robots/script.js +++ /dev/null @@ -1,56 +0,0 @@ -console.log("Hello world!"); - -function isRedirect() { - return !!(getParameter("url")) -} - -function removeParameter(key) { - // get the current url - const url = new URL(window.location.href); - - // delete the parameter - url.searchParams.delete(key); -} - -function getParameter(key) { - // get the current url - const url = new URL(window.location.href); - - // get the parameter - const parameter = url.searchParams.get(key); - return parameter; -} - -function setParameter(key, value) { - // get the current url - const url = new URL(window.location.href); - - // set the parameter - url.searchParams.set(key, value); - - // who knows what this does - window.history.pushState({}, "", url); - - return; -} - -function onEnter() { - setParameter("url", field.value); - if (isRedirect()) { - window.location.replace(`${getParameter("url")}/robots.txt`, "_self"); - } else { - removeParameter("url"); - } -} - -function onLoad() { - console.log("Page loaded!"); - if (!isRedirect()) { - const field = document.getElementById("field"); - field.addEventListener("keydown", (event) => { - if (event.key === "Enter") onEnter(); - }); - } -} - -document.addEventListener("DOMContentLoaded", onLoad); \ No newline at end of file diff --git a/things/script.js b/things/script.js deleted file mode 100644 index d2828c7..0000000 --- a/things/script.js +++ /dev/null @@ -1,92 +0,0 @@ -console.log("Hello world!"); - -let allTags; -let pageTags; - -function selectAll(id) { - const container = document.getElementById(id); - for (let box of container.querySelectorAll("input")) box.checked = true; - filterPages(); -} - -function selectNone(id) { - const container = document.getElementById(id); - for (let box of container.querySelectorAll("input")) box.checked = false; - filterPages(); -} - -function selectSome(id) { - const container = document.getElementById(id); - // Math.random() returns a number between 0 and 1 - // so Math.random() > 0.5 is a 50% chance to be true - for (let box of container.querySelectorAll("input")) box.checked = (Math.random() > 0.5); - filterPages(); -} - -async function getJSON(url) { - const response = await fetch(url); - const data = await response.json(); - return data; -} - -function getFilterChoice(filters) { - const choices = new Map() - for (let f of filters) { - choices.set(f, document.getElementById(`filter-${f}`).checked); - } - return choices; -} - -function getUniqueElementsFromValueArrays(obj) { - const elements = new Set(); - for (const [key, value] of Object.entries(obj)) { - for (const v of value) { - elements.add(v) - } - } - return elements; -} - -function createFilters(filters) { - const filterBox = document.getElementById("filter"); - for (let f of filters) { - filterBox.innerHTML += ``; - filterBox.innerHTML += `
    `; - document.getElementById(`filter-${f}`).addEventListener("change", function() { - console.log("DDDDDD") - }) - } -} - -function filterPages() { - allowedPages = new Set(); - const choice = getFilterChoice(allTags); - for (const [key, value] of Object.entries(pageTags)) { - for (const c of choice.keys()) { - if (choice.get(c) && value.includes(c)) allowedPages.add(key); - } - } - for (const [key, value] of Object.entries(pageTags)) { - document.getElementById(`link-${key}`).hidden = !allowedPages.has(key); - } -} - -function createLinkLayout(tags) { - const list = document.getElementById("ul"); - for (const [key, value] of Object.entries(tags)) { - list.innerHTML += `