Compare commits
16 commits
6faefbd27d
...
4dc6f95e84
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4dc6f95e84 | ||
|
|
4d7c437b25 | ||
|
|
8e249599c9 | ||
|
|
83a18f250d | ||
|
|
397ed05b87 | ||
|
|
3051036e17 | ||
|
|
59f1d1a4d7 | ||
|
|
2310ba837a | ||
|
|
add75dced1 | ||
|
|
e6d9d4c9a0 | ||
|
|
190117d9ef | ||
| 031f84cc60 | |||
| 87092fcdfb | |||
|
|
7ce8c32639 | ||
| 3840775ac7 | |||
|
|
e16d92171d |
12 changed files with 674 additions and 496 deletions
10
README.md
10
README.md
|
|
@ -4,8 +4,6 @@
|
|||
$ npm install # or pnpm install or yarn install
|
||||
```
|
||||
|
||||
### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs)
|
||||
|
||||
## Available Scripts
|
||||
|
||||
In the project directory, you can run:
|
||||
|
|
@ -18,11 +16,5 @@ Open [http://localhost:5173](http://localhost:5173) to view it in the browser.
|
|||
### `npm run build`
|
||||
|
||||
Builds the app for production to the `dist` folder.<br>
|
||||
It correctly bundles Solid in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.<br>
|
||||
Your app is ready to be deployed!
|
||||
|
||||
## Deployment
|
||||
|
||||
Learn more about deploying your application with the [documentations](https://vitejs.dev/guide/static-deploy.html)
|
||||
Your app is ready to be deployed!
|
||||
|
|
@ -10,7 +10,9 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@types/node": "^20.14.10",
|
||||
"solid-js": "^1.8.17"
|
||||
"@types/three": "^0.176.0",
|
||||
"solid-js": "^1.8.17",
|
||||
"three": "^0.176.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.2.2",
|
||||
|
|
|
|||
59
pnpm-lock.yaml
generated
59
pnpm-lock.yaml
generated
|
|
@ -11,9 +11,15 @@ importers:
|
|||
'@types/node':
|
||||
specifier: ^20.14.10
|
||||
version: 20.14.10
|
||||
'@types/three':
|
||||
specifier: ^0.176.0
|
||||
version: 0.176.0
|
||||
solid-js:
|
||||
specifier: ^1.8.17
|
||||
version: 1.8.17
|
||||
three:
|
||||
specifier: ^0.176.0
|
||||
version: 0.176.0
|
||||
devDependencies:
|
||||
typescript:
|
||||
specifier: ^5.2.2
|
||||
|
|
@ -132,6 +138,9 @@ packages:
|
|||
resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
|
||||
'@dimforge/rapier3d-compat@0.12.0':
|
||||
resolution: {integrity: sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==}
|
||||
|
||||
'@esbuild/aix-ppc64@0.21.5':
|
||||
resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
|
@ -368,6 +377,9 @@ packages:
|
|||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@tweenjs/tween.js@23.1.3':
|
||||
resolution: {integrity: sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==}
|
||||
|
||||
'@types/babel__core@7.20.5':
|
||||
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
|
||||
|
||||
|
|
@ -386,6 +398,18 @@ packages:
|
|||
'@types/node@20.14.10':
|
||||
resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==}
|
||||
|
||||
'@types/stats.js@0.17.4':
|
||||
resolution: {integrity: sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==}
|
||||
|
||||
'@types/three@0.176.0':
|
||||
resolution: {integrity: sha512-FwfPXxCqOtP7EdYMagCFePNKoG1AGBDUEVKtluv2BTVRpSt7b+X27xNsirPCTCqY1pGYsPUzaM3jgWP7dXSxlw==}
|
||||
|
||||
'@types/webxr@0.5.22':
|
||||
resolution: {integrity: sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==}
|
||||
|
||||
'@webgpu/types@0.1.60':
|
||||
resolution: {integrity: sha512-8B/tdfRFKdrnejqmvq95ogp8tf52oZ51p3f4QD5m5Paey/qlX4Rhhy5Y8tgFMi7Ms70HzcMMw3EQjH/jdhTwlA==}
|
||||
|
||||
ansi-styles@3.2.1:
|
||||
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
|
||||
engines: {node: '>=4'}
|
||||
|
|
@ -449,6 +473,9 @@ packages:
|
|||
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
|
||||
engines: {node: '>=0.8.0'}
|
||||
|
||||
fflate@0.8.2:
|
||||
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
|
||||
|
||||
fsevents@2.3.3:
|
||||
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
||||
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
||||
|
|
@ -493,6 +520,9 @@ packages:
|
|||
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
|
||||
engines: {node: '>=12.13'}
|
||||
|
||||
meshoptimizer@0.18.1:
|
||||
resolution: {integrity: sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==}
|
||||
|
||||
ms@2.1.2:
|
||||
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
|
||||
|
||||
|
|
@ -546,6 +576,9 @@ packages:
|
|||
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
|
||||
engines: {node: '>=4'}
|
||||
|
||||
three@0.176.0:
|
||||
resolution: {integrity: sha512-PWRKYWQo23ojf9oZSlRGH8K09q7nRSWx6LY/HF/UUrMdYgN9i1e2OwJYHoQjwc6HF/4lvvYLC5YC1X8UJL2ZpA==}
|
||||
|
||||
to-fast-properties@2.0.0:
|
||||
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
|
||||
engines: {node: '>=4'}
|
||||
|
|
@ -767,6 +800,8 @@ snapshots:
|
|||
'@babel/helper-validator-identifier': 7.24.7
|
||||
to-fast-properties: 2.0.0
|
||||
|
||||
'@dimforge/rapier3d-compat@0.12.0': {}
|
||||
|
||||
'@esbuild/aix-ppc64@0.21.5':
|
||||
optional: true
|
||||
|
||||
|
|
@ -901,6 +936,8 @@ snapshots:
|
|||
'@rollup/rollup-win32-x64-msvc@4.18.0':
|
||||
optional: true
|
||||
|
||||
'@tweenjs/tween.js@23.1.3': {}
|
||||
|
||||
'@types/babel__core@7.20.5':
|
||||
dependencies:
|
||||
'@babel/parser': 7.24.7
|
||||
|
|
@ -928,6 +965,22 @@ snapshots:
|
|||
dependencies:
|
||||
undici-types: 5.26.5
|
||||
|
||||
'@types/stats.js@0.17.4': {}
|
||||
|
||||
'@types/three@0.176.0':
|
||||
dependencies:
|
||||
'@dimforge/rapier3d-compat': 0.12.0
|
||||
'@tweenjs/tween.js': 23.1.3
|
||||
'@types/stats.js': 0.17.4
|
||||
'@types/webxr': 0.5.22
|
||||
'@webgpu/types': 0.1.60
|
||||
fflate: 0.8.2
|
||||
meshoptimizer: 0.18.1
|
||||
|
||||
'@types/webxr@0.5.22': {}
|
||||
|
||||
'@webgpu/types@0.1.60': {}
|
||||
|
||||
ansi-styles@3.2.1:
|
||||
dependencies:
|
||||
color-convert: 1.9.3
|
||||
|
|
@ -1007,6 +1060,8 @@ snapshots:
|
|||
|
||||
escape-string-regexp@1.0.5: {}
|
||||
|
||||
fflate@0.8.2: {}
|
||||
|
||||
fsevents@2.3.3:
|
||||
optional: true
|
||||
|
||||
|
|
@ -1034,6 +1089,8 @@ snapshots:
|
|||
dependencies:
|
||||
is-what: 4.1.16
|
||||
|
||||
meshoptimizer@0.18.1: {}
|
||||
|
||||
ms@2.1.2: {}
|
||||
|
||||
nanoid@3.3.7: {}
|
||||
|
|
@ -1099,6 +1156,8 @@ snapshots:
|
|||
dependencies:
|
||||
has-flag: 3.0.0
|
||||
|
||||
three@0.176.0: {}
|
||||
|
||||
to-fast-properties@2.0.0: {}
|
||||
|
||||
typescript@5.5.2: {}
|
||||
|
|
|
|||
|
|
@ -3,22 +3,28 @@ import "./reviewed.css";
|
|||
import { sendReview } from "../src/components/api";
|
||||
|
||||
export default function App() {
|
||||
const token = window.location.hash
|
||||
.substring(
|
||||
window.location.hash.indexOf("access_token") + "access_token".length + 1,
|
||||
)
|
||||
.substring(0, 30);
|
||||
console.log(token);
|
||||
if (token === "") {
|
||||
const hash = window.location.hash;
|
||||
|
||||
const hashContent = hash.startsWith('#') ? hash.substring(1) : hash;
|
||||
|
||||
const params = new URLSearchParams(hashContent);
|
||||
|
||||
const token = params.get('access_token')!;
|
||||
|
||||
if (token) {
|
||||
console.log("Access Token:", token);
|
||||
// Do something with your token
|
||||
} else {
|
||||
console.log("Access Token not found in hash.");
|
||||
window.location.href =
|
||||
"https://discord.com/oauth2/authorize?client_id=1208380910525743134&response_type=token&redirect_uri=https%3A%2F%2Famy.rip%2Freview%2F&scope=identify";
|
||||
"https://discord.com/oauth2/authorize?client_id=1208380910525743134&response_type=token&redirect_uri=https%3A%2F%2Famy.rip%2Freview%2F&scope=identify";
|
||||
}
|
||||
console.log(token);
|
||||
let ref!: HTMLTextAreaElement;
|
||||
return (
|
||||
<div class="reviewOuterparent">
|
||||
<div class="reviewParent">
|
||||
<img src="../fjonkie.png" alt="" />
|
||||
<span>(it doesnt)</span>
|
||||
<p>DISCLAIMER: YOUR DISCORD ID WILL BE ATTACHED TO THE REVIEW IN THE SOURCE CODE.</p>
|
||||
<textarea
|
||||
ref={ref}
|
||||
onKeyPress={async (e) => {
|
||||
|
|
|
|||
|
|
@ -3,12 +3,12 @@
|
|||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="https://proxy.spiro.exhq.dev/_/plain/https://dp.nea.moe/avatar/712639419785412668.png" />
|
||||
<link rel="icon" type="image/svg+xml" href="https://dp.nea.moe/avatar/712639419785412668.png" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>amy reviews</title>
|
||||
<meta content="review" property="og:title" />
|
||||
<meta content="rewviewdb, but not turkish" property="og:description" />
|
||||
<meta content="https://proxy.spiro.exhq.dev/_/plain/https://dp.nea.moe/avatar/712639419785412668.png" property="og:image" />
|
||||
<meta content="https://proxy.spiro.amy.rip/_/plain/https://dp.nea.moe/avatar/712639419785412668.png" property="og:image" />
|
||||
<meta content="#43B581" data-react-helmet="true" name="theme-color" />
|
||||
</head>
|
||||
|
||||
|
|
|
|||
61
src/App.css
61
src/App.css
|
|
@ -14,11 +14,11 @@
|
|||
/* browsers agreeing on stuff challenge (impossible) */
|
||||
background-color: #121212;
|
||||
overflow-x: hidden;
|
||||
color: #ffc8dd;
|
||||
color: lavender;
|
||||
}
|
||||
|
||||
.footer a {
|
||||
color: #cdb4db;
|
||||
color: thistle;
|
||||
}
|
||||
|
||||
.footer {
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
.musicbutton {
|
||||
background-color: #272525;
|
||||
color: pink;
|
||||
color: lavender;
|
||||
font-family: Roboto, sans-serif;
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
|
|
@ -54,6 +54,30 @@
|
|||
margin: 1em;
|
||||
}
|
||||
|
||||
.fakemusicbutton {
|
||||
background-color: #272525;
|
||||
color: lavender;
|
||||
font-family: Roboto, sans-serif;
|
||||
font-weight: 500;
|
||||
font-size: 14px;
|
||||
padding: 10px 30px;
|
||||
box-shadow: none;
|
||||
border-radius: 5px;
|
||||
transition: 100ms;
|
||||
transform: translateY(0);
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
border: none;
|
||||
margin: 1em;
|
||||
}
|
||||
|
||||
.fakemusicbutton:hover {
|
||||
background-color: transparent;
|
||||
color: transparent;
|
||||
}
|
||||
|
||||
.musicdiv {
|
||||
background-color: rgba(0, 0, 0, 0.731);
|
||||
position: fixed;
|
||||
|
|
@ -125,6 +149,14 @@
|
|||
height: 18em;
|
||||
}
|
||||
|
||||
.reviewsection {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 0.1em;
|
||||
/* overflow: hidden; */
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.cardchild:hover + .actualreviewdiv {
|
||||
transition: 1s;
|
||||
transform: rotateY(100);
|
||||
|
|
@ -142,23 +174,23 @@
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
.reviewheadertext {
|
||||
margin-bottom: -0.2em;
|
||||
}
|
||||
|
||||
.cardchild p {
|
||||
margin-bottom: -1.5em;
|
||||
margin: 0;
|
||||
padding: 0.1em;
|
||||
}
|
||||
|
||||
.cardchild a {
|
||||
font-size: 1.5em;
|
||||
text-align: center;
|
||||
color: pink;
|
||||
color: thistle;
|
||||
text-decoration: underline;
|
||||
margin-bottom: 0%;
|
||||
.fadein {
|
||||
animation: spawntop 1s;
|
||||
}
|
||||
transition: opacity 1s ease;
|
||||
}
|
||||
|
||||
.cardchild span {
|
||||
|
|
@ -313,7 +345,7 @@
|
|||
|
||||
.header h1 {
|
||||
font-size: 3.6em;
|
||||
color: blanchedalmond;
|
||||
color: lavender;
|
||||
display: inline-table;
|
||||
}
|
||||
|
||||
|
|
@ -386,17 +418,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
@keyframes spawntop {
|
||||
0% {
|
||||
opacity: 0%;
|
||||
transform: translateY(1em);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 100%;
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes shake {
|
||||
0% {
|
||||
|
|
|
|||
637
src/App.tsx
637
src/App.tsx
|
|
@ -1,10 +1,11 @@
|
|||
// src/App.tsx
|
||||
import "./App.css";
|
||||
import { AdvancedBr, Singular88, SingularOomfie } from "./components/comps.tsx";
|
||||
import { createSignal, onMount } from "solid-js";
|
||||
import {AdvancedBr, Singular88, SingularOomfie} from "./components/comps.tsx";
|
||||
import {createSignal, onMount} from "solid-js";
|
||||
import Reviews from "./components/api.tsx";
|
||||
import { Music, MusicEntry, Song } from "./components/music.tsx";
|
||||
import { Bdpfp, Normalpfp } from "./components/pfp.tsx";
|
||||
import { InfoCard } from "./components/middlecard.tsx";
|
||||
import {Music, MusicEntry, Song} from "./components/music.tsx";
|
||||
import {Bdpfp, Normalpfp} from "./components/pfp.tsx";
|
||||
import {InfoCard} from "./components/middlecard.tsx";
|
||||
|
||||
export const [shouldpopup, setpopup] = createSignal(false);
|
||||
export const [shouldpopup88, setpopup88] = createSignal(false);
|
||||
|
|
@ -15,338 +16,346 @@ let explodcount = 0;
|
|||
const isitmybd = () => new Date().toISOString().slice(5, 10) === "08-22";
|
||||
|
||||
function getRandomVivsieWord() {
|
||||
const words = ["fuck", "shit", "pussy", "penis", "dick"];
|
||||
return words[Math.floor(Math.random() * words.length)];
|
||||
const words = ["fuck", "shit", "pussy", "penis", "dick"];
|
||||
return words[Math.floor(Math.random() * words.length)];
|
||||
}
|
||||
|
||||
function vivsiepop() {
|
||||
const blep = document.body.childNodes;
|
||||
const blep = document.body.childNodes;
|
||||
|
||||
function fuckshit(node: ChildNode) {
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
node.textContent = getRandomVivsieWord();
|
||||
} else {
|
||||
node.childNodes.forEach(fuckshit);
|
||||
function fuckshit(node: ChildNode) {
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
node.textContent = getRandomVivsieWord();
|
||||
} else {
|
||||
node.childNodes.forEach(fuckshit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
blep.forEach(fuckshit);
|
||||
blep.forEach(fuckshit);
|
||||
}
|
||||
|
||||
function nyaboom() {
|
||||
explodcount++;
|
||||
const blep = document.body.childNodes;
|
||||
explodcount++;
|
||||
const blep = document.body.childNodes;
|
||||
|
||||
function fuckshit(node: ChildNode) {
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
(node as Element).textContent = "";
|
||||
node.parentElement?.appendChild(
|
||||
(
|
||||
<img
|
||||
style={{
|
||||
width: "1.5em",
|
||||
}}
|
||||
src="./explod.gif"
|
||||
/>
|
||||
) as Element,
|
||||
);
|
||||
} else if (node instanceof HTMLImageElement) {
|
||||
node.src = "./explod.gif";
|
||||
} else {
|
||||
node.childNodes.forEach(fuckshit);
|
||||
function fuckshit(node: ChildNode) {
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
(node as Element).textContent = "";
|
||||
node.parentElement?.appendChild(
|
||||
(
|
||||
<img
|
||||
style={{
|
||||
width: "1.5em",
|
||||
}}
|
||||
src="./explod.gif"
|
||||
/>
|
||||
) as Element,
|
||||
);
|
||||
} else if (node instanceof HTMLImageElement) {
|
||||
node.src = "./explod.gif";
|
||||
} else {
|
||||
node.childNodes.forEach(fuckshit);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
blep.forEach(fuckshit);
|
||||
blep.forEach(fuckshit);
|
||||
}
|
||||
|
||||
function App() {
|
||||
const [musicList, setMusicList] = createSignal<Song[]>([]);
|
||||
const [isLoading, setIsLoading] = createSignal(true);
|
||||
const [oomfies, setoomfies] = createSignal(<>oomfies</>);
|
||||
const [isAnimating, setIsAnimating] = createSignal(false);
|
||||
onMount(async () => {
|
||||
try {
|
||||
const response = await fetch(
|
||||
"https://bopbot.amy.rip/",
|
||||
);
|
||||
const data = await response.json() as Song[];
|
||||
data.reverse();
|
||||
setMusicList(data);
|
||||
} catch (error) {
|
||||
console.error("Error fetching music data:", error);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
});
|
||||
let gitgay = (
|
||||
<img
|
||||
onClick={() => {
|
||||
setIsAnimating(true);
|
||||
setTimeout(() => {
|
||||
window.location.href = "https://git.lgbt/exhq";
|
||||
}, 200);
|
||||
gitgay.src = "/gaybackground.png";
|
||||
}}
|
||||
classList={{
|
||||
gitgayimg: true,
|
||||
animate: isAnimating(),
|
||||
gaybackground: isAnimating(),
|
||||
}}
|
||||
src="https://proxy.spiro.exhq.dev/_/plain/https://git.lgbt/assets/img/logo.png"
|
||||
alt="logo of git.lgbt"
|
||||
/>
|
||||
) as HTMLImageElement;
|
||||
// @ts-ignore
|
||||
return (
|
||||
<>
|
||||
{isitmybd() ? (
|
||||
<Bdpfp setpopupEasterEgg={setpopupEasterEgg} />
|
||||
) : (
|
||||
<Normalpfp setpopupEasterEgg={setpopupEasterEgg} />
|
||||
)}
|
||||
|
||||
<p style={{ display: "none" }}>AdvancedBr my beloved</p>
|
||||
<AdvancedBr count={6} />
|
||||
|
||||
<div class="parent">
|
||||
<div class="cardchild">
|
||||
<h1>link tree</h1>
|
||||
<div class="linktree">{gitgay}</div>
|
||||
<br />
|
||||
<div class="linktree">
|
||||
<span class="gitgaytext">Git</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
style={{
|
||||
opacity: isAnimating() ? "0%" : "100%",
|
||||
}}
|
||||
class="cardchild"
|
||||
>
|
||||
<InfoCard bd={isitmybd()} />
|
||||
</div>
|
||||
<div
|
||||
onMouseEnter={() => {
|
||||
setishover(true);
|
||||
}}
|
||||
onmouseleave={() => {
|
||||
setishover(false);
|
||||
}}
|
||||
style={{
|
||||
opacity: isAnimating() ? "0%" : "100%",
|
||||
}}
|
||||
class="cardchild"
|
||||
>
|
||||
<Reviews />
|
||||
</div>
|
||||
</div>
|
||||
<AdvancedBr count={2} />
|
||||
<div class="easteregg" style={{ opacity: isAnimating() ? "0%" : "100%" }}>
|
||||
<div
|
||||
class="musicbutton"
|
||||
onClick={() => {
|
||||
setpopup(!shouldpopup());
|
||||
}}
|
||||
>
|
||||
<p>typa shit ive been on</p>
|
||||
<img
|
||||
style={{
|
||||
"margin-left": "0.3em",
|
||||
"max-width": "1.5em",
|
||||
}}
|
||||
src="./fireemoji.png"
|
||||
/>
|
||||
</div>
|
||||
<div class="musicbutton">
|
||||
<div
|
||||
class="oomfies"
|
||||
const [musicList, setMusicList] = createSignal<Song[]>([]);
|
||||
const [isLoading, setIsLoading] = createSignal(true);
|
||||
const [oomfies, setoomfies] = createSignal(<>oomfies</>);
|
||||
const [isAnimating, setIsAnimating] = createSignal(false);
|
||||
onMount(async () => {
|
||||
try {
|
||||
const response = await fetch(
|
||||
"https://bopbot.amy.rip/",
|
||||
);
|
||||
const data = await response.json() as Song[];
|
||||
data.reverse();
|
||||
setMusicList(data);
|
||||
} catch (error) {
|
||||
console.error("Error fetching music data:", error);
|
||||
} finally {
|
||||
setIsLoading(false);
|
||||
}
|
||||
});
|
||||
let gitgay = (
|
||||
<img
|
||||
onClick={() => {
|
||||
setoomfies(
|
||||
<>
|
||||
<SingularOomfie
|
||||
name="ashley"
|
||||
discordid="836177139798638592"
|
||||
url="https://ashleygraves.eu/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="nea"
|
||||
discordid="310702108997320705"
|
||||
url="https://nea.moe"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="vozy"
|
||||
discordid="359175647257690113"
|
||||
url="https://vozy.exhq.dev"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="hazel"
|
||||
discordid="435026627907420161"
|
||||
url="https://yellows.ink/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="nax"
|
||||
discordid="148801388938264576"
|
||||
url="https://nax.dev/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="squirrelly"
|
||||
discordid="218032723296649217"
|
||||
url="https://squirrelly13.neocities.org/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="gen"
|
||||
discordid="217892728875253760"
|
||||
url="https://genshibe.ca/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="ushie"
|
||||
discordid="399862294143696897"
|
||||
url="https://ushie.dev/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="mugman"
|
||||
discordid="601836455006044163"
|
||||
url="https://mugman.tech"
|
||||
></SingularOomfie>
|
||||
</>,
|
||||
);
|
||||
setIsAnimating(true);
|
||||
setTimeout(() => {
|
||||
window.location.href = "https://git.amy.rip/amy";
|
||||
}, 200);
|
||||
gitgay.src = "/gaybackground.png";
|
||||
}}
|
||||
>
|
||||
{" "}
|
||||
{oomfies()}
|
||||
</div>
|
||||
</div>
|
||||
<div class="musicbutton" onClick={vivsiepop}>
|
||||
<p>amy if it was written by vivsiepop</p>
|
||||
</div>
|
||||
<div
|
||||
class="musicbutton"
|
||||
onClick={() => {
|
||||
setpopup88(true);
|
||||
}}
|
||||
>
|
||||
<p>88x31's</p>
|
||||
</div>
|
||||
<div
|
||||
class="musicbutton"
|
||||
onClick={() => {
|
||||
if (explodcount > 5) {
|
||||
document.body.innerHTML = "";
|
||||
setTimeout(() => {
|
||||
alert(
|
||||
"sorry bud, you exploded so much that my document.body is gon",
|
||||
);
|
||||
}, 500);
|
||||
} else {
|
||||
new Audio("./explod.mp3").play();
|
||||
nyaboom();
|
||||
}
|
||||
}}
|
||||
>
|
||||
<img
|
||||
style={{
|
||||
"margin-left": "0.3em",
|
||||
"max-width": "1.5em",
|
||||
classList={{
|
||||
gitgayimg: true,
|
||||
animate: isAnimating(),
|
||||
gaybackground: isAnimating(),
|
||||
}}
|
||||
src="./nyaboom.webp"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<AdvancedBr count={3} />
|
||||
<Music shouldpopup={shouldpopup}>
|
||||
<div class="musicdiv">
|
||||
<div class="innermusic">
|
||||
<div class="music-close-button-div">
|
||||
<button
|
||||
class="close-button"
|
||||
onClick={() => {
|
||||
setpopup(false);
|
||||
}}
|
||||
>
|
||||
X
|
||||
</button>
|
||||
src="https://git.amy.rip/assets/img/logo.png"
|
||||
alt="logo of git.amy.rip"
|
||||
/>
|
||||
) as HTMLImageElement;
|
||||
// @ts-ignore
|
||||
return (
|
||||
<>
|
||||
{isitmybd() ? (
|
||||
<Bdpfp setpopupEasterEgg={setpopupEasterEgg}/>
|
||||
) : (
|
||||
<Normalpfp setpopupEasterEgg={setpopupEasterEgg}/>
|
||||
)}
|
||||
|
||||
<p style={{display: "none"}}>AdvancedBr my beloved</p>
|
||||
<AdvancedBr count={6}/>
|
||||
|
||||
<div class="parent">
|
||||
<div class="cardchild">
|
||||
<h1>link tree</h1>
|
||||
<div class="linktree">{gitgay}</div>
|
||||
<br/>
|
||||
<div class="linktree">
|
||||
<span class="gitgaytext">Git</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
style={{
|
||||
opacity: isAnimating() ? "0%" : "100%",
|
||||
}}
|
||||
class="cardchild"
|
||||
>
|
||||
<InfoCard bd={isitmybd()}/>
|
||||
</div>
|
||||
<div
|
||||
onMouseEnter={() => {
|
||||
setishover(true);
|
||||
}}
|
||||
onmouseleave={() => {
|
||||
setishover(false);
|
||||
}}
|
||||
style={{
|
||||
opacity: isAnimating() ? "0%" : "100%",
|
||||
}}
|
||||
class="cardchild"
|
||||
>
|
||||
<Reviews/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="musiclist">
|
||||
{isLoading() ? (
|
||||
<p>Loading...</p>
|
||||
) : (
|
||||
musicList().map((link) => <MusicEntry musicInfo={link} />)
|
||||
)}
|
||||
<AdvancedBr count={2}/>
|
||||
<div class="easteregg" style={{opacity: isAnimating() ? "0%" : "100%"}}>
|
||||
<div
|
||||
class="musicbutton"
|
||||
onClick={() => {
|
||||
setpopup(!shouldpopup());
|
||||
}}
|
||||
>
|
||||
<p>typa shit ive been on</p>
|
||||
<img
|
||||
style={{
|
||||
"margin-left": "0.3em",
|
||||
"max-width": "1.5em",
|
||||
}}
|
||||
src="./fireemoji.png"
|
||||
/>
|
||||
</div>
|
||||
<div class="fakemusicbutton">
|
||||
<p>:3</p>
|
||||
</div>
|
||||
<div class="musicbutton">
|
||||
<div
|
||||
class="oomfies"
|
||||
onClick={() => {
|
||||
setoomfies(
|
||||
<>
|
||||
<SingularOomfie
|
||||
name="ashley"
|
||||
discordid="836177139798638592"
|
||||
url="https://ashleygraves.eu/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="nea"
|
||||
discordid="310702108997320705"
|
||||
url="https://nea.moe"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="vozy"
|
||||
discordid="359175647257690113"
|
||||
url="https://vozy.amy.rip"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="hazel"
|
||||
discordid="435026627907420161"
|
||||
url="https://yellows.ink/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="nax"
|
||||
discordid="148801388938264576"
|
||||
url="https://nax.dev/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="squirrelly"
|
||||
discordid="218032723296649217"
|
||||
url="https://squirrelly13.neocities.org/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="gen"
|
||||
discordid="217892728875253760"
|
||||
url="https://genshibe.ca/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="ushie"
|
||||
discordid="399862294143696897"
|
||||
url="https://ushie.dev/"
|
||||
></SingularOomfie>
|
||||
<SingularOomfie
|
||||
name="mugman"
|
||||
discordid="601836455006044163"
|
||||
url="https://mugman.tech"
|
||||
></SingularOomfie>
|
||||
</>,
|
||||
);
|
||||
}}
|
||||
>
|
||||
{" "}
|
||||
{oomfies()}
|
||||
</div>
|
||||
</div>
|
||||
<div class="musicbutton" onClick={vivsiepop}>
|
||||
<p>amy if it was written by vivsiepop</p>
|
||||
</div>
|
||||
<div
|
||||
class="musicbutton"
|
||||
onClick={() => {
|
||||
setpopup88(true);
|
||||
}}
|
||||
>
|
||||
<p>88x31's</p>
|
||||
</div>
|
||||
<div
|
||||
class="musicbutton"
|
||||
onClick={() => {
|
||||
if (explodcount > 5) {
|
||||
document.body.innerHTML = "";
|
||||
setTimeout(() => {
|
||||
alert(
|
||||
"sorry bud, you exploded so much that my document.body is gon",
|
||||
);
|
||||
}, 500);
|
||||
} else {
|
||||
new Audio("./explod.mp3").play();
|
||||
nyaboom();
|
||||
}
|
||||
}}
|
||||
>
|
||||
<img
|
||||
style={{
|
||||
"margin-left": "0.3em",
|
||||
"max-width": "1.5em",
|
||||
}}
|
||||
src="./nyaboom.webp"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Music>
|
||||
<Music shouldpopup={shouldpopupEasterEgg}>
|
||||
<div class="musicdiv">
|
||||
<div class="innermusic">
|
||||
<div class="music-close-button-div">
|
||||
<button
|
||||
class="close-button"
|
||||
onClick={() => {
|
||||
setpopupEasterEgg(false);
|
||||
}}
|
||||
>
|
||||
X
|
||||
</button>
|
||||
</div>
|
||||
<h1>if you're reading this you're very silly</h1>
|
||||
</div>
|
||||
</div>
|
||||
</Music>
|
||||
<Music shouldpopup={shouldpopup88}>
|
||||
<div class="musicdiv">
|
||||
<div class="innermusic">
|
||||
<div class="music-close-button-div">
|
||||
<button
|
||||
class="close-button"
|
||||
onClick={() => {
|
||||
setpopup88(false);
|
||||
}}
|
||||
>
|
||||
X
|
||||
</button>
|
||||
</div>
|
||||
<div style={{}}>
|
||||
<img src="https://amy.rip/88x31.png" alt="" />
|
||||
<br />
|
||||
<span>
|
||||
<AdvancedBr count={3}/>
|
||||
<Music shouldpopup={shouldpopup}>
|
||||
<div class="musicdiv">
|
||||
<div class="innermusic">
|
||||
<div class="music-close-button-div">
|
||||
<button
|
||||
class="close-button"
|
||||
onClick={() => {
|
||||
setpopup(false);
|
||||
}}
|
||||
>
|
||||
X
|
||||
</button>
|
||||
</div>
|
||||
<div class="musiclist">
|
||||
{isLoading() ? (
|
||||
<p>Loading...</p>
|
||||
) : (
|
||||
musicList().map((link) => <MusicEntry musicInfo={link}/>)
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Music>
|
||||
<Music shouldpopup={shouldpopupEasterEgg}>
|
||||
<div class="musicdiv">
|
||||
<div class="innermusic">
|
||||
<div class="music-close-button-div">
|
||||
<button
|
||||
class="close-button"
|
||||
onClick={() => {
|
||||
setpopupEasterEgg(false);
|
||||
}}
|
||||
>
|
||||
X
|
||||
</button>
|
||||
</div>
|
||||
<h1>if you're reading this you're very silly</h1>
|
||||
</div>
|
||||
</div>
|
||||
</Music>
|
||||
<Music shouldpopup={shouldpopup88}>
|
||||
<div class="musicdiv">
|
||||
<div class="innermusic">
|
||||
<div class="music-close-button-div">
|
||||
<button
|
||||
class="close-button"
|
||||
onClick={() => {
|
||||
setpopup88(false);
|
||||
}}
|
||||
>
|
||||
X
|
||||
</button>
|
||||
</div>
|
||||
<div style={{}}>
|
||||
<img src="https://amy.rip/88x31.png" alt=""/>
|
||||
<br/>
|
||||
<span>
|
||||
feel free to link mine, <code style={{"user-select": "all"}}>https://amy.rip/88x31.png</code>
|
||||
</span>
|
||||
<div style={{ "background-color": "gray", height: "1px" }} />
|
||||
<div>
|
||||
<Singular88
|
||||
name="nax"
|
||||
url="https://nax.dev"
|
||||
src="https://nax.dev/88x31.gif"
|
||||
/>
|
||||
<Singular88
|
||||
name="sophari"
|
||||
url="https://sophari.org"
|
||||
src="https://sophari.org/img/sophari.gif"
|
||||
/>
|
||||
<Singular88
|
||||
name="rini"
|
||||
url="https://rinici.de/"
|
||||
src="https://rinici.de/button.png"
|
||||
/>
|
||||
</div>
|
||||
<div style={{"background-color": "gray", height: "1px"}}/>
|
||||
<div>
|
||||
<Singular88
|
||||
name="nax"
|
||||
url="https://nax.dev"
|
||||
src="https://nax.dev/88x31.gif"
|
||||
/>
|
||||
<Singular88
|
||||
name="sophari"
|
||||
url="https://sophari.org"
|
||||
src="https://sophari.org/img/sophari.gif"
|
||||
/>
|
||||
<Singular88
|
||||
name="Spike"
|
||||
url="https://potatoe.ca"
|
||||
src="https://potatoe.ca/images/88x31/potatoe.png"
|
||||
/>
|
||||
<Singular88
|
||||
name="gen"
|
||||
url="https://genshibe.ca"
|
||||
src="https://genshibe.ca/assets/button.png"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Music>
|
||||
<div class="footer">
|
||||
{" "}
|
||||
<a href="https://ko-fi.com/amyarson">support me ♥</a>
|
||||
<br/>
|
||||
made with ♥ by amy.{" "}
|
||||
<a href="https://git.amy.rip/amy/amy.rip">
|
||||
this website is opensource
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</Music>
|
||||
<div class="footer">
|
||||
{" "}
|
||||
<a href="https://ko-fi.com/amyarson">support me ♥</a>
|
||||
<br />
|
||||
made with ♥ by amy.{" "}
|
||||
<a href="https://git.lgbt/amy/amy.rip">
|
||||
this website is opensource
|
||||
</a>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
|
|
|
|||
|
|
@ -1,125 +1,125 @@
|
|||
import { createSignal, onMount } from "solid-js";
|
||||
import { ishover } from "../App";
|
||||
import {createSignal, onMount} from "solid-js";
|
||||
import {ishover} from "../App";
|
||||
|
||||
interface Review {
|
||||
reviewID: number;
|
||||
discordID: string;
|
||||
reviewText: string;
|
||||
timestamp: string;
|
||||
id: number;
|
||||
reviewer: string;
|
||||
review: string;
|
||||
}
|
||||
|
||||
interface NeoReview extends Review {
|
||||
global_name: string;
|
||||
username: string;
|
||||
global_name: string;
|
||||
username: string;
|
||||
}
|
||||
|
||||
export default function Reviews() {
|
||||
const [reviews, setReviews] = createSignal<NeoReview[]>([]);
|
||||
onMount(() => {
|
||||
fetch("https://review.exhq.dev/getreviews")
|
||||
.then((response) => response.json())
|
||||
.then((data: Review[]) => {
|
||||
const promises = data.map((review) =>
|
||||
fetch(`https://discord-info.api.amy.rip/v1/user/${review.discordID}`)
|
||||
const [reviews, setReviews] = createSignal<NeoReview[]>([]);
|
||||
onMount(() => {
|
||||
fetch("https://maggie.amy.rip/reviews")
|
||||
.then((response) => response.json())
|
||||
.then((user) => ({
|
||||
...review,
|
||||
global_name: user.global_name,
|
||||
username: user.username,
|
||||
})),
|
||||
);
|
||||
.then((data: Review[]) => {
|
||||
const promises = data.map((review) =>
|
||||
fetch(`https://discord-info.api.amy.rip/v1/user/${review.reviewer}`)
|
||||
.then((response) => response.json())
|
||||
.then((user) => ({
|
||||
...review,
|
||||
global_name: user.global_name,
|
||||
username: user.username,
|
||||
})),
|
||||
);
|
||||
|
||||
Promise.all(promises)
|
||||
.then((yeah) => {
|
||||
setReviews(yeah);
|
||||
})
|
||||
.catch((error) =>
|
||||
console.error("Error fetching Discord user data:", error),
|
||||
);
|
||||
})
|
||||
.catch((error) => console.error("Error fetching reviews:", error));
|
||||
});
|
||||
Promise.all(promises)
|
||||
.then((yeah) => {
|
||||
setReviews(yeah);
|
||||
})
|
||||
.catch((error) =>
|
||||
console.error("Error fetching Discord user data:", error),
|
||||
);
|
||||
})
|
||||
.catch((error) => console.error("Error fetching reviews:", error));
|
||||
});
|
||||
|
||||
return (
|
||||
<>
|
||||
<a
|
||||
style={{
|
||||
display: ishover() ? "inline" : "none",
|
||||
}}
|
||||
href="https://discord.com/oauth2/authorize?client_id=1208380910525743134&response_type=token&redirect_uri=https%3A%2F%2Famy.rip%2Freview%2F&scope=identify"
|
||||
>
|
||||
<p class="fadein">add your reviews here</p>
|
||||
</a>
|
||||
<h1 class="reviewheadertext">Reviews</h1>
|
||||
<div class="actualreviewdiv">
|
||||
{reviews().length > 0 ? (
|
||||
reviews()
|
||||
.reverse()
|
||||
.map((review) => (
|
||||
<div>
|
||||
<SingleReview {...review} />
|
||||
</div>
|
||||
))
|
||||
) : (
|
||||
<div>Loading reviews...</div>
|
||||
)}
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
return (
|
||||
<div class="reviewsection">
|
||||
<h1 class="reviewheadertext">Reviews</h1>
|
||||
<a
|
||||
style={{
|
||||
opacity: ishover() ? '100%' : '0%',
|
||||
// visibility: !ishover() ? 'hidden' : 'visible',
|
||||
}}
|
||||
href="https://discord.com/oauth2/authorize?client_id=1208380910525743134&response_type=token&redirect_uri=https%3A%2F%2Famy.rip%2Freview%2F&scope=identify"
|
||||
>
|
||||
<p class="fadein">add your reviews here</p>
|
||||
</a>
|
||||
<div class="actualreviewdiv">
|
||||
{reviews().length > 0 ? (
|
||||
reviews()
|
||||
.reverse()
|
||||
.map((review) => (
|
||||
<div>
|
||||
<SingleReview {...review} />
|
||||
</div>
|
||||
))
|
||||
) : (
|
||||
<div>Loading reviews...</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export const theImager = async (id: string): Promise<string> =>
|
||||
await fetch(`https://discord-info.api.amy.rip/v1/user/${id}`)
|
||||
.then((res) => res.json())
|
||||
.then((data) => "https://proxy.spiro.exhq.dev/_/plain/" + data.avatar.link)
|
||||
.catch(() => "https://http.cat/status/100");
|
||||
await fetch(`https://discord-info.api.amy.rip/v1/user/${id}`)
|
||||
.then((res) => res.json())
|
||||
.then((data) => data.avatar.link)
|
||||
.catch(() => "https://http.cat/status/100");
|
||||
|
||||
function SingleReview(props: NeoReview) {
|
||||
const [imageSrc, setImageSrc] = createSignal("");
|
||||
const [imageSrc, setImageSrc] = createSignal("");
|
||||
|
||||
onMount(async () => {
|
||||
const url = await theImager(props.discordID);
|
||||
setImageSrc(url);
|
||||
});
|
||||
onMount(async () => {
|
||||
const url = await theImager(String(props.reviewer));
|
||||
setImageSrc(url);
|
||||
});
|
||||
|
||||
return (
|
||||
<div class="singlereview">
|
||||
<img
|
||||
src={imageSrc()}
|
||||
alt="User Avatar"
|
||||
style={{ "max-width": "3em", "border-radius": "30%" }}
|
||||
/>
|
||||
<div class="reviewinfo">
|
||||
<div class="reviewname">
|
||||
{props.global_name === null ? props.username : props.global_name}
|
||||
return (
|
||||
<div class="singlereview">
|
||||
<img
|
||||
src={imageSrc()}
|
||||
alt="User Avatar"
|
||||
style={{"max-width": "3em", "border-radius": "30%"}}
|
||||
/>
|
||||
<div class="reviewinfo">
|
||||
<div class="reviewname">
|
||||
{props.global_name === null ? props.username : props.global_name}
|
||||
</div>
|
||||
<div class="reviewtext">{props.review}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="reviewtext">{props.reviewText}</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
);
|
||||
}
|
||||
|
||||
export async function sendReview(
|
||||
review: string,
|
||||
token: string,
|
||||
review: string,
|
||||
token: string,
|
||||
): Promise<boolean> {
|
||||
try {
|
||||
const response = await fetch(
|
||||
`https://review.exhq.dev/sendreview?review=${review}`,
|
||||
{
|
||||
headers: {
|
||||
Auth: token,
|
||||
},
|
||||
method: "POST",
|
||||
},
|
||||
);
|
||||
try {
|
||||
const response = await fetch(
|
||||
`https://maggie.amy.rip/sendreview?review=${review}`,
|
||||
{
|
||||
headers: {
|
||||
Authentication: token,
|
||||
},
|
||||
method: "POST",
|
||||
},
|
||||
);
|
||||
|
||||
if (response.status !== 200) {
|
||||
return false;
|
||||
if (response.status !== 200) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ export function Cumbrainz() {
|
|||
const [isLoading, setIsLoading] = createSignal(true);
|
||||
onMount(async () => {
|
||||
try {
|
||||
const the = await fetch("https://music.exhq.dev/")
|
||||
const the = await fetch("https://api.listenbrainz.org/1/user/amyulated/playing-now")
|
||||
const thejson = await the.json()
|
||||
setMusicInfo(thejson)
|
||||
} catch (error) {
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ export function MusicEntry(props: {musicInfo:Song}) {
|
|||
<img style={{
|
||||
"margin-right": "0.5em"
|
||||
}}
|
||||
src={"https://proxy.spiro.exhq.dev/_/plain/" + props.musicInfo.thumbnailUrl}
|
||||
alt={"album cover of" + props.musicInfo.title}/>
|
||||
src={props.musicInfo.thumbnailUrl}
|
||||
alt={"album cover of " + props.musicInfo.title}/>
|
||||
<div class="innersinglemusic">
|
||||
<div class="musicartist"> {
|
||||
shortenName(props.musicInfo.artist)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
import HoverComponent from "./name";
|
||||
import "./pfp.css";
|
||||
import {RotatingCubeButton} from "./rotatingCubeButton.tsx";
|
||||
import {createSignal} from "solid-js";
|
||||
|
||||
export function Bdpfp({
|
||||
setpopupEasterEgg,
|
||||
|
|
@ -28,42 +30,39 @@ export function Bdpfp({
|
|||
}
|
||||
|
||||
export function Normalpfp({
|
||||
setpopupEasterEgg,
|
||||
}: {
|
||||
setpopupEasterEgg: (value: boolean) => void;
|
||||
setpopupEasterEgg,
|
||||
}: {
|
||||
setpopupEasterEgg: (value: boolean) => void;
|
||||
}) {
|
||||
return (
|
||||
<div
|
||||
onContextMenu={(e) => {
|
||||
e.preventDefault();
|
||||
setpopupEasterEgg(true);
|
||||
}}
|
||||
class="birthdayparent header normal"
|
||||
>
|
||||
<img
|
||||
class="initialanim"
|
||||
src="https://dp.nea.moe/avatar/603229858612510720.png"
|
||||
alt="amy's current discord pfp"
|
||||
onMouseEnter={(e) => {
|
||||
(e.target as HTMLImageElement).animate(
|
||||
[{ transform: "rotateZ(0deg)" }, { transform: "rotateZ(360deg)" }],
|
||||
{
|
||||
duration: 400,
|
||||
iterations: 1,
|
||||
},
|
||||
);
|
||||
}}
|
||||
onClick={(e) => {
|
||||
(e.target as HTMLImageElement).animate(
|
||||
[{ transform: "rotateY(0deg)" }, { transform: "rotateY(360deg)" }],
|
||||
{
|
||||
duration: 150,
|
||||
iterations: 1,
|
||||
},
|
||||
);
|
||||
}}
|
||||
/>
|
||||
<HoverComponent />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
// State to control whether the cube or the image is displayed
|
||||
const [showCube, setShowCube] = createSignal(false);
|
||||
|
||||
return (
|
||||
<div
|
||||
onContextMenu={(e) => {
|
||||
e.preventDefault();
|
||||
setpopupEasterEgg(true);
|
||||
}}
|
||||
// On click, toggle the showCube state
|
||||
onClick={() => setShowCube(true)}
|
||||
class="birthdayparent header normal"
|
||||
style={{ cursor: 'pointer', display: 'flex', "justify-content": 'center', "align-items": 'center' }} // Added styles for centering content
|
||||
>
|
||||
{showCube() ? (
|
||||
// If showCube is true, render the RotatingCubeButton
|
||||
// The onClick for the cube itself can be an empty function or trigger something else
|
||||
<RotatingCubeButton onClick={() => console.log("Cube pfp clicked!")} />
|
||||
) : (
|
||||
// Otherwise, render the original image and HoverComponent
|
||||
<>
|
||||
<img
|
||||
class="initialanim"
|
||||
src="https://dp.nea.moe/avatar/603229858612510720.png"
|
||||
alt="amy's current discord pfp"
|
||||
/>
|
||||
<HoverComponent />
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
90
src/components/rotatingCubeButton.tsx
Normal file
90
src/components/rotatingCubeButton.tsx
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
// src/components/RotatingCubeButton.tsx
|
||||
import { onCleanup, onMount } from 'solid-js';
|
||||
import * as THREE from 'three';
|
||||
|
||||
interface RotatingCubeButtonProps {
|
||||
onClick: () => void;
|
||||
}
|
||||
|
||||
export const RotatingCubeButton = (props: RotatingCubeButtonProps) => {
|
||||
let mountRef: HTMLDivElement | undefined;
|
||||
let renderer: THREE.WebGLRenderer;
|
||||
let scene: THREE.Scene;
|
||||
let camera: THREE.PerspectiveCamera;
|
||||
let cube: THREE.Mesh;
|
||||
let animationFrameId: number;
|
||||
|
||||
|
||||
onMount(() => {
|
||||
if (mountRef) {
|
||||
|
||||
scene = new THREE.Scene();
|
||||
camera = new THREE.PerspectiveCamera(75, 1, 0.1, 1000);
|
||||
camera.position.z = 2;
|
||||
|
||||
renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
|
||||
renderer.setSize(mountRef.clientWidth, mountRef.clientHeight);
|
||||
mountRef.appendChild(renderer.domElement);
|
||||
|
||||
const textureLoader = new THREE.TextureLoader();
|
||||
const texture = textureLoader.load(
|
||||
'https://dp.nea.moe/avatar/603229858612510720.png',
|
||||
undefined,
|
||||
() => {
|
||||
cube.material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
|
||||
}
|
||||
);
|
||||
|
||||
const geometry = new THREE.BoxGeometry(1, 1, 1);
|
||||
const material = new THREE.MeshBasicMaterial({ map: texture });
|
||||
|
||||
cube = new THREE.Mesh(geometry, material);
|
||||
scene.add(cube);
|
||||
|
||||
const animate = () => {
|
||||
animationFrameId = requestAnimationFrame(animate);
|
||||
cube.rotation.x += 0.01;
|
||||
cube.rotation.y += 0.01;
|
||||
renderer.render(scene, camera);
|
||||
};
|
||||
animate();
|
||||
const handleResize = () => {
|
||||
if (mountRef) {
|
||||
camera.aspect = mountRef.clientWidth / mountRef.clientHeight;
|
||||
camera.updateProjectionMatrix();
|
||||
renderer.setSize(mountRef.clientWidth, mountRef.clientHeight);
|
||||
}
|
||||
};
|
||||
window.addEventListener('resize', handleResize);
|
||||
|
||||
onCleanup(() => {
|
||||
window.removeEventListener('resize', handleResize);
|
||||
cancelAnimationFrame(animationFrameId);
|
||||
if (mountRef && renderer.domElement) {
|
||||
mountRef.removeChild(renderer.domElement);
|
||||
}
|
||||
geometry.dispose();
|
||||
material.dispose();
|
||||
texture.dispose();
|
||||
renderer.dispose();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={mountRef}
|
||||
onClick={props.onClick}
|
||||
style={{
|
||||
width: '20em',
|
||||
height: '20em',
|
||||
display: 'flex',
|
||||
"justify-content": 'center',
|
||||
"align-items": 'center',
|
||||
overflow: 'hidden',
|
||||
}}
|
||||
>
|
||||
|
||||
</div>
|
||||
);
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue