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 }}
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- {{ page.title }}
- Edit
- Share
- Download HTML
- Download JavaScript
-
- {{ 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- The Aeiouniverse is a showcase for creations that only use vowels. Here are some of them:
-
- oi , a vowel-only client for Login .
- aoo , a vowel-only Mastodon post reader.
-
- 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
-
-
-
- ou aie oe oe' uo aai. ou a ooa a e oe ee .
-
- aoo
- It's just like Mastodon but with only the vowels
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
-
-
- < 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- AIs compete to redesign my CSS
- Edit
- Share
- Download HTML
- Download JavaScript
-
- I asked five language models to redesign the CSS for this website. Here are the results.
-
- Default
- GPT 4.1
- Gemini 2.0 Flash
- Llama 3.3 70B
- Claude 3.5 Sonnet
- Mistral
-
-
- 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:
- primary (#3498db)
- secondary (#2ecc71)
- danger (#e74c3c)
- warning (#f39c12)
- info (#1abc9c)
- success (#2ecc71)
- . 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.
-
-
- i cant be bothered to write anything else so thats all. have a look at the example elements below if you want.
-
-
-
-
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- JavaScript is a fake language
- Edit
- Share
- Download HTML
- Download JavaScript
-
- 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.
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- Run
-
-
-
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Miscellaneous
- Edit
- Share
- Download HTML
- Download JavaScript
-
- 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 eei...
-
-
-
-
-
-
-
-
-
-
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 @@
-
-VIDEO
\ 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Listless Items
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Refactor
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Appear
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Calculator
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
-
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Cipher
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
-
- You've been looking at this page for 0 seconds.
-
- Freeze time
-
- Freeze clicking
-
-
- < 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
-
-
-
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Day Archive
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Our records show that it has previously been these days:
-
- Monday
- Tuesday
- Wednesday
- Thursday
- Friday
- Saturday
- Sunday
-
- 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
- Today is a Wednesday .
-
- Please note: this page is updated manually, and many not always be accurate. To update the day, please edit this page on GitHub .
-
- 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
- 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.
-
-
-
-
-
-
-
-
-
-
- Fight back by adding more elements!
-
- Stop this madness!
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Gamble
- Edit
- Share
- Download HTML
- Download JavaScript
-
- You have coins.
-
- Gamble
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- German
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
-
-
- < 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
-
-
- 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
- Answer these three questions and we'll calculate which political ideology you fit into.
-
-
-
-
-
-
-
- < 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
- Here are all the things I've made in JavaScript.
-
- Filter
- Select all
- Select none
- Select some
-
-
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- iPhone
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- Price
- Screen
- Performance
- Camera
- Battery
- Support
-
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- JavaScript
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
-
- Run
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Magpie Counter
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- Lancashire Mode
-
-
-
-
- < 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
-
- Markdown
- Copy
-
-
-
-
- HTML
- Copy
-
-
-
-
- Text
- Copy
-
-
- < 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Quadratic Solver
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- 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
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Rich People Only
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- < 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
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
-
- Go
-
- < 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 += `${f} `;
- 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 += `${key} (${value.join(", ")})`;
- }
-}
-
-function onLoad() {
- console.log("Page loaded!");
- getJSON("/things/tags.json").then(result => {
- pageTags = result;
- createLinkLayout(result);
- allTags = getUniqueElementsFromValueArrays(result);
- createFilters(allTags);
- filterPages();
- })
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
diff --git a/things/shifty-scale/index.html b/things/shifty-scale/index.html
deleted file mode 100644
index 62d8353..0000000
--- a/things/shifty-scale/index.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Shifty Scale
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Shifty Scale
- Edit
- Share
- Download HTML
- Download JavaScript
-
- How shifty is this person?
-
-
-
- Submit
-
-
- < Things
-
-
\ No newline at end of file
diff --git a/things/shifty-scale/script.js b/things/shifty-scale/script.js
deleted file mode 100644
index 52ddb9f..0000000
--- a/things/shifty-scale/script.js
+++ /dev/null
@@ -1,126 +0,0 @@
-console.log("Hello world!");
-
-const celsiusToDoneness = new Map([
- [46, "blue"],
- [52, "rare"],
- [55, "medium rare"],
- [60, "medium"],
- [65, "medium well"],
- [69, "well done"],
- [71, "overcooked"],
-])
-
-const shiftyScores = new Map([
- [0, "medium"],
- [1, "well done"],
- [2, "medium rare"],
- [3, "blue"],
- [4, "overcooked"],
- [5, "overcooked"],
- [6, "medium well"],
- [7, "rare"],
- [8, "well done"],
- [9, "rare"],
-])
-
-const shiftyExplanations = new Map([
- [0, "Too confusing to make a clear judgement."],
- [1, "Pretty shifty if you ask me."],
- [2, "That's not shifty, wearing a clown mask just improves his programming abilities."],
- [3, "He's living his best life."],
- [4, "That's textbook shifty right there."],
- [5, "Will all great Neptune's oceans wash this shift clear from my hands?"],
- [6, "That's a shifty expression but not a shifty shirt."],
- [7, "Nothing shifty about this."],
- [8, "Doing the YMCA while high is a clear indicator of shift."],
- [9, "Don't judge him, his hoodie was surgically attached to him in a freak accident."],
-])
-
-let fieldTemperature, fieldDoneness, image, imageIndex, submit, answer, explanation;
-
-
-
-function flipMap(map) {
- const newMap = new Map();
- for (const [key, value] of map) {
- newMap.set(value, key);
- }
- return newMap;
-}
-
-function convertUsingLowerLimit(key, map) {
- key = Math.floor(key);
- while (true) {
- console.log("loopin'");
- if (key < Math.min(map.keys())) return undefined
- value = map.get(key);
- if (value !== undefined) {
- return value;
- } else {
- key--;
- }
- }
-}
-
-function onTemperatureInput() {
- fieldDoneness.value = convertUsingLowerLimit(fieldTemperature.value, celsiusToDoneness);
- if (fieldDoneness.value == "blue") {
- document.body.style.color = "blue";
- } else {
- document.body.style.color = "white";
- }
-}
-
-function onDonenessInput() {
- fieldTemperature.value = (flipMap(celsiusToDoneness).get(fieldDoneness.value)) ?? fieldTemperature.value;
- if (fieldDoneness.value == "blue") {
- document.body.style.color = "blue";
- } else {
- document.body.style.color = "white";
- }
-}
-
-function randomInteger(max) {
- return Math.floor(Math.random() * max)
-}
-
-function randomPhoto() {
- submit.disabled = false;
- postgame.hidden = true;
- imageIndex = randomInteger(10);
- image.src = `/assets/images/shifty${imageIndex}.jpg`;
-}
-
-function onSubmit() {
- submit.disabled = true;
- answer.innerText = `Correct answer: ${shiftyScores.get(imageIndex)}.`;
- explanation.innerText = shiftyExplanations.get(imageIndex);
- postgame.hidden = false;
-}
-
-function onLoad() {
- console.log("Page loaded!");
-
- // define elements
- fieldDoneness = document.getElementById("field-doneness");
- fieldTemperature = document.getElementById("field-temperature");
-
- fieldDoneness.addEventListener("input", onDonenessInput);
- fieldTemperature.addEventListener("input", onTemperatureInput);
-
- image = document.getElementById("image");
- submit = document.getElementById("submit");
- next = document.getElementById("next");
- answer = document.getElementById("answer");
- explanation = document.getElementById("explanation");
- postgame = document.getElementById("postgame");
-
- submit.addEventListener("click", onSubmit);
- next.addEventListener("click", randomPhoto);
-
-
- randomPhoto();
-
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
diff --git a/things/shop/index.html b/things/shop/index.html
deleted file mode 100644
index c2ebe21..0000000
--- a/things/shop/index.html
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Shop
-
-
- Shop
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
-
-
- Coins
- You have 0 coins.
-
- Get coin
-
-
-
-
-
- Shop
-
-
-
- Name
- Price
- Buy
-
-
-
-
- Strength Potion
- 5
- Buy
-
-
- Sword
- 20
- Buy
-
-
- Gem
- 50
- Buy
-
-
-
-
-
-
- Reset
- Reset all data
-
-
- < Things
-
-
diff --git a/things/shop/script.js b/things/shop/script.js
deleted file mode 100644
index d6a7415..0000000
--- a/things/shop/script.js
+++ /dev/null
@@ -1,61 +0,0 @@
-console.log("Hello world!");
-
-const prices = new Map([
- ["Strength Potion", 5],
- ["Sword", 20],
- ["Gem", 50],
-])
-
-function getCoins() {
- return +localStorage.getItem("coins") ?? 0;
-}
-
-function buy(item) {
- let coins = getCoins()
- if (coins < prices.get(item)) return false;
- coins -= prices.get(item);
- localStorage.setItem("coins", coins);
- localStorage.setItem(item, Number(localStorage.getItem(item)) + 1);
- updateDisplay();
-}
-
-function updateDisplay() {
- output.innerText = `You have ${getCoins()} coins.`
- itemsDisplay.innerHTML = "";
- prices.forEach(function(value, key) { // surely value and key are the wrong way round?
- if (localStorage.getItem(key)) itemsDisplay.innerHTML += `${key}: ${localStorage.getItem(key)} `
- })
- updateAffordable();
-}
-
-function updateAffordable() {
- prices.forEach(function(value, key) {
- if (value > getCoins()) {
- // console.log(key, document.getElementById(key));
- document.getElementById(key).children[2].firstChild.disabled = true;
- } else {
- document.getElementById(key).children[2].firstChild.disabled = false;
- }
- })
-}
-
-function addCoin() {
- let coins = getCoins();
- coins++;
- localStorage.setItem("coins", coins);
- updateDisplay();
-}
-
-function onLoad() {
- console.log("Page loaded!");
-
- // define elements
- const output = document.getElementById("output");
- const itemsDisplay = document.getElementById("itemsDisplay")
- const getCoin = document.getElementById("getCoin");
- getCoin.addEventListener("click", addCoin);
- updateDisplay();
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
-
diff --git a/things/tags.json b/things/tags.json
deleted file mode 100644
index 248c02d..0000000
--- a/things/tags.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "clock": ["time", "escalation"],
- "appear": ["time", "joke"],
- "disappear": ["time", "escalation"],
- "highlight": ["transformation"],
- "color-detection": ["transformation"],
- "quadratic-solver": ["transformation", "useful", "reversible", "math"],
- "cipher": ["transformation", "useful", "reversible"],
- "german": ["transformation", "reversible"],
- "javascript": ["useful"],
- "shop": ["memory", "money"],
- "to-do": ["useful", "memory"],
- "rules-for-robots": ["other"],
- "window": ["other"],
- "calculator": ["transformation", "useful", "reversible", "math"],
- "verbs": ["transformation"],
- "rich-people-only": ["memory", "money"],
- "markdown": ["transformation", "useful"],
- "day": ["joke"],
- "gamble": ["memory", "money"],
- "magpie-counter": ["transformation", "joke", "reversible"],
- "shifty-scale": ["joke"],
- "tax": ["escalation", "memory", "money"]
-}
diff --git a/things/tax/index.html b/things/tax/index.html
deleted file mode 100644
index c5ccdd8..0000000
--- a/things/tax/index.html
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tax
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Tax
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- Submit tax returns
-
- < luminousherbs
-
-
\ No newline at end of file
diff --git a/things/tax/script.js b/things/tax/script.js
deleted file mode 100644
index 4e96a62..0000000
--- a/things/tax/script.js
+++ /dev/null
@@ -1,48 +0,0 @@
-console.log("Hello world!");
-
-const taxRate = 0.2;
-
-function coins() {
- return +localStorage.coins;
-}
-
-function calculateTax(money) {
- return (
- ((money * (1 - taxRate)) < 250) ? (money * taxRate) : (money - 249)
- );
-}
-
-function richText() {
- return `You currently have ${coins()} coins, which is too many. Press the button below to submit your tax returns and pay ${calculateTax(coins())} coins to the government.`;
-}
-
-function poorText() {
- return `You don't need to pay tax.`;
-}
-
-function onLoad() {
- console.log("Page loaded!");
-
- // define elements
- const messageBox = document.getElementById("message");
- const button = document.getElementById("submit");
-
- // logic
- if (coins() >= 250) {
- messageBox.innerText = richText();
- button.disabled = false;
- } else {
- messageBox.innerText = poorText();
- button.disabled = true;
- }
-
- button.addEventListener("click", function() {
- if (coins() >= 250) {
- localStorage.coins = coins() - calculateTax(coins());
- alert("Your tax has been paid successfully.");
- }
- window.location.reload();
- })
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
\ No newline at end of file
diff --git a/things/to-do/index.html b/things/to-do/index.html
deleted file mode 100644
index 6d7e086..0000000
--- a/things/to-do/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- To Do
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- To Do
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- +
-
- < luminousherbs
-
-
\ No newline at end of file
diff --git a/things/to-do/script.js b/things/to-do/script.js
deleted file mode 100644
index c81b498..0000000
--- a/things/to-do/script.js
+++ /dev/null
@@ -1,89 +0,0 @@
-console.log("Hello world!");
-
-let container;
-
-function getIndex() {
- return document.querySelectorAll("input").length;
-}
-
-function createItem(value = "") {
-
- // get index
- const index = getIndex();
-
- // create div
- const item = document.createElement("div");
- item.dataset.index = index;
-
- // create text field
- const input = document.createElement("input");
- input.value = value;
-
- // create space
- const space = document.createTextNode(" ");
-
- // create removal button
- const button = document.createElement("button");
- button.innerText = "-";
- button.onclick = function() {
- deleteItem(index);
- }
-
- // append them to each other
- item.appendChild(input);
- item.appendChild(space);
- item.appendChild(button);
- container.appendChild(item);
-
- // focus
- input.focus();
-
- // listen to inputs so we can save them
- input.addEventListener("input", save);
- save();
-
-}
-
-function deleteItem(index) {
- document.querySelector(`[data-index="${index}"]`).remove();
- document.querySelector(`[data-index="${getIndex() - 1}"]`).firstChild.focus();
- save();
-
-}
-
-function save() {
- const toDoList = [];
- for (let field of document.querySelectorAll("input")) {
- toDoList.push(field.value);
- }
- localStorage.setItem("toDoList", toDoList.join("\n"));
-}
-
-function load() {
- const list = (localStorage.toDoList ?? "").split("\n");
- for (let item of list) createItem(item);
-}
-
-function onLoad() {
- console.log("Page loaded!");
-
- // define elements
- container = document.getElementById("container");
-
- load();
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
-
-document.addEventListener("keydown", function(event) {
-
- if (event.key === "=" || event.key === "+") {
- event.preventDefault();
- createItem();
-
- } else if (event.key === "-" || event.key === "_") {
- event.preventDefault();
- deleteItem(getIndex() - 1);
- }
-
-})
\ No newline at end of file
diff --git a/things/verbs/index.html b/things/verbs/index.html
deleted file mode 100644
index 0bcad4a..0000000
--- a/things/verbs/index.html
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Verbs
-
-
- Verbs
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
-
-
-
-
- < Things
-
-
\ No newline at end of file
diff --git a/things/verbs/script.js b/things/verbs/script.js
deleted file mode 100644
index 5aa7074..0000000
--- a/things/verbs/script.js
+++ /dev/null
@@ -1,62 +0,0 @@
-console.log("Hello world!");
-
-const verbs = new Map([
- // if english was a logical language, we wouldn't have to hardcode these, but alas.
- ["i", "she"], /* not technically a verb but i dont want to rename it */
- ["my", "her"], /* not technically a verb but i dont want to rename it */
- ["me", "her"], /* not technically a verb but i dont want to rename it */
- ["mine", "hers"], /* not technically a verb but i dont want to rename it */
- ["am", "are"],
- ["have", "has"],
- ["do", "does"],
- ["know", "knows"],
- ["get", "gets"],
- ["go", "goes"],
- ["like", "likes"],
- ["want", "wants"],
- ["see", "sees"],
- ["make", "makes"],
- ["want", "wants"],
-])
-
-function flipMap(map) {
- const newMap = new Map();
- for (const [key, value] of map) {
- newMap.set(value, key)
- }
- return newMap;
-}
-
-let input, output;
-
-function onInputInput() {
- output.value = "";
- for (const word of input.value.split(" ")) {
- const newWord = verbs.get(word.toLowerCase());
- output.value += " " + (newWord ? newWord : word);
- }
- output.value = output.value.replace(" ", "")
-
-}
-
-function onOutputInput() {
- input.value = "";
- for (const word of output.value.split(" ")) {
- const newWord = flipMap(verbs).get(word.toLowerCase());
- input.value += " " + (newWord ? newWord : word);
- }
- // replace the first space
- input.value = input.value.replace(" ", "")
-
-}
-
-function onLoad() {
- console.log("Page loaded!");
- // define elements
- input = document.getElementById("inputField");
- output = document.getElementById("outputField");
- input.addEventListener("input", onInputInput);
- output.addEventListener("input", onOutputInput);
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
\ No newline at end of file
diff --git a/things/window/index.html b/things/window/index.html
deleted file mode 100644
index d3ce1d4..0000000
--- a/things/window/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Window
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Window
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
-
-
-
-
-
- x
-
-
-
- < luminousherbs
-
-
\ No newline at end of file
diff --git a/things/window/script.js b/things/window/script.js
deleted file mode 100644
index 6fdef95..0000000
--- a/things/window/script.js
+++ /dev/null
@@ -1,34 +0,0 @@
-console.log("Hello world!");
-
-let urlField, heightField, widthField, frame;
-
-function onInput() {
- frame.src = urlField.value;
- frame.width = widthField.value;
- frame.height = heightField.value;
-}
-
-function onLoad() {
- console.log("Page loaded!");
-
- // define elements
- urlField = document.getElementById("urlField");
- widthField = document.getElementById("widthField");
- heightField = document.getElementById("heightField");
- frame = document.getElementById("frame");
-
- // listen to inputs
- urlField.addEventListener("input", onInput);
- widthField.addEventListener("input", onInput);
- heightField.addEventListener("input", onInput);
-
- // set starting width based on available width
- widthField.value = window.innerWidth * 0.7;
- heightField.value = window.innerHeight * 0.7;
-
- // trigger input
- onInput();
-
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
\ No newline at end of file
diff --git a/tools/create-page/index.html b/tools/create-page/index.html
deleted file mode 100644
index 29c1ca6..0000000
--- a/tools/create-page/index.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Page Creator
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Page Creator
- Edit
- Share
- Download HTML
- Download JavaScript
-
- You can use this page to create a new page on the site. You must be serving locally from /tools/serve.js.
-
-
- < Tools
-
-
\ No newline at end of file
diff --git a/tools/create-page/script.js b/tools/create-page/script.js
deleted file mode 100644
index bf3b7aa..0000000
--- a/tools/create-page/script.js
+++ /dev/null
@@ -1,30 +0,0 @@
-console.log("Hello world!");
-
-function onLoad() {
- console.log("Page loaded!");
-
- document.querySelector("form").addEventListener("submit", function(e) {
- e.preventDefault();
- const userPageName = e.target.pageName.value;
- const userPagePath = e.target.pagePath.value;
-
- fetch("/tools/create-page/", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: JSON.stringify({ pagePath: userPagePath, pageName: userPageName })
- })
-
- .then(res => {
- if (res.status === 400) {
- res.json().then(data => {
- alert(data.error);
- })
- } else {
- window.location.href = `/${userPagePath}`;
- }
- });
-
- })
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
\ No newline at end of file
diff --git a/tools/index.html b/tools/index.html
deleted file mode 100644
index 797e937..0000000
--- a/tools/index.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Tools
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Tools
- Edit
- Share
- Download HTML
- Download JavaScript
-
- Here are the tools I use to make my website. They only work if you're serving locally from serve.js .
-
-
- < luminousherbs
-
-
\ No newline at end of file
diff --git a/tools/kill-server/index.html b/tools/kill-server/index.html
deleted file mode 100644
index 98c7d1d..0000000
--- a/tools/kill-server/index.html
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Kill Server
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- Kill Server
- Edit
- Share
- Download HTML
- Download JavaScript
-
- You can use this page to kill the local server. This will disconnect all users, so only do it if you're absolutely sure.
-
-
- < luminousherbs
-
-
\ No newline at end of file
diff --git a/tools/kill-server/script.js b/tools/kill-server/script.js
deleted file mode 100644
index dd1464b..0000000
--- a/tools/kill-server/script.js
+++ /dev/null
@@ -1,20 +0,0 @@
-console.log("Hello world!");
-
-function onLoad() {
- console.log("Page loaded!");
-
- document.querySelector("form").addEventListener("submit", function(e) {
- e.preventDefault();
-
- window.confirm("Are you sure? This will kill the connection for all users.")
-
- fetch("/tools/kill-server/", {
- method: "POST",
- headers: { "Content-Type": "application/json" },
- body: null,
- })
-
- })
-}
-
-document.addEventListener("DOMContentLoaded", onLoad);
\ No newline at end of file
diff --git a/tools/script.js b/tools/script.js
deleted file mode 100644
index de9da9c..0000000
--- a/tools/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/tools/serve.js b/tools/serve.js
deleted file mode 100644
index 6cebfb9..0000000
--- a/tools/serve.js
+++ /dev/null
@@ -1,53 +0,0 @@
-const express = require("express");
-const path = require("path");
-const fs = require("node:fs");
-const app = express();
-
-app.use(express.json()); // parse json
-app.use(express.static(path.join(__dirname, "../"))); // serve from root
-
-function createPage(pagePath, pageName) {
-
- if (fs.existsSync(pagePath)) throw new Error(`File /${pagePath} already exists.`);
-
- // i hate async so we're only using sync
- let htmlTemplate = fs.readFileSync("tools/templates/index.html", "utf-8");
- htmlTemplate = htmlTemplate.replaceAll("{page_name}", pageName).replaceAll("{file_name}", pagePath);
-
- let jsTemplate = fs.readFileSync("tools/templates/script.js", "utf-8");
- jsTemplate = jsTemplate.replaceAll("{page_name}", pageName).replaceAll("{file_name}", pagePath);
-
-
- fs.mkdirSync(pagePath, { recursive: true}); // make the folder and any subfolders
- fs.writeFileSync(`${pagePath}/index.html`, htmlTemplate); // write the template to index.html
- fs.writeFileSync(`${pagePath}/script.js`, jsTemplate); // write the template to script.js
-
- return true;
-
-}
-
-app.post("/tools/create-page/", (req, res) => {
- console.log(`Received request to create ${req.body.pageName} at /${req.body.pagePath}`);
-
- try {
- createPage(req.body.pagePath, req.body.pageName);
- res.status(200).send({ok: true});
- res.end();
- console.log(`Successfully created ${req.body.pageName} at /${req.body.pagePath}`)
- } catch (err) {
- console.log(err.message);
- // return an error
- res.status(400).send({ ok: false, error: err.message });
- }
-
-});
-
-app.post("/tools/kill-server/", (req, res) => {
- console.log("Received request to kill server");
- process.exit(0);
-});
-
-
-app.listen(8000, () => {
- console.log("Serving on 8000");
-});
diff --git a/tools/templates/index.html b/tools/templates/index.html
deleted file mode 100644
index c983141..0000000
--- a/tools/templates/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {page_name}
-
-
-
- Your ancient browser doesn't support JavaScript. You can download a new one here .
-
- {page_name}
- Edit
- Share
- Download HTML
- Download JavaScript
-
-
- < luminousherbs
-
-
\ No newline at end of file
diff --git a/tools/templates/script.js b/tools/templates/script.js
deleted file mode 100644
index de9da9c..0000000
--- a/tools/templates/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