redo a ton

This commit is contained in:
thonk
2023-10-01 12:02:29 -04:00
parent 5940052e67
commit ca0ab1b52b
35 changed files with 927 additions and 1180 deletions
+2 -1
View File
@@ -1 +1,2 @@
/node_modules
**/node_modules
**/package-lock.json
+35 -30
View File
@@ -1,64 +1,69 @@
import { createBareServer } from "@tomphttp/bare-server-node";
import http from "node:http";
import { createBareServer } from '@tomphttp/bare-server-node';
import http from 'node:http';
import express from 'express';
import path from 'node:path';
import mime from 'mime';
import cors from 'cors';
import url from 'url';
import fs from 'node:fs';
const app = express();
const server = http.createServer();
const bareServer = createBareServer("/bare/");
const bareServer = createBareServer('/bare/');
const port = process.env.PORT || process.argv[2] || 8080;
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
app.use(express.static(path.join(__dirname, '/static'), { extensions: ['html'] }));
let navbar = fs.readFileSync('./templates/navbar.html', 'utf-8');
app.get('/cdn/*', cors({ origin: false }), async (req, res, next) => {
fs.readdirSync('./pages').forEach(file => {
let fileData = fs.readFileSync('./pages/' + file, 'utf-8');
fileData = fileData.replace('<body>', '<body> ' + navbar);
app.get(`/${file.split('.')[0] === 'index' ? '' : file.split('.')[0]}`, (req, res) => res.status(200).send(fileData));
});
app.use(express.static(path.join(__dirname, '/static')));
app.get('/cdn/*', cors({
origin: false
}), async (req, res, next) => {
let reqTarget = `https://raw.githubusercontent.com/Skoolgq/Polaris-Assets/main/${req.path.replace('/cdn/', '')}`;
const asset = await fetch(reqTarget);
if (asset.status == 200) {
var data = Buffer.from(await asset.arrayBuffer());
const noRewrite = ['.unityweb'];
if (!noRewrite.includes(mime.getExtension(reqTarget))) res.writeHead(200, {
'content-type': mime.getType(reqTarget)
});
if (mime.getType(reqTarget) === 'text/html') data = data + '<script src="/assets/js/cdn_inject.js" preload="true"></script>';
if (mime.getType(reqTarget) === 'text/html') data = data + '<script src=\'/assets/js/cdn_inject.js\' preload=\'true\'></script>';
res.end(data);
} else next();
});
app.use((req, res, next) => {
res.status(404).sendFile(path.join(__dirname, './static/', '404.html'));
let notFoundFile = fs.readFileSync('./pages/404.html', 'utf-8');
notFoundFile = notFoundFile.replace('<body>', '<body> ' + navbar);
app.use((req, res, next) => res.status(404).send(notFoundFile));
server.on('request', (req, res) => {
if (bareServer.shouldRoute(req)) bareServer.routeRequest(req, res);
else app(req, res);
});
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('upgrade', (req, socket, head) => {
if (bareServer.shouldRoute(req)) bareServer.routeUpgrade(req, socket, head);
else socket.end();
});
server.on("listening", () => {
// plastics you can modify this urself
console.log(`Polaris running at localhost:${port}`);
server.on('listening', () => {
console.log(`Polaris started! http://localhost:${port}`);
});
server.listen({
port: port
});
//darian was here
port
});
+13 -16
View File
@@ -5,27 +5,24 @@
"main": "index.js",
"type": "module",
"scripts": {
"start": "node index.js"
"start": "node index.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/polarisdevs/Polaris.git"
"type": "git",
"url": "git+https://github.com/polarisdevs/Polaris.git"
},
"keywords": [
"games",
"unblocked",
"proxy"
"games",
"unblocked",
"proxy"
],
"author": "Polaris Development Group",
"license": "ISC",
"bugs": {
"url": "https://github.com/polarisdevs/Polaris/issues"
},
"author": "Polaris Developments",
"license": "GNU-3.0-or-later",
"homepage": "https://github.com/polarisdevs/Polaris#readme",
"dependencies": {
"@tomphttp/bare-server-node": "*",
"cors": "*",
"express": "*",
"mime": "*"
"@tomphttp/bare-server-node": "*",
"cors": "*",
"express": "*",
"mime": "*"
}
}
}
+23
View File
@@ -0,0 +1,23 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>404 Error | Polaris</title>
</head>
<body>
<div class="content box">
<h1 style="font-size: 50px;">404</h1>
<p>Looks you found a page that does not exist! Try checking your url for spelling mistakes.<br><br>Or, you can report it in our <a href="//dsc.gg/skoolworld">discord server</a>.</p>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
+35
View File
@@ -0,0 +1,35 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Apps | Polaris</title>
</head>
<body>
<div class="content">
<h1>Apps</h1>
<script type="text/javascript">
atOptions = {
'key': 'e5492073c242a1fe121f0a648fa2617f',
'format': 'iframe',
'height': 90,
'width': 728,
'params': {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e5492073c242a1fe121f0a648fa2617f/invoke.js"></scr' + 'ipt>');
</script>
<br>
<div class="apps"></div>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
+35
View File
@@ -0,0 +1,35 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Cheats | Polaris</title>
</head>
<body>
<div class="content">
<h1>Cheats</h1>
<script type="text/javascript">
atOptions = {
'key': 'e5492073c242a1fe121f0a648fa2617f',
'format': 'iframe',
'height': 90,
'width': 728,
'params': {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e5492073c242a1fe121f0a648fa2617f/invoke.js"></scr' + 'ipt>');
</script>
<br>
<div class="games"></div>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
+38
View File
@@ -0,0 +1,38 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Games | Polaris</title>
</head>
<body>
<div class="content">
<h1 style="font-size: 5vh;">Games</h1>
<input type="text" id="searchInput" class="settings-input" placeholder="Search Games...">
<br>
<div style="padding-bottom: 2vh;">
</div>
<script type="text/javascript">
atOptions = {
'key': 'e5492073c242a1fe121f0a648fa2617f',
'format': 'iframe',
'height': 90,
'width': 728,
'params': {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e5492073c242a1fe121f0a648fa2617f/invoke.js"></scr' + 'ipt>');
</script>
<br>
<div class="games">
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
+40
View File
@@ -0,0 +1,40 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<meta name="6f9c120da628a61af2a67d51a1785baa69240b33" content="6f9c120da628a61af2a67d51a1785baa69240b33" />
<title>Home | Polaris</title>
</head>
<body>
<div class="center-content">
<div class="mainpageimage">
<div class="featuredcontainer">
<div class="featuredtopbar">
<b>
<p>Featured Game</p>
</b>
</div>
<div>
<img class="featuredimg" loading="eager" data-link="true" />
</div>
</div>
</div>
<div class="mainpage-text">
<h1>Polaris</h1>
<p>By Skool</p>
<br>
<a href="https://discord.gg/skool"><button>Join our Discord</button></a>
</div>
<br>
<br>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
+40
View File
@@ -0,0 +1,40 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Search | Polaris</title>
</head>
<body>
<div class="content">
<div class="proxycontainer">
<h1 style="font-size: 6vh;">Proxy</h1>
<form id="wpf">
<input class="proxyinput" type="text" id="query" placeholder="URL or Search Query" />
</form>
</div>
<div style="bottom: 0; margin-top: 30vh;">
<script type="text/javascript">
atOptions = {
'key': 'e5492073c242a1fe121f0a648fa2617f',
'format': 'iframe',
'height': 90,
'width': 728,
'params': {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e5492073c242a1fe121f0a648fa2617f/invoke.js"></scr' + 'ipt>');
</script>
</div>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
+50
View File
@@ -0,0 +1,50 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>View | Polaris</title>
</head>
<body>
<div style="float: left; position: absolute;">
<script type="text/javascript">
atOptions = {
'key': 'e7cee1bad8f584684778a0308af26f96',
'format': 'iframe',
'height': 300,
'width': 160,
'params': {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e7cee1bad8f584684778a0308af26f96/invoke.js"></scr' + 'ipt>');
</script>
<br>
<script type="text/javascript">
atOptions = {
'key': 'e7cee1bad8f584684778a0308af26f96',
'format': 'iframe',
'height': 300,
'width': 160,
'params': {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e7cee1bad8f584684778a0308af26f96/invoke.js"></scr' + 'ipt>');
</script>
</div>
<div>
<iframe class="frame" scrolling="no" frameborder="no" sandbox="allow-scripts allow-forms allow-pointer-lock allow-same-origin"></iframe>
<div class="gamebar">
<img src="https://via.placeholder.com/20x20?text=img" id="gameicon" />
<p id="gametitle">Loading...</p>
<i class="fa-solid fa-expand" id="fullscreen"></i>
</div>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
-23
View File
@@ -1,23 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>404 Error | Polaris</title>
</head>
<body>
<div class="content box">
<h1 style="font-size: 50px;">404</h1>
<p>Looks you found a page that does not exist! Try checking your url for spelling mistakes.<br><br>Or, you can report it in our <a href="//dsc.gg/skoolworld">discord server</a>.</p>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
-31
View File
@@ -1,31 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>AnuraOS | Polaris</title>
</head>
<body>
<div>
<iframe class="frame" scrolling="no" frameborder="no" sandbox="allow-scripts allow-forms allow-pointer-lock allow-same-origin"></iframe>
<div class="gamebar">
<img src="/assets/img/chromebook.jpg" id="gameicon"/>
<p id="gametitle">AnuraOS</p>
<i class="fa-solid fa-expand" id="fullscreen"></i>
</div>
</div>
<script>
const iframe = document.querySelector('.frame');
iframe.src = "//anura.mercurywork.shop";
</script>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
-88
View File
@@ -1,88 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>App | Polaris</title>
</head>
<body>
<div style="float: left; position: absolute;">
<script type="text/javascript">
atOptions = {
'key' : 'e7cee1bad8f584684778a0308af26f96',
'format' : 'iframe',
'height' : 300,
'width' : 160,
'params' : {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e7cee1bad8f584684778a0308af26f96/invoke.js"></scr' + 'ipt>');
</script>
<br>
<script type="text/javascript">
atOptions = {
'key' : 'e7cee1bad8f584684778a0308af26f96',
'format' : 'iframe',
'height' : 300,
'width' : 160,
'params' : {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e7cee1bad8f584684778a0308af26f96/invoke.js"></scr' + 'ipt>');
</script>
</div>
<div>
<iframe style="" class="frame" scrolling="yes" frameborder="no" sandbox="allow-scripts allow-forms allow-pointer-lock allow-same-origin"></iframe>
<div class="gamebar">
<img src="https://via.placeholder.com/20x20?text=img" id="gameicon"/>
<p id="gametitle">Loading...</p>
<i class="fa-solid fa-expand" id="fullscreen"></i>
</div>
</div>
<script>
document.addEventListener('keydown', (e) => {
if (e.key === 'f') {
const iframe = document.querySelector('.frame');
if (iframe.requestFullscreen) iframe.requestFullscreen();
else if (iframe.webkitRequestFullscreen) iframe.webkitRequestFullscreen();
else if (iframe.mozRequestFullScreen) iframe.mozRequestFullScreen();
else if (iframe.msRequestFullscreen) iframe.msRequestFullscreen();
}
});
fetch('/assets/JSON/apps.json')
.then(res => res.json())
.then(games => {
const game = games[Number(new URLSearchParams(location.search).get('id'))];
if (game) {
const iframe = document.querySelector('.frame');
iframe.src = game.source;
document.querySelector('#gameicon').src = game.image;
document.querySelector('#gametitle').textContent = game.name;
} else {
document.querySelector('#gametitle').textContent = 'Failed to load App';
}
});
document.querySelector('#fullscreen').addEventListener('click', () => {
const iframe = document.querySelector('.frame');
if (iframe.requestFullscreen) iframe.requestFullscreen();
else if (iframe.webkitRequestFullscreen) iframe.webkitRequestFullscreen();
else if (iframe.mozRequestFullScreen) iframe.mozRequestFullScreen();
else if (iframe.msRequestFullscreen) iframe.msRequestFullscreen();
});
</script>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
-35
View File
@@ -1,35 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Apps | Polaris</title>
</head>
<body>
<div class="content">
<h1>Apps</h1>
<script type="text/javascript">
atOptions = {
'key' : 'e5492073c242a1fe121f0a648fa2617f',
'format' : 'iframe',
'height' : 90,
'width' : 728,
'params' : {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e5492073c242a1fe121f0a648fa2617f/invoke.js"></scr' + 'ipt>');
</script>
<br>
<div class="apps"></div>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
+41 -49
View File
@@ -1,50 +1,42 @@
[
{
"name": "Discord",
"image": "/assets/img/discord.png",
"source": "/service/hvtrs8%2F-dksaopd%2Ccmm-lmgkn",
"quickname": "discord"
},
{
"name": "Reddit",
"image": "/assets/img/reddit.png",
"source": "/service/hvtrs8%2F-wuw%2Crgdfiv.aoo%2F%3Drft%3F40003",
"quickname": "reddit"
},
{
"name": "Tiktok",
"image": "/assets/img/tiktok.png",
"source": "/service/hvtrs8%2F-wuw%2Ctkkvoi.aoo%2Fgn-",
"quickname": "tiktok"
},
{
"name": "Twitch",
"image": "/assets/img/twitch.png",
"source": "/service/hvtrs8%2F-wuw%2Ctuivcj.vv-",
"quickname": "twitch"
},
{
"name": "Twitter",
"image": "/assets/img/twitter.png",
"source": "/service/hvtrs8%2F-tuivtgr%2Ccmm-",
"quickname": "twitter"
},
{
"name": "Youtube",
"image": "/assets/img/youtube.png",
"source": "/service/hvtrs8%2F-wuw%2Cymuvu%60e%2Ccmm-",
"quickname": "youtube"
},
{
"name": "Spotify",
"image": "/assets/img/spotify.png",
"source": "/service/hvtrs8%2F-orel.qpmtkf%7B.aoo%2F",
"quickname": "spotify"
},
{
"name": "GeForce Now",
"image": "/assets/img/gnow.png",
"source": "/service/hvtrs8%2F-pna%7B.eedopcgnmw%2Ccmm-mcln%2F#/layout/games",
"quickname": "geforcenow"
}
]
{
"name": "Discord",
"image": "/assets/img/discord.png",
"source": "/service/hvtrs8%2F-dksaopd%2Ccmm-lmgkn"
},
{
"name": "Reddit",
"image": "/assets/img/reddit.png",
"source": "/service/hvtrs8%2F-wuw%2Crgdfiv.aoo%2F%3Drft%3F40003"
},
{
"name": "Tiktok",
"image": "/assets/img/tiktok.png",
"source": "/service/hvtrs8%2F-wuw%2Ctkkvoi.aoo%2Fgn-"
},
{
"name": "Twitch",
"image": "/assets/img/twitch.png",
"source": "/service/hvtrs8%2F-wuw%2Ctuivcj.vv-"
},
{
"name": "Twitter",
"image": "/assets/img/twitter.png",
"source": "/service/hvtrs8%2F-tuivtgr%2Ccmm-"
},
{
"name": "Youtube",
"image": "/assets/img/youtube.png",
"source": "/service/hvtrs8%2F-wuw%2Cymuvu%60e%2Ccmm-"
},
{
"name": "Spotify",
"image": "/assets/img/spotify.png",
"source": "/service/hvtrs8%2F-orel.qpmtkf%7B.aoo%2F"
},
{
"name": "GeForce Now",
"image": "/assets/img/gnow.png",
"source": "/service/hvtrs8%2F-pna%7B.eedopcgnmw%2Ccmm-mcln%2F#/layout/games"
}
]
+37
View File
@@ -0,0 +1,37 @@
[
{
"name": "Kahoot",
"source": "/service/hvtrs8%2F-kchmov.alwb-pna%7B%2F",
"image": "https://images.crunchbase.com/image/upload/c_lpad,f_auto,q_auto:eco,dpr_1/bscfnl23chnan1yyilrn"
},
{
"name": "Prodigy",
"source": "/service/hvtrs8%2F-wuw%2Cppofieyz.mre%2Fknqtclnilg-",
"image": "https://webcdn.prodigygame.com/common/images/socialshare.png"
},
{
"name": "Blooket",
"source": "/service/hvtrs8%2F-07kmnx.eivhwb%2Cim%2F%40lmoiev-Ahgavs-",
"image": "https://media.discordapp.net/attachments/1118495479802630174/1158062820097802331/latest.png?ex=651ae18c&is=6519900c&hm=544b7a8eb56236327b7bcabfce4b688428d59a63c8e07bcb2aab3ff81c916286&="
},
{
"name": "EdPuzzle",
"source": "/service/hvtrs8%2F-efpwzxlg.js%2Cva%2F",
"image": "https://edpuzzle.imgix.net/edpuzzle-logos/vertical-logo.png"
},
{
"name": "Gimkit",
"source": "/service/hvtrs8%2F-gktju%60.aoo%2FVhgLcz%7BSsukd-GkmiivCject",
"image": "https://images.crunchbase.com/image/upload/c_lpad,f_auto,q_auto:eco,dpr_1/iin53jlbkmdjjdpjbcde"
},
{
"name": "Quizizz",
"source": "/service/hvtrs8%2F-qwixiv.mnnile-sgrtiaeq%2Fsukzkzx%2F",
"image": "https://media.discordapp.net/attachments/1118495479802630174/1158062649792286720/Screen_Shot_2023-10-01_at_11.27.24_AM.png?ex=651ae163&is=65198fe3&hm=d9b86e146ddc9e98690822155ccdc2c239d776f1a42fa16447d820e8e34a826b&="
},
{
"name": "Quizlet",
"source": "/service/hvtrs8%2F-qwixiv.mnnile-sgrtiaeq%2Fsukznev%2F",
"image": "https://assets.quizlet.com/a/j/dist/app/i/brandmark/1024.38e7be0a829de8f.png"
}
]
File diff suppressed because one or more lines are too long
-31
View File
@@ -1,31 +0,0 @@
const load = () => {
fetch('/assets/JSON/apps.json')
.then(res => res.json())
.then(games => {
console.log(games)
const game = games.filter(a => a.quickname === new URLSearchParams(location.search).get('id'))[0];
if (game) {
const iframe = document.querySelector('.frame');
iframe.src = game.source;
document.querySelector('#gameicon').src = game.image;
document.querySelector('#gametitle').textContent = game.name;
} else {
document.querySelector('#gametitle').textContent = 'Failed to load App';
}
});
document.querySelector('#fullscreen').addEventListener('click', () => {
const iframe = document.querySelector('.frame');
if (iframe.requestFullscreen) iframe.requestFullscreen();
else if (iframe.webkitRequestFullscreen) iframe.webkitRequestFullscreen();
else if (iframe.mozRequestFullScreen) iframe.mozRequestFullScreen();
else if (iframe.msRequestFullscreen) iframe.msRequestFullscreen();
});
};
export default { load };
+49 -46
View File
@@ -1,70 +1,73 @@
import PolarisError from './error.js';
const tiltEffectSettings = {
max: 8, // max tilt rotation (degrees (deg))
perspective: 1000, // transform perspective, the lower the more extreme the tilt gets (pixels (px))
scale: 1.05, // transform scale - 2 = 200%, 1.5 = 150%, etc..
speed: 800, // speed (transition-duration) of the enter/exit transition (milliseconds (ms))
easing: 'cubic-bezier(.03,.98,.52,.99)' // easing (transition-timing-function) of the enter/exit transition
max: 8, // max tilt rotation (degrees (deg))
perspective: 1000, // transform perspective, the lower the more extreme the tilt gets (pixels (px))
scale: 1.05, // transform scale - 2 = 200%, 1.5 = 150%, etc..
speed: 800, // speed (transition-duration) of the enter/exit transition (milliseconds (ms))
easing: 'cubic-bezier(.03,.98,.52,.99)' // easing (transition-timing-function) of the enter/exit transition
};
const load = () => {
fetch('/assets/JSON/apps.json')
.then(res => res.json())
.then(apps => {
apps.forEach(app => {
const el = document.createElement('div');
el.classList = 'app';
el.innerHTML = `<img src="${app.image}"><h3>${app.name}</h3>`;
document.querySelector('.apps').appendChild(el);
fetch('/assets/JSON/apps.json').then(res => res.json()).then(apps => {
apps.forEach(app => {
const el = document.createElement('div');
el.classList = 'app';
el.innerHTML = `<img src="${app.image}"><h3>${app.name}</h3>`;
document.querySelector('.apps').appendChild(el);
el.addEventListener('click', () => {
location.href = `/appplayer?id=${app.quickname}`;
el.addEventListener('click', () => {
localStorage.setItem('frameData', JSON.stringify({
type: 'app',
app
}));
location.href = '/view';
});
el.addEventListener('mouseenter', appMouseEnter);
el.addEventListener('mousemove', appMouseMove);
el.addEventListener('mouseleave', appMouseLeave);
});
el.addEventListener('mouseenter', appMouseEnter);
el.addEventListener('mousemove', appMouseMove);
el.addEventListener('mouseleave', appMouseLeave);
});
})
.catch(e => new PolarisError('Failed to load Apps'));
}).catch(e => new PolarisError('Failed to load Apps'));
};
function appMouseEnter(event) {
setTransition(event);
setTransition(event);
}
function appMouseMove(event) {
const app = event.currentTarget;
const appWidth = app.offsetWidth;
const appHeight = app.offsetHeight;
const centerX = app.offsetLeft + appWidth / 2;
const centerY = app.offsetTop + appHeight / 2;
const mouseX = event.clientX - centerX;
const mouseY = event.clientY - centerY;
const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (appHeight / 2);
const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (appWidth / 2);
const rotateX = rotateXUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateXUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateXUncapped);
const rotateY = rotateYUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateYUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateYUncapped);
const app = event.currentTarget;
const appWidth = app.offsetWidth;
const appHeight = app.offsetHeight;
const centerX = app.offsetLeft + appWidth / 2;
const centerY = app.offsetTop + appHeight / 2;
const mouseX = event.clientX - centerX;
const mouseY = event.clientY - centerY;
const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (appHeight / 2);
const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (appWidth / 2);
const rotateX = rotateXUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateXUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateXUncapped);
const rotateY = rotateYUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateYUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateYUncapped);
app.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)
app.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)
scale3d(${tiltEffectSettings.scale}, ${tiltEffectSettings.scale}, ${tiltEffectSettings.scale})`;
}
function appMouseLeave(event) {
event.currentTarget.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`;
setTransition(event);
event.currentTarget.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`;
setTransition(event);
}
function setTransition(event) {
const app = event.currentTarget;
clearTimeout(app.transitionTimeoutId);
app.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`;
app.transitionTimeoutId = setTimeout(() => {
app.style.transition = '';
}, tiltEffectSettings.speed);
const app = event.currentTarget;
clearTimeout(app.transitionTimeoutId);
app.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`;
app.transitionTimeoutId = setTimeout(() => {
app.style.transition = '';
}, tiltEffectSettings.speed);
}
export default { load };
export default {
load
};
+49 -49
View File
@@ -1,73 +1,73 @@
import PolarisError from './error.js';
import frame from './frame.js';
const tiltEffectSettings = {
max: 8, // max tilt rotation (degrees (deg))
perspective: 1000, // transform perspective, the lower the more extreme the tilt gets (pixels (px))
scale: 1.05, // transform scale - 2 = 200%, 1.5 = 150%, etc..
speed: 800, // speed (transition-duration) of the enter/exit transition (milliseconds (ms))
easing: 'cubic-bezier(.03,.98,.52,.99)' // easing (transition-timing-function) of the enter/exit transition
max: 8, // max tilt rotation (degrees (deg))
perspective: 1000, // transform perspective, the lower the more extreme the tilt gets (pixels (px))
scale: 1.05, // transform scale - 2 = 200%, 1.5 = 150%, etc..
speed: 800, // speed (transition-duration) of the enter/exit transition (milliseconds (ms))
easing: 'cubic-bezier(.03,.98,.52,.99)' // easing (transition-timing-function) of the enter/exit transition
};
const load = () => {
fetch('/assets/JSON/cheats.json')
.then(res => res.json())
.then(games => {
games.forEach(game => {
const el = document.createElement('div');
el.classList = 'game';
el.innerHTML = `<img src="${game.image}"><h3>${game.name}</h3>`;
document.querySelector('.games').appendChild(el);
fetch('/assets/JSON/cheats.json').then(res => res.json()).then(cheats => {
cheats.forEach(cheat => {
const el = document.createElement('div');
el.classList = 'game';
el.innerHTML = `<img src="${cheat.image}"><h3>${cheat.name}</h3>`;
document.querySelector('.games').appendChild(el);
el.addEventListener('click', () => {
window.location.href = `/play?id=${game.id}`;
el.addEventListener('click', () => {
localStorage.setItem('frameData', JSON.stringify({
type: 'cheat',
cheat
}));
location.href = '/view';
});
el.addEventListener('mouseenter', gameMouseEnter);
el.addEventListener('mousemove', gameMouseMove);
el.addEventListener('mouseleave', gameMouseLeave);
});
el.addEventListener('mouseenter', gameMouseEnter);
el.addEventListener('mousemove', gameMouseMove);
el.addEventListener('mouseleave', gameMouseLeave);
});
})
.catch(e => {
new PolarisError('Failed to load games');
});
}).catch(e => new PolarisError('Failed to load cheats.'));
};
function gameMouseEnter(event) {
setTransition(event);
setTransition(event);
}
function gameMouseMove(event) {
const game = event.currentTarget;
const gameWidth = game.offsetWidth;
const gameHeight = game.offsetHeight;
const centerX = game.offsetLeft + gameWidth / 2;
const centerY = game.offsetTop + gameHeight / 2;
const mouseX = event.clientX - centerX;
const mouseY = event.clientY - centerY;
const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (gameHeight / 2);
const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (gameWidth / 2);
const rotateX = rotateXUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateXUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateXUncapped);
const rotateY = rotateYUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateYUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateYUncapped);
const game = event.currentTarget;
const gameWidth = game.offsetWidth;
const gameHeight = game.offsetHeight;
const centerX = game.offsetLeft + gameWidth / 2;
const centerY = game.offsetTop + gameHeight / 2;
const mouseX = event.clientX - centerX;
const mouseY = event.clientY - centerY;
const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (gameHeight / 2);
const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (gameWidth / 2);
const rotateX = rotateXUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateXUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateXUncapped);
const rotateY = rotateYUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateYUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateYUncapped);
game.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)
game.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)
scale3d(${tiltEffectSettings.scale}, ${tiltEffectSettings.scale}, ${tiltEffectSettings.scale})`;
}
function gameMouseLeave(event) {
event.currentTarget.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`;
setTransition(event);
event.currentTarget.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`;
setTransition(event);
}
function setTransition(event) {
const game = event.currentTarget;
clearTimeout(game.transitionTimeoutId);
game.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`;
game.transitionTimeoutId = setTimeout(() => {
game.style.transition = '';
}, tiltEffectSettings.speed);
const game = event.currentTarget;
clearTimeout(game.transitionTimeoutId);
game.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`;
game.transitionTimeoutId = setTimeout(() => {
game.style.transition = '';
}, tiltEffectSettings.speed);
}
export default { load };
export default {
load
};
-35
View File
@@ -1,35 +0,0 @@
let xor = {
encode: (str, key = 2) => {
if (!str) return str;
return encodeURIComponent(str.split('').map((e, i) => i % key ? String.fromCharCode(e.charCodeAt(0) ^ key) : e).join(''));
},
decode: (str, key = 2) => {
if (!str) return str;
return decodeURIComponent(str).split('').map((e, i) => i % key ? String.fromCharCode(e.charCodeAt(0) ^ key) : e).join('');
}
};
let workerLoaded;
const worker = async () => await navigator.serviceWorker.register('./sw.js', {
scope: '/service/',
});
document.addEventListener('DOMContentLoaded', async () => {
await worker();
workerLoaded = true;
});
const dynamicRedirect = async (link) => {
if (!workerLoaded) await worker();
const url = /^(http(s)?:\/\/)?([\w-]+\.)+[\w]{2,}(\/.*)?$/.test(link) ?
((!link.startsWith('http://') && !link.startsWith('https://')) ? 'https://' + link : link) :
'https://www.google.com/search?q=' + encodeURIComponent(link);
location.href = `/service/${xor.encode(url)}`;
};
export { dynamicRedirect, worker, workerLoaded };
+24 -13
View File
@@ -1,23 +1,34 @@
const load = () => {
fetch('/assets/JSON/games.json')
.then(res => res.json())
.then(games => {
const game = games[Number(new URLSearchParams(location.search).get('id'))];
let frameData = JSON.parse(localStorage.getItem('frameData'));
if (!frameData) location.href = '/';
if (game) {
const iframe = document.querySelector('.frame');
const iframe = document.querySelector('.frame');
iframe.src = game.source;
document.querySelector('#gameicon').src = game.image;
document.querySelector('#gametitle').textContent = game.name;
} else {
document.querySelector('#gametitle').textContent = 'Failed to load Game';
}
});
if (frameData.type === 'game') {
if (frameData.game) {
iframe.src = frameData.game.source;
document.querySelector('#gameicon').src = frameData.game.image;
document.querySelector('#gametitle').textContent = frameData.game.name;
} else document.querySelector('#gametitle').textContent = 'Failed to load game.';
} else if (frameData.type === 'app') {
if (frameData.app) {
iframe.src = frameData.app.source;
document.querySelector('#gameicon').src = frameData.app.image;
document.querySelector('#gametitle').textContent = frameData.app.name;
} else document.querySelector('#gametitle').textContent = 'Failed to load app.';
} else if (frameData.type === 'cheat') {
if (frameData.cheat) {
iframe.src = frameData.cheat.source;
document.querySelector('#gameicon').src = frameData.cheat.image;
document.querySelector('#gametitle').textContent = frameData.cheat.name;
} else document.querySelector('#gametitle').textContent = 'Failed to load cheat.';
} else location.href = '/';
document.querySelector('#fullscreen').addEventListener('click', () => {
const iframe = document.querySelector('.frame');
iframe.style.borderRadius = '0px';
if (iframe.requestFullscreen) iframe.requestFullscreen();
else if (iframe.webkitRequestFullscreen) iframe.webkitRequestFullscreen();
else if (iframe.mozRequestFullScreen) iframe.mozRequestFullScreen();
+64 -58
View File
@@ -1,95 +1,101 @@
import PolarisError from './error.js';
const tiltEffectSettings = {
max: 8, // max tilt rotation (degrees (deg))
perspective: 1000, // transform perspective, the lower the more extreme the tilt gets (pixels (px))
scale: 1.05, // transform scale - 2 = 200%, 1.5 = 150%, etc..
speed: 800, // speed (transition-duration) of the enter/exit transition (milliseconds (ms))
easing: 'cubic-bezier(.03,.98,.52,.99)' // easing (transition-timing-function) of the enter/exit transition
max: 8, // max tilt rotation (degrees (deg))
perspective: 1000, // transform perspective, the lower the more extreme the tilt gets (pixels (px))
scale: 1.05, // transform scale - 2 = 200%, 1.5 = 150%, etc..
speed: 800, // speed (transition-duration) of the enter/exit transition (milliseconds (ms))
easing: 'cubic-bezier(.03,.98,.52,.99)' // easing (transition-timing-function) of the enter/exit transition
};
let games = []; // store all games
let filteredGames = []; // store filtered games
const load = () => {
fetch('/assets/JSON/games.json')
.then(res => res.json())
.then(data => {
games = data;
filteredGames = games; // initialize filtered games with all games
fetch('/assets/JSON/games.json').then(res => res.json()).then(data => {
games = data;
filteredGames = games; // initialize filtered games with all games
renderGames(filteredGames); // render games initially
renderGames(filteredGames); // render games initially
// Add event listener to search input
const searchInput = document.getElementById('searchInput');
searchInput.addEventListener('input', filterGames);
})
.catch(e => {
new PolarisError('Failed to load games');
});
// Add event listener to search input
const searchInput = document.getElementById('searchInput');
searchInput.addEventListener('input', filterGames);
})
.catch(e => {
new PolarisError('Failed to load games');
});
};
function filterGames() {
const searchInput = document.getElementById('searchInput');
const searchTerm = searchInput.value.toLowerCase();
const searchInput = document.getElementById('searchInput');
const searchTerm = searchInput.value.toLowerCase();
filteredGames = games.filter(game => game.name.toLowerCase().includes(searchTerm));
filteredGames = games.filter(game => game.name.toLowerCase().includes(searchTerm));
renderGames(filteredGames); // render filtered games
renderGames(filteredGames); // render filtered games
}
function renderGames(gamesToRender) {
const gamesContainer = document.querySelector('.games');
gamesContainer.innerHTML = ''; // clear previous games
const gamesContainer = document.querySelector('.games');
gamesContainer.innerHTML = ''; // clear previous games
gamesToRender.forEach(game => {
const el = document.createElement('div');
el.classList = 'game';
el.innerHTML = `<img loading="lazy" src="${game.image}"><h3>${game.name}</h3>`;
gamesContainer.appendChild(el);
gamesToRender.forEach(game => {
const el = document.createElement('div');
el.classList = 'game';
el.innerHTML = `<img loading="lazy" src="${game.image}"><h3>${game.name}</h3>`;
gamesContainer.appendChild(el);
el.addEventListener('click', () => location.href = `/play?id=${games.indexOf(game)}`);
el.addEventListener('click', () => {
localStorage.setItem('frameData', JSON.stringify({
type: 'game',
game
}));
location.href = '/view';
});
el.addEventListener('mouseenter', gameMouseEnter);
el.addEventListener('mousemove', gameMouseMove);
el.addEventListener('mouseleave', gameMouseLeave);
});
el.addEventListener('mouseenter', gameMouseEnter);
el.addEventListener('mousemove', gameMouseMove);
el.addEventListener('mouseleave', gameMouseLeave);
});
}
function gameMouseEnter(event) {
setTransition(event);
setTransition(event);
}
function gameMouseMove(event) {
const game = event.currentTarget;
const gameWidth = game.offsetWidth;
const gameHeight = game.offsetHeight;
const centerX = game.offsetLeft + gameWidth / 2;
const centerY = game.offsetTop + gameHeight / 2;
const mouseX = event.clientX - centerX;
const mouseY = event.clientY - centerY;
const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (gameHeight / 2);
const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (gameWidth / 2);
const rotateX = rotateXUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateXUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateXUncapped);
const rotateY = rotateYUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateYUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateYUncapped);
const game = event.currentTarget;
const gameWidth = game.offsetWidth;
const gameHeight = game.offsetHeight;
const centerX = game.offsetLeft + gameWidth / 2;
const centerY = game.offsetTop + gameHeight / 2;
const mouseX = event.clientX - centerX;
const mouseY = event.clientY - centerY;
const rotateXUncapped = (+1) * tiltEffectSettings.max * mouseY / (gameHeight / 2);
const rotateYUncapped = (-1) * tiltEffectSettings.max * mouseX / (gameWidth / 2);
const rotateX = rotateXUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateXUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateXUncapped);
const rotateY = rotateYUncapped < -tiltEffectSettings.max ? -tiltEffectSettings.max :
(rotateYUncapped > tiltEffectSettings.max ? tiltEffectSettings.max : rotateYUncapped);
game.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale3d(${tiltEffectSettings.scale}, ${tiltEffectSettings.scale}, ${tiltEffectSettings.scale})`;
game.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale3d(${tiltEffectSettings.scale}, ${tiltEffectSettings.scale}, ${tiltEffectSettings.scale})`;
}
function gameMouseLeave(event) {
event.currentTarget.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`;
setTransition(event);
event.currentTarget.style.transform = `perspective(${tiltEffectSettings.perspective}px) rotateX(0deg) rotateY(0deg) scale3d(1, 1, 1)`;
setTransition(event);
}
function setTransition(event) {
const game = event.currentTarget;
clearTimeout(game.transitionTimeoutId);
game.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`;
game.transitionTimeoutId = setTimeout(() => {
game.style.transition = '';
}, tiltEffectSettings.speed);
const game = event.currentTarget;
clearTimeout(game.transitionTimeoutId);
game.style.transition = `transform ${tiltEffectSettings.speed}ms ${tiltEffectSettings.easing}`;
game.transitionTimeoutId = setTimeout(() => {
game.style.transition = '';
}, tiltEffectSettings.speed);
}
export default { load };
export default {
load
};
+16 -113
View File
@@ -2,27 +2,15 @@
import { load } from './settings.js';
import Games from './games.js';
import Apps from './apps.js';
import Search from './search.js';
import Cheats from './cheats.js';
import Frame from './frame.js';
import AppPlayer from './appplayer.js';
import WPM from './wpm.js';
import PolarisError from './error.js';
const Settings = {
load: load
};
fetch('/assets/misc/nav.html')
.then(res => res.text())
.then(content => {
document.body.insertAdjacentHTML('afterbegin', content);
if (window.self !== window.top) {
window.parent.postMessage('loaded', location.origin);
}
}).catch(e => {
new PolarisError('Failed to load navbar <a href="" onclick"javascript:location.reload();" data-link="true"><button>Reload</button></a>');
});
onbeforeunload = (e) => {
if (localStorage.getItem('prevent_close') === 'true') {
e.preventDefault();
@@ -33,119 +21,35 @@ onbeforeunload = (e) => {
sessionStorage.clear();
}
var previousLocation = location.pathname;
const urlchange = setInterval(() => {
if (location.pathname !== previousLocation) {
const frame = document.createElement('iframe');
frame.src = location.pathname
frame.style = 'display: none';
document.body.appendChild(frame);
frame.contentWindow.addEventListener('DOMContentLoaded', () => {
document.body.style.display = 'none';
window.onmessage = (e) => {
if (e.data == 'loaded') {
window.history.pushState({}, '', location.pathname);
document.documentElement.innerHTML = frame.contentWindow.document.documentElement.innerHTML;
document.body.style.display = 'none';
Settings.load();
registerLinks();
if (location.pathname === '/games') Games.load();
if (location.pathname === '/apps') Apps.load();
if (location.pathname === '/search') WPM.load();
setTimeout(() => {
document.body.style.display = 'block';
}, 500);
}
}
});
}
previousLocation = location.pathname;
}, 1);
window.onhashchange = () => {
if (location.hash === '#settings') document.querySelector('.sidebar').classList.add('active');
else document.querySelector('.sidebar').classList.remove('active');
};
const registerLinks = () => {
document.querySelectorAll('a').forEach(a => {
a.onclick = (e) => {
if (a.dataset.link !== 'true') {
e.preventDefault();
if (a.href.startsWith(location.origin)) {
if (window.location.href !== a.href) {
const frame = document.createElement('iframe');
frame.src = a.href;
frame.style = 'display: none';
document.body.appendChild(frame);
frame.contentWindow.addEventListener('DOMContentLoaded', () => {
document.body.style.display = 'none';
window.onmessage = (e) => {
if (e.data == 'loaded') {
window.history.pushState({}, '', a.href);
previousLocation = location.pathname;
document.documentElement.innerHTML = frame.contentWindow.document.documentElement.innerHTML;
document.body.style.display = 'none';
Settings.load();
registerLinks();
if (location.pathname === '/games') Games.load();
if (location.pathname === '/apps') Apps.load();
if (location.pathname === '/search') WPM.load();
setTimeout(() => document.body.style.display = 'block', 500);
}
}
});
}
} else {
a.setAttribute('data-link', 'true');
a.click();
}
}
}
});
}
if (window.self === window.top) {
setTimeout(() => {
Settings.load();
registerLinks();
if (location.pathname === '/games') Games.load();
if (location.pathname === '/apps') Apps.load();
if (location.pathname === '/search') WPM.load();
if (location.pathname === '/play') Frame.load();
if (location.pathname === '/appplayer') AppPlayer.load();
if (location.pathname === '/search') Search.load();
if (location.pathname === '/cheats') Cheats.load();
if (location.pathname === '/view') Frame.load();
}, 500);
}
if (location.pathname === '/') {
fetch('/assets/JSON/games.json')
.then(res => res.json())
.then(games => {
const randomID = 34; // :3
const game = games[randomID];
fetch('/assets/JSON/games.json').then(res => res.json()).then(games => {
const randomID = 34; // :3
const game = games[randomID];
document.querySelector('.featuredimg').addEventListener('click', function () {
window.location.href = '/play?id=' + randomID;
});
document.querySelector('.featuredimg').src = game.image;
}).catch(e => new PolarisError('Failed to load featured game'));
document.querySelector('.featuredimg').addEventListener('click', function () {
window.location.href = '/play?id=' + randomID;
});
document.querySelector('.featuredimg').src = game.image;
}).catch(e => new PolarisError('Failed to load featured game.'));
}
// Create 37 snow divs
/*for (let i = 0; i < 37; i++) {
const snowDiv = document.createElement("div");
@@ -153,6 +57,5 @@ if (location.pathname === '/') {
document.body.appendChild(snowDiv);
}*/
const Polaris = { Settings, Games, Apps, WPM, PolarisError, registerLinks };
export default Polaris;
const Polaris = { Settings, Games, Apps, Frame, PolarisError };
export default Polaris;
+42
View File
@@ -0,0 +1,42 @@
/* Stands for Web Prxxy Manager because the keywork Prxxy is usually blocked */
const load = () => {
let xor = {
encode: (str, key = 2) => {
if (!str) return str;
return encodeURIComponent(str.split('').map((e, i) => i % key ? String.fromCharCode(e.charCodeAt(0) ^ key) : e).join(''));
},
decode: (str, key = 2) => {
if (!str) return str;
return decodeURIComponent(str).split('').map((e, i) => i % key ? String.fromCharCode(e.charCodeAt(0) ^ key) : e).join('');
}
};
let workerLoaded = false;
let loadWorker = async () => await navigator.serviceWorker.register('./sw.js', {
scope: '/service/',
});
(async () => {
await loadWorker();
workerLoaded = true;
})();
const form = document.querySelector('#wpf');
const query = document.querySelector('#query');
form.addEventListener('submit', async (e) => {
e.preventDefault();
if (typeof navigator.serviceWorker === 'undefined') new PolarisError('Failed to load Prxxy');
if (!workerLoaded) await loadWorker();
const url = /^(http(s)?:\/\/)?([\w-]+\.)+[\w]{2,}(\/.*)?$/.test(query.value) ?
((!query.value.startsWith('http://') && !query.value.startsWith('https://')) ? 'https://' + query.value : query.value) :
'https://www.google.com/search?q=' + encodeURIComponent(query.value);
location.href = `/service/${xor.encode(url)}`;
});
}
export default { load };
-1
View File
@@ -8,7 +8,6 @@ const isScrollable = (element) => {
class Settings {
constructor() {
if (this.get('panic_key')) document.querySelector('#panic_key').value = this.get('panic_key');
if (this.get('panic_url')) document.querySelector('#panic_url').value = this.get('panic_url');
if (this.get('cloak')) {
-7
View File
@@ -1,7 +0,0 @@
const load = () => {
const evBundle = document.createElement('script');
evBundle.src = '/uv/ev.bundle.js';
document.body.appendChild(evBundle);
}
export default { load };
-19
View File
@@ -1,19 +0,0 @@
/* Stands for Web Prxxy Manager because the keywork Prxxy is usually blocked */
import { dynamicRedirect, worker, workerLoaded } from './dynamic.js';
const load = () => {
const form = document.querySelector('#wpf');
const query = document.querySelector('#query');
form.addEventListener('submit', async (e) => {
e.preventDefault();
if (typeof navigator.serviceWorker === 'undefined') new PolarisError('Failed to load Prxxy');
if (!workerLoaded) await worker();
dynamicRedirect(query.value);
});
}
export default { load };
-7
View File
@@ -1,7 +0,0 @@
<iframe class="frame" scrolling="no" frameborder="no"></iframe>
<div class="gamebar">
<img src="https://via.placeholder.com/20x20?text=img" id="gameicon" />
<p id="gametitle">Loading...</p>
<i class="fa-solid fa-expand" id="fullscreen"></i>
</div>
-38
View File
@@ -1,38 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Games | Polaris</title>
</head>
<body>
<div class="content">
<h1 style="font-size: 5vh;">Games</h1>
<input style="" type="text" id="searchInput" class="settings-input" placeholder="Search Games...">
<br>
<div style="padding-bottom: 2vh;">
</div>
<script type="text/javascript">
atOptions = {
'key' : 'e5492073c242a1fe121f0a648fa2617f',
'format' : 'iframe',
'height' : 90,
'width' : 728,
'params' : {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e5492073c242a1fe121f0a648fa2617f/invoke.js"></scr' + 'ipt>');
</script>
<br>
<div class="games">
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
-38
View File
@@ -1,38 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<meta name="6f9c120da628a61af2a67d51a1785baa69240b33" content="6f9c120da628a61af2a67d51a1785baa69240b33" />
<title>Home | Polaris</title>
</head>
<body>
<div class="center-content">
<div class="mainpageimage">
<div class="featuredcontainer">
<div class="featuredtopbar">
<b><p>Featured Game</p></b>
</div>
<div>
<img class="featuredimg" loading="eager" data-link="true"/>
</div>
</div>
</div>
<div class="mainpage-text">
<h1>Polaris</h1>
<p>By Skool</p>
<br>
<a href="https://discord.gg/skool"><button>Join our Discord</button></a>
</div>
<br>
<br>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
-50
View File
@@ -1,50 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Play | Polaris</title>
</head>
<body style="overflow: hidden;">
<div style="float: left; position: absolute;">
<script type="text/javascript">
atOptions = {
'key' : 'e7cee1bad8f584684778a0308af26f96',
'format' : 'iframe',
'height' : 300,
'width' : 160,
'params' : {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e7cee1bad8f584684778a0308af26f96/invoke.js"></scr' + 'ipt>');
</script>
<br>
<script type="text/javascript">
atOptions = {
'key' : 'e7cee1bad8f584684778a0308af26f96',
'format' : 'iframe',
'height' : 300,
'width' : 160,
'params' : {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e7cee1bad8f584684778a0308af26f96/invoke.js"></scr' + 'ipt>');
</script>
</div>
<div>
<iframe class="frame" scrolling="no" frameborder="no" sandbox="allow-scripts allow-forms allow-pointer-lock allow-same-origin"></iframe>
<div class="gamebar">
<img src="https://via.placeholder.com/20x20?text=img" id="gameicon"/>
<p id="gametitle">Loading...</p>
<i class="fa-solid fa-expand" id="fullscreen"></i>
</div>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
-40
View File
@@ -1,40 +0,0 @@
<!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">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/main.css">
<title>Search | Polaris</title>
</head>
<body>
<div class="content">
<div class="proxycontainer">
<h1 style="font-size: 6vh;">Proxy</h1>
<form id="wpf">
<input class="proxyinput" type="text" id="query" placeholder="URL or Search Query" />
</form>
</div>
<div style="bottom: 0; margin-top: 30vh;">
<script type="text/javascript">
atOptions = {
'key' : 'e5492073c242a1fe121f0a648fa2617f',
'format' : 'iframe',
'height' : 90,
'width' : 728,
'params' : {}
};
document.write('<scr' + 'ipt type="text/javascript" src="//outrightsham.com/e5492073c242a1fe121f0a648fa2617f/invoke.js"></scr' + 'ipt>');
</script>
</div>
</div>
<script src="/assets/js/main.js" type="module"></script>
</body>
</html>
@@ -1,6 +1,6 @@
<div class="navbar">
<a class="title" href="/">
<img src="/assets/img/logo.png" loading="eager"/>
<img src="/assets/img/logo.png" loading="eager" />
<span>Polaris<span>By Skool</span></span>
</a>
@@ -8,9 +8,8 @@
<a href="/games"><i class="fa-solid fa-gamepad-modern fa-xs"></i>Games</a>
<a href="/apps"><i class="fa-solid fa-rocket-launch fa-xs"></i>Apps</a>
<a href="/search"><i class="fa-solid fa-magnifying-glass fa-xs"></i>Proxy</a>
<!--<a href="/cheats"><i class="fa-solid fa-computer fa-xs"></i>Cheats</a>-->
<a href="#settings" data-link="true" data-attr="sidebar_trigger"><i
class="fa-solid fa-gear fa-sm"></i>Settings</a>
<a href="/cheats"><i class="fa-solid fa-computer fa-xs"></i>Cheats</a>
<a href="#settings" data-link="true" data-attr="sidebar_trigger"><i class="fa-solid fa-gear fa-sm"></i>Settings</a>
</div>
</div>
@@ -40,7 +39,7 @@
<button class="settings-button">Violet</button>
</div>
<h3>Tab Cloak</h3>
<h3>Tab Cloak</h3>
<select id="cloak_select">
<option value="none">None</option>
<option value="custom">Custom</option>
@@ -52,12 +51,6 @@
<input class="settings-input" type="text" placeholder="Title" id="title" />
<input class="settings-input" type="text" placeholder="eg: google.com" id="domain" />
</div>
<h3>Developer Mode</h3>
<div class="switch">
<input type="checkbox" id="">
<span class="slider"></span>
</div>
<br>
<br>
</div>
</div>
+4 -8
View File
@@ -1,15 +1,11 @@
{
"version": 2,
"builds": [
{
"builds": [{
"src": "index.js",
"use": "@vercel/node"
}
],
"routes": [
{
}],
"routes": [{
"src": "/(.*)",
"dest": "index.js"
}
]
}]
}