Initial Commit for Astro files

This commit is contained in:
wearrrrr 2024-01-09 11:26:49 -06:00
commit 922ef15f5f
22 changed files with 10913 additions and 0 deletions

21
.gitignore vendored Normal file
View file

@ -0,0 +1,21 @@
# build output
dist/
# generated types
.astro/
# dependencies
node_modules/
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
# macOS-specific files
.DS_Store

4
.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1,4 @@
{
"recommendations": ["astro-build.astro-vscode"],
"unwantedRecommendations": []
}

11
.vscode/launch.json vendored Normal file
View file

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "./node_modules/.bin/astro dev",
"name": "Development server",
"request": "launch",
"type": "node-terminal"
}
]
}

11
astro.config.mjs Normal file
View file

@ -0,0 +1,11 @@
import { defineConfig } from 'astro/config';
import node from "@astrojs/node";
// https://astro.build/config
export default defineConfig({
output: "hybrid",
adapter: node({
mode: "middleware",
})
});

50
index.js Normal file
View file

@ -0,0 +1,50 @@
import { createBareServer } from "@tomphttp/bare-server-node"
import { uvPath } from "@nebula-services/ultraviolet"
import http from 'node:http';
import path from 'node:path';
import express from 'express';
import { handler as ssrHandler } from './dist/server/entry.mjs';
import dotenv from 'dotenv';
import compression from "compression"
dotenv.config();
const PORT = process.env.PORT || 3000;
const server = http.createServer();
const app = express(server);
const bareServer = createBareServer("/bare/");
app.use(compression());
app.use(express.static(path.join(process.cwd(), "static")));
app.use(express.static(path.join(process.cwd(), "build")));
app.use("/uv/", express.static(uvPath));
app.use(express.json());
app.use(express.urlencoded({
extended: true
})
);
app.use("/", express.static('dist/client/'));
app.use(ssrHandler);
server.on("request", (req, res) => {
if (bareServer.shouldRoute(req)) {
bareServer.routeRequest(req, res);
} else {
app(req, res);
}
});
server.on("upgrade", (req, socket, head) => {
if (bareServer.shouldRoute(req)) {
bareServer.routeUpgrade(req, socket, head);
} else {
socket.end();
}
});
server.on("listening", () => {
console.log(`Server running at http://localhost:${PORT}/.`);
});
server.listen({
port: PORT
});

10138
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

21
package.json Normal file
View file

@ -0,0 +1,21 @@
{
"name": "alus-unblocker",
"type": "module",
"version": "0.0.1",
"scripts": {
"start": "node ."
},
"dependencies": {
"@astrojs/check": "^0.4.0",
"@astrojs/node": "^7.0.4",
"@nebula-services/ultraviolet": "^1.0.1-1.patch.5",
"@tomphttp/bare-server-node": "^2.0.1",
"astro": "^4.1.1",
"compression": "^1.7.4",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"i": "^0.3.7",
"npm": "^10.2.5",
"typescript": "^5.3.3"
}
}

BIN
public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

1
public/games/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
**/

67
public/img/darkwaves.svg Normal file
View file

@ -0,0 +1,67 @@
<svg width="100%" height="100%" id="svg" viewBox="0 0 1440 700" xmlns="http://www.w3.org/2000/svg" class="transition duration-300 ease-in-out delay-150"><style>
.path-0{
animation:pathAnim-0 4s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
@keyframes pathAnim-0{
0%{
d: path("M 0,700 C 0,700 0,175 0,175 C 98.76666666666668,201.13846153846154 197.53333333333336,227.27692307692308 279,216 C 360.46666666666664,204.72307692307692 424.6333333333333,156.0307692307692 488,154 C 551.3666666666667,151.9692307692308 613.9333333333334,196.6 695,208 C 776.0666666666666,219.4 875.6333333333332,197.56923076923076 954,192 C 1032.3666666666668,186.43076923076924 1089.5333333333333,197.12307692307692 1167,197 C 1244.4666666666667,196.87692307692308 1342.2333333333333,185.93846153846152 1440,175 C 1440,175 1440,700 1440,700 Z");
}
25%{
d: path("M 0,700 C 0,700 0,175 0,175 C 71.32051282051285,180.2 142.6410256410257,185.4 224,167 C 305.3589743589743,148.6 396.7564102564103,106.60000000000001 493,110 C 589.2435897435897,113.39999999999999 690.3333333333333,162.2 764,171 C 837.6666666666667,179.8 883.9102564102564,148.60000000000002 962,129 C 1040.0897435897436,109.39999999999998 1150.0256410256409,101.39999999999999 1235,111 C 1319.9743589743591,120.60000000000001 1379.9871794871797,147.8 1440,175 C 1440,175 1440,700 1440,700 Z");
}
50%{
d: path("M 0,700 C 0,700 0,175 0,175 C 67.12051282051283,184.24615384615385 134.24102564102566,193.49230769230766 207,195 C 279.75897435897434,196.50769230769234 358.15641025641025,190.27692307692308 452,171 C 545.8435897435897,151.72307692307692 655.1333333333334,119.39999999999999 727,113 C 798.8666666666666,106.60000000000001 833.3102564102564,126.12307692307695 916,145 C 998.6897435897436,163.87692307692305 1129.625641025641,182.1076923076923 1225,187 C 1320.374358974359,191.8923076923077 1380.1871794871795,183.44615384615383 1440,175 C 1440,175 1440,700 1440,700 Z");
}
75%{
d: path("M 0,700 C 0,700 0,175 0,175 C 76.09999999999997,135.03076923076924 152.19999999999993,95.06153846153846 224,110 C 295.80000000000007,124.93846153846154 363.30000000000007,194.7846153846154 441,231 C 518.6999999999999,267.2153846153846 606.5999999999999,269.8 693,234 C 779.4000000000001,198.2 864.3000000000002,124.0153846153846 941,118 C 1017.6999999999998,111.9846153846154 1086.2,174.13846153846154 1168,195 C 1249.8,215.86153846153846 1344.9,195.43076923076922 1440,175 C 1440,175 1440,700 1440,700 Z");
}
100%{
d: path("M 0,700 C 0,700 0,175 0,175 C 98.76666666666668,201.13846153846154 197.53333333333336,227.27692307692308 279,216 C 360.46666666666664,204.72307692307692 424.6333333333333,156.0307692307692 488,154 C 551.3666666666667,151.9692307692308 613.9333333333334,196.6 695,208 C 776.0666666666666,219.4 875.6333333333332,197.56923076923076 954,192 C 1032.3666666666668,186.43076923076924 1089.5333333333333,197.12307692307692 1167,197 C 1244.4666666666667,196.87692307692308 1342.2333333333333,185.93846153846152 1440,175 C 1440,175 1440,700 1440,700 Z");
}
}</style><path d="M 0,700 C 0,700 0,175 0,175 C 98.76666666666668,201.13846153846154 197.53333333333336,227.27692307692308 279,216 C 360.46666666666664,204.72307692307692 424.6333333333333,156.0307692307692 488,154 C 551.3666666666667,151.9692307692308 613.9333333333334,196.6 695,208 C 776.0666666666666,219.4 875.6333333333332,197.56923076923076 954,192 C 1032.3666666666668,186.43076923076924 1089.5333333333333,197.12307692307692 1167,197 C 1244.4666666666667,196.87692307692308 1342.2333333333333,185.93846153846152 1440,175 C 1440,175 1440,700 1440,700 Z" stroke="none" stroke-width="0" fill="#5b667e66" class="transition-all duration-300 ease-in-out delay-150 path-0"></path><style>
.path-1{
animation:pathAnim-1 4s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
@keyframes pathAnim-1{
0%{
d: path("M 0,700 C 0,700 0,350 0,350 C 61.27692307692308,353.24871794871797 122.55384615384617,356.49743589743593 195,348 C 267.44615384615383,339.50256410256407 351.0615384615385,319.25897435897434 455,336 C 558.9384615384615,352.74102564102566 683.1999999999999,406.46666666666664 757,409 C 830.8000000000001,411.53333333333336 854.1384615384617,362.87435897435904 929,352 C 1003.8615384615383,341.12564102564096 1130.2461538461537,368.0358974358974 1224,374 C 1317.7538461538463,379.9641025641026 1378.876923076923,364.9820512820513 1440,350 C 1440,350 1440,700 1440,700 Z");
}
25%{
d: path("M 0,700 C 0,700 0,350 0,350 C 82.77179487179487,328.6871794871795 165.54358974358973,307.374358974359 250,311 C 334.45641025641027,314.625641025641 420.59743589743596,343.18974358974356 503,357 C 585.402564102564,370.81025641025644 664.0666666666667,369.8666666666667 738,350 C 811.9333333333333,330.1333333333333 881.1358974358975,291.3435897435897 955,292 C 1028.8641025641025,292.6564102564103 1107.3897435897436,332.7589743589744 1189,349 C 1270.6102564102564,365.2410256410256 1355.3051282051283,357.6205128205128 1440,350 C 1440,350 1440,700 1440,700 Z");
}
50%{
d: path("M 0,700 C 0,700 0,350 0,350 C 65.52820512820512,346.8307692307692 131.05641025641023,343.66153846153844 217,344 C 302.94358974358977,344.33846153846156 409.30256410256413,348.18461538461537 490,343 C 570.6974358974359,337.81538461538463 625.7333333333332,323.6 702,326 C 778.2666666666668,328.4 875.7641025641026,347.41538461538465 952,366 C 1028.2358974358974,384.58461538461535 1083.2102564102565,402.73846153846154 1161,400 C 1238.7897435897435,397.26153846153846 1339.3948717948717,373.63076923076926 1440,350 C 1440,350 1440,700 1440,700 Z");
}
75%{
d: path("M 0,700 C 0,700 0,350 0,350 C 68.02820512820512,330.8897435897436 136.05641025641023,311.77948717948715 221,324 C 305.94358974358977,336.22051282051285 407.80256410256425,379.7717948717949 483,404 C 558.1974358974358,428.2282051282051 606.7333333333332,433.1333333333333 686,414 C 765.2666666666668,394.8666666666667 875.2641025641026,351.6948717948718 960,327 C 1044.7358974358974,302.3051282051282 1104.2102564102565,296.08717948717947 1180,303 C 1255.7897435897435,309.91282051282053 1347.8948717948717,329.95641025641027 1440,350 C 1440,350 1440,700 1440,700 Z");
}
100%{
d: path("M 0,700 C 0,700 0,350 0,350 C 61.27692307692308,353.24871794871797 122.55384615384617,356.49743589743593 195,348 C 267.44615384615383,339.50256410256407 351.0615384615385,319.25897435897434 455,336 C 558.9384615384615,352.74102564102566 683.1999999999999,406.46666666666664 757,409 C 830.8000000000001,411.53333333333336 854.1384615384617,362.87435897435904 929,352 C 1003.8615384615383,341.12564102564096 1130.2461538461537,368.0358974358974 1224,374 C 1317.7538461538463,379.9641025641026 1378.876923076923,364.9820512820513 1440,350 C 1440,350 1440,700 1440,700 Z");
}
}</style><path d="M 0,700 C 0,700 0,350 0,350 C 61.27692307692308,353.24871794871797 122.55384615384617,356.49743589743593 195,348 C 267.44615384615383,339.50256410256407 351.0615384615385,319.25897435897434 455,336 C 558.9384615384615,352.74102564102566 683.1999999999999,406.46666666666664 757,409 C 830.8000000000001,411.53333333333336 854.1384615384617,362.87435897435904 929,352 C 1003.8615384615383,341.12564102564096 1130.2461538461537,368.0358974358974 1224,374 C 1317.7538461538463,379.9641025641026 1378.876923076923,364.9820512820513 1440,350 C 1440,350 1440,700 1440,700 Z" stroke="none" stroke-width="0" fill="#5b667e88" class="transition-all duration-300 ease-in-out delay-150 path-1"></path><style>
.path-2{
animation:pathAnim-2 4s;
animation-timing-function: linear;
animation-iteration-count: infinite;
}
@keyframes pathAnim-2{
0%{
d: path("M 0,700 C 0,700 0,525 0,525 C 75,542.6179487179487 150,560.2358974358974 236,544 C 322,527.7641025641026 419,477.674358974359 501,483 C 583,488.325641025641 650,549.0666666666667 716,576 C 782,602.9333333333333 847.0000000000001,596.0589743589743 935,580 C 1022.9999999999999,563.9410256410257 1133.9999999999998,538.697435897436 1222,528 C 1310.0000000000002,517.302564102564 1375,521.151282051282 1440,525 C 1440,525 1440,700 1440,700 Z");
}
25%{
d: path("M 0,700 C 0,700 0,525 0,525 C 55.110256410256426,538.3461538461538 110.22051282051285,551.6923076923077 204,557 C 297.77948717948715,562.3076923076923 430.2282051282051,559.5769230769231 507,558 C 583.7717948717949,556.4230769230769 604.8666666666667,556 687,537 C 769.1333333333333,518 912.3051282051283,480.42307692307696 994,467 C 1075.6948717948717,453.57692307692304 1095.9128205128204,464.3076923076923 1160,478 C 1224.0871794871796,491.6923076923077 1332.0435897435898,508.3461538461538 1440,525 C 1440,525 1440,700 1440,700 Z");
}
50%{
d: path("M 0,700 C 0,700 0,525 0,525 C 98.69487179487183,536.551282051282 197.38974358974366,548.1025641025641 278,541 C 358.61025641025634,533.8974358974359 421.1358974358974,508.1410256410257 495,497 C 568.8641025641026,485.8589743589743 654.0666666666667,489.3333333333333 736,491 C 817.9333333333333,492.6666666666667 896.5974358974356,492.52564102564105 969,499 C 1041.4025641025644,505.47435897435895 1107.5435897435898,518.5641025641025 1185,524 C 1262.4564102564102,529.4358974358975 1351.228205128205,527.2179487179487 1440,525 C 1440,525 1440,700 1440,700 Z");
}
75%{
d: path("M 0,700 C 0,700 0,525 0,525 C 66.24871794871794,489.1051282051282 132.49743589743588,453.2102564102564 212,463 C 291.5025641025641,472.7897435897436 384.25897435897434,528.2641025641026 481,535 C 577.7410256410257,541.7358974358974 678.4666666666667,499.7333333333333 747,481 C 815.5333333333333,462.2666666666667 851.874358974359,466.80256410256413 926,491 C 1000.125641025641,515.1974358974359 1112.0358974358974,559.0564102564103 1204,568 C 1295.9641025641026,576.9435897435897 1367.9820512820513,550.9717948717948 1440,525 C 1440,525 1440,700 1440,700 Z");
}
100%{
d: path("M 0,700 C 0,700 0,525 0,525 C 75,542.6179487179487 150,560.2358974358974 236,544 C 322,527.7641025641026 419,477.674358974359 501,483 C 583,488.325641025641 650,549.0666666666667 716,576 C 782,602.9333333333333 847.0000000000001,596.0589743589743 935,580 C 1022.9999999999999,563.9410256410257 1133.9999999999998,538.697435897436 1222,528 C 1310.0000000000002,517.302564102564 1375,521.151282051282 1440,525 C 1440,525 1440,700 1440,700 Z");
}
}</style><path d="M 0,700 C 0,700 0,525 0,525 C 75,542.6179487179487 150,560.2358974358974 236,544 C 322,527.7641025641026 419,477.674358974359 501,483 C 583,488.325641025641 650,549.0666666666667 716,576 C 782,602.9333333333333 847.0000000000001,596.0589743589743 935,580 C 1022.9999999999999,563.9410256410257 1133.9999999999998,538.697435897436 1222,528 C 1310.0000000000002,517.302564102564 1375,521.151282051282 1440,525 C 1440,525 1440,700 1440,700 Z" stroke="none" stroke-width="0" fill="#5b667eff" class="transition-all duration-300 ease-in-out delay-150 path-2"></path></svg>

After

Width:  |  Height:  |  Size: 11 KiB

18
public/sw.js Normal file
View file

@ -0,0 +1,18 @@
/*global UVServiceWorker,__uv$config*/
/*
* Stock service worker script.
* Users can provide their own sw.js if they need to extend the functionality of the service worker.
* Ideally, this will be registered under the scope in uv.config.js so it will not need to be modified.
* However, if a user changes the location of uv.bundle.js/uv.config.js or sw.js is not relative to them, they will need to modify this script locally.
*/
importScripts('/uv/uv.bundle.js');
importScripts('/uv.config.js');
importScripts(__uv$config.sw);
self.addEventListener("install", (event) => {
self.skipWaiting();
});
const sw = new UVServiceWorker();
self.addEventListener('fetch', (event) => event.respondWith(sw.fetch(event)));

12
public/uv.config.js Normal file
View file

@ -0,0 +1,12 @@
/*global Ultraviolet*/
self.__uv$config = {
prefix: '/service/',
bare: '/bare/',
encodeUrl: Ultraviolet.codec.xor.encode,
decodeUrl: Ultraviolet.codec.xor.decode,
handler: '/uv/uv.handler.js',
client: '/uv/uv.client.js',
bundle: '/uv/uv.bundle.js',
config: '/uv/uv.config.js',
sw: '/uv/uv.sw.js',
};

126
src/components/Footer.astro Normal file
View file

@ -0,0 +1,126 @@
<div id="footer">
<div class="footerflex">
<div class="footerbrand">
<p class="footerlist-heading"><a href="/">Alu's Unblocker</a></p>
<p>Made with ❤️ by <a target="_black" href="https://wearr.dev">wearr</a></p>
</div>
<div class="footerlist">
<p class="footerlist-heading">Services</p>
<ul>
<li><a target="_blank" rel="noopener noreferrer" href="https://github.com/titaniumnetwork-dev/Ultraviolet">Ultraviolet</a></li>
</ul>
</div>
<div class="footerlist">
<p class="footerlist-heading">Socials</p>
<ul>
<li><a target="_blank" rel="noopener noreferrer" href="https://github.com/wearrrrr/AlusUnblocker">GitHub</a></li>
<li><a target="_blank" rel="noopener noreferrer" href="#">Discord</a></li>
</ul>
</div>
</div>
<p class="copyright">Alu's Unblocker &copy; 2024</p>
</div>
</div>
<style>
#footer {
padding-top: 20vw;
background-image: url(/img/darkwaves.svg);
background-repeat: no-repeat;
background-size: 100vw auto;
}
@media only screen and (max-width: 800px) {
#footer {
display: none;
}
}
.footerflex {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
.footersocials {
text-align: center;
}
.footerflex > div {
margin: 25px 50px;
}
@media only screen and (max-width: 600px) {
.footerflex > div {
margin: 15px 25px;
}
}
@media only screen and (max-width: 380px) {
.footerflex > div {
margin: 5px 10px;
}
}
.footerbrand div a {
font-family: 'Varela Round', sans-serif;
color: #fff !important;
font-size: 20px;
font-weight: bold;
}
.footerbrand p {
font-family: 'Varela Round', sans-serif;
color: #fff;
}
.footerbrand a {
font-family: 'Varela Round', sans-serif;
color: #fff;
}
.footerlist-heading {
font-weight: bold;
font-size: 20px;
}
.footerlist ul {
list-style: none;
padding: 0;
}
.footerlist ul > li {
padding: 2px;
}
.footerlist ul > li > a {
color: #fff;
}
.footerlist > * {
font-family: 'Varela Round', sans-serif;
color: #fff;
}
.footersocials {
font-size: 20px;
}
.footersocials a {
display: inline-block;
width: 20px;
height: 20px;
line-height: 20px;
padding: 6px;
margin: 0 5px;
border-radius: 50%;
}
.copyright {
color: #D8DEE9;
text-align: center;
}
</style>

View file

@ -0,0 +1,29 @@
---
const { name, image, slugName } = Astro.props;
---
<div class="game">
<a href=`./${slugName || name}`><img class="game-img" src=`${image}` alt=""></a>
<p class="game-title">{name}</p>
</div>
<style>
.game {
border: 2px solid #D8DEE9;
padding: 1rem;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.game-img {
width: 128px;
height: 128px;
}
.game-title {
color: white;
text-align: center;
max-width: 125px;
}
</style>

View file

@ -0,0 +1,59 @@
<div class="top-header">
<div id="title-background" class="title-background">
<div class="left">
<a href="/" class="header-item"> Alu</a>
</div>
<div class="right">
<a href="/games/" class="header-item"><i class="fa-solid fa-gamepad-modern"></i> Games</a>
<a href="/settings/" class="header-item"><i class="fa-solid fa-gear"></i> Settings</a>
</div>
</div>
</div>
<style>
.top-header {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
box-sizing: border-box;
transition: 250ms ease-in;
}
.title-background {
background-color: #166e85;
display: flex;
align-items: center;
justify-content: space-between;
padding-inline: 40px;
height: 70px;
width: 100%;
font-size: 1.05rem;
list-style-type: none;
border: none;
z-index: 10;
transition: 250ms ease-in;
}
.left, .right {
display: flex;
align-items: center;
gap: 20px;
}
.header-item {
color: #ffffff;
text-decoration: none;
font-size: 20px;
transition: 250ms ease-in-out;
}
.header-item:hover {
color: #b7bcc6;
}
@media only screen and (max-width: 1003px) {
.title-background {
width: 500%;
}
}
</style>

View file

@ -0,0 +1,31 @@
<script src="/uv/uv.bundle.js" is:inline></script>
<script src="/uv.config.js" is:inline></script>
<script>
declare global {
interface Window {
__uv$config: any;
}
}
const form = document.querySelector('form')!;
const input = document.querySelector('input')!;
window.navigator.serviceWorker.register('/sw.js', {
scope: window.__uv$config.prefix
})
form.addEventListener('submit', (event) => {
event.preventDefault();
let url = input.value.trim();
if (!isUrl(url)) url = 'https://www.google.com/search?q=' + url;
else if (!(url.startsWith('https://') || url.startsWith('http://'))) url = 'http://' + url;
let loadingContent = document.getElementById('loading-content');
if (loadingContent) loadingContent.style.opacity = "1";
window.location.href = window.__uv$config.prefix + window.__uv$config.encodeUrl(url);
});
function isUrl(val = ''){
if (/^http(s?):\/\//.test(val) || val.includes('.') && val.substr(0, 1) !== ' ') return true;
return false;
};
</script>

1
src/env.d.ts vendored Normal file
View file

@ -0,0 +1 @@
/// <reference types="astro/client" />

55
src/layouts/Layout.astro Normal file
View file

@ -0,0 +1,55 @@
---
import { fade } from 'astro/virtual-modules/transitions.js';
import { ViewTransitions } from 'astro:transitions';
interface Props {
title: string;
}
const { title } = Astro.props;
---
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="description" content="Astro description" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.png" />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
<ViewTransitions />
</head>
<body transition:animate={fade({ duration: '0.4s' })}>
<slot />
</body>
</html>
<style is:global>
@import url("https://fonts.googleapis.com/css2?family=Varela+Round&display=swap");
* {
box-sizing: border-box;
}
body, html {
margin: 0;
padding: 0;
height: 100%;
}
body {
font-family: 'Varela Round', sans-serif;
background-color: #46494C;
max-width: 100vw;
margin: 0;
display: flex;
flex-direction: column;
min-height: 100vh;
}
.title-text {
color: white;
text-align: center;
}
::-webkit-scrollbar {
display: none;
}
</style>

96
src/pages/games.astro Normal file
View file

@ -0,0 +1,96 @@
---
import Layout from "../layouts/Layout.astro";
import Header from "../components/Header.astro";
import Footer from "../components/Footer.astro";
import GameItem from "../components/GameItem.astro";
---
<Layout title="Games | Alu's Unblocker">
<Header />
<h1 class="title-text">Games</h1>
<div class="grid">
<GameItem name="1v1.lol" image="/games/1v1.lol/logo.png"></GameItem>
<GameItem name="2048" image="/games/2048/logo.png"></GameItem>
<GameItem name="The Backrooms" image="/games/backrooms/logo.png" slugName="backrooms"></GameItem>
<GameItem name="Baldi's Basics" image="/games/baldi/logo.png" slugName="baldi"></GameItem>
<GameItem name="Cannon Basketball 4" image="/games/cannon-basketball-4/logo.png" slugName="cannon-basketball-4"></GameItem>
<GameItem name="Cell Machine" image="/games/cell-machine/logo.png" slugName="cell-machine"></GameItem>
<GameItem name="Chrome Dino" image="/games/chrome-dino/logo.png" slugName="chrome-dino"></GameItem>
<GameItem name="Cookie Clicker" image="/games/cookie-clicker/logo.png" slugName="cookie-clicker"></GameItem>
<GameItem name="CSGO Clicker" image="/games/csgo-clicker/logo.png" slugName="csgo-clicker"></GameItem>
<GameItem name="Cut The Rope" image="/games/ctr/logo.png" slugName="ctr"></GameItem>
<GameItem name="Cut The Rope - Holiday" image="/games/ctr-holiday/logo.png" slugName="ctr-holiday"></GameItem>
<GameItem name="Cut The Rope - Time Travel" image="/games/ctr-tr/logo.png" slugName="ctr-tr"></GameItem>
<GameItem name="Death Run 3D" image="/games/death-run-3d/logo.png" slugName="death-run-3d"></GameItem>
<GameItem name="Doge Miner" image="/games/doge-miner/logo.png" slugName="doge-miner"></GameItem>
<GameItem name="Doodle Jump" image="/games/doodle-jump/logo.png" slugName="doodle-jump"></GameItem>
<GameItem name="doom" image="/games/doom/logo.png" slugName="doom"></GameItem>
<GameItem name="Draw The Hill" image="/games/draw-the-hill/logo.png" slugName="draw-the-hill"></GameItem>
<GameItem name="Evil Glitch" image="/games/evil-glitch/logo.png" slugName="evil-glitch"></GameItem>
<GameItem name="Fall Boys" image="/games/fall-boys/logo.png" slugName="fall-boys"></GameItem>
<GameItem name="Fireboy and Watergirl" image="/games/firewater/logo.png" slugName="firewater"></GameItem>
<GameItem name="Fireboy and Watergirl 2" image="/games/firewater2/logo.png" slugName="firewater2"></GameItem>
<GameItem name="Five Nights at Freddy's" image="/games/fnaf/logo.png" slugName="fnaf"></GameItem>
<GameItem name="Five Nights at Freddy's 2" image="/games/fnaf2/logo.png" slugName="fnaf2"></GameItem>
<GameItem name="Five Nights at Freddy's 3" image="/games/fnaf3/logo.png" slugName="fnaf3"></GameItem>
<GameItem name="Five Nights at Freddy's 4" image="/games/fnaf4/logo.png" slugName="fnaf4"></GameItem>
<GameItem name="Game Inside" image="/games/game-inside/logo.png" slugName="game-inside"></GameItem>
<GameItem name="Google Snake" image="/games/google-snake/logo.png" slugName="google-snake"></GameItem>
<GameItem name="Grindcraft" image="/games/grindcraft/logo.png" slugName="grindcraft"></GameItem>
<GameItem name="Idle Breakout" image="/games/idle-breakout/logo.png" slugName="idle-breakout"></GameItem>
<GameItem name="Just One Boss" image="/games/just-one-boss/logo.png" slugName="just-one-boss"></GameItem>
<GameItem name="Line Rider" image="/games/line-rider/logo.png" slugName="line-rider"></GameItem>
<GameItem name="Minecraft Classic" image="/games/minecraft-classic/logo.png" slugName="minecraft-classic"></GameItem>
<GameItem name="Minesweeper" image="/games/minesweeper/logo.png" slugName="minesweeper"></GameItem>
<GameItem name="Moto X3M" image="/games/moto-x3m/logo.png" slugName="moto-x3m"></GameItem>
<GameItem name="Moto X3M Pool Party" image="/games/moto-x3m-pool/logo.png" slugName="moto-x3m-pool"></GameItem>
<GameItem name="Moto X3M Spooky Land" image="/games/moto-x3m-spooky/logo.png" slugName="moto-x3m-spooky"></GameItem>
<GameItem name="Moto X3M Winter" image="/games/moto-x3m-winter/logo.png" slugName="moto-x3m-winter"></GameItem>
<GameItem name="osu!" image="/games/osu/logo.png" slugName="osu"></GameItem>
<GameItem name="Retro Bowl" image="/games/retro-bowl/logo.png" slugName="retro-bowl"></GameItem>
<GameItem name="Slope" image="/games/slope/logo.png" slugName="slope"></GameItem>
<GameItem name="Super Mario 64" image="/games/sm64/logo.png" slugName="sm64"></GameItem>
<GameItem name="Solitaire" image="/games/solitaire/logo.png" slugName="solitaire"></GameItem>
<GameItem name="Superhot" image="/games/superhot/logo.png" slugName="superhot"></GameItem>
<GameItem name="There is No Game" image="/games/there-is-no-game/logo.png" slugName="there-is-no-game"></GameItem>
<GameItem name="Ultima 6" image="/games/ul6/logo.png" slugName="ul6"></GameItem>
<GameItem name="Vex 3" image="/games/vex3/logo.png" slugName="vex3"></GameItem>
<GameItem name="Vex 4" image="/games/vex4/logo.png" slugName="vex4"></GameItem>
<GameItem name="Vex 5" image="/games/vex5/logo.png" slugName="vex5"></GameItem>
<GameItem name="Vex 6" image="/games/vex6/logo.png" slugName="vex6"></GameItem>
<GameItem name="World's Hardest Game" image="/games/worlds-hardest-game/logo.png" slugName="worlds-hardest-game"></GameItem>
<GameItem name="World's Hardest Game 2" image="/games/worlds-hardest-game-2/logo.png" slugName="worlds-hardest-game-2"></GameItem>
<GameItem name="You are Bezos" image="/games/you-are-bezos/logo.png" slugName="you-are-bezos"></GameItem>
</div>
<Footer />
</Layout>
<style>
.grid {
color: #fff;
margin-top: -10px;
height: max-content;
width: calc(100% - 60px);
display: flex;
flex-direction: row;
flex-wrap: wrap;
text-align: center;
justify-content: center;
gap: 1rem;
margin-left: 20px;
}
@media only screen and (max-width: 973px) {
.grid {
grid-template-columns: repeat(3, 1fr);
padding: 0;
}
}
@media only screen and (max-width: 467px) {
.grid {
grid-template-columns: repeat(2, 1fr);
}
}
</style>

57
src/pages/index.astro Normal file
View file

@ -0,0 +1,57 @@
---
import Layout from '../layouts/Layout.astro';
import Header from '../components/Header.astro';
import Footer from '../components/Footer.astro';
import UVRegistrar from '../components/UVRegistrar.astro';
---
<Layout title="Alu's Unblocker">
<Header></Header>
<div class="main-content" data-barba="container" data-barba-namespace="home">
<h1 id="title-text" class="title-text">Welcome to Alu</h1>
<form>
<input placeholder="Enter a URL...">
</form>
<p id="loading-content">Loading Content...</p>
</div>
<UVRegistrar></UVRegistrar>
<Footer></Footer>
</Layout>
<style>
.main-content {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
height: 60vh;
}
form {
width: 30%;
}
form > input {
background-color: #393b3e;
color: #D8DEE9;
border: 5px solid white;
border-radius: 30px;
padding: 15px;
width: 100%;
text-align: center;
transition: 400ms ease-out;
outline: none;
}
form > input::placeholder {
color: #D8DEE9;
}
#loading-content {
color: white;
padding: 3px;
position: relative;
opacity: 0;
transition: 250ms ease-in-out;
}
</style>

102
src/pages/oldindex.html Normal file
View file

@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="theme-color" content="#81A1C1">
<title>Alu's Unblocker</title>
<link rel="icon" href="./img/icon.svg">
<link rel="apple-touch-icon" href="./apple-touch-icon.png"/>
<link rel="manifest" href="/manifest.json">
<script src="./js/site/loadScript.js"></script>
<link rel="stylesheet" href="./css/index.css">
<link rel="stylesheet" href="https://site-assets.fontawesome.com/releases/v6.4.2/css/all.css">
<script>
if (localStorage.getItem('windowCloak') == "1") {
var x = window.open('')
x.document.write(`<iframe src="${window.location.href}" style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; width: 100%; height: 100%;"></iframe>`);
x.document.write('<script src="./settings_frame.js">')
window.close();
}
</script>
</head>
<body id="body" data-barba="wrapper">
<script src="./js/site/toggles.js"></script>
<script src="./js/site/main.js"></script>
<script src="./js/site/header.js"></script>
<script src="./js/site/themes.js"></script>
<script src="/bundle.js" defer></script>
<div id="main">
<div class="top-header">
<div id="title-background" class="title-background">
<div class="left">
<a href="/" class="header-item"> Alu</a>
</div>
<div class="right">
<a href="/games/" class="header-item"><i class="fa-solid fa-gamepad-modern"></i> Games</a>
<a href="/settings/" class="header-item"><i class="fa-solid fa-gear"></i> Settings</a>
</div>
</div>
</div>
<div class="main-content" data-barba="container" data-barba-namespace="home">
<h1 id="title-text" class="title-text">Welcome to Alu</h1>
<form>
<input placeholder="Enter a URL...">
</form>
<p id="loading-content">Loading Content...</p>
</div>
<script src="/uv/uv.bundle.js"></script>
<script src="/uv/uv.config.js"></script>
<script>
const form = document.querySelector('form');
const input = document.querySelector('input');
window.navigator.serviceWorker.register('/sw.js', {
scope: __uv$config.prefix
})
form.addEventListener('submit', (event) => {
event.preventDefault();
let url = input.value.trim();
if (!isUrl(url)) url = 'https://www.google.com/search?q=' + url;
else if (!(url.startsWith('https://') || url.startsWith('http://'))) url = 'http://' + url;
document.getElementById('loading-content').style.opacity = "1"
window.location.href = __uv$config.prefix + __uv$config.encodeUrl(url);
});
function isUrl(val = ''){
if (/^http(s?):\/\//.test(val) || val.includes('.') && val.substr(0, 1) !== ' ') return true;
return false;
};
</script>
<div id="footer">
<div class="footerflex">
<div class="footerbrand">
<h3><a href="/">Alu's Unblocker</a></h3>
<p>Made with ❤️ by <a target="_black" href="https://wearr.dev">wearr</a></p>
</div>
<div class="footerlist">
<h3>Services</h3>
<ul>
<li><a target="_blank" rel=”noopener noreferrer href="https://github.com/titaniumnetwork-dev/Ultraviolet">Ultraviolet</a></li>
<li><a target="_blank" rel=”noopener noreferrer href="https://github.com/binary-person/rammerhead">Rammerhead</a></li>
</ul>
</div>
<div class="footerlist">
<h3>Socials</h3>
<ul>
<li><a target="_blank" rel=”noopener noreferrer href="https://github.com/titaniumnetwork-dev/Holy-Unblocker">GitHub</a></li>
<div class="tooltip">
<span class="tooltiptext" id="discord-tooltip">Copy</span>
<li><a onclick="copyDiscord();" onmouseout="outFunc();" class="discord-text">Discord</a></li>
</div>
</ul>
</div>
</div>
<p class="copyright">Alu's Unblocker &copy; 2024</p>
</div>
</div>
</body>
</html>

3
tsconfig.json Normal file
View file

@ -0,0 +1,3 @@
{
"extends": "astro/tsconfigs/strict"
}