500&404 errors
This commit is contained in:
BIN
static/content/Irken-Like-AllCaps.woff
Normal file
BIN
static/content/Irken-Like-AllCaps.woff
Normal file
Binary file not shown.
BIN
static/content/background.png
Normal file
BIN
static/content/background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 743 KiB |
36
static/content/buttons.txt
Normal file
36
static/content/buttons.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
https://cyber.dabamos.de/88x31/88x31.gif
|
||||
https://cyber.dabamos.de/88x31/anythingbut.gif
|
||||
https://cyber.dabamos.de/88x31/bestdesktop.gif
|
||||
https://kopawz.neocities.org/buttonhoard/buttonsfldr2/diagnosedwithGAY.gif
|
||||
https://kopawz.neocities.org/indexgraphics/buttondecor/ilikecomputer.png
|
||||
https://identity-crisis.carrd.co/assets/images/gallery04/ad4f8d52.jpg?v=4e55d939
|
||||
https://anlucas.neocities.org/best_viewed_with_eyes.gif
|
||||
https://anlucas.neocities.org/html_learn_it_today.gif
|
||||
https://highway.eightyeightthirty.one/badge/5d58a8f32b007d4897db6f862a895a81674fb35f5cc3947fc66595817ca174db
|
||||
https://cyber.dabamos.de/88x31/keep.gif
|
||||
https://cyber.dabamos.de/88x31/js-warning.gif
|
||||
https://cyber.dabamos.de/88x31/linuxnow2.gif
|
||||
https://cyber.dabamos.de/88x31/nano2.gif
|
||||
https://cyber.dabamos.de/88x31/nocookie.gif
|
||||
https://cyber.dabamos.de/88x31/nofuckingthanks.gif
|
||||
https://cyber.dabamos.de/88x31/nyan.gif
|
||||
https://cyber.dabamos.de/88x31/pgp-now.gif
|
||||
https://cyber.dabamos.de/88x31/phonechump.gif
|
||||
https://cyber.dabamos.de/88x31/pinguonline.gif
|
||||
https://cyber.dabamos.de/88x31/piracy.gif
|
||||
https://cyber.dabamos.de/88x31/proxmox.gif
|
||||
https://cyber.dabamos.de/88x31/pride.gif
|
||||
https://cyber.dabamos.de/88x31/relax-now.gif
|
||||
https://cyber.dabamos.de/88x31/skirt.gif
|
||||
https://cyber.dabamos.de/88x31/steam.gif
|
||||
https://cyber.dabamos.de/88x31/svenbutton.gif
|
||||
https://cyber.dabamos.de/88x31/tfnow.gif
|
||||
https://cyber.dabamos.de/88x31/vscbutton.gif
|
||||
https://cyber.dabamos.de/88x31/reddit.gif
|
||||
https://cyber.dabamos.de/88x31/ralseismokingadart.gif
|
||||
https://cyber.dabamos.de/88x31/blender.gif
|
||||
https://cyber.dabamos.de/88x31/bob.gif
|
||||
https://cyber.dabamos.de/88x31/censor_14c.gif
|
||||
https://cyber.dabamos.de/88x31/chrmevil.gif
|
||||
https://cyber.dabamos.de/88x31/dark-mode.gif
|
||||
https://cyber.dabamos.de/88x31/firefox3.gif
|
BIN
static/content/haj.gif
Normal file
BIN
static/content/haj.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
BIN
static/content/icon.webp
Normal file
BIN
static/content/icon.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 49 KiB |
113
static/css/404.css
Normal file
113
static/css/404.css
Normal file
@@ -0,0 +1,113 @@
|
||||
canvas#snakeCanvas {
|
||||
margin: 15px;
|
||||
box-sizing: border-box;
|
||||
border: 2px solid var(--secondary-background-color);
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
form {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: min-content;
|
||||
gap: 1rem;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
form input[type="text"] {
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid var(--secondary-background-color);
|
||||
border-radius: 6px;
|
||||
background-color: var(--secondary-background-color-but-slightly-transparent);
|
||||
color: var(--text-color);
|
||||
}
|
||||
|
||||
form button[type="submit"] {
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
border: 1px solid var(--secondary-background-color);
|
||||
border-radius: 6px;
|
||||
background-color: var(--secondary-background-color-but-slightly-transparent);
|
||||
color: var(--text-color);
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.flex-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
.min-width {
|
||||
width: min-content;
|
||||
}
|
||||
|
||||
.max-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#snakeLeaderboardSection {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
padding: 0;
|
||||
max-height: 272px ;
|
||||
}
|
||||
|
||||
#snakeLeaderboard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 100%;
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
#snakeLeaderboard li {
|
||||
padding: 5px 20px;
|
||||
background-color: var(--secondary-background-color-but-slightly-transparent);
|
||||
color: var(--text-color);
|
||||
font-size: 1rem;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
#snakeLeaderboard li:nth-child(even) {
|
||||
background-color: var(--secondary-background-color);
|
||||
}
|
||||
|
||||
dialog {
|
||||
width: 90%;
|
||||
max-width: 500px;
|
||||
padding: 20px;
|
||||
background-color: var(--background-color);
|
||||
color: var(--text-color);
|
||||
border: 2px solid var(--secondary-background-color);
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
dialog button {
|
||||
padding: 10px;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
border: 2px solid var(--secondary-background-color);
|
||||
border-radius: 6px;
|
||||
background-color: var(--secondary-background-color-but-slightly-transparent);
|
||||
color: var(--text-color);
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
dialog h2 {
|
||||
margin: 0;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
dialog p {
|
||||
margin: 0;
|
||||
font-size: 1rem;
|
||||
}
|
8
static/css/500.css
Normal file
8
static/css/500.css
Normal file
@@ -0,0 +1,8 @@
|
||||
.bluescreen {
|
||||
background-color: #0077D6;
|
||||
color: #fff;
|
||||
padding:40px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
}
|
457
static/css/base.css
Normal file
457
static/css/base.css
Normal file
@@ -0,0 +1,457 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Fredoka:wdth,wght@125,700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap');
|
||||
@font-face {
|
||||
font-family:"Irken";
|
||||
src:url("/static/content/Irken-Like-AllCaps.woff") format("woff");
|
||||
font-weight:normal;
|
||||
font-style:normal;
|
||||
}
|
||||
|
||||
:root {
|
||||
--primary-color: #5cdd8b;
|
||||
--primary-color-but-slightly-transparent: #5cdd8b44;
|
||||
--text-color: #b1b8c0;
|
||||
--background-color: #020205;
|
||||
--secondary-background-color: #090914;
|
||||
--secondary-background-color-but-slightly-transparent: #09091444;
|
||||
--font-size: 0.5cm;
|
||||
--font-family: "Space Mono", "serif";
|
||||
--title-font: 'Roboto Mono', sans-serif;
|
||||
--irken-font: 'Irken';
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--background-color);
|
||||
background-image: url("https://blinkies.cafe/purple-stars-bg.gif");
|
||||
color: var(--text-color);
|
||||
font-size: var(--font-size);
|
||||
font-family: var(--font-family);
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
grid-template-rows: 1fr;
|
||||
grid-template-areas: "main sidebar";
|
||||
margin: 7% auto 7% auto;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
width: 940px;
|
||||
}
|
||||
|
||||
#sidebar {
|
||||
grid-area: sidebar;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
width: 174px;
|
||||
}
|
||||
|
||||
#sidebar section {
|
||||
backdrop-filter: blur(2px) brightness(0.6);
|
||||
border: var(--secondary-background-color) 2px solid;
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
#sidebar ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#sidebar ul li {
|
||||
width: fit-content;
|
||||
}
|
||||
|
||||
#sidebar ul li a {
|
||||
color: var(--text-color);
|
||||
text-decoration: none;
|
||||
font-weight: 100;
|
||||
transition: all 0.2s ease-in-out
|
||||
}
|
||||
|
||||
#sidebar ul li a:hover {
|
||||
color: var(--primary-color);
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
#sidebar ul li img {
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
#sidebar ul li img:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
#sidebar h1 {
|
||||
font-family: var(--title-font);
|
||||
font-size: 1.5rem;
|
||||
font-weight: 900;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#sidebar h6 {
|
||||
font-weight: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#buttons {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#buttons h1 {
|
||||
font-family: var(--title-font);
|
||||
font-size: 1.3rem;
|
||||
font-weight: 900;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-shadow: var(--text-color) 1px 0 10px;
|
||||
}
|
||||
|
||||
#buttons ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-top: 5px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.vsmoltext {
|
||||
font-size: 0.5rem;
|
||||
}
|
||||
|
||||
main {
|
||||
grid-area: main;
|
||||
width: 761px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
header {
|
||||
backdrop-filter: blur(2px) brightness(0.6);
|
||||
border: var(--secondary-background-color) 2px solid;
|
||||
border-radius: 10px;
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
header div.row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin: 0;
|
||||
gap: 1.5rem;
|
||||
}
|
||||
|
||||
header div.column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
header img {
|
||||
width: 9rem;
|
||||
height: 9rem;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-family: var(--title-font);
|
||||
font-size: 5rem;
|
||||
font-weight: 900;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
header h2 {
|
||||
font-family: var(--title-font);
|
||||
font-size: 1.75rem;
|
||||
font-weight: 100;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
top: -1rem;
|
||||
}
|
||||
|
||||
main section {
|
||||
backdrop-filter: blur(2px) brightness(0.6);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border: var(--secondary-background-color) 2px solid;
|
||||
border-radius: 10px;
|
||||
padding: 15px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
main section h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: 900;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
main section h2 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 900;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
main section h6 {
|
||||
font-size: 0.7rem;
|
||||
font-weight: 100;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
main section p {
|
||||
font-size: 1rem;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
main section a {
|
||||
color: var(--primary-color);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#furry {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
opacity: 0.1;
|
||||
background-image: url('/static/content/background.png');
|
||||
background-repeat: no-repeat;
|
||||
background-position: 50% 0;
|
||||
background-size: cover;
|
||||
z-index: -1;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.blinkies {
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.blinkies img {
|
||||
width: 150px;
|
||||
height: 20px;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.blinkies img:hover {
|
||||
transform: scale(1.1) rotate(5deg);
|
||||
}
|
||||
|
||||
.blinkies img:nth-child(odd):hover {
|
||||
transform: scale(1.1) rotate(-5deg);
|
||||
}
|
||||
|
||||
section.rowsect {
|
||||
width: 100%;
|
||||
display: grid;
|
||||
grid-template-columns: auto auto;
|
||||
gap: 1rem;
|
||||
backdrop-filter: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
section.rowsect>div {
|
||||
backdrop-filter: blur(2px) brightness(0.6);
|
||||
border: var(--secondary-background-color) 2px solid;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.stamps {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
padding: 10px;
|
||||
gap: 5px;
|
||||
justify-content: center;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.stamps img {
|
||||
width: 99px;
|
||||
height: 56px;
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.stamps img:hover {
|
||||
transform: scale(1.1) rotate(5deg);
|
||||
}
|
||||
|
||||
.stamps img:nth-child(odd):hover {
|
||||
transform: scale(1.1) rotate(-5deg);
|
||||
}
|
||||
|
||||
#spotify {
|
||||
background-image: none;
|
||||
backdrop-filter: blur(2px) brightness(0.6);
|
||||
border: var(--secondary-background-color) 2px solid;
|
||||
border-radius: 10px;
|
||||
padding: 15px;
|
||||
box-sizing: border-box;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
height: 300px;
|
||||
width: 300px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
#spotify-title {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 900;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
mix-blend-mode: difference;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#spotify-artist {
|
||||
color: white;
|
||||
font-size: 1rem;
|
||||
font-weight: 900;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
mix-blend-mode: difference;
|
||||
}
|
||||
|
||||
.haj {
|
||||
width: 100%;
|
||||
filter: drop-shadow(0 0 0.5rem rgb(88, 214, 245));
|
||||
}
|
||||
|
||||
.irken {
|
||||
font-family: var(--irken-font);
|
||||
}
|
||||
|
||||
#button-collection {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
#button-collection img {
|
||||
transition: all 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
#button-collection img:hover {
|
||||
transform: scale(1.1) rotate(5deg);
|
||||
}
|
||||
|
||||
#button-collection img:nth-child(odd):hover {
|
||||
transform: scale(1.1) rotate(-5deg);
|
||||
}
|
||||
|
||||
#alt-nav {
|
||||
display: none;
|
||||
backdrop-filter: blur(2px) brightness(0.6);
|
||||
width: 100%;
|
||||
border: var(--secondary-background-color) 2px solid;
|
||||
border-radius: 10px;
|
||||
padding: 15px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
#alt-nav ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: row;
|
||||
gap: 1.5rem;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#alt-nav ul li {
|
||||
width: fit-content;
|
||||
}
|
||||
#alt-nav ul li a {
|
||||
color: var(--text-color);
|
||||
text-decoration: none;
|
||||
font-weight: 100;
|
||||
transition: all 0.2s ease-in-out
|
||||
}
|
||||
|
||||
#alt-nav ul li a:hover {
|
||||
color: var(--primary-color);
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1000px) {
|
||||
body {
|
||||
background-color: var(--background-color);
|
||||
background-image: url("https://blinkies.cafe/purple-stars-bg.gif");
|
||||
color: var(--text-color);
|
||||
font-size: var(--font-size);
|
||||
font-family: var(--font-family);
|
||||
display: grid;
|
||||
grid-template-columns: auto;
|
||||
grid-template-rows: 1fr;
|
||||
grid-template-areas: "main";
|
||||
margin: 7% 0 7% 0;
|
||||
gap: 1rem;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#sidebar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#alt-nav {
|
||||
display: block;
|
||||
}
|
||||
|
||||
main {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 0 1rem 0 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 650px) {
|
||||
header img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
header div.row {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
section.rowsect {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 1rem;
|
||||
backdrop-filter: none;
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div#spotify {
|
||||
box-sizing: border-box;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
height: 100%;
|
||||
width: auto;
|
||||
aspect-ratio: 1/1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
21
static/css/cap.css
Normal file
21
static/css/cap.css
Normal file
@@ -0,0 +1,21 @@
|
||||
cap-widget {
|
||||
--cap-background: var(--secondary-background-color-but-slightly-transparent);
|
||||
--cap-border-color: var(--secondary-background-color);
|
||||
--cap-border-radius: 14px;
|
||||
--cap-widget-height: 30px;
|
||||
--cap-widget-width: 230px;
|
||||
--cap-widget-padding: 14px;
|
||||
--cap-gap: 15px;
|
||||
--cap-color: var(--text-color);
|
||||
--cap-checkbox-size: 25px;
|
||||
--cap-checkbox-border: 1px solid var(--secondary-background-color);
|
||||
--cap-checkbox-border-radius: 6px;
|
||||
--cap-checkbox-background: none;
|
||||
--cap-checkbox-margin: 2px;
|
||||
--cap-font: "Space Mono", "serif";
|
||||
--cap-spinner-color: var(--primary-color);
|
||||
--cap-spinner-background-color: var(--secondary-background-color-but-slightly-transparent);
|
||||
--cap-spinner-thickness: 5px;
|
||||
--cap-credits-font-size: 12px;
|
||||
--cap-opacity-hover: 0.8;
|
||||
}
|
BIN
static/favicon.ico
Normal file
BIN
static/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 240 KiB |
138
static/js/base.js
Normal file
138
static/js/base.js
Normal file
@@ -0,0 +1,138 @@
|
||||
const values = [
|
||||
"Web developer",
|
||||
"Pc games enjoyer",
|
||||
"Server backend survivor",
|
||||
"python programmer",
|
||||
"Javascript disliker",
|
||||
"I use Arch btw",
|
||||
"Owo, what's this?",
|
||||
"Ultimate procrastinator",
|
||||
"Ultrakill gaming",
|
||||
"00111010 00110011",
|
||||
"fistful of dollar",
|
||||
"Thy end is now!!!",
|
||||
"Possibly a furry",
|
||||
"Prepare thyself!!!",
|
||||
"Spegatti code master",
|
||||
"Ethernet cable untangler",
|
||||
"Caffeine addict",
|
||||
"I'm not a robot ☑",
|
||||
"Loud Music enjoyer",
|
||||
"part time femboy :<",
|
||||
];
|
||||
var direction = 1;
|
||||
var text = "";
|
||||
var speed = 100;
|
||||
var selectedValue = 0;
|
||||
var currentValueIndex = 0;
|
||||
var pause = false;
|
||||
|
||||
function randomValue() {
|
||||
selectedValue = Math.floor(Math.random() * values.length);
|
||||
currentValueIndex = 0;
|
||||
}
|
||||
|
||||
function type() {
|
||||
if (direction == 1) {
|
||||
if (currentValueIndex < values[selectedValue].length) {
|
||||
text += values[selectedValue][currentValueIndex];
|
||||
currentValueIndex++;
|
||||
} else {
|
||||
direction = -1;
|
||||
pause = true;
|
||||
}
|
||||
} else {
|
||||
if (currentValueIndex > 0) {
|
||||
text = text.slice(0, -1);
|
||||
currentValueIndex--;
|
||||
} else {
|
||||
direction = 1;
|
||||
randomValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function typing() {
|
||||
type();
|
||||
document.getElementById("typing").innerHTML = "$ " + text;
|
||||
if (direction == 1) {
|
||||
speed = 80 + Math.random() * 100;
|
||||
} else {
|
||||
speed = 60 + (Math.random() * 100) / 2;
|
||||
}
|
||||
if (!pause) {
|
||||
setTimeout(typing, speed);
|
||||
} else {
|
||||
setTimeout(typing, 500);
|
||||
pause = false;
|
||||
}
|
||||
}
|
||||
|
||||
typing();
|
||||
|
||||
// HIDDEN STUFF (shh don't tell anyone >:3)
|
||||
|
||||
var last5Chars = "";
|
||||
|
||||
document.addEventListener('keydown', function(event) {
|
||||
last5Chars += event.key;
|
||||
if (last5Chars == "furry") {
|
||||
console.log("owo, whats this?");
|
||||
document.getElementById('furry').style.display = 'block';
|
||||
}
|
||||
if (last5Chars == "irken") {
|
||||
console.log("doom doom doom!");
|
||||
document.querySelector(":root").style.setProperty('--font-family', 'Irken');
|
||||
document.querySelector(":root").style.setProperty('--title-font', '1.5em');
|
||||
}
|
||||
while (last5Chars.length >= 5) {
|
||||
last5Chars = last5Chars.slice(1);
|
||||
}
|
||||
});
|
||||
|
||||
// Spotify API
|
||||
|
||||
function getSpotify() {
|
||||
fetch('https://api.alfieking.dev/spotify/nowplaying/xz02oolstlvwxqu1pfcua9exz').then(response => {
|
||||
return response.json();
|
||||
}).then(data => {
|
||||
if (data.item == null) {
|
||||
document.getElementById('spotify').style.backgroundImage = "none";
|
||||
document.getElementById('spotify-title').innerHTML = "Spotify is not playing anything";
|
||||
document.getElementById('spotify-artist').innerHTML = ":(";
|
||||
document.getElementById('spotify-link').href = "https://open.spotify.com/";
|
||||
return;
|
||||
}
|
||||
document.getElementById('spotify').style.backgroundImage = "url(" + data.item.album.images[0].url + ")";
|
||||
document.getElementById('spotify-title').innerHTML = data.item.name;
|
||||
document.getElementById('spotify-artist').innerHTML = data.item.artists[0].name;
|
||||
document.getElementById('spotify-link').href = data.item.external_urls.spotify;
|
||||
});
|
||||
}
|
||||
|
||||
if (document.getElementById('spotify')) {
|
||||
getSpotify();
|
||||
setInterval(getSpotify, 15000);
|
||||
}
|
||||
|
||||
// load buttons
|
||||
|
||||
function loadButtons() {
|
||||
fetch('/static/content/buttons.txt').then(response => {
|
||||
return response.text();
|
||||
}).then(data => {
|
||||
container = document.getElementById('button-collection');
|
||||
for (let line of data.split('\n')) {
|
||||
if (line == "") {
|
||||
continue;
|
||||
}
|
||||
let img = document.createElement('img');
|
||||
img.src = line;
|
||||
container.appendChild(img);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (document.getElementById('button-collection')) {
|
||||
loadButtons();
|
||||
}
|
174
static/js/snake.js
Normal file
174
static/js/snake.js
Normal file
@@ -0,0 +1,174 @@
|
||||
const canvas = document.getElementById('snakeCanvas');
|
||||
const ctx = canvas.getContext('2d');
|
||||
|
||||
const gridSize = 20;
|
||||
const tileSize = 100;
|
||||
const snakeSize = 60;
|
||||
const foodSize = 80;
|
||||
canvas.width = gridSize * tileSize;
|
||||
canvas.height = gridSize * tileSize;
|
||||
|
||||
let snake = [{ x: 10, y: 10 }, { x: 10, y: 11 }, { x: 10, y: 12 }];
|
||||
let direction = { x: 0, y: 0 };
|
||||
let food = { x: Math.floor(Math.random() * gridSize), y: Math.floor(Math.random() * gridSize) };
|
||||
let score = 0;
|
||||
let gameOver = false;
|
||||
|
||||
function draw() {
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
// draw grid of checkerboard pattern
|
||||
for (let x = 0; x < gridSize; x++) {
|
||||
for (let y = 0; y < gridSize; y++) {
|
||||
ctx.fillStyle = (x + y) % 2 === 0 ?
|
||||
getComputedStyle(document.documentElement).getPropertyValue('--background-color') :
|
||||
getComputedStyle(document.documentElement).getPropertyValue('--secondary-background-color');
|
||||
ctx.fillRect(x * tileSize, y * tileSize, tileSize, tileSize);
|
||||
}
|
||||
}
|
||||
|
||||
// Draw snake
|
||||
snake.forEach(segment => {
|
||||
let nextVec = { x: 0, y: 0 };
|
||||
// if there is a segment after the current segment
|
||||
if (snake.indexOf(segment) < snake.length - 1) {
|
||||
const nextSegment = snake[snake.indexOf(segment) + 1];
|
||||
nextVec.x = nextSegment.x - segment.x;
|
||||
nextVec.y = nextSegment.y - segment.y;
|
||||
}
|
||||
|
||||
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--primary-color');
|
||||
if (nextVec.x === 0 && nextVec.y === 0) {
|
||||
ctx.fillRect(
|
||||
segment.x * tileSize + (tileSize - snakeSize) / 2,
|
||||
segment.y * tileSize + (tileSize - snakeSize) / 2,
|
||||
snakeSize,
|
||||
snakeSize
|
||||
);
|
||||
} else if (nextVec.x > 0 || nextVec.y > 0) {
|
||||
ctx.fillRect(
|
||||
segment.x * tileSize + (tileSize - snakeSize) / 2,
|
||||
segment.y * tileSize + (tileSize - snakeSize) / 2,
|
||||
snakeSize + nextVec.x * (tileSize - snakeSize),
|
||||
snakeSize + nextVec.y * (tileSize - snakeSize)
|
||||
);
|
||||
} else {
|
||||
ctx.fillRect(
|
||||
segment.x * tileSize + (tileSize - snakeSize) / 2 + nextVec.x * (tileSize - snakeSize),
|
||||
segment.y * tileSize + (tileSize - snakeSize) / 2 + nextVec.y * (tileSize - snakeSize),
|
||||
snakeSize + Math.abs(nextVec.x) * (tileSize - snakeSize),
|
||||
snakeSize + Math.abs(nextVec.y) * (tileSize - snakeSize)
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Draw food
|
||||
ctx.fillStyle = '#ff4d4d';
|
||||
ctx.fillRect(
|
||||
food.x * tileSize + (tileSize - foodSize) / 2,
|
||||
food.y * tileSize + (tileSize - foodSize) / 2,
|
||||
foodSize,
|
||||
foodSize
|
||||
);
|
||||
}
|
||||
|
||||
function update() {
|
||||
if (gameOver) return;
|
||||
|
||||
// Move snake
|
||||
const head = { x: snake[0].x + direction.x, y: snake[0].y + direction.y };
|
||||
|
||||
// Add new head
|
||||
snake.unshift(head);
|
||||
|
||||
// Check for food collision
|
||||
if (head.x === food.x && head.y === food.y) {
|
||||
score += 10; // Increase score
|
||||
placeFood();
|
||||
} else {
|
||||
snake.pop(); // Remove tail if no food eaten
|
||||
}
|
||||
|
||||
// Check for wall collision
|
||||
if (head.x < 0 || head.x >= gridSize || head.y < 0 || head.y >= gridSize) {
|
||||
gameOver = true;
|
||||
return;
|
||||
}
|
||||
|
||||
// Check for self collision
|
||||
for (let i = 1; i < snake.length; i++) {
|
||||
if (head.x === snake[i].x && head.y === snake[i].y) {
|
||||
gameOver = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function placeFood() {
|
||||
do {
|
||||
food.x = Math.floor(Math.random() * gridSize);
|
||||
food.y = Math.floor(Math.random() * gridSize);
|
||||
} while (snake.some(segment => segment.x === food.x && segment.y === food.y));
|
||||
}
|
||||
|
||||
function changeDirection(event) {
|
||||
switch (event.key) {
|
||||
case 'w':
|
||||
if (direction.y === 0) direction = { x: 0, y: -1 };
|
||||
break;
|
||||
case 's':
|
||||
if (direction.y === 0) direction = { x: 0, y: 1 };
|
||||
break;
|
||||
case 'a':
|
||||
if (direction.x === 0) direction = { x: -1, y: 0 };
|
||||
break;
|
||||
case 'd':
|
||||
if (direction.x === 0) direction = { x: 1, y: 0 };
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Menu to start the game
|
||||
function menu() {
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
|
||||
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
||||
|
||||
ctx.textAlign = 'center';
|
||||
ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--text-color');
|
||||
ctx.font = '200px Arial';
|
||||
ctx.fillText('Snake Game', canvas.width / 2, canvas.height / 2);
|
||||
ctx.font = '100px Arial';
|
||||
ctx.fillText('Press W/A/S/D to move', canvas.width / 2, canvas.height / 2 + 100);
|
||||
ctx.fillText('Click to start', canvas.width / 2, canvas.height / 2 + 200);
|
||||
|
||||
canvas.addEventListener('click', startGame);
|
||||
}
|
||||
|
||||
function gameLoop() {
|
||||
if (!gameOver) {
|
||||
update();
|
||||
draw();
|
||||
setTimeout(gameLoop, 100);
|
||||
} else {
|
||||
document.removeEventListener('keydown', changeDirection);
|
||||
document.getElementById('snake-score').value = score;
|
||||
alert(`Game Over! Your score: ${score}`);
|
||||
menu();
|
||||
}
|
||||
}
|
||||
|
||||
function startGame() {
|
||||
snake = [{ x: 10, y: 10 }, { x: 10, y: 11 }, { x: 10, y: 12 }];
|
||||
direction = { x: 1, y: 0 };
|
||||
food = { x: Math.floor(Math.random() * gridSize), y: Math.floor(Math.random() * gridSize) };
|
||||
score = 0;
|
||||
gameOver = false;
|
||||
canvas.removeEventListener('click', startGame);
|
||||
document.addEventListener('keydown', changeDirection);
|
||||
gameLoop();
|
||||
}
|
||||
|
||||
menu();
|
7
static/robots.txt
Normal file
7
static/robots.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /404.html
|
||||
|
||||
Sitemap: https://alfieking.dev/sitemap.xml
|
||||
|
||||
# hewwo :3
|
6
static/sitemap.xml
Normal file
6
static/sitemap.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://www.example.com/index.html</loc>
|
||||
</url>
|
||||
</urlset>
|
Reference in New Issue
Block a user