first commit
0
.gitignore
vendored
Normal file
74
404.html
Normal file
@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script>
|
||||
if(document.href.contains("eg1.8") || document.href.contains("eaglercraft")) {
|
||||
document.href = "/semag/eg/"
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<alerts>
|
||||
|
||||
</alerts>
|
||||
<body id="noscroll">
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main id="main" class="noscroll">
|
||||
<h1>Page not found!</h1>
|
||||
<p>We could not find this page.</p>
|
||||
<p>Trying to access a page such as login, register, or a user page? Those are only available on official links.</p>
|
||||
<p><a href="https://discord.gg/7jyufnwJNf">Join the Discord to find official links.</a></p>
|
||||
<a href="/index.html"><button>Go home</button></a>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer class="noscroll">
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
20
README.md
Normal file
@ -0,0 +1,20 @@
|
||||
## Selenite
|
||||
The better unblocked games website.
|
||||
## Deploy to a cloud service
|
||||
[](https://railway.app/new/template?template=https://gitlab.com/skysthelimit.dev/selenite)
|
||||
[](https://app.cyclic.sh/api/app/deploy/selenite-cc/selenite-old)
|
||||
[](https://app.koyeb.com/deploy?type=git&repository=gitlab.com/skysthelimit.dev/selenite&branch=main&name=selenite)
|
||||
[](https://render.com/deploy?repo=https://gitlab.com/skysthelimit.dev/selenite)
|
||||
[](https://replit.com/github/selenite-cc/selenite-old)
|
||||
[](https://glitch.com/edit/#!/import/github/selenite-cc/selenite-old)
|
||||
[](https://vercel.com/new/clone?repository-url=https://gitlab.com/skysthelimit.dev/selenite)
|
||||
## Contributors
|
||||
<img height="40px" width="40px" src="https://avatars.githubusercontent.com/u/64362346?v=4"></img>
|
||||
<a href="https://github.com/skysthelimitt"><p>Sky</p></a><br>
|
||||
<img height="40px" width="40px" src="https://cdn.discordapp.com/avatars/578300487678558208/e3ae410d681e77823c1df58a6d7ccab9?size=1024"></img>
|
||||
<a href="https://codeberg.org/LEGALISE_PIRACY"><p>LEGALISE_PIRACY</p></a><br>
|
||||
<img height="40px" width="40px" src="https://cdn.discordapp.com/avatars/510677660775743500/79bb34e1537d9e670db4a0ea2ad6f56f?size=1024"></img>
|
||||
<a href="https://github.com/a456pur"><p>Astralogical</p></a>
|
||||
|
||||
## Support
|
||||
Join our [discord server](https://discord.gg/WDZhkdFyF4) to contact our support team free of charge for any reason 24/7.
|
164
about.html
Normal file
@ -0,0 +1,164 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>About | Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<style>
|
||||
.samerow p {
|
||||
margin-right: 4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<!-- toastify -->
|
||||
<script></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main id="main">
|
||||
<h1>About Selenite</h1>
|
||||
<p style="padding-left: 100px; padding-right: 100px; padding-bottom: 20px">Selenite is a unblocked games website with over 200 games, with a simple tab cloak. Selenite was started as a small project started on Padlet, shared between friends. After ~1 month, we transferred to a custom made website. After a few rebrandings and redesigns, we've ended up at the Selenite you know and love (unless you work at a school).</p>
|
||||
|
||||
<h2>Credits</h2>
|
||||
<p><a href="https://jquery.com/">jQuery</a>: a lot of the more technical stuff.</p>
|
||||
<p><a href="https://github.com/js-cookie/js-cookie/">js-cookie</a>: working with cookies.</p>
|
||||
<p><a href="https://shoelace.style">Shoelace</a>: a lot of smaller styling, such as the safe mode alert</p>
|
||||
<p><a href="https://www.bootcss.com/">Bootstrap</a>: useful as a base for some smaller, styling such as the new games popup</p>
|
||||
<p><a href="https://3kh0.net">3kh0</a>: a lot of games, the download/upload save feature, and the main inspiration</p>
|
||||
<p><a href="/backgrounds.html">View Background Credits</a></p>
|
||||
|
||||
<h2>Developers</h2>
|
||||
<div class="samerow">
|
||||
<a href="https://github.com/skysthelimitt"
|
||||
><sl-avatar image="/img/pfps/sky.webp" label="skysthelimitt"></sl-avatar>
|
||||
<p>Sky</p></a
|
||||
>
|
||||
<a href="https://codeberg.org/LEGALISE_PIRACY"
|
||||
><sl-avatar image="/img/pfps/legalise.webp" label="LEGALISE_PIRACY"></sl-avatar>
|
||||
<p>LEGALISE</p></a
|
||||
>
|
||||
<a href="https://github.com/a456pur"
|
||||
><sl-avatar image="/img/pfps/astra.webp" label="a456pur"></sl-avatar>
|
||||
<p>a456pur</p></a
|
||||
>
|
||||
</div>
|
||||
|
||||
<h2>Supporters</h2>
|
||||
<div class="samerow">
|
||||
<a class="avatar" href="https://discord.com/users/731338278082445376"
|
||||
><sl-avatar image="/img/pfps/caidn.webp" label="Caidn"></sl-avatar>
|
||||
<p>Caidn</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.com/users/704499571400638554"
|
||||
><sl-avatar image="/img/pfps/buttsfart.webp" label="Buttsfart"></sl-avatar>
|
||||
<p>Buttsfart</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.com/users/778709612621987850"
|
||||
><sl-avatar image="/img/pfps/ayo.webp" label="ayo"></sl-avatar>
|
||||
<p>ayo</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.com/users/510677660775743500"
|
||||
><sl-avatar image="/img/pfps/astra.webp" label="astra"></sl-avatar>
|
||||
<p>a456pur</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.com/users/724793658011811862"
|
||||
><sl-avatar image="/img/pfps/dire.webp" label="direflaws"></sl-avatar>
|
||||
<p>DireFlaws</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.com/users/1068293020534964306"
|
||||
><sl-avatar image="/img/pfps/awesome.webp" label="awesome"></sl-avatar>
|
||||
<p>Awesome-XV</p></a
|
||||
>
|
||||
</div>
|
||||
<h2>Partners</h2>
|
||||
<div class="samerow">
|
||||
|
||||
<a class="avatar" href="https://discord.gg/echodev-971769908205604864"
|
||||
><sl-avatar image="/img/pfps/3kh0.webp" label="3kh0"></sl-avatar>
|
||||
<p>3kh0.net</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/Cqaa8x82Ch"
|
||||
><sl-avatar image="/img/pfps/snor.webp" label="snorlax"></sl-avatar>
|
||||
<p>Snorlax's Cave</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/DYSB3TeQ2y"
|
||||
><sl-avatar image="/img/pfps/shadow.webp" label="shadow"></sl-avatar>
|
||||
<p>Shadow Network</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/DmQMtsTPD6"
|
||||
><sl-avatar image="/img/pfps/night.webp" label="night"></sl-avatar>
|
||||
<p>Night Network</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/xMyUXZ7Z8y"
|
||||
><sl-avatar image="/img/pfps/math.webp" label="orbit"></sl-avatar>
|
||||
<p>Math Orbit</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/H7JqRwykhk"
|
||||
><sl-avatar image="/img/pfps/wrnd.gif" label="wrnd"></sl-avatar>
|
||||
<p>WRND</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/sSWRxaHhvA"
|
||||
><sl-avatar image="/img/pfps/lunar.webp" label="lunarsync"></sl-avatar>
|
||||
<p>Lunarsync</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/nPzc5ambR4"
|
||||
><sl-avatar image="/img/pfps/ultra.webp" label="ultrabrowse"></sl-avatar>
|
||||
<p>Ultrabrowse</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/yNJ6Yx6qVu"
|
||||
><sl-avatar image="/img/pfps/compass.png" label="compass"></sl-avatar>
|
||||
<p>Compass Network</p></a
|
||||
>
|
||||
<a class="avatar" href="https://discord.gg/HynWJ8aq"
|
||||
><sl-avatar image="/img/pfps/ocular.webp" label="ocular"></sl-avatar>
|
||||
<p>Ocular Network</p></a
|
||||
> <!--Note: Ocular is Breakium.com -->
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<a href="gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
59
ad.html
Normal file
@ -0,0 +1,59 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Contact | Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script></script>
|
||||
</head>
|
||||
|
||||
<body id="noscroll">
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main id="main" class="noscroll">
|
||||
<h2>What happened? Why does Selenite have ads?</h2>
|
||||
<p style="padding-left: 100px; padding-right: 100px; padding-bottom: 20px">After a lot of thinking, I have decided that the best course of action for Selenite is to add ads. I have spent a lot of time to make sure they are the least intrusive on your experience while still allowing me to make a profit off of the website. This decision was not out of greed or anything, it was because I can't expand Selenite past a certain point without a guaranteed income, and I can't do that solely off of donations.</p>
|
||||
<p>Ads are powered by Adsterra, and we use the Social bar and the Native banners, with erotic ads disabled.</p>
|
||||
<p>There is still an option to disable ads. You can also use an adblocker (which I <strong >HIGHLY</strong> recommend).</p>
|
||||
<button onclick="localStorage.setItem('selenite.adblock', 'true')">Click here to disable ads.</button>
|
||||
</main>
|
||||
|
||||
<footer class="noscroll">
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
1
ads.txt
Normal file
@ -0,0 +1 @@
|
||||
google.com, pub-3415518411898563, DIRECT, f08c47fec0942fa0
|
133
apps.html
Normal file
@ -0,0 +1,133 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/apps.js"></script>
|
||||
<script src="/js/search.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/cookie.js"></script>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Apps | Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3415518411898563" crossorigin="anonymous"></script>
|
||||
|
||||
<!-- toastify -->
|
||||
<script></script>
|
||||
</head>
|
||||
<alerts>
|
||||
<div id="toast"></div>
|
||||
<script>
|
||||
$.getJSON("data/changelog.json", (data) => {
|
||||
if (localStorage.getItem("selenite.version") != data.version) {
|
||||
toast({ title: "New Update!", message: data.desc, time: data.timestamp });
|
||||
localStorage.setItem("selenite.version", data.version);
|
||||
}
|
||||
});
|
||||
function toast(message, type) {
|
||||
const toast = document.getElementById("toast");
|
||||
toast.innerHTML = `<div class=samerow><h1>${message.title} - ${timeAgo(new Date(message.time * 1000))}</h1></div><p>${message.message}</p>`;
|
||||
toast.style.animation = "toastFade 6s";
|
||||
}
|
||||
|
||||
function timeAgo(input) {
|
||||
const date = input instanceof Date ? input : new Date(input);
|
||||
const formatter = new Intl.RelativeTimeFormat("en");
|
||||
const ranges = {
|
||||
years: 3600 * 24 * 365,
|
||||
months: 3600 * 24 * 30,
|
||||
weeks: 3600 * 24 * 7,
|
||||
days: 3600 * 24,
|
||||
hours: 3600,
|
||||
minutes: 60,
|
||||
seconds: 1,
|
||||
};
|
||||
const secondsElapsed = (date.getTime() - Date.now()) / 1000;
|
||||
for (let key in ranges) {
|
||||
if (ranges[key] < Math.abs(secondsElapsed)) {
|
||||
const delta = secondsElapsed / ranges[key];
|
||||
return formatter.format(Math.round(delta), key);
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</alerts>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
<h3 id="popunder" style="display: none;">You may be redirected upon clicking on the screen. This is an ad. <a style="font-size: inherit;" href="ad.html">Learn more.</a></h3>
|
||||
<input class="hiddenUpload" type="file" accept=".save" hidden />
|
||||
|
||||
<input type="text" class="searchbar" id="gamesearch" placeholder="Type here to search.." />
|
||||
<div class="samerow">
|
||||
<sl-tooltip content="Remember to download your save, so you don't lose your progress." trigger="manual" class="manual-tooltip">
|
||||
<button onclick="downloadMainSave()">Download Save</button>
|
||||
</sl-tooltip>
|
||||
<button id="upload" onclick="uploadMainSave()">Upload Save</button>
|
||||
</div>
|
||||
|
||||
<h2>Starred Apps</h2>
|
||||
<p id="pinnedmessage">Star some apps for things to show up here!</p>
|
||||
<div id="pinned"></div>
|
||||
|
||||
<h2>All Apps</h2>
|
||||
<div id="games">
|
||||
<a href="/suggest.html"
|
||||
><div class="suggest">
|
||||
<img src="img/addlink.svg" alt="Add Game logo" style="filter: invert(1) !important" />
|
||||
<h1>Suggest a app!</h1>
|
||||
</div></a
|
||||
>
|
||||
<p id="message">apps loading..</p>
|
||||
<p id="message">apps not loading? click ctrl + shift + r</p>
|
||||
<button id="message" onclick='$.getJSON("/data/apps.json", function (data) {loadGames(data)})'>Apps not loading? Click here.</button>
|
||||
</div>
|
||||
<br />
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const adContainers = document.querySelectorAll("[id=adcontainer]");
|
||||
if (adContainers.length > 0) {
|
||||
for (let i = 0; i < adContainers.length; i++) {
|
||||
if (Math.random() < 0.5 && localStorage.getItem("selenite.adblock") != "true") {
|
||||
adContainers[i].innerHTML = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
74
backgrounds.html
Normal file
@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script>
|
||||
</script>
|
||||
</head>
|
||||
<alerts>
|
||||
|
||||
</alerts>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main id="main">
|
||||
<img src="img/backgrounds/sunset_theme.jpg" class="img-credits">
|
||||
<a href="https://www.pixiv.net/en/users/10746425">邦乔彦</a>
|
||||
|
||||
<img src="img/backgrounds/mountains_theme.jpg" class="img-credits">
|
||||
<a href="https://www.mattvince.com/">Matt Vince</a>
|
||||
|
||||
<img src="img/backgrounds/vaporwave_theme.jpg" class="img-credits">
|
||||
<a href="https://www.rafaeldejongh.com/synthwave-neon-80s-background/">Rafaël De Jongh</a>
|
||||
|
||||
<img src="img/backgrounds/seraph_theme.png" class="img-credits">
|
||||
<a href="https://github.com/a456pur/">a456pur</a>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
26
blank.html
Normal file
@ -0,0 +1,26 @@
|
||||
<html>
|
||||
<head>
|
||||
<script>
|
||||
win = window.open();
|
||||
win.document.body.style.margin = "0";
|
||||
win.document.body.style.height = "100vh";
|
||||
html =
|
||||
`
|
||||
<style>*{margin:0;padding:0;border:none}body,iframe{height:100vh;width:100vw}iframe{height:96vh}header{display:flex;height:4vh;justify-content:center;}button{margin-right:100px;height:100%;aspect-ratio: 1 / 1}#reload{background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 -960 960 960' width='24'%3E%3Cpath d='M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z'/%3E%3C/svg%3E");background-size:cover;}#goBack{background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 -960 960 960' width='24'%3E%3Cpath d='M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z'/%3E%3C/svg%3E");background-size:cover;}</style><script>
|
||||
</`+
|
||||
`script><header><button id=goBack></button><button id=reload></button></header><iframe id=selenite></iframe>`;
|
||||
win.document.querySelector("html").innerHTML = html;
|
||||
win.eval(`let selenite = document.getElementById("selenite");console.log(selenite);selenite.setAttribute("src", "${location.origin}");console.log(selenite);document.getElementById("goBack").addEventListener("click", function () {selenite.contentDocument.location.href = selenite.contentDocument.location.origin;});document.getElementById("reload").addEventListener("click", function () {selenite.contentDocument.location.href = selenite.contentDocument.location.href;})`);
|
||||
location.href="https://google.com";
|
||||
close();
|
||||
</script>
|
||||
<style>
|
||||
body {
|
||||
background-color: black;
|
||||
color: white;
|
||||
text-align: center;
|
||||
align-content: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
</html>
|
134
bookmarklets.html
Normal file
63
contact.html
Normal file
@ -0,0 +1,63 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Contact | Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script></script>
|
||||
</head>
|
||||
|
||||
<body id="noscroll">
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main id="main" class="noscroll">
|
||||
<h2>Have a question or concern?</h2>
|
||||
<h3>You can contact me using the following methods:</h3>
|
||||
<a href="mailto:support@selenite.cc">Email me</a>
|
||||
<a href="https://discord.com/users/1014608595263950848">Message me on discord at @skysthelimit.dev</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Join the discord</a>
|
||||
</main>
|
||||
|
||||
<footer class="noscroll">
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
673
css/style.css
Normal file
@ -0,0 +1,673 @@
|
||||
@import url("https://fonts.googleapis.com/css2?family=Prompt:wght@300&display=swap");
|
||||
|
||||
@keyframes loadInAnimation {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 100;
|
||||
}
|
||||
}
|
||||
|
||||
:root {
|
||||
--inputbg: #3c096c;
|
||||
--inputborder: #5a189a;
|
||||
--uibg: #240046;
|
||||
--textcolor: #fff;
|
||||
--bg: #10002b;
|
||||
--margin: 4rem;
|
||||
}
|
||||
.hiddenUpload {
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
}
|
||||
* {
|
||||
transition-duration: 0.5s;
|
||||
outline: none;
|
||||
border: none;
|
||||
box-sizing: border-box;
|
||||
align-content: center;
|
||||
text-align: center;
|
||||
font-family: "Prompt", sans-serif;
|
||||
color: var(--textcolor);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: var(--bg);
|
||||
color: var(--textcolor);
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: cover;
|
||||
background-attachment: fixed;
|
||||
}
|
||||
|
||||
header,
|
||||
footer {
|
||||
background-color: var(--uibg);
|
||||
display: flex;
|
||||
border-bottom: none;
|
||||
font-weight:700;
|
||||
padding: 0.7rem;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#time {
|
||||
font-weight:100;
|
||||
}
|
||||
header {
|
||||
top: 0;
|
||||
border-radius: 0 0 20px 20px;
|
||||
position: fixed;
|
||||
box-shadow: 0 5px 10px var(--uibg);
|
||||
}
|
||||
|
||||
footer.noscroll {
|
||||
position: fixed;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
footer {
|
||||
bottom: 0;
|
||||
border-radius: 20px 20px 0 0;
|
||||
box-shadow: 0 -5px 10px var(--uibg);
|
||||
}
|
||||
|
||||
footer a,
|
||||
footer a:visited,
|
||||
header a,
|
||||
header a:visited {
|
||||
margin-right: 1.5rem;
|
||||
margin-left: 1.5rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
footer a:hover,
|
||||
header a:hover {
|
||||
text-shadow: 2px 2px 6px var(--textcolor);
|
||||
}
|
||||
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
header,
|
||||
footer {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
header {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
footer {
|
||||
border-radius: 0;
|
||||
}
|
||||
* {
|
||||
--margin: 12rem;
|
||||
}
|
||||
}
|
||||
|
||||
main {
|
||||
animation: 1.25s ease-in-out 0s 1 loadInAnimation;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
min-height: calc(100vh - (2 * 0.7rem));
|
||||
gap: 0;
|
||||
flex-wrap: wrap;
|
||||
margin: auto;
|
||||
margin-top: var(--margin);
|
||||
width: 90%;
|
||||
height:auto;
|
||||
}
|
||||
main#main.noscroll {
|
||||
justify-content: center;
|
||||
}
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
p,
|
||||
a,
|
||||
label {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-shadow: var(--shadow);
|
||||
}
|
||||
.samerow {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
gap: 0;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center
|
||||
}
|
||||
h1 {
|
||||
font-size: 60px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 40px;
|
||||
}
|
||||
h3 {
|
||||
font-size: 20px;
|
||||
}
|
||||
p,
|
||||
a {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
button,
|
||||
input#websubmit.submit,
|
||||
input[type="submit"] {
|
||||
cursor: pointer;
|
||||
background-color: var(--inputbg);
|
||||
border-color: var(--inputborder);
|
||||
border-width: 2px;
|
||||
border-radius: 10px;
|
||||
border-style: solid;
|
||||
padding: 7px;
|
||||
margin-left: 20px;
|
||||
margin-right: 20px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
button:hover,
|
||||
input#websubmit.submit:hover,
|
||||
input[type="submit"]:hover {
|
||||
filter: brightness(80%);
|
||||
transform: scale(1.07);
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
aspect-ratio: auto;
|
||||
user-select: none;
|
||||
filter: drop-shadow(var(--shadow));
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
.img-container a {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.img-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: row;
|
||||
gap: 0;
|
||||
flex-wrap: wrap;
|
||||
width: 6%;
|
||||
aspect-ratio: 1 / 1;
|
||||
margin: 2%;
|
||||
}
|
||||
|
||||
.game,
|
||||
.suggest {
|
||||
width: 15%;
|
||||
border-radius: 20px;
|
||||
display: inline-block;
|
||||
background-color: var(--uibg);
|
||||
margin: 15px;
|
||||
cursor: pointer;
|
||||
box-shadow: 0px 0px 5px 5px var(--uibg);
|
||||
}
|
||||
|
||||
.game:hover,
|
||||
.suggest:hover {
|
||||
transform: scale(1.1);
|
||||
filter: brightness(85%);
|
||||
box-shadow: 0px 0px 5px 5px var(--uibg);
|
||||
}
|
||||
|
||||
.game h1,
|
||||
.suggest h1 {
|
||||
font-size: 12px;
|
||||
float: right;
|
||||
margin-right: 10px;
|
||||
margin-top: 3px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.game img,
|
||||
.suggest img {
|
||||
width: 100%;
|
||||
border-radius: 20px;
|
||||
aspect-ratio: 1 / 1;
|
||||
}
|
||||
|
||||
img.star {
|
||||
float: left;
|
||||
width: 10%;
|
||||
margin-top: 3px;
|
||||
margin-bottom: 3px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
#noscroll {
|
||||
overflow-y: hidden;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#games,
|
||||
#pinned {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
input[type="text"],
|
||||
input[type="password"] {
|
||||
width: 50%;
|
||||
background-color: var(--inputbg);
|
||||
box-sizing: border-box;
|
||||
font-size: 20px;
|
||||
padding: 0.8% 0.8%;
|
||||
text-align: center;
|
||||
border-radius: 5px;
|
||||
outline: none;
|
||||
margin: 10px;
|
||||
border: 2px solid var(--inputborder);
|
||||
border-radius: 5px;
|
||||
transition: opacity 0.25s ease-in-out;
|
||||
opacity: 100%;
|
||||
}
|
||||
input[type="text"]:hover,
|
||||
input[type="password"]:hover {
|
||||
opacity: 80%;
|
||||
}
|
||||
::placeholder {
|
||||
color: var(--textcolor);
|
||||
opacity: 0.4; /* Firefox */
|
||||
}
|
||||
|
||||
.bookmarkletdiv {
|
||||
width: 30%;
|
||||
background-color: var(--uibg);
|
||||
box-shadow: 0px 0px 5px 5px var(--uibg);
|
||||
padding: 5px;
|
||||
margin: 15px;
|
||||
border-radius: 10px;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.bookmarkletdiv a {
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
form {
|
||||
width: 100%;
|
||||
}
|
||||
.samerow.themebtns {
|
||||
width: 70%;
|
||||
}
|
||||
|
||||
select {
|
||||
border-radius: 5px;
|
||||
background-color: var(--inputbg);
|
||||
border-color: var(--inputborder);
|
||||
border-width: 5px;
|
||||
border-radius: 10px;
|
||||
border-style: solid;
|
||||
padding: 0.5% 0.5%;
|
||||
margin: 0.25%;
|
||||
}
|
||||
|
||||
thumb.png .img-credits {
|
||||
height: 40vh;
|
||||
width: auto;
|
||||
box-shadow: 0px 0px 20px rgba(255, 255, 255, 0.555);
|
||||
}
|
||||
|
||||
label {
|
||||
font-size: 20px;
|
||||
padding-left: 5px;
|
||||
}
|
||||
.avatar {
|
||||
margin: 5px;
|
||||
}
|
||||
#bgimg {
|
||||
width: 30vw;
|
||||
font-size: 16px;
|
||||
}
|
||||
.usericon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
align-self: right;
|
||||
/* display: none; */
|
||||
}
|
||||
#toast {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
background-color: var(--inputbg);
|
||||
border-radius: 10px;
|
||||
border-width: 10px;
|
||||
border-color: var(--inputborder);
|
||||
border-style: solid;
|
||||
z-index: 10000;
|
||||
text-align: center;
|
||||
opacity: 0;
|
||||
transition-duration: 1s;
|
||||
max-width: 30%;
|
||||
}
|
||||
#toast h1 {
|
||||
font-size: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
#toast p {
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
#discord {
|
||||
position: fixed;
|
||||
bottom: 10px;
|
||||
right: 10px;
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
z-index: 199975;
|
||||
border-radius: 100%;
|
||||
background-image: url("/img/discord.svg");
|
||||
background-size: 60%;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
border-width: 0;
|
||||
}
|
||||
|
||||
div.profile.top {
|
||||
width: 90%;
|
||||
height: 20vh;
|
||||
background-color: var(--uibg);
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
justify-content: left;
|
||||
align-items: center;
|
||||
box-shadow: 0px 0px 5px 5px var(--uibg);
|
||||
}
|
||||
div.profile.top.text {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: auto;
|
||||
justify-self: center;
|
||||
height: auto;
|
||||
margin: 30px;
|
||||
max-width: 40%;
|
||||
}
|
||||
|
||||
div.profile.top.text.right {
|
||||
margin-left: auto;
|
||||
margin-right: 80px;
|
||||
}
|
||||
|
||||
div.profile.top.text h1 {
|
||||
font-size: 2vw;
|
||||
}
|
||||
div.profile.top.text h2 {
|
||||
font-size: 1.25vw;
|
||||
}
|
||||
div.profile.top.text a {
|
||||
font-size: 1.25vw;
|
||||
}
|
||||
|
||||
img.pfp {
|
||||
height: 80%;
|
||||
object-fit: contain;
|
||||
width: auto;
|
||||
margin: 30px;
|
||||
border-radius: 20px;
|
||||
aspect-ratio: 1 / 1;
|
||||
}
|
||||
div.profile.top.text .about {
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
#edit {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
height: 2vw;
|
||||
margin-left: 5px;
|
||||
width: auto;
|
||||
}
|
||||
#counter {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
#popup {
|
||||
width: 50%;
|
||||
height: 40%;
|
||||
z-index: 99999999;
|
||||
position: absolute;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50vw;
|
||||
transform: translate(-50%, -50%);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
background-color: var(--inputbg);
|
||||
border-color: var(--inputborder);
|
||||
border-width: 5px;
|
||||
border-radius: 10px;
|
||||
border-style: solid;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-shadow: 0px 0px 5px 5px var(--uibg);
|
||||
}
|
||||
#popup input {
|
||||
width: 90%;
|
||||
height: 30%;
|
||||
}
|
||||
#popup input[type=file] {
|
||||
height: auto;
|
||||
text-align-last: center;
|
||||
display: block;
|
||||
margin: 30px;
|
||||
}
|
||||
#popup h1 {
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
#popup #close {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
top: 10px;
|
||||
|
||||
}
|
||||
img.badges {
|
||||
position: relative;
|
||||
height: 2vw;
|
||||
margin-left: 5px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
p#counter {
|
||||
bottom: 38%;
|
||||
right: 7%;
|
||||
}
|
||||
|
||||
|
||||
.users {
|
||||
text-decoration: none;
|
||||
width: 30%;
|
||||
height: 10vh;
|
||||
background-color: var(--uibg);
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0px 0px 5px 5px var(--uibg);
|
||||
margin: 1.5%;
|
||||
}
|
||||
.users h1, .users p {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
justify-self: center;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
.user_info {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.users h1 {
|
||||
font-size: 1vw;
|
||||
}
|
||||
.users p {
|
||||
font-size: 0.75vw;
|
||||
}
|
||||
.users a {
|
||||
font-size: 0.75vw;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.users p {
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
}
|
||||
#users {
|
||||
width: 95%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: row;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.pages-btn {
|
||||
margin: 10px;
|
||||
}
|
||||
#ai {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
div.profile.played {
|
||||
margin: 40px;
|
||||
width: 90%;
|
||||
height: auto;
|
||||
padding: 30px;
|
||||
background-color: var(--uibg);
|
||||
border-radius: 10px;
|
||||
display: flex;
|
||||
justify-content: left;
|
||||
align-items: center;
|
||||
box-shadow: 0px 0px 5px 5px var(--uibg);
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
|
||||
}
|
||||
#played-games {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: center;
|
||||
}
|
||||
div.played-game {
|
||||
width: 13%;
|
||||
height: auto;
|
||||
margin: 2%;
|
||||
padding: 0;
|
||||
}
|
||||
div.played-game img {
|
||||
aspect-ratio: 1 / 1;
|
||||
border-radius: 20px;
|
||||
}
|
||||
.friend-icon {
|
||||
width: 5%;
|
||||
position: absolute;
|
||||
left: 2%;
|
||||
}
|
||||
#chat {
|
||||
width: 90%;
|
||||
background-color: var(--uibg);
|
||||
height: calc(100vh - (var(--margin) * 2) - 60px - 24px - 12px - 30px - 80px);
|
||||
}
|
||||
#messages {
|
||||
align-items: end;
|
||||
flex-direction: column;
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
height: 88%;
|
||||
display: flex;
|
||||
}
|
||||
message {
|
||||
width: calc(100% - 20px);
|
||||
padding: 20px;
|
||||
margin: 10px;
|
||||
background-color: var(--inputbg);
|
||||
border-radius: 10px;
|
||||
}
|
||||
message h1 {
|
||||
font-size: 40px;
|
||||
}
|
||||
message h2 {
|
||||
font-size: 32px;
|
||||
}
|
||||
message.user {
|
||||
background-color: var(--inputborder);
|
||||
}
|
||||
message.bot {
|
||||
justify-self: right;
|
||||
}
|
||||
#chatbox {
|
||||
width: calc(100% - 20px);
|
||||
}
|
||||
.messagebox {
|
||||
width: 100%;
|
||||
height: 12%;
|
||||
}
|
||||
.evensmaller {
|
||||
font-size: 12px;
|
||||
}
|
||||
#gamecontainer {
|
||||
width: 80vw;
|
||||
height: calc(100vh - (var(--margin) * 2));
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
background-color: var(--uibg);
|
||||
}
|
||||
#gameFrame {
|
||||
width: 100%;
|
||||
height: 90%;
|
||||
border-radius: 10px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
#infobox {
|
||||
width: 100%;
|
||||
height: 10%;
|
||||
display: flex;
|
||||
}
|
||||
#infobox img {
|
||||
height: 90%;
|
||||
width: auto;
|
||||
margin-right: 20px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
@keyframes toastFade {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
15% {
|
||||
opacity: 1;
|
||||
}
|
||||
85% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
295
css/themes.css
Normal file
@ -0,0 +1,295 @@
|
||||
:root {
|
||||
--inputbg: #3c096c;
|
||||
--inputborder: #5a189a;
|
||||
--uibg: #240046;
|
||||
--textcolor: #fff;
|
||||
--bg: #10002b;
|
||||
}
|
||||
body {
|
||||
--inputbg: #3c096c;
|
||||
--inputborder: #5a189a;
|
||||
--uibg: #240046;
|
||||
--textcolor: #fff;
|
||||
--bg: #10002b;
|
||||
}
|
||||
body[theme=threekho] {
|
||||
--inputbg: #28A018;
|
||||
--inputborder: #0A8F00;
|
||||
--uibg: #111111;
|
||||
--textcolor: #fff;
|
||||
--bg: #000000;
|
||||
}
|
||||
body[theme=art] {
|
||||
--inputbg: #0284d4;
|
||||
--inputborder: #0284d4;
|
||||
--uibg: #0e1213;
|
||||
--textcolor: #fffff;
|
||||
--bg: #1a2023;
|
||||
}
|
||||
body[theme=dogcat] {
|
||||
--inputbg: #537294;
|
||||
--inputborder: #30719c;
|
||||
--uibg: #2a7491;
|
||||
--textcolor: #fff;
|
||||
--bg: url("/img/backgrounds/dogcat.svg"), rgb(26, 127, 158);
|
||||
/* https://wallpaperaccess.com/full/115544.jpg */
|
||||
}
|
||||
body[theme=custom] {
|
||||
--inputbg: #3c096c;
|
||||
--inputborder: #5a189a;
|
||||
--uibg: #240046;
|
||||
--textcolor: #fff;
|
||||
--bg: #10002b;
|
||||
}
|
||||
body[theme=mainnew] {
|
||||
--inputbg: #3c096c;
|
||||
--inputborder: #5a189a;
|
||||
--uibg: #240046bb;
|
||||
--textcolor: #fff;
|
||||
--bg: linear-gradient(0deg, rgba(36,0,70,1) 0%, rgba(60,9,108,1) 50%, rgba(36,0,70,1) 100%);
|
||||
}
|
||||
body[theme=main] {
|
||||
--inputbg: #3c096c;
|
||||
--inputborder: #5a189a;
|
||||
--uibg: #240046bb;
|
||||
--textcolor: #fff;
|
||||
--bg: #10002b;
|
||||
}
|
||||
body[theme=light] {
|
||||
--inputbg: #bbbbbb;
|
||||
--inputborder: #e6e6e6;
|
||||
--uibg: #b3b3b3;
|
||||
--textcolor: #1a1a1a;
|
||||
--bg: #c5c5c5;
|
||||
}
|
||||
body[theme=dark] {
|
||||
--inputbg: #333333;
|
||||
--inputborder: #444444;
|
||||
--uibg: #242424;
|
||||
--textcolor: #fff;
|
||||
--bg: #0c0c0c;
|
||||
}
|
||||
body[theme=egamepass] {
|
||||
--inputbg: #4f6ed1;
|
||||
--inputborder: #5586e0;
|
||||
--uibg: #185494;
|
||||
--textcolor: #a7d3ff;
|
||||
--bg: #16416f;
|
||||
}
|
||||
body[theme=cools1te] {
|
||||
--inputbg: #a134dc;
|
||||
--inputborder: #b153e3;
|
||||
--uibg: #ab28cf;
|
||||
--textcolor: #d3a4fa;
|
||||
--bg: #8e14af;
|
||||
}
|
||||
|
||||
|
||||
body[theme=lattefalse] {
|
||||
--inputbg: #9ca0b0;
|
||||
/* overlay 0 */
|
||||
--inputborder: #8c8fa1;
|
||||
/* overlay 1 */
|
||||
--uibg: #ccd0da;
|
||||
/* surface 0 */
|
||||
--textcolor: #4c4f69;
|
||||
/* text */
|
||||
--bg: #eff1f5;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #ccd0da;
|
||||
/* surface 0 */
|
||||
}
|
||||
body[theme=frappefalse] {
|
||||
--inputbg: #737994;
|
||||
/* overlay 0 */
|
||||
--inputborder: #838ba7;
|
||||
/* overlay 1 */
|
||||
--uibg: #414559;
|
||||
/* surface 0 */
|
||||
--textcolor: #cad3f5;
|
||||
/* text */
|
||||
--bg: #303446;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #414559;
|
||||
/* surface 0 */
|
||||
}
|
||||
body[theme=macchiatofalse] {
|
||||
--inputbg: #6e738d;
|
||||
/* overlay 0 */
|
||||
--inputborder: #8087a2;
|
||||
/* overlay 1 */
|
||||
--uibg: #363a4f;
|
||||
/* surface 0 */
|
||||
--textcolor: #cad3f5;
|
||||
/* text */
|
||||
--bg: #24273a;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #363a4f;
|
||||
/* surface 0 */
|
||||
}
|
||||
body[theme=mochafalse] {
|
||||
--inputbg: #6c7086;
|
||||
/* overlay 0 */
|
||||
--inputborder: #7f849c;
|
||||
/* overlay 1 */
|
||||
--uibg: #313244;
|
||||
/* surface 0 */
|
||||
--textcolor: #cdd6f4;
|
||||
/* text */
|
||||
--bg: #1e1e2e;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #313244;
|
||||
/* surface 0 */
|
||||
}
|
||||
|
||||
body[theme=sunsetfalse] {
|
||||
--inputbg: #537294;
|
||||
--inputborder: #30719c;
|
||||
--uibg: #2a7491;
|
||||
--textcolor: #fff;
|
||||
--bg: rgb(59, 67, 78);
|
||||
/* https://wallhaven.cc/w/jxl3qp */
|
||||
--shadow: 0px 0px 2px #a5dcf5;
|
||||
}
|
||||
body[theme=mountainsfalse] {
|
||||
--inputbg: #d37f7f;
|
||||
--inputborder: #e28a8a;
|
||||
--uibg: #d38493;
|
||||
--textcolor: #fff;
|
||||
--bg: #bf7483;
|
||||
/* https://wallhaven.cc/w/l82kpr */
|
||||
--shadow: 0px 0px 4px #bba29b;
|
||||
}
|
||||
body[theme=vaporwavefalse] {
|
||||
--inputbg: #4b2d64;
|
||||
--inputborder: #74568d;
|
||||
--uibg: #51166d;
|
||||
--textcolor: #fff;
|
||||
--bg: #61437a;
|
||||
/* https://wallhaven.cc/w/l82kpr */
|
||||
--shadow: 0px 0px 4px #000000;
|
||||
}
|
||||
body[theme=seraphfalse] {
|
||||
--inputbg: #000;
|
||||
--inputborder: #fff;
|
||||
--uibg: #000;
|
||||
--textcolor: #fff;
|
||||
--bg: #222222;
|
||||
/* seraph */
|
||||
--shadow: 0px 0px 4px #fff;
|
||||
}
|
||||
body[theme=nighttimefalse] {
|
||||
--inputbg: #29374d;
|
||||
--inputborder: #fff;
|
||||
--uibg: #29374d;
|
||||
--textcolor: #fff;
|
||||
--bg: #323853;
|
||||
/* https://wallhaven.cc/w/l882py */
|
||||
--shadow: 0px 0px 4px #fff;
|
||||
}
|
||||
|
||||
|
||||
|
||||
body[theme=latte] {
|
||||
--inputbg: #9ca0b0;
|
||||
/* overlay 0 */
|
||||
--inputborder: #8c8fa1;
|
||||
/* overlay 1 */
|
||||
--uibg: #ccd0da;
|
||||
/* surface 0 */
|
||||
--textcolor: #4c4f69;
|
||||
/* text */
|
||||
--bg: #eff1f5;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #ccd0da;
|
||||
/* surface 0 */
|
||||
}
|
||||
body[theme=frappe] {
|
||||
--inputbg: #737994;
|
||||
/* overlay 0 */
|
||||
--inputborder: #838ba7;
|
||||
/* overlay 1 */
|
||||
--uibg: #414559;
|
||||
/* surface 0 */
|
||||
--textcolor: #cad3f5;
|
||||
/* text */
|
||||
--bg: #303446;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #414559;
|
||||
/* surface 0 */
|
||||
}
|
||||
body[theme=macchiato] {
|
||||
--inputbg: #6e738d;
|
||||
/* overlay 0 */
|
||||
--inputborder: #8087a2;
|
||||
/* overlay 1 */
|
||||
--uibg: #363a4f;
|
||||
/* surface 0 */
|
||||
--textcolor: #cad3f5;
|
||||
/* text */
|
||||
--bg: #24273a;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #363a4f;
|
||||
/* surface 0 */
|
||||
}
|
||||
body[theme=mocha] {
|
||||
--inputbg: #6c7086;
|
||||
/* overlay 0 */
|
||||
--inputborder: #7f849c;
|
||||
/* overlay 1 */
|
||||
--uibg: #313244;
|
||||
/* surface 0 */
|
||||
--textcolor: #cdd6f4;
|
||||
/* text */
|
||||
--bg: #1e1e2e;
|
||||
/* base */
|
||||
--shadow: 0px 0px 4px #313244;
|
||||
/* surface 0 */
|
||||
}
|
||||
|
||||
body[theme=sunset] {
|
||||
--inputbg: #537294;
|
||||
--inputborder: #30719c;
|
||||
--uibg: #2a7491;
|
||||
--textcolor: #fff;
|
||||
--bg: url("/img/backgrounds/sunset_theme.jpg"), rgb(59, 67, 78);
|
||||
/* https://wallhaven.cc/w/jxl3qp */
|
||||
--shadow: 0px 0px 2px #a5dcf5;
|
||||
}
|
||||
body[theme=mountains] {
|
||||
--inputbg: #d37f7f;
|
||||
--inputborder: #e28a8a;
|
||||
--uibg: #d38493;
|
||||
--textcolor: #fff;
|
||||
--bg: url("/img/backgrounds/mountains_theme.jpg"), #bf7483;
|
||||
/* https://wallhaven.cc/w/l82kpr */
|
||||
--shadow: 0px 0px 4px #bba29b;
|
||||
}
|
||||
body[theme=vaporwave] {
|
||||
--inputbg: #4b2d64;
|
||||
--inputborder: #74568d;
|
||||
--uibg: #51166d;
|
||||
--textcolor: #fff;
|
||||
--bg: url("/img/backgrounds/vaporwave_theme.jpg"), #61437a;
|
||||
/* https://wallhaven.cc/w/l82kpr */
|
||||
--shadow: 0px 0px 4px #000000;
|
||||
}
|
||||
body[theme=seraph] {
|
||||
--inputbg: #000;
|
||||
--inputborder: #fff;
|
||||
--uibg: #000;
|
||||
--textcolor: #fff;
|
||||
--bg: url("/img/backgrounds/seraph_theme.png"), #1c1a1e;
|
||||
/* seraph */
|
||||
--shadow: 0px 0px 4px #fff;
|
||||
}
|
||||
body[theme=nighttime] {
|
||||
--inputbg: #29374d;
|
||||
--inputborder: #fff;
|
||||
--uibg: #29374d;
|
||||
--textcolor: #fff;
|
||||
--bg: url("/img/backgrounds/nighttime_theme.png"), #28272a;
|
||||
/* https://wallhaven.cc/w/l882py */
|
||||
--shadow: 0px 0px 4px #fff;
|
||||
}
|
||||
|
78
data/apps.json
Normal file
@ -0,0 +1,78 @@
|
||||
[
|
||||
{
|
||||
"name": "Ruffle",
|
||||
"directory": "ruffle",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "ZIP Unarchiver",
|
||||
"directory": "zip",
|
||||
"image": "cover.png"
|
||||
},
|
||||
|
||||
{
|
||||
"name": "GBA Emulator",
|
||||
"directory": "gba",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "EmulatorJS",
|
||||
"directory": "emu",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "Scratch 1",
|
||||
"directory": "scratch1",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "AyunWebEPK",
|
||||
"directory": "ayun",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "Scratch 2",
|
||||
"directory": "scratch2",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "SB2 to SWF",
|
||||
"directory": "sb2toswf",
|
||||
"image": "cover.svg"
|
||||
},
|
||||
{
|
||||
"name": "MiniWiki",
|
||||
"directory": "wiki",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "Windows 11",
|
||||
"directory": "11",
|
||||
"image": "cover.png"
|
||||
},
|
||||
{
|
||||
"name": "Javascript Deobfuscator",
|
||||
"directory": "deobsfucator",
|
||||
"image": "cover.svg"
|
||||
},
|
||||
{
|
||||
"name": "Code Editor",
|
||||
"directory": "code",
|
||||
"image": "cover.svg"
|
||||
},
|
||||
{
|
||||
"name": "Turbowarp",
|
||||
"directory": "turbowarp",
|
||||
"image": "cover.svg"
|
||||
},
|
||||
{
|
||||
"name": "Calculator",
|
||||
"image": "cover.svg",
|
||||
"directory": "calc"
|
||||
},
|
||||
{
|
||||
"name": "GodoBlocks",
|
||||
"directory": "godo",
|
||||
"image": "cover.png"
|
||||
}
|
||||
]
|
5
data/changelog.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": "1.0.6",
|
||||
"desc": "a bunch of games, patches",
|
||||
"timestamp": "1715305612"
|
||||
}
|
38
data/cloaks.json
Normal file
2138
data/games.json
Normal file
385
data/quotes.json
Normal file
@ -0,0 +1,385 @@
|
||||
[
|
||||
"pay attention during school",
|
||||
"yall playing games while im making the website ur using",
|
||||
"shout out to whoever spent 2 hours on snake",
|
||||
"Did you know? You can make 800-1000 burgers from one cow.",
|
||||
"selenite >>> 3kh0",
|
||||
"Hello!",
|
||||
"Did you know it takes an average of 20 minutes to rip a game?",
|
||||
"Batteries not included",
|
||||
"Does this even work?",
|
||||
"Welcome to my rad website",
|
||||
"Made with HTML!",
|
||||
"Uses some css",
|
||||
"Now with buggy games!",
|
||||
"You get a cookie!",
|
||||
"Remember your manners!",
|
||||
"Dogs are cute",
|
||||
"Ok, and I know your address now!",
|
||||
"Beep boop! Are you a robot?",
|
||||
"Did you know I have a Discord server?",
|
||||
"How many sides does a circle have?",
|
||||
"1 + 1 = 3",
|
||||
"6 + 9 = 69",
|
||||
"You can read btw",
|
||||
"Made you look!",
|
||||
"Never gonna give you up, Never gonna let you down...",
|
||||
"Redbull gives you wings...",
|
||||
"What is your highscore on Swerve?",
|
||||
"Now with 2X more bugs!",
|
||||
"12345 is not a good password",
|
||||
"This took to long to make",
|
||||
"69 hehe funny number",
|
||||
"Ahhhhhhhhh",
|
||||
"Awesome!",
|
||||
"As seen on TV!",
|
||||
"doot doot",
|
||||
"100% Fresh!",
|
||||
"LOL",
|
||||
"Cold as ice!",
|
||||
"Why are you looking at me?",
|
||||
"Made in the US!",
|
||||
"Made by Sky!",
|
||||
"Sky can code",
|
||||
"Click me :D",
|
||||
"Reload the page NOW!",
|
||||
"Downloading your passwords...",
|
||||
"Running Selenite.exe",
|
||||
"WARNING: You may lose braincells if you proceed!",
|
||||
"Please go away. Thx",
|
||||
"Made with Codeberg!",
|
||||
"Made with a text editor!",
|
||||
"Made with love",
|
||||
"Made with H2O",
|
||||
"This is a splash text!",
|
||||
"100% Orgainic!",
|
||||
"Now with Pac-Man!",
|
||||
"Now with JavaScript!",
|
||||
"Now with CSS",
|
||||
"Do you bite your ice cream?",
|
||||
"This was not ment to be seen. :o",
|
||||
"Does anyone know how to stand up?",
|
||||
"69420",
|
||||
"Me too bro.",
|
||||
"#Relatable",
|
||||
"2 + 2 is 4 - 1 is 3 Quick mafs",
|
||||
"Feels bad man.",
|
||||
"Now with games that are unblocked?",
|
||||
"Now with great games!",
|
||||
"How do you play tic-tac-toe?",
|
||||
"Fortnite is cringe",
|
||||
"You got games on your phone?",
|
||||
"I am not gonna say anything.",
|
||||
"Now with Minecraft!",
|
||||
"Your momma jokes are cringe",
|
||||
"Now with a new splash!",
|
||||
"You just dont get it do you?",
|
||||
"Powered by hamsters!",
|
||||
"*insert cool explosion*",
|
||||
"Efficiency is key",
|
||||
"New update???",
|
||||
"We have answers!",
|
||||
"aaaaaaaaaaaaaaaaaaa",
|
||||
"Yooooooooooooooooooooo",
|
||||
"Your ip is 69.420.69.420",
|
||||
"he on x-games mode",
|
||||
"Got to go fast!",
|
||||
"GAS GAS GAS GOTTA STEP ON THE GAS!",
|
||||
"Selenite would like to view your browser history",
|
||||
"For legal reasons, that's a joke!",
|
||||
"It has been 84 years...",
|
||||
"Made by Gucci, selling for $69420",
|
||||
"There is someone looking over your shoulder",
|
||||
"Electric!",
|
||||
"How many different ones are there?!?!",
|
||||
"NERDDDDDDDDDDDDDDDDDD",
|
||||
"My iPad passcode is 563543 btw",
|
||||
"Get out of my room, I'm not going to let you in!",
|
||||
"I'm not a robot!",
|
||||
"I'm not a human!",
|
||||
"Sponsered by RAID SHADOW LEGENDS!",
|
||||
"Sponsored by Honey!",
|
||||
"Lorem ipsum dolor sit amet, adipiscing consequat adipiscing sit amet. In tortor dolor, sollicitudin quis urna vitae, rutrum selecrelico dolor. Ut facilisis ornare lacus, ut dictum felis aliquam ut. Omnino interdum fit cum cura. Non est aequum, non solum, sed nec refert quis sit terra. Sed vestibulum a tellus non semper. Aliquam a neque euismod dolor dapibus aliquet ultricies ut nibh. Sed eget auctor ante. Aliquam dictum volutpat vestibulum. Putasti ovum paschale futurum. Nullo modo.",
|
||||
"ive currently lost $4 on this website",
|
||||
"join the discord NOW",
|
||||
"have any of you played on the og padlet?",
|
||||
"linux is so much better than windows",
|
||||
"Did you know that oxygen is tasty?",
|
||||
"Did you know that drinking water is dangerous?",
|
||||
"🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸🇵🇸",
|
||||
"chromebooks suck",
|
||||
"Made 10% from actual code 90% skidded",
|
||||
"And no wonder, for Piplup7575 himself hides as a normal programmer even though he is very super duper cool.",
|
||||
"Eat like a king who is on a budget",
|
||||
"goodbye to all the fallen comrades",
|
||||
"Approved by the Iranian ministry of health",
|
||||
"AGE RATING 4+",
|
||||
"Bebzi or Koka Kola",
|
||||
"moni",
|
||||
"Made proudly by U.S.A patriots.",
|
||||
"Piiiiiiiiiiiiiplup",
|
||||
"Piplup so cool very cool",
|
||||
"The 7576th piplup is really bad",
|
||||
"The northernfish goes south",
|
||||
"Piplup7575 is the cool",
|
||||
"Piplup is cool",
|
||||
"uwu",
|
||||
"uWu",
|
||||
"OwO",
|
||||
"UwU",
|
||||
"Chocolate hummus is a disgrace to the entire middle east.",
|
||||
"3kh0 has fell, and now 3kh0 has sadly died.",
|
||||
"Fun fact: Your chromebook is likely being monitored 24/7",
|
||||
"contains 100% all-natural chicken",
|
||||
"contains 100% all-natural pork",
|
||||
"Activate Selenite, Go to settings to activate Selenite",
|
||||
"This copy of Selenite is not genuine.",
|
||||
"contains 100% all-natural beef",
|
||||
"You may be a victim of software counterfeiting",
|
||||
"contains 100% all-natural lamb",
|
||||
"Woe to those who don't use this game site",
|
||||
"Whopper, Whopper, Whopper, Whopper,Junior, double, triple Whopper,Flame-grilled taste with perfect toppers,I rule this day.Lettuce, mayo, pickle, ketchup,It's OK if I don't want that, Impossible or bacon Whopper,Any Whopper my way.You rule, you're seizing the day,At BK, have it your way.You rule!",
|
||||
"Did you know we are open source?",
|
||||
"goodbye 3kh0 :(",
|
||||
"SUPR COL GAMS V2 IS AWESOME!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
"Fun fact: Did you know that this site was originally a Padlet?",
|
||||
"thank you to louis pasteur for inventing milk",
|
||||
"you found the secret message",
|
||||
"hi david",
|
||||
"i ate that david",
|
||||
"david that eat",
|
||||
"hi from asleep",
|
||||
"i know where you live",
|
||||
"i",
|
||||
"technoblade never dies",
|
||||
"Selenite has shut down.",
|
||||
"theres at least 2, maybe 3 games on this website",
|
||||
"yall failing ur classes while im a straight A student in all honors",
|
||||
"just maybe stole a bunch ideas from 3kh0",
|
||||
"why is 1v1lol the most popular game",
|
||||
"https://discord.gg/7jyufnwJNf",
|
||||
"buy smth from the patreon so i dont have to be in debt anymore",
|
||||
"https://skysthelimit.dev",
|
||||
"https://github.com/selenite-cc",
|
||||
"CURRENTURL",
|
||||
"the square root of OGNUM1 is SQRTNUM1",
|
||||
"ZG8geW91ciBzY2hvb2wgd29yaw",
|
||||
"use the transfer tool to keep ur data from other websites",
|
||||
"best way to bypass the filter is on my patreon! (i wrote this as a joke but its real now)",
|
||||
"best proxy ever only on my patreon (i wrote this as a joke but its real now)",
|
||||
"🥺👉👈",
|
||||
"what website is this?",
|
||||
"we love about:blank",
|
||||
"make sure to back up ur saves incase we ever get blocked",
|
||||
"join the discord to be cool",
|
||||
"bigfoot is an L",
|
||||
"check steam",
|
||||
"selentine",
|
||||
"geometry dash two point two",
|
||||
"does anyone call twitter X unironically",
|
||||
"why is there like a hundred solo.to pages that have selenite, literally just search \"site:solo.to selenite\"",
|
||||
"rights to the trans people 🏳️⚧️ (trans rights)",
|
||||
"happy new years everyone",
|
||||
"merry christmas everyone",
|
||||
"happy easter day everyone",
|
||||
"happy halloween everyone",
|
||||
"happy thanksgiving everyone",
|
||||
"happy valentines day everyone",
|
||||
"happy birthday to me",
|
||||
"happy birthday to you",
|
||||
"happy birthday to everyone",
|
||||
"happy birthday to the website",
|
||||
"dont look behind you",
|
||||
"sky",
|
||||
"penguinify",
|
||||
"a456pur",
|
||||
"selenite",
|
||||
"3kh0",
|
||||
"selenite is the best",
|
||||
"selenite is the best website",
|
||||
"selenite is the best website ever",
|
||||
"selenite is the best website ever made",
|
||||
"selenite is the best website ever made in the history of the world",
|
||||
"selenite is the best website ever made in the history of the world and the universe",
|
||||
"selenite is the best website ever made in the history of the world and the universe and the galaxy",
|
||||
"selenite is the best website ever made in the history of the world and the universe and the galaxy and the solar system",
|
||||
"selenite is the best website ever made in the history of the world and the universe and the galaxy and the solar system and the milky way",
|
||||
"selenite is the best website ever made in the history of the world and the universe and the galaxy and the solar system and the milky way and the universe",
|
||||
"Your network admin has logged this visit. You will be reported to the authorities.",
|
||||
"share with your friends",
|
||||
"i love piracy",
|
||||
"i love piracy and you should too",
|
||||
"ai is gonna take over the world",
|
||||
"serap",
|
||||
"slenetine",
|
||||
"Behind you.",
|
||||
"if you are seeing this message, please ping the owner of selenite in the discord server immediately.",
|
||||
"sorry in advance for may 18th",
|
||||
"selenite stole $100k from the pentagon to keep paying for hosting",
|
||||
"this is your sign to get off games and get a good academic life",
|
||||
"Josh",
|
||||
"3kh0 has been kidnapped.",
|
||||
"We skidded from everyone including ourselves.",
|
||||
"congrats on who got a 53 by using this site",
|
||||
"@everyone Please be reminded that you should not to try and get a girlfriend in the Selenite widgetbot chat.",
|
||||
"ive spent 10 minutes writing 8 quotes gosh i need better things to do",
|
||||
"selenite workers are immensely underpaid",
|
||||
"how does one",
|
||||
"Please add proxy im begging i need proxy",
|
||||
"seraphite",
|
||||
"if u self-hosted this then ur cool",
|
||||
"laptops are better then iPads",
|
||||
"Remember When The Platform Was Sliding Into The Fire Pit, And I Said 'Goodbye,' And You Were Like 'No Way!' And Then I Was All, 'We Pretended We Were Going To Murder You.' That Was Great.",
|
||||
"How Are You Holding Up? Because I’m A Potato.",
|
||||
"As resilient as the pirate bay",
|
||||
"We are resilient",
|
||||
"We will never go away",
|
||||
"4 Million gamers and counting",
|
||||
"So many games to choose!",
|
||||
"example.com",
|
||||
"Dyknow eww",
|
||||
"Securly no pls",
|
||||
"i like bean",
|
||||
"i like beans",
|
||||
"i like lots of beans",
|
||||
"i enjoy eating beans",
|
||||
"i have a fondness for beans",
|
||||
"i am a fan of beans",
|
||||
"i find beans delicious",
|
||||
"i can't resist a good bean dish",
|
||||
"i think beans are underrated",
|
||||
"i prefer beans over meat",
|
||||
"i could eat beans every day",
|
||||
"i believe beans are a healthy food",
|
||||
"i always add beans to my salads",
|
||||
"Desperado - Khantrast",
|
||||
"Never Gonna Give You Up - Rick Astley",
|
||||
"Bohemian Rhapsody - Queen",
|
||||
"Hotel California - Eagles",
|
||||
"Reeeeeeeee",
|
||||
"Victor cant fly",
|
||||
"if you want to install linux, first crack the skid, then restart and you should be set",
|
||||
"sure just downgrade the about:blank page",
|
||||
"...that's not how it works. if you want to unenroll the only way to do that is to uninstall the shim",
|
||||
"sure just hack the crosh shell",
|
||||
"yeah so you want to playstore bypass the servers, you don't want to remove the servers",
|
||||
"yeah so you want to crack the proxy, you don't want to hack the goguardian",
|
||||
"to disable filters, you need to hack the proxy",
|
||||
"to downgrade, you need to rm -rf the shim",
|
||||
"🥺👉👈",
|
||||
"Fancy! ✨",
|
||||
"˙ǝɯoɔlǝM",
|
||||
"¡ollǝH",
|
||||
"¿ʞɹoʍ uǝʌǝ sᴉɥʇ sǝop",
|
||||
"ǝʇᴉsqǝʍ pɐɹ ʎɯ oʇ ǝɯoɔlǝM",
|
||||
"¿¿sᴉǝɥʇ pɐǝɹ uɐɔ no⅄",
|
||||
"Ḩ̴͈̗͉̜͓̣͈̙̉͑̅͋͆ë̷̱̒̿̔̕͠l̵̡̦̜̣̣̂p̴̧̢̜͓̀̒̊͗̃",
|
||||
"W̷̧͈̭͉͎͙̜͉̒̈̀͆̊͑ͅe̴̢̨͕͖̩̘̱̘͎̜̞̮̖͌̿̒̽̅͆̅̂̄̉͊̾́̏͘͜͜l̶̡̤͉̟͉̞̝̻͈̐̃̓̇̑̏͗͌̒̒̿͒̚͝c̶̡̢̛͈͕̮̹̪̳̼͈͓̩̩̻͍̓̄̂͊̐̂͒̈́̊̇́̋͑̅͐͘͜ở̵͔̙͚̪͔̘̙̩̦͉̻̦̯́̂͐̉̔̀̊͂m̸̢̢̺̼͎͚͙̬̬͍̎̚e̸̜̩̫̯͙̲͍͍̯̓̔̎̍͂̓͐͌̍̃̈̾̕͘ ̶̞͔̲̦̀̽t̴̛̬͓̲̬̖̼̒͗̊͌͑̒̎̿̎̅̓̕͠͠o̵̡̨̙̬̦͍̠͕̭͚͛ͅ ̸̪̳̟̍̇̀̀͌̏̌̽͛͜3̸̧̹̝̼̺̹̞̯̠͓͛͋͌͆́͌͋̇͐͝͠k̷̟̙̙̹͚͗͛̀̽͊̇͑̒ḩ̴̩͍̗̙͓̱̠͕̺̖̘̹͉̋̒̎̽͑̈́͜ͅ0̴̱͍̬̩̩͇̥̯̯̬̙̽̈́̓̍̉͜͝!̸̠̗̠͉̪̮̻͈̰̄̚",
|
||||
"All your base are belong to us",
|
||||
"Error 404: Brain not found",
|
||||
"Why settle for less when you can have the best?",
|
||||
"Life's too short for bad design",
|
||||
"Don't be a square, be a triangle",
|
||||
"Think outside the box (except for this one)",
|
||||
"Why be ordinary when you can be extraordinary?",
|
||||
"Designing the future, one pixel at a time",
|
||||
"Don't be afraid to try something new",
|
||||
"The world is your canvas, make a masterpiece",
|
||||
"Design is not just what it looks like and feels like. Design is how it works",
|
||||
"Simplicity is the ultimate sophistication",
|
||||
"Design is thinking made visible",
|
||||
"The best things in life are design",
|
||||
"Design is not just for decoration, it's function",
|
||||
"Design is not just what it looks like, it's how it works",
|
||||
"All your data belong to us.",
|
||||
"Error 404: humor not found.",
|
||||
"Welcome to the matrix.",
|
||||
"We're not just a website, we're a lifestyle.",
|
||||
"Mind blown? Us too.",
|
||||
"Don't believe everything you see on the internet.",
|
||||
"All hail the almighty algorithm.",
|
||||
"We put the 'pro' in procrastination.",
|
||||
"We're not just a website, we're a community.",
|
||||
"We're the real deal, not a facsimile.",
|
||||
"We're the missing piece to your internet puzzle.",
|
||||
"You're not just visiting a website, you're experiencing the future.",
|
||||
"We're the missing link, not the missing lynx.",
|
||||
"We're not just a website, we're a revolution.",
|
||||
"We're not just a website, we're a subculture.",
|
||||
"We're not just a website, we're an obsession.",
|
||||
"We're not just a website, we're a force to be reckoned with.",
|
||||
"We're not just a website, we're a way of life.",
|
||||
"We're not just a website, we're a cult.",
|
||||
"We're the website you never knew you needed.",
|
||||
"We're the website your mother warned you about.",
|
||||
"We're the website your teachers told you to stay away from.",
|
||||
"We're the website your friends are talking about.",
|
||||
"We're the website you'll never forget.",
|
||||
"We're the website that's taking over the world.",
|
||||
"Think outside the box - unless it's a circle, then just think inside!",
|
||||
"We're not just another website, we're a website with personality!",
|
||||
"In a world of copycats, be a original.",
|
||||
"We're not just a website, we're an experience.",
|
||||
"We're not just a website, we're a movement.",
|
||||
"We're not just a website, we're a game-changer.",
|
||||
"We're not just a website, we're a trendsetter.",
|
||||
"We're not just a website, we're a work of art.",
|
||||
"We're not just a website, we're a masterpiece.",
|
||||
"We're not just a website, we're a phenomenon.",
|
||||
"We're not just a website, we're a sensation.",
|
||||
"We're not just a website, we're a sensation of the internet.",
|
||||
"We're not just a website, we're a revolution in the digital world.",
|
||||
"We're not just a website, we're a revolution in the world of information",
|
||||
"We're not just a website, we're a one-of-a-kind",
|
||||
"We're not just a website, we're a one-stop-shop",
|
||||
"We're not just a website, we're a one-stop-shop for all your needs",
|
||||
"We're not just a website, we're a one-stop-shop for all your information needs",
|
||||
"We're not just a website, we're a one-stop-shop for all your digital needs",
|
||||
"We're not just a website, we're a one-stop-shop for all your online needs.",
|
||||
"Unlock the power of knowledge with us.",
|
||||
"Where the impossible becomes possible.",
|
||||
"Experience the future of technology with us.",
|
||||
"Where innovation meets creativity.",
|
||||
"Empowering you to achieve your goals.",
|
||||
"Join the revolution of digital transformation.",
|
||||
"Leading the way in cutting-edge technology.",
|
||||
"Transforming the way you interact with the world.",
|
||||
"Unleashing the power of information at your fingertips.",
|
||||
"Setting new standards in user experience.",
|
||||
"Unlocking the full potential of the internet for you.",
|
||||
"Discover endless possibilities with us.",
|
||||
"Changing the game in online exploration.",
|
||||
"Elevating your online experience to new heights.",
|
||||
"Pushing the boundaries of what's possible online.",
|
||||
"Unlocking the secrets of the digital world with us.",
|
||||
"Unleashing the full potential of the internet for you.",
|
||||
"Unlocking the power of data for you.",
|
||||
"Where technology and human potential meet.",
|
||||
"Where imagination becomes reality.",
|
||||
"Where innovation meets accessibility.",
|
||||
"Where creativity and technology merge.",
|
||||
"Where ideas become solutions.",
|
||||
"Where every click counts.",
|
||||
"Where the future of the internet is now.",
|
||||
"Why did the tomato turn red? Because it saw the salad dressing.",
|
||||
"Why did the chicken cross the playground? To get to the other slide.",
|
||||
"Why don't scientists trust atoms? Because they make up everything.",
|
||||
"Why did the cookie go to the hospital? Because it was feeling crumbly.",
|
||||
"Why did the computer go to the doctor? Because it had a virus.",
|
||||
"Why did the cyclops stop teaching? Because he only had one pupil.",
|
||||
"Why did the frog call his insurance company? He had a jump in his car.",
|
||||
"Why did the boy tiptoe past the medicine cabinet? He didn't want to wake the sleeping pills.",
|
||||
"Why did the cookie go to the seance? To talk to the dead dough.",
|
||||
"Why did the clock go to the doctor? It had a broken tick-tock.",
|
||||
"Why did the belt go to jail? For holding up the pants.",
|
||||
"Why did the robot go to school? To learn how to unplug itself.",
|
||||
"Life in the fast lane!",
|
||||
"🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧🐧",
|
||||
"i forgor",
|
||||
"i rember",
|
||||
"me when i the me the when the the me the when i the when the me the the the when the",
|
||||
"Under pressure!",
|
||||
"Do your work!",
|
||||
"the voices",
|
||||
"imagine not spending 748,289,198 hours making this site"
|
||||
]
|
17
dmca/2025-03-04 Microsoft.txt
Normal file
@ -0,0 +1,17 @@
|
||||
To Whom It may concern:
|
||||
|
||||
We hereby notify you on behalf of Microsoft Corporation, (“Microsoft Corporation”) that the following URL https://selenite.cc/semag/eaglercraft/index.html, https://selenite.cc/semag/1defense/index.html (the “URL”) which you are hosting contains content (the “Infringing Content”) which infringes the copyright, intellectual property rights, goodwill and reputation of Microsoft Corporation, including the following copyright (the “MINECRAFT Copyright”) owned by Microsoft Corporation, found on Microsoft Corporation’s website at https://www.minecraft.net/:
|
||||
|
||||
Copyright: MINECRAFT
|
||||
|
||||
The URL’s Infringing Content constitutes an infringement of Microsoft Corporation’s intellectual property rights in the MINECRAFT Copyright. This damages the goodwill and reputation of Microsoft Corporation and causes consumer confusion as to whether the Infringing Content is authorized, endorsed, or sponsored by Microsoft Corporation when, in fact, it is not. Microsoft Corporation has an obligation to the public to police against any copyright infringing content which may cause marketplace confusion. Such actions by the URL dilute Microsoft Corporation’s MINECRAFT Copyright, harm its associated goodwill, and constitute, inter alia, a misappropriation and violation of the rights of Microsoft Corporation. This damage to its business entitles Microsoft Corporation to various forms of relief, including monetary compensation.
|
||||
|
||||
We represent under penalty of perjury that the information in this notice is true and correct, and that we are authorized to act on behalf of Microsoft Corporation as owner of the MINECRAFT Copyright. We have a good faith belief that this use of the Infringing Content in the URL is not authorized by Microsoft Corporation as the owner of the MINECRAFT Copyright or its agents, nor is such use permissible by law. Use of such Infringing Content in the URL is not defensible. We have notified the registrant and registrar of the URL’s domain in writing of this matter.
|
||||
|
||||
Since you are hosting the URL containing the Infringing Content, we request that you immediately disable or suspend such URL without delay. We would appreciate your resolving this matter as soon as possible and confirming that you have done so within the next seven (7) days. Microsoft Corporation reserves the right to take whatever action it considers appropriate to protect its rights and nothing contained in this Notice is intended to constitute a waiver of any of Microsoft Corporation’s legal rights or remedies, all of which are hereby expressly reserved.
|
||||
|
||||
Please let us know if you need any additional information.
|
||||
|
||||
Sincerely,
|
||||
|
||||
[ REDACTED ]
|
BIN
favicon.ico
Normal file
After Width: | Height: | Size: 264 KiB |
BIN
favicon.png
Normal file
After Width: | Height: | Size: 18 KiB |
1
img/addlink.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M680-160v-120H560v-80h120v-120h80v120h120v80H760v120h-80ZM440-280H280q-83 0-141.5-58.5T80-480q0-83 58.5-141.5T280-680h160v80H280q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h320v80H320Zm560-40h-80q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480Z"/></svg>
|
After Width: | Height: | Size: 368 B |
7
img/backgrounds/compress images PLEASE
Normal file
@ -0,0 +1,7 @@
|
||||
convert image_unoptimized.jpg \
|
||||
-sampling-factor 4:2:0 \
|
||||
-strip \
|
||||
-quality 70 \
|
||||
-interlace JPEG \
|
||||
-colorspace RGB \
|
||||
image_optimized.jpg
|
3
img/backgrounds/dogcat.svg
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
img/backgrounds/mountains_theme.jpg
Normal file
After Width: | Height: | Size: 333 KiB |
BIN
img/backgrounds/nighttime_theme.png
Normal file
After Width: | Height: | Size: 317 KiB |
BIN
img/backgrounds/seraph_theme.png
Normal file
After Width: | Height: | Size: 891 KiB |
BIN
img/backgrounds/sunset_theme.jpg
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
img/backgrounds/vaporwave_theme.jpg
Normal file
After Width: | Height: | Size: 255 KiB |
3
img/badges/banana.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 -121.5 1267 1267" class="icon" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M1051.38 273.973c33.020 11.97 15.241 134.751 13.383 147.531-6.449 44.481-46.39 320.287-301.37 425.313-200.83 82.733-405.414 6.124-517.636-94.338-26.164-23.418-95.503-85.468-79.673-120.661 31.921-71.078 345.732 113.19 588.060-14.614 196.29-103.508 248.947-360.723 297.234-343.232z" fill="#FADC4A" /><path d="M1056.052 465.003c16.589 9.55-18.316 113.74-71.483 194.93-25.485 38.868-90.884 135.679-221.16 186.884-128.862 50.657-241.398 25.315-289.778 13.698-111.502-26.768-215.443-90.518-208.796-109.121 9.917-28.023 246.632 112.653 467.988 28.087 213.743-81.661 297.64-329.222 323.23-314.477z" fill="#D6BC40" /><path d="M587.187 907.507c-43.977-0.069-86.645-5.543-127.414-15.79-83.384-20.24-167.008-63.032-231.282-119.587-37.665-33.138-107.773-94.823-86.843-149.651 13.907-36.395 55.391-38.737 69.037-39.508 26.165-1.479 59.331 2.093 97.673 6.227 61.71 6.657 138.493 14.941 217.327 5.115 1.060-0.152 2.285-0.24 3.529-0.24 14.45 0 26.164 11.714 26.165 26.165 0 13.412-10.091 24.467-23.096 25.987-84.988 10.596-165.131 1.948-229.524-5.013-36.055-3.924-67.192-7.248-89.119-6.018-15.62 0.877-22.371 4.028-23.091 5.939-1.478 3.924 0.864 16.418 19.062 38.829 16.602 20.449 38.777 39.954 53.442 52.868 57.171 50.302 134.907 90.008 213.246 108.938 94.955 22.933 190.782 16.314 277.14-19.152 82.852-34.014 153.877-92.886 205.395-170.074 46.156-69.208 74.387-150.069 79.516-227.635 1.793-27.081 1.714-68.513-3.86-103.549-6.777-42.663-18.512-57.131-24.373-58.95-3.205-0.995-10.361 3.989-18.668 13.083-14.023 15.241-30.090 40.112-48.602 68.892-52.409 81.321-124.179 192.705-253.042 256.143-3.369 1.69-7.342 2.679-11.545 2.679-14.477 0-26.215-11.737-26.215-26.215 0-10.276 5.912-19.168 14.518-23.467 116.010-57.108 183.242-161.428 232.328-237.608 19.86-30.809 37.011-57.432 54.083-75.984 8.869-9.642 35.873-39 72.699-27.564 31.085 9.656 51.453 43.538 60.546 100.737 7.85 49.478 5.35 100.736 4.395 115.219-5.716 86.619-37.035 176.614-88.203 253.279-57.393 85.913-136.542 151.418-229.061 189.422-54.785 23.078-118.471 36.488-185.287 36.488-0.308 0-0.615 0-0.923-0.001z" fill="#000000" /><path d="M600.949 632.316c-0.006 0-0.008 0-0.016 0-14.45 0-26.164-11.714-26.165-26.165 0-11.976 8.044-22.072 19.023-25.178l3.638-1.013c2.179-0.653 4.682-1.032 7.274-1.032 14.45 0 26.164 11.714 26.165 26.165 0 11.954-8.017 22.036-18.968 25.162l-4.109 1.132c-2.068 0.588-4.443 0.928-6.899 0.929z" fill="#000000" /><path d="M536.846 780.267q-10.467 0-21.023-0.443c-43.788-1.832-87.522-9.446-126.482-22.031-10.478-3.575-17.881-13.332-17.881-24.818 0-14.45 11.714-26.164 26.165-26.165 2.787 0 5.473 0.436 7.993 1.245 37.31 12.217 80.479 19.448 125.287 19.793 58.86 2.697 127.189-11.457 190.104-42.385 132.983-65.282 189.030-179.793 207.005-225.988 3.857-9.945 13.349-16.868 24.458-16.868 14.45 0 26.164 11.714 26.165 26.165 0 3.468-0.675 6.779-1.9 9.807-20.085 51.723-83.077 180.363-232.504 253.835-59.99 30.185-130.736 47.86-205.613 47.86-0.624 0-1.245-0.002-1.867-0.005zM986.557 257.488c-91.852-15.948-147.505-94.285-147.283-112.576 0.115-5.789 1.636-11.199 4.232-15.935 2.684-4.569 7.18-8.572 12.577-10.868-3.792 1.997 4.253-3.053 13.843-1.22s15.084 9.157 17.673 12.428c11.604 14.731 22.789 30.089 36.92 42.453 28.521 24.857 58.872 36.985 90.099 35.964 21.167-0.694 41.865-7.286 61.488-19.624 3.974-2.564 8.83-4.086 14.041-4.086 14.45 0 26.164 11.714 26.165 26.165 0 9.368-4.924 17.585-12.322 22.207-30.201 18.891-67.21 27.838-87.763 27.616-10.936-0.076-21.589-1.061-31.952-2.881z" fill="#000000" /></svg>
|
After Width: | Height: | Size: 3.6 KiB |
57
img/badges/dev.svg
Normal file
@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="500"
|
||||
height="500"
|
||||
viewBox="0 0 132.29166 132.29167"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="dev.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="dev.png"
|
||||
inkscape:export-xdpi="24.576"
|
||||
inkscape:export-ydpi="24.576"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="0.70733726"
|
||||
inkscape:cx="387.36825"
|
||||
inkscape:cy="412.8158"
|
||||
inkscape:window-width="1704"
|
||||
inkscape:window-height="1033"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><rect
|
||||
style="fill:#9364d0;fill-opacity:1;stroke:#9364d0;stroke-width:8.6953;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect2"
|
||||
width="123.59637"
|
||||
height="123.59637"
|
||||
x="4.3476481"
|
||||
y="4.3476481"
|
||||
ry="23.631048" /><g
|
||||
style="fill:none"
|
||||
id="g1"
|
||||
transform="matrix(6.097761,0,0,6.097761,-17.160343,-10.614374)"><path
|
||||
d="M 12.268927,18.003047 H 9.5615953 c 0,-2.239459 -1.8216305,-4.061077 -4.0610655,-4.061077 v -2.707467 c 2.239435,0 4.0610655,-1.8215812 4.0610655,-4.0610283 h 2.7073317 c 0,2.2218158 -1.090622,4.1799573 -2.7492015,5.4147623 1.6585795,1.234926 2.7492015,3.19297 2.7492015,5.41481 z m 9.554072,-4.061077 c -2.239459,0 -4.061077,1.821618 -4.061077,4.061077 h -2.707467 c 0,-2.22184 1.090793,-4.179884 2.749312,-5.41481 -1.658519,-1.234805 -2.749312,-3.1929465 -2.749312,-5.4147623 h 2.707467 c 0,2.2394471 1.821618,4.0610283 4.061077,4.0610283 z"
|
||||
fill="#2ea967"
|
||||
id="path1"
|
||||
inkscape:label="path1"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:0.798474;stroke-dasharray:none"
|
||||
sodipodi:nodetypes="cccccccccccccccc" /></g></g></svg>
|
After Width: | Height: | Size: 2.4 KiB |
59
img/badges/donate.svg
Normal file
@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="500"
|
||||
height="500"
|
||||
viewBox="0 0 132.29166 132.29167"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="donate.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="money.png"
|
||||
inkscape:export-xdpi="24.576"
|
||||
inkscape:export-ydpi="24.576"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="0.70733726"
|
||||
inkscape:cx="387.36825"
|
||||
inkscape:cy="412.8158"
|
||||
inkscape:window-width="1704"
|
||||
inkscape:window-height="1033"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><rect
|
||||
style="fill:#57cd8b;fill-opacity:1;stroke:#57cd8b;stroke-width:8.6953;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect2"
|
||||
width="123.59637"
|
||||
height="123.59637"
|
||||
x="4.3476481"
|
||||
y="4.3476481"
|
||||
ry="23.631048" /><text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:105.833px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#57cd8b;fill-opacity:1;stroke:#57cd8b;stroke-width:13.2292;stroke-opacity:1"
|
||||
x="36.618427"
|
||||
y="101.44114"
|
||||
id="text1"
|
||||
inkscape:label="text1"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan1"
|
||||
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:105.833px;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:13.2292;stroke-opacity:1"
|
||||
x="36.618427"
|
||||
y="101.44114">$</tspan></text></g></svg>
|
After Width: | Height: | Size: 2.5 KiB |
53
img/badges/mod.svg
Normal file
@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="500"
|
||||
height="500"
|
||||
viewBox="0 0 132.29166 132.29167"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="mod.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="mod.png"
|
||||
inkscape:export-xdpi="24.576"
|
||||
inkscape:export-ydpi="24.576"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="0.70733726"
|
||||
inkscape:cx="387.36825"
|
||||
inkscape:cy="412.8158"
|
||||
inkscape:window-width="1704"
|
||||
inkscape:window-height="1033"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><rect
|
||||
style="fill:#6187d3;fill-opacity:1;stroke:#6187d3;stroke-width:8.6953;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect2"
|
||||
width="123.59637"
|
||||
height="123.59637"
|
||||
x="4.3476481"
|
||||
y="4.3476481"
|
||||
ry="23.631048" /><path
|
||||
d="M 90.486936,20.506238 H 41.804728 c -0.761521,9.888591 -9.128034,17.495126 -19.016626,17.495126 v 4.564114 c 0,22.439615 10.649341,43.357923 29.285592,58.190812 l 14.072138,11.02914 14.07233,-11.02914 C 98.854413,86.30339 109.50356,65.005093 109.50356,42.565478 v -4.564114 c -9.88859,0 -17.875692,-7.606535 -19.016624,-17.495126 z M 57.398365,86.30339 C 45.988274,77.175356 39.142296,64.244536 39.142296,50.172013 v -2.662239 c 6.085421,0 11.409899,-4.564114 11.790274,-10.649342 h 15.213262 v 56.669311 z"
|
||||
fill="#5865f2"
|
||||
id="path1"
|
||||
style="fill:#ffffff;fill-opacity:1;stroke-width:5.1009"
|
||||
inkscape:label="path1" /></g></svg>
|
After Width: | Height: | Size: 2.2 KiB |
55
img/badges/owner.svg
Normal file
@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="500"
|
||||
height="500"
|
||||
viewBox="0 0 132.29166 132.29167"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="owner.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="boost.png"
|
||||
inkscape:export-xdpi="24.576"
|
||||
inkscape:export-ydpi="24.576"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="0.70733726"
|
||||
inkscape:cx="308.1981"
|
||||
inkscape:cy="352.02444"
|
||||
inkscape:window-width="1704"
|
||||
inkscape:window-height="1033"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><rect
|
||||
style="fill:#b655ce;fill-opacity:1;stroke:#b655ce;stroke-width:8.6953;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect2"
|
||||
width="123.59637"
|
||||
height="123.59637"
|
||||
x="4.3476481"
|
||||
y="4.3476481"
|
||||
ry="23.631048" /><g
|
||||
style="fill:none"
|
||||
id="g1"
|
||||
transform="matrix(4.4097222,0,0,4.4097222,13.984004,13.242879)"><path
|
||||
fill="#ffffff"
|
||||
d="m 5,18 a 1,1 0 0 0 -1,1 3,3 0 0 0 3,3 h 10 a 3,3 0 0 0 3,-3 1,1 0 0 0 -1,-1 z M 3.04,7.76 A 1,1 0 0 0 1.52,8.91 l 2.25,6.42 A 1,1 0 0 0 4.71,16 h 14.55 a 1,1 0 0 0 0.95,-0.71 L 22.15,8.84 A 1,1 0 0 0 20.6,7.74 l -4.11,3 -3.55,-5.33 0.82,-0.82 a 0.83,0.83 0 0 0 0,-1.18 L 12.59,2.24 a 0.83,0.83 0 0 0 -1.18,0 l -1.17,1.17 a 0.83,0.83 0 0 0 0,1.18 l 0.82,0.82 -3.61,5.42 z"
|
||||
class=""
|
||||
id="path1" /></g></g></svg>
|
After Width: | Height: | Size: 2.1 KiB |
58
img/badges/partner.svg
Normal file
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="500"
|
||||
height="500"
|
||||
viewBox="0 0 132.29166 132.29167"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25)"
|
||||
sodipodi:docname="partner.svg"
|
||||
xml:space="preserve"
|
||||
inkscape:export-filename="partner.png"
|
||||
inkscape:export-xdpi="24.576"
|
||||
inkscape:export-ydpi="24.576"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="0.70733726"
|
||||
inkscape:cx="387.36825"
|
||||
inkscape:cy="412.8158"
|
||||
inkscape:window-width="1704"
|
||||
inkscape:window-height="1033"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" /><defs
|
||||
id="defs1" /><g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"><rect
|
||||
style="fill:#44baa3;fill-opacity:1;stroke:#44baa3;stroke-width:8.6953;stroke-linejoin:bevel;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect2"
|
||||
width="123.59637"
|
||||
height="123.59637"
|
||||
x="4.3476481"
|
||||
y="4.3476481"
|
||||
ry="23.631048" /><g
|
||||
fill="#5865f2"
|
||||
id="g2"
|
||||
transform="matrix(4.5150421,0,0,4.5150421,11.965328,12.072554)"
|
||||
style="fill:#ffffff;fill-opacity:1"><path
|
||||
d="m 16.6033,9.15179 -2.4908,1.66051 c -0.249,0.2491 -0.6642,0.1661 -0.7472,0 -0.2491,-0.2491 -0.6642,-0.4151 -0.9133,-0.4982 -0.6642,-0.166 -1.2454,0 -1.7435,0.2491 L 9.87823,11.1444 5.22878,14.1333 C 4.23247,14.7975 2.98708,14.5485 2.32288,13.4691 1.65867,12.3898 2.0738,11.2274 3.07011,10.6463 L 8.38376,6.99312 C 9.87823,6.16286 11.6218,5.74773 13.2823,6.16286 c 1.4114,0.24907 2.6568,0.99631 3.4871,2.15867 0.249,0.16605 0.249,0.66421 -0.1661,0.83026 z"
|
||||
id="path1"
|
||||
style="fill:#ffffff;fill-opacity:1" /><path
|
||||
d="m 22,11.6425 c 0,0.7473 -0.4152,1.4115 -0.9963,1.7436 l -5.4797,3.5701 c -0.9964,0.6642 -2.2417,0.9963 -3.4041,0.9963 -0.4982,0 -0.9963,0 -1.4114,-0.166 C 9.29702,17.5374 8.21769,16.6241 7.22138,15.6278 7.05532,15.4617 7.05532,14.9636 7.38743,14.8805 L 9.8782,13.22 c 0.2491,-0.249 0.6642,-0.166 0.7472,0 0.2491,0.2491 0.4982,0.4152 0.9133,0.4982 0.6642,0.166 1.2454,0 1.7436,-0.2491 l 1.2453,-0.7472 3.7362,-2.4908 0.4982,-0.41513 C 19.7583,9.15177 21.0037,9.40085 21.6679,10.4802 21.8339,10.8953 22,11.2274 22,11.6425 Z"
|
||||
id="path2"
|
||||
style="fill:#ffffff;fill-opacity:1" /></g></g></svg>
|
After Width: | Height: | Size: 2.9 KiB |
1
img/badges/trans.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5BCEFA" d="M0 27c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4v-1.3H0V27z"/><path fill="#F5A9B8" d="M.026 20.5L0 25.8h36v-5.3z"/><path fill="#EEE" d="M0 15.3h36v5.3H0z"/><path fill="#F5A9B8" d="M.026 10.1L0 15.4h36v-5.3z"/><path fill="#5BCEFA" d="M36 9c0-2.209-1.791-4-4-4H4C1.791 5 0 6.791 0 9v1.2h36V9z"/></svg>
|
After Width: | Height: | Size: 383 B |
1
img/copy.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"/></svg>
|
After Width: | Height: | Size: 340 B |
3
img/discord.svg
Normal file
After Width: | Height: | Size: 13 KiB |
1
img/edit.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#5f6368"><path d="M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z"/></svg>
|
After Width: | Height: | Size: 329 B |
1
img/friend.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#ffffff"><path d="M40-160v-112q0-34 17.5-62.5T104-378q62-31 126-46.5T360-440q66 0 130 15.5T616-378q29 15 46.5 43.5T680-272v112H40Zm720 0v-120q0-44-24.5-84.5T666-434q51 6 96 20.5t84 35.5q36 20 55 44.5t19 53.5v120H760ZM360-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47Zm400-160q0 66-47 113t-113 47q-11 0-28-2.5t-28-5.5q27-32 41.5-71t14.5-81q0-42-14.5-81T544-792q14-5 28-6.5t28-1.5q66 0 113 47t47 113ZM120-240h480v-32q0-11-5.5-20T580-306q-54-27-109-40.5T360-360q-56 0-111 13.5T140-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T440-640q0-33-23.5-56.5T360-720q-33 0-56.5 23.5T280-640q0 33 23.5 56.5T360-560Zm0 320Zm0-400Z"/></svg>
|
After Width: | Height: | Size: 766 B |
3
img/games.svg
Normal file
@ -0,0 +1,3 @@
|
||||
<svg width="1080" height="1080" xmlns="http://www.w3.org/2000/svg">
|
||||
<image href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAQAAABIkb+zAAACpUlEQVR42u2aO08UURiGT6MNuMslJoSOhp5rIpJg4i8gIYGFAhujFaWCcvkRxgaK5VISqPQXyIKthoJCQ8ImJLBbkKBRLsljh6Lu7veduZ3ie+o577zPZmfmzDnjnGEYhmEYhmEYhmEYIsgxxgolDrkgLi44pMQKY+SSLd9NkUuS5JIi3cmUb2KZa9LgmmWa4q7fwwFpckBPnPWHOCdtzhmKq/4AZ2TBGQNx1M9zRFYckY8uUCRLilHrD5M1w9EEtjMX2I5SvyulO3/9p0KXv8BM5vUBZvwFNhun3xwrp0yBDjooUBYdv+kvcJyAQJn2mzHtIoVj3/ptkj5qgcKtcxREY9r8BAYTEei8dY5O0ZhBP4HJYAQm/QSWgvkLLfkJbCQioL+IYcNPYC8RAf1tFPb8BKr1CjccHSdVn/qt9X/xVAWgVS8wEJSA/tWm1v0hI4GCXmBRlhxDYclFvagXWE9JQHZbXdcL7KYkIHuw7eoFKikJyKYWFW39Fun5UxKAFp1Af2oC0rlRv05gIjUB6dxoQiewkJqAdG60oBNYIzTWdAKl4ARKOoHT4ARONfXzwdUHFAu99AUp0CcXGA9SYFwuMB+kwLxcYDVIgVW5wE6QAjtygZMgBU6k9XNB1geE+/j0BivQKxMY9YhWL/7JFi7/YlQWPaUO1r9y+ylMyYKnlbELzhO1wrQs9qEq9LWLgFJB9vEBzVyJI1+5iCgUrmiWhkp3h+dcDIgVtuSRI6LAWRcTQoURTWTj2dBLFyMCBd1XE+T4XDfuhYuZBgqfuKcNbONjjbCfPHEJwPOa3+PteewPOMdd5vj+T9gH5RKT5owP/rOt9Y1Z7vhH3ucZ7/nKBRX2ecMjlzA85i37VPnBF97x9Peyl2EYhmEYhmEYhmEYf/ILpJ54reMDuewAAAAASUVORK5CYII=" height="1080" width="1080" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
BIN
img/pfps/3kh0.webp
Normal file
After Width: | Height: | Size: 101 KiB |
BIN
img/pfps/astra.webp
Normal file
After Width: | Height: | Size: 6.3 KiB |
BIN
img/pfps/awesome.webp
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
img/pfps/ayo.webp
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
img/pfps/buttsfart.webp
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
img/pfps/caidn.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
img/pfps/compass.png
Normal file
After Width: | Height: | Size: 108 KiB |
BIN
img/pfps/dire.webp
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
img/pfps/legalise.webp
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
img/pfps/lunar.webp
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
img/pfps/math.webp
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
img/pfps/night.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
img/pfps/ocular.webp
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
img/pfps/shadow.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
img/pfps/sky.webp
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
img/pfps/snor.webp
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
img/pfps/ultra.webp
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
img/pfps/wrnd.gif
Normal file
After Width: | Height: | Size: 1023 KiB |
BIN
img/selenite192.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
img/selenite512.png
Normal file
After Width: | Height: | Size: 222 KiB |
1
img/star-fill.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="#FFFFFF" d="m12.672.668 3.059 6.197 6.838.993a.75.75 0 0 1 .416 1.28l-4.948 4.823 1.168 6.812a.75.75 0 0 1-1.088.79L12 18.347l-6.116 3.216a.75.75 0 0 1-1.088-.791l1.168-6.811-4.948-4.823a.749.749 0 0 1 .416-1.279l6.838-.994L11.327.668a.75.75 0 0 1 1.345 0Z"></path></svg>
|
After Width: | Height: | Size: 367 B |
1
img/star.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="#FFFFFF" d="M12 .25a.75.75 0 0 1 .673.418l3.058 6.197 6.839.994a.75.75 0 0 1 .415 1.279l-4.948 4.823 1.168 6.811a.751.751 0 0 1-1.088.791L12 18.347l-6.117 3.216a.75.75 0 0 1-1.088-.79l1.168-6.812-4.948-4.823a.75.75 0 0 1 .416-1.28l6.838-.993L11.328.668A.75.75 0 0 1 12 .25Zm0 2.445L9.44 7.882a.75.75 0 0 1-.565.41l-5.725.832 4.143 4.038a.748.748 0 0 1 .215.664l-.978 5.702 5.121-2.692a.75.75 0 0 1 .698 0l5.12 2.692-.977-5.702a.748.748 0 0 1 .215-.664l4.143-4.038-5.725-.831a.75.75 0 0 1-.565-.41L12 2.694Z"></path></svg>
|
After Width: | Height: | Size: 617 B |
1
img/user.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#ffffff"><path d="M234-276q51-39 114-61.5T480-360q69 0 132 22.5T726-276q35-41 54.5-93T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 59 19.5 111t54.5 93Zm246-164q-59 0-99.5-40.5T340-580q0-59 40.5-99.5T480-720q59 0 99.5 40.5T620-580q0 59-40.5 99.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q53 0 100-15.5t86-44.5q-39-29-86-44.5T480-280q-53 0-100 15.5T294-220q39 29 86 44.5T480-160Zm0-360q26 0 43-17t17-43q0-26-17-43t-43-17q-26 0-43 17t-17 43q0 26 17 43t43 17Zm0-60Zm0 360Z"/></svg>
|
After Width: | Height: | Size: 751 B |
1
img/user_index.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#ffffff"><path d="M480-480q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47ZM160-160v-112q0-34 17.5-62.5T224-378q62-31 126-46.5T480-440q66 0 130 15.5T736-378q29 15 46.5 43.5T800-272v112H160Zm80-80h480v-32q0-11-5.5-20T700-306q-54-27-109-40.5T480-360q-56 0-111 13.5T260-306q-9 5-14.5 14t-5.5 20v32Zm240-320q33 0 56.5-23.5T560-640q0-33-23.5-56.5T480-720q-33 0-56.5 23.5T400-640q0 33 23.5 56.5T480-560Zm0-80Zm0 400Z"/></svg>
|
After Width: | Height: | Size: 548 B |
106
index.html
Normal file
@ -0,0 +1,106 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<meta property="og:title" content="Selenite" />
|
||||
<meta property="description" content="Selenite is the best unblocked games site. With over 400 games and an account system, no other websites come close to Selenite." />
|
||||
<meta name="keywords" content="proxy, web proxy, unblock websites, unblock chromebook, free web proxy, proxy list, proxy sites, un block chromebook, online proxy, proxy server, proxysite, proxy youtube, bypass securly, bypass iboss, bypass lightspeed filter, chromebooks, unblock youtube, youtube proxy, unblocked youtube, youtube unblocked, unblock games, selenite, unblocked games, free games">
|
||||
<meta content="/favicon.png" property="og:image" />
|
||||
<meta content="#c77dff" data-react-helmet="true" name="theme-color" />
|
||||
<meta name="googlebot" content="index, follow, snippet" />
|
||||
<link rel="canonical" href="https://selenite.cc/" />
|
||||
<meta property="og:description" content="Selenite is the best unblocked games site. With over 400 games and an account system, no other websites come close to Selenite." />
|
||||
<meta property="og:title" content="Selenite">
|
||||
<meta property="og:type" content="website">
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "Selenite",
|
||||
"alternateName": "selenite.cc",
|
||||
"url": "https://selenite.cc",
|
||||
"logo": "https://selenite.cc/favicon.png",
|
||||
"sameAs": [
|
||||
"https://github.com/selenite-cc",
|
||||
"https://youtube.com/@selenitecc",
|
||||
"https://tiktok.com/@selenitecc",
|
||||
"https://selenite.cc",
|
||||
]
|
||||
}
|
||||
</script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
fetch("/data/quotes.json")
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
const randomQuote = data[Math.floor(Math.random() * data.length)];
|
||||
|
||||
if (randomQuote.includes("OGNUM1") && randomQuote.includes("SQRTNUM1")) {
|
||||
const ognum = Math.floor(Math.random() * 3000);
|
||||
randomQuote = `the square root of ${ognum} is ${Math.sqrt(ognum)}`;
|
||||
} else if (randomQuote.includes("CURRENTURL")) {
|
||||
randomQuote = window.location.hostname;
|
||||
}
|
||||
|
||||
document.getElementById("randomquote").innerHTML = randomQuote;
|
||||
})
|
||||
.catch((error) => console.error("Error loading quotes:", error));
|
||||
});
|
||||
</script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3415518411898563" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
<alerts> </alerts>
|
||||
<body id="noscroll">
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html" title="Games (Unblocked)">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg" /></a>
|
||||
</header>
|
||||
<main id="main" class="noscroll">
|
||||
<b style="font-weight: 1000px"><h1 class="chan">selenite.</h1></b>
|
||||
<noscript>enable javascript if you want the games to actually load</noscript>
|
||||
<p id="randomquote">better thank me for this unblocked website</p>
|
||||
<div class="samerow">
|
||||
<div class="img-container">
|
||||
<a href="/users"><img src="img/user_index.svg" /></a>
|
||||
</div>
|
||||
<div class="img-container">
|
||||
<a href="projects.html"><img src="img/games.svg" /></a>
|
||||
</div>
|
||||
<div class="img-container">
|
||||
<a href="https://discord.gg/7jyufnwJNf"><img src="img/discord.svg" /></a>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer class="noscroll">
|
||||
<a href="gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
55
index.js
Normal file
@ -0,0 +1,55 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
|
||||
const app = express();
|
||||
const port = process.env.PORT || 3000;
|
||||
|
||||
|
||||
app.use(express.static(__dirname));
|
||||
|
||||
app.get('/projects', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'projects.html'));
|
||||
});
|
||||
|
||||
app.get('/bookmarklets', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'bookmarklets.html'));
|
||||
});
|
||||
|
||||
app.get('/settings', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'settings.html'));
|
||||
});
|
||||
|
||||
app.get('/support', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'support.html'));
|
||||
});
|
||||
|
||||
app.get('/about', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'about.html'));
|
||||
});
|
||||
|
||||
app.get('/transfer', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'transfer.html'));
|
||||
});
|
||||
|
||||
app.get('/suggest', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'suggest.html'));
|
||||
});
|
||||
|
||||
app.get('/contact', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'contact.html'));
|
||||
});
|
||||
|
||||
app.get('/ad', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'ad.html'));
|
||||
});
|
||||
|
||||
app.get('/blank', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'blank.html'));
|
||||
});
|
||||
app.get('/backgrounds', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'backgrounds.html'));
|
||||
});
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Selenite is running on port ${port}`);
|
||||
});
|
195
js/all.js
Normal file
@ -0,0 +1,195 @@
|
||||
let backup_icon;
|
||||
let backup_name;
|
||||
let socket;
|
||||
if (location.origin.includes("https")) {
|
||||
socket = new WebSocket(`wss://${location.host}/socket`);
|
||||
} else {
|
||||
socket = new WebSocket(`ws://${location.host}/socket`);
|
||||
}
|
||||
socket.addEventListener("open", (event) => {
|
||||
let cookies = document.cookie.split("; ");
|
||||
for (let i = 0; i < cookies.length; i++) {
|
||||
if (cookies[i].trim().startsWith("token=")) {
|
||||
socket.send(cookies[i].trim());
|
||||
}
|
||||
}
|
||||
});
|
||||
socket.addEventListener("message", (event) => {
|
||||
if (event.data == "ping") {
|
||||
socket.send(`pong${location.pathname.includes("/semag/") ? location.pathname.split("/")[2] : ""}`);
|
||||
return;
|
||||
}
|
||||
if (event.data.startsWith("announce.")) {
|
||||
let styles = document.createElement("style");
|
||||
styles.innerHTML = `@import url("https://fonts.googleapis.com/css2?family=Prompt:wght@300&display=swap");.announce {font-family: "Prompt", sans-serif;position: absolute;margin-left: auto;margin-right: auto;top: 10px;z-index: 10000000;background-color: #a53026;padding: 10px;width: max-content;border-radius: 10px;left:0;right:0;border-color: #f74f40;border-width: 5px;border-radius: 10px;border-style: solid;max-width: 60%;font-size: 16px;color: white;}@keyframes FadeIn {0% {opacity: 0;}100% {opacity: 1;}}@keyframes FadeOut {0% {opacity: 1;}100% {opacity: 0;}}`;
|
||||
let announcement = document.createElement("div");
|
||||
announcement.innerText = event.data.substring(9);
|
||||
announcement.setAttribute("class", "announce");
|
||||
announcement.style.opacity = "0";
|
||||
announcement.style.animation = "FadeIn 1s ease-in-out forwards";
|
||||
document.head.appendChild(styles);
|
||||
document.body.appendChild(announcement);
|
||||
setTimeout(() => {
|
||||
announcement.style.animation = "FadeOut 1s ease-in-out forwards";
|
||||
setTimeout(() => {
|
||||
announcement.remove();
|
||||
styles.remove();
|
||||
}, 1000);
|
||||
}, 14000);
|
||||
}
|
||||
});
|
||||
|
||||
function setCloak(name, icon) {
|
||||
var tabicon = getCookie("tabicon");
|
||||
if (tabicon || icon) {
|
||||
var link = document.querySelector("link[rel~='icon']");
|
||||
if (link) {
|
||||
if (link.href != icon) backup_icon = link;
|
||||
while (document.querySelector("link[rel~='icon']")) {
|
||||
document.querySelector("link[rel~='icon']").remove();
|
||||
}
|
||||
}
|
||||
var link = document.querySelector("link[rel~='shortcut icon']");
|
||||
if (link) {
|
||||
if (link.href != icon) backup_icon = link;
|
||||
while (document.querySelector("link[rel~='shortcut icon']")) {
|
||||
document.querySelector("link[rel~='shortcut icon']").remove();
|
||||
}
|
||||
}
|
||||
link = document.createElement("link");
|
||||
link.rel = "icon";
|
||||
document.head.appendChild(link);
|
||||
link.href = tabicon;
|
||||
if (name) {
|
||||
link.href = icon;
|
||||
}
|
||||
}
|
||||
|
||||
var tabname = getCookie("tabname");
|
||||
backup_name = document.title;
|
||||
if (tabname) {
|
||||
document.title = tabname;
|
||||
}
|
||||
if (name) {
|
||||
document.title = name;
|
||||
}
|
||||
panicMode();
|
||||
}
|
||||
if (getCookie("debugging") == 1) {
|
||||
const debugscript = document.createElement("script");
|
||||
debugscript.setAttribute("src", "/js/debug.js");
|
||||
document.head.append(debugscript);
|
||||
}
|
||||
function getCookie(cname) {
|
||||
let name = cname + "=";
|
||||
let decodedCookie = decodeURIComponent(document.cookie);
|
||||
let ca = decodedCookie.split(";");
|
||||
for (let i = 0; i < ca.length; i++) {
|
||||
let c = ca[i];
|
||||
while (c.charAt(0) == " ") {
|
||||
c = c.substring(1);
|
||||
}
|
||||
if (c.indexOf(name) == 0) {
|
||||
return c.substring(name.length, c.length);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
let listofchars = "";
|
||||
document.addEventListener("keydown", (e) => {
|
||||
listofchars = listofchars + e.key;
|
||||
if (listofchars.length > 20) {
|
||||
listofchars = listofchars.substring(e.key.length);
|
||||
}
|
||||
if (listofchars.includes("safemode")) {
|
||||
window.location.href = panicurl;
|
||||
listofchars = "";
|
||||
} else if (listofchars.includes("debugplz")) {
|
||||
if (getCookie("debugging") == 1) {
|
||||
document.cookie = "debugging=0;";
|
||||
alert("debugging off!");
|
||||
} else {
|
||||
document.cookie = "debugging=1";
|
||||
alert("debugging on!");
|
||||
}
|
||||
listofchars = "";
|
||||
}
|
||||
});
|
||||
function panicMode() {
|
||||
panicurl = getCookie("panicurl");
|
||||
if (panicurl == "") {
|
||||
panicurl = "https://google.com";
|
||||
}
|
||||
}
|
||||
document.addEventListener(
|
||||
"DOMContentLoaded",
|
||||
() => {
|
||||
setCloak();
|
||||
let plausible = document.createElement("script");
|
||||
plausible.setAttribute("event-domain", location.host)
|
||||
plausible.setAttribute("defer", "");
|
||||
plausible.setAttribute("src", "/js/analytics.js");
|
||||
plausible.setAttribute("data-domain", "selenite.cc");
|
||||
document.head.appendChild(plausible);
|
||||
},
|
||||
false
|
||||
);
|
||||
if (location.pathname.substring(1).includes("semag") && localStorage.getItem("selenite.blockClose") == "true") {
|
||||
window.onbeforeunload = function () {
|
||||
return "";
|
||||
};
|
||||
}
|
||||
addEventListener("visibilitychange", (e) => {
|
||||
if (localStorage.getItem("selenite.tabDisguise") == "true") {
|
||||
if (document.visibilityState === "hidden") {
|
||||
setCloak("Google", "https://www.google.com/favicon.ico");
|
||||
} else {
|
||||
if (!backup_icon) {
|
||||
icon = document.createElement("link");
|
||||
icon.rel = "icon";
|
||||
|
||||
var link = document.querySelector("link[rel~='icon']");
|
||||
if (link) {
|
||||
backup_icon = link;
|
||||
while (document.querySelector("link[rel~='icon']")) {
|
||||
document.querySelector("link[rel~='icon']").remove();
|
||||
}
|
||||
}
|
||||
var link = document.querySelector("link[rel~='shortcut icon']");
|
||||
if (link) {
|
||||
backup_icon = link;
|
||||
while (document.querySelector("link[rel~='shortcut icon']")) {
|
||||
document.querySelector("link[rel~='shortcut icon']").remove();
|
||||
}
|
||||
}
|
||||
document.head.appendChild(icon);
|
||||
icon.href = location.origin + "/favicon.ico";
|
||||
} else {
|
||||
document.head.appendChild(backup_icon);
|
||||
}
|
||||
document.title = backup_name;
|
||||
}
|
||||
}
|
||||
});
|
||||
var polyfillScript = document.createElement("script");
|
||||
polyfillScript.src = "https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js?version=4.8.0";
|
||||
document.head.appendChild(polyfillScript);
|
||||
function fps() {
|
||||
var script = document.createElement("script");
|
||||
script.onload = function () {
|
||||
var stats = new Stats();
|
||||
document.body.appendChild(stats.dom);
|
||||
requestAnimationFrame(function loop() {
|
||||
stats.update();
|
||||
requestAnimationFrame(loop);
|
||||
});
|
||||
|
||||
localStorage.setItem("fps", true);
|
||||
};
|
||||
script.src = "https://cdn.jsdelivr.net/gh/mrdoob/stats.js@master/build/stats.min.js";
|
||||
document.head.appendChild(script);
|
||||
}
|
||||
|
||||
if (localStorage.getItem("fps")) {
|
||||
fps();
|
||||
}
|
1
js/all.min.js
vendored
Normal file
1
js/analytics.js
Normal file
@ -0,0 +1 @@
|
||||
!function(){"use strict";var r=window.location,o=window.document,l=o.currentScript,s=l.getAttribute("data-api")||new URL(l.src).origin+"/api/event";function u(t,e){t&&console.warn("Ignoring Event: "+t),e&&e.callback&&e.callback()}function t(t,e){if(/^localhost$|^127(\.[0-9]+){0,2}\.[0-9]+$|^\[::1?\]$/.test(r.hostname)||"file:"===r.protocol)return u("localhost",e);if((window._phantom||window.__nightmare||window.navigator.webdriver||window.Cypress)&&!window.__plausible)return u(null,e);try{if("true"===window.localStorage.plausible_ignore)return u("localStorage flag",e)}catch(t){}var n={},t=(n.n=t,n.u=r.href,n.d=l.getAttribute("data-domain"),n.r=o.referrer||null,e&&e.meta&&(n.m=JSON.stringify(e.meta)),e&&e.props&&(n.p=e.props),l.getAttributeNames().filter(function(t){return"event-"===t.substring(0,6)})),i=n.p||{},a=(t.forEach(function(t){var e=t.replace("event-",""),t=l.getAttribute(t);i[e]=i[e]||t}),n.p=i,new XMLHttpRequest);a.open("POST",s,!0),a.setRequestHeader("Content-Type","text/plain"),a.send(JSON.stringify(n)),a.onreadystatechange=function(){4===a.readyState&&e&&e.callback&&e.callback({status:a.status})}}var e=window.plausible&&window.plausible.q||[];window.plausible=t;for(var n,i=0;i<e.length;i++)t.apply(this,e[i]);function a(){n!==r.pathname&&(n=r.pathname,t("pageview"))}var p,c=window.history;c.pushState&&(p=c.pushState,c.pushState=function(){p.apply(this,arguments),a()},window.addEventListener("popstate",a)),"prerender"===o.visibilityState?o.addEventListener("visibilitychange",function(){n||"visible"!==o.visibilityState||a()}):a()}();
|
197
js/apps.js
Normal file
@ -0,0 +1,197 @@
|
||||
$.getJSON("/data/apps.json", function (data) {
|
||||
if (document.readyState === "complete") {
|
||||
loadGames(data);
|
||||
} else {
|
||||
let areGamesReady = setInterval(() => {
|
||||
if (document.readyState === "complete") {
|
||||
loadGames(data);
|
||||
clearInterval(areGamesReady);
|
||||
}
|
||||
}, 50);
|
||||
}
|
||||
});
|
||||
|
||||
function loadGames(data) {
|
||||
starredgames = getCookie("starred");
|
||||
if (!starredgames) {
|
||||
starredgames = [];
|
||||
} else {
|
||||
starredgames = JSON.parse(decodeURIComponent(getCookie("starred")));
|
||||
}
|
||||
$("#gamesearch").prop({
|
||||
placeholder: "Click here to search through our " + data.length + " apps!",
|
||||
});
|
||||
data.sort(dynamicSort("name"));
|
||||
gamelist = data;
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
let $element = $("<a>")
|
||||
.attr({
|
||||
class: "game",
|
||||
id: data[i].directory,
|
||||
recommended: data[i].recommended,
|
||||
href: "sppa/" + data[i].directory + "/index.html",
|
||||
})
|
||||
.data("recommended", data[i].recommended)
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: "sppa/" + data[i].directory + "/" + data[i].image,
|
||||
alt: data[i].name + " logo",
|
||||
})
|
||||
)
|
||||
.append($("<h1>").text(data[i].name))
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: "img/star.svg",
|
||||
alt: "star",
|
||||
class: "star",
|
||||
})
|
||||
);
|
||||
|
||||
if (starredgames.includes(data[i].directory)) {
|
||||
$element.find("img.star").attr("id", "starred");
|
||||
$element.find("img.star").attr("src", "img/star-fill.svg");
|
||||
let $pinnedelement = $element.clone();
|
||||
$("#pinned").append($pinnedelement);
|
||||
if ($("#pinnedmessage")) {
|
||||
$("#pinnedmessage").hide();
|
||||
}
|
||||
}
|
||||
|
||||
$("#games").append($element);
|
||||
}
|
||||
$("#games #message").remove();
|
||||
|
||||
if ((search = 1)) {
|
||||
var txt = $("#gamesearch").val();
|
||||
if (txt == "") {
|
||||
$("#games .suggest").show();
|
||||
} else {
|
||||
$("#games .suggest").hide();
|
||||
}
|
||||
$("#games .game").hide();
|
||||
$("#games .game").each(function () {
|
||||
if ($(this).text().toUpperCase().indexOf(txt.toUpperCase()) != -1 || $(this).attr("id").toUpperCase().indexOf(txt.toUpperCase()) != -1) {
|
||||
$(this).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// starred games
|
||||
let starred;
|
||||
$(document).on("click", "img.star", function (event) {
|
||||
|
||||
});
|
||||
$(document).on("click", ".game", function (event) {
|
||||
if ($(event.target).is("img.star")) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
if (!$(event.target).attr("id")) {
|
||||
$(event.target).prop({ id: "starred" });
|
||||
$(event.target).prop({ src: "img/star-fill.svg" });
|
||||
starred = Cookies.get("starred");
|
||||
if (starred) {
|
||||
starred = JSON.parse(starred);
|
||||
} else {
|
||||
starred = [];
|
||||
}
|
||||
starred.push($(this).attr("id"));
|
||||
Cookies.set("starred", JSON.stringify(starred));
|
||||
$element = $(this).clone();
|
||||
$("#pinned").append($element);
|
||||
$("#pinnedmessage").hide();
|
||||
temp = $("#pinned")[0].childNodes;
|
||||
pinnedarray = [...temp];
|
||||
pinnedarray.sort(dynamicSort("id"));
|
||||
$("#pinned").empty();
|
||||
for (let i = 0; i < pinnedarray.length; i++) {
|
||||
pinnedarraynodes = pinnedarray[i].childNodes;
|
||||
pinnedarraynodes = [...pinnedarraynodes];
|
||||
let $element = $("<div>")
|
||||
.prop({
|
||||
class: "game",
|
||||
id: pinnedarray[i].id,
|
||||
})
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: pinnedarraynodes[0].src,
|
||||
alt: pinnedarraynodes[0].alt,
|
||||
class: "gameicon",
|
||||
})
|
||||
)
|
||||
.append($("<h1>").text(pinnedarraynodes[1].innerHTML))
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: "img/star-fill.svg",
|
||||
alt: "star",
|
||||
class: "star",
|
||||
id: "starred",
|
||||
})
|
||||
);
|
||||
$("#pinned").append($element);
|
||||
}
|
||||
} else {
|
||||
$(event.target).removeAttr("id");
|
||||
$(event.target).attr("src", "img/star.svg");
|
||||
$thisdiv = "#" + $(this).attr("id");
|
||||
$thisdiv = $thisdiv.replace(".", "\\.");
|
||||
starred = Cookies.get("starred");
|
||||
starred = JSON.parse(starred);
|
||||
ourindex = starred.indexOf($(this).attr("id"));
|
||||
starred.splice(ourindex, 1);
|
||||
Cookies.set("starred", JSON.stringify(starred));
|
||||
$("#pinned " + $thisdiv).remove();
|
||||
if ($("#pinned").is(":empty")) {
|
||||
$("#pinnedmessage").show();
|
||||
}
|
||||
$($thisdiv + " #starred").attr("src", "img/star.svg");
|
||||
$($thisdiv + " #starred").removeAttr("id");
|
||||
}
|
||||
}
|
||||
});
|
||||
$(document).on("click", "#game img .star", function (event) {
|
||||
event.stopPropagation();
|
||||
$(this).prop({ class: "material-symbols-outlined fill" });
|
||||
});
|
||||
}
|
||||
|
||||
function redirectGame(dir) {
|
||||
window.location.href = window.location.origin + "/sppa/" + dir + "/index.html";
|
||||
}
|
||||
function dynamicSort(property) {
|
||||
var sortOrder = 1;
|
||||
|
||||
if (property[0] === "-") {
|
||||
sortOrder = -1;
|
||||
property = property.substr(1);
|
||||
}
|
||||
return function (a, b) {
|
||||
if (sortOrder == -1) {
|
||||
return b[property].localeCompare(a[property]);
|
||||
} else {
|
||||
return a[property].localeCompare(b[property]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function selectRandomGame() {
|
||||
redirectGame(gamelist[Math.floor(Math.random() * gamelist.length - 1)].directory);
|
||||
}
|
||||
|
||||
let viewrecommended = 0;
|
||||
function recommendedGames() {
|
||||
if (viewrecommended == 0) {
|
||||
$("#games .game").hide();
|
||||
$("#games .game").each(function () {
|
||||
if ($(this).attr("recommended")) {
|
||||
$(this).show();
|
||||
}
|
||||
});
|
||||
$("#recommend").text("Click to view all apps again!");
|
||||
viewrecommended = 1;
|
||||
} else {
|
||||
$("#games .game").hide();
|
||||
$("#games .game").show();
|
||||
viewrecommended = 0;
|
||||
$("#recommend").text("Click to view recommended apps!");
|
||||
}
|
||||
}
|
66
js/asteroids.js
Normal file
@ -0,0 +1,66 @@
|
||||
|
||||
(function(){function Asteroids(){if(!window.ASTEROIDS)
|
||||
window.ASTEROIDS={enemiesKilled:0};function Vector(x,y){if(typeof x=='Object'){this.x=x.x;this.y=x.y;}else{this.x=x;this.y=y;}};Vector.prototype={cp:function(){return new Vector(this.x,this.y);},mul:function(factor){this.x*=factor;this.y*=factor;return this;},mulNew:function(factor){return new Vector(this.x*factor,this.y*factor);},add:function(vec){this.x+=vec.x;this.y+=vec.y;return this;},addNew:function(vec){return new Vector(this.x+vec.x,this.y+vec.y);},sub:function(vec){this.x-=vec.x;this.y-=vec.y;return this;},subNew:function(vec){return new Vector(this.x-vec.x,this.y-vec.y);},rotate:function(angle){var x=this.x,y=this.y;this.x=x*Math.cos(angle)-Math.sin(angle)*y;this.y=x*Math.sin(angle)+Math.cos(angle)*y;return this;},rotateNew:function(angle){return this.cp().rotate(angle);},setAngle:function(angle){var l=this.len();this.x=Math.cos(angle)*l;this.y=Math.sin(angle)*l;return this;},setAngleNew:function(angle){return this.cp().setAngle(angle);},setLength:function(length){var l=this.len();if(l)this.mul(length/l);else this.x=this.y=length;return this;},setLengthNew:function(length){return this.cp().setLength(length);},normalize:function(){var l=this.len();this.x/=l;this.y/=l;return this;},normalizeNew:function(){return this.cp().normalize();},angle:function(){return Math.atan2(this.y,this.x);},collidesWith:function(rect){return this.x>rect.x&&this.y>rect.y&&this.x<rect.x+rect.width&&this.y<rect.y+rect.height;},len:function(){var l=Math.sqrt(this.x*this.x+this.y*this.y);if(l<0.005&&l>-0.005)return 0;return l;},is:function(test){return typeof test=='object'&&this.x==test.x&&this.y==test.y;},toString:function(){return'[Vector('+this.x+', '+this.y+') angle: '+this.angle()+', length: '+this.len()+']';}};function Line(p1,p2){this.p1=p1;this.p2=p2;};Line.prototype={shift:function(pos){this.p1.add(pos);this.p2.add(pos);},intersectsWithRect:function(rect){var LL=new Vector(rect.x,rect.y+rect.height);var UL=new Vector(rect.x,rect.y);var LR=new Vector(rect.x+rect.width,rect.y+rect.height);var UR=new Vector(rect.x+rect.width,rect.y);if(this.p1.x>LL.x&&this.p1.x<UR.x&&this.p1.y<LL.y&&this.p1.y>UR.y&&this.p2.x>LL.x&&this.p2.x<UR.x&&this.p2.y<LL.y&&this.p2.y>UR.y)return true;if(this.intersectsLine(new Line(UL,LL)))return true;if(this.intersectsLine(new Line(LL,LR)))return true;if(this.intersectsLine(new Line(UL,UR)))return true;if(this.intersectsLine(new Line(UR,LR)))return true;return false;},intersectsLine:function(line2){var v1=this.p1,v2=this.p2;var v3=line2.p1,v4=line2.p2;var denom=((v4.y-v3.y)*(v2.x-v1.x))-((v4.x-v3.x)*(v2.y-v1.y));var numerator=((v4.x-v3.x)*(v1.y-v3.y))-((v4.y-v3.y)*(v1.x-v3.x));var numerator2=((v2.x-v1.x)*(v1.y-v3.y))-((v2.y-v1.y)*(v1.x-v3.x));if(denom==0.0){return false;}
|
||||
var ua=numerator/denom;var ub=numerator2/denom;return(ua>=0.0&&ua<=1.0&&ub>=0.0&&ub<=1.0);}};var that=this;var isIE=!!window.ActiveXObject;var w=document.documentElement.clientWidth,h=document.documentElement.clientHeight;var playerWidth=20,playerHeight=30;var playerVerts=[[-1*playerHeight/2,-1*playerWidth/2],[-1*playerHeight/2,playerWidth/2],[playerHeight/2,0]];var ignoredTypes=['HTML','HEAD','BODY','SCRIPT','TITLE','META','STYLE','LINK','SHAPE','LINE','GROUP','IMAGE','STROKE','FILL','SKEW','PATH','TEXTPATH'];var hiddenTypes=['BR','HR'];var FPS=50;var acc=300;var maxSpeed=600;var rotSpeed=360;var bulletSpeed=700;var particleSpeed=400;var timeBetweenFire=150;var timeBetweenBlink=250;var timeBetweenEnemyUpdate=isIE?10000:2000;var bulletRadius=2;var maxParticles=isIE?20:40;var maxBullets=isIE?10:20;this.flame={r:[],y:[]};this.toggleBlinkStyle=function(){if(this.updated.blink.isActive){removeClass(document.body,'ASTEROIDSBLINK');}else{addClass(document.body,'ASTEROIDSBLINK');}
|
||||
this.updated.blink.isActive=!this.updated.blink.isActive;};addStylesheet(".ASTEROIDSBLINK .ASTEROIDSYEAHENEMY","outline: 2px dotted red;");this.pos=new Vector(100,100);this.lastPos=false;this.vel=new Vector(0,0);this.dir=new Vector(0,1);this.keysPressed={};this.firedAt=false;this.updated={enemies:false,flame:new Date().getTime(),blink:{time:0,isActive:false}};this.scrollPos=new Vector(0,0);this.bullets=[];this.enemies=[];this.dying=[];this.totalEnemies=0;this.particles=[];function updateEnemyIndex(){for(var i=0,enemy;enemy=that.enemies[i];i++)
|
||||
removeClass(enemy,"ASTEROIDSYEAHENEMY");var all=document.body.getElementsByTagName('*');that.enemies=[];for(var i=0,el;el=all[i];i++){if(indexOf(ignoredTypes,el.tagName.toUpperCase())==-1&&el.prefix!='g_vml_'&&hasOnlyTextualChildren(el)&&el.className!="ASTEROIDSYEAH"&&el.offsetHeight>0){el.aSize=size(el);that.enemies.push(el);addClass(el,"ASTEROIDSYEAHENEMY");if(!el.aAdded){el.aAdded=true;that.totalEnemies++;}}}};updateEnemyIndex();var createFlames;(function(){var rWidth=playerWidth,rIncrease=playerWidth*0.1,yWidth=playerWidth*0.6,yIncrease=yWidth*0.2,halfR=rWidth/2,halfY=yWidth/2,halfPlayerHeight=playerHeight/2;createFlames=function(){that.flame.r=[[-1*halfPlayerHeight,-1*halfR]];that.flame.y=[[-1*halfPlayerHeight,-1*halfY]];for(var x=0;x<rWidth;x+=rIncrease){that.flame.r.push([-random(2,7)-halfPlayerHeight,x-halfR]);}
|
||||
that.flame.r.push([-1*halfPlayerHeight,halfR]);for(var x=0;x<yWidth;x+=yIncrease){that.flame.y.push([-random(2,7)-halfPlayerHeight,x-halfY]);}
|
||||
that.flame.y.push([-1*halfPlayerHeight,halfY]);};})();createFlames();function radians(deg){return deg*0.0174532925;};function degrees(rad){return rad*57.2957795;};function random(from,to){return Math.floor(Math.random()*(to+1)+from);};function code(name){var table={'up':38,'down':40,'left':37,'right':39,'esc':27};if(table[name])return table[name];return name.charCodeAt(0);};function boundsCheck(vec){if(vec.x>w)
|
||||
vec.x=0;else if(vec.x<0)
|
||||
vec.x=w;if(vec.y>h)
|
||||
vec.y=0;else if(vec.y<0)
|
||||
vec.y=h;};function size(element){var el=element,left=0,top=0;do{left+=el.offsetLeft||0;top+=el.offsetTop||0;el=el.offsetParent;}while(el);return{x:left,y:top,width:element.offsetWidth||10,height:element.offsetHeight||10};};function addEvent(obj,type,fn){if(obj.addEventListener)
|
||||
obj.addEventListener(type,fn,false);else if(obj.attachEvent){obj["e"+type+fn]=fn;obj[type+fn]=function(){obj["e"+type+fn](window.event);}
|
||||
obj.attachEvent("on"+type,obj[type+fn]);}}
|
||||
function removeEvent(obj,type,fn){if(obj.removeEventListener)
|
||||
obj.removeEventListener(type,fn,false);else if(obj.detachEvent){obj.detachEvent("on"+type,obj[type+fn]);obj[type+fn]=null;obj["e"+type+fn]=null;}}
|
||||
function arrayRemove(array,from,to){var rest=array.slice((to||from)+1||array.length);array.length=from<0?array.length+from:from;return array.push.apply(array,rest);};function applyVisibility(vis){for(var i=0,p;p=window.ASTEROIDSPLAYERS[i];i++){p.gameContainer.style.visibility=vis;}}
|
||||
function getElementFromPoint(x,y){applyVisibility('hidden');var element=document.elementFromPoint(x,y);if(!element){applyVisibility('visible');return false;}
|
||||
if(element.nodeType==3)
|
||||
element=element.parentNode;applyVisibility('visible');return element;};function addParticles(startPos){var time=new Date().getTime();var amount=maxParticles;for(var i=0;i<amount;i++){that.particles.push({dir:(new Vector(Math.random()*20-10,Math.random()*20-10)).normalize(),pos:startPos.cp(),cameAlive:time});}};function setScore(){that.points.innerHTML=window.ASTEROIDS.enemiesKilled*10;};function hasOnlyTextualChildren(element){if(element.offsetLeft<-100&&element.offsetWidth>0&&element.offsetHeight>0)return false;if(indexOf(hiddenTypes,element.tagName)!=-1)return true;if(element.offsetWidth==0&&element.offsetHeight==0)return false;for(var i=0;i<element.childNodes.length;i++){if(indexOf(hiddenTypes,element.childNodes[i].tagName)==-1&&element.childNodes[i].childNodes.length!=0)return false;}
|
||||
return true;};function indexOf(arr,item,from){if(arr.indexOf)return arr.indexOf(item,from);var len=arr.length;for(var i=(from<0)?Math.max(0,len+from):from||0;i<len;i++){if(arr[i]===item)return i;}
|
||||
return-1;};function addClass(element,className){if(element.className.indexOf(className)==-1)
|
||||
element.className=(element.className+' '+className).replace(/\s+/g,' ').replace(/^\s+|\s+$/g,'');};function removeClass(element,className){element.className=element.className.replace(new RegExp('(^|\\s)'+className+'(?:\\s|$)'),'$1');};function addStylesheet(selector,rules){var stylesheet=document.createElement('style');stylesheet.type='text/css';stylesheet.rel='stylesheet';stylesheet.id='ASTEROIDSYEAHSTYLES';try{stylesheet.innerHTML=selector+"{"+rules+"}";}catch(e){stylesheet.styleSheet.addRule(selector,rules);}
|
||||
document.getElementsByTagName("head")[0].appendChild(stylesheet);};function removeStylesheet(name){var stylesheet=document.getElementById(name);if(stylesheet){stylesheet.parentNode.removeChild(stylesheet);}};this.gameContainer=document.createElement('div');this.gameContainer.className='ASTEROIDSYEAH';document.body.appendChild(this.gameContainer);this.canvas=document.createElement('canvas');this.canvas.setAttribute('width',w);this.canvas.setAttribute('height',h);this.canvas.className='ASTEROIDSYEAH';with(this.canvas.style){width=w+"px";height=h+"px";position="fixed";top="0px";left="0px";bottom="0px";right="0px";zIndex="10000";}
|
||||
if(typeof G_vmlCanvasManager!='undefined'){this.canvas=G_vmlCanvasManager.initElement(this.canvas);if(!this.canvas.getContext){alert("So... you are using IE? Sorry but at the moment WebsiteAsteroids only supports Firefox");}}else{if(!this.canvas.getContext){alert('This program does not yet support your browser. Please join me at http://github.com/erkie/erkie.github.com if you think you can help');}}
|
||||
addEvent(this.canvas,'mousedown',function(e){e=e||window.event;var message=document.createElement('span');message.style.position='absolute';message.style.border='1px solid #999';message.style.background='white';message.style.color="black";message.innerHTML='Press Esc to quit';document.body.appendChild(message);var x=e.pageX||(e.clientX+document.documentElement.scrollLeft);var y=e.pageY||(e.clientY+document.documentElement.scrollTop);message.style.left=x-message.offsetWidth/2+'px';message.style.top=y-message.offsetHeight/2+'px';setTimeout(function(){try{message.parentNode.removeChild(message);}catch(e){}},1000);});var eventResize=function(){that.canvas.style.display="none";w=document.documentElement.clientWidth;h=document.documentElement.clientHeight;that.canvas.setAttribute('width',w);that.canvas.setAttribute('height',h);with(that.canvas.style){display="block";width=w+"px";height=h+"px";}};addEvent(window,'resize',eventResize);this.gameContainer.appendChild(this.canvas);this.ctx=this.canvas.getContext("2d");this.ctx.fillStyle="black";this.ctx.strokeStyle="black";if(!document.getElementById('ASTEROIDS-NAVIGATION')){this.navigation=document.createElement('div');this.navigation.id="ASTEROIDS-NAVIGATION";this.navigation.className="ASTEROIDSYEAH";with(this.navigation.style){fontFamily="Arial,sans-serif";position="fixed";zIndex="10001";bottom="10px";right="10px";textAlign="right";}
|
||||
this.navigation.innerHTML="(press esc to quit) ";this.gameContainer.appendChild(this.navigation);this.points=document.createElement('span');this.points.id='ASTEROIDS-POINTS';this.points.style.font="28pt Arial, sans-serif";this.points.style.fontWeight="bold";this.points.className="ASTEROIDSYEAH";this.navigation.appendChild(this.points);}else{this.navigation=document.getElementById('ASTEROIDS-NAVIGATION');this.points=document.getElementById('ASTEROIDS-POINTS');}
|
||||
setScore();if(typeof G_vmlCanvasManager!='undefined'){var children=this.canvas.getElementsByTagName('*');for(var i=0,c;c=children[i];i++)
|
||||
addClass(c,'ASTEROIDSYEAH');}
|
||||
var eventKeydown=function(event){event=event||window.event;that.keysPressed[event.keyCode]=true;switch(event.keyCode){case code(' '):that.firedAt=1;break;}
|
||||
if(indexOf([code('up'),code('down'),code('right'),code('left'),code(' '),code('B'),code('W'),code('A'),code('S'),code('D')],event.keyCode)!=-1){if(event.preventDefault)
|
||||
event.preventDefault();if(event.stopPropagation)
|
||||
event.stopPropagation();event.returnValue=false;event.cancelBubble=true;return false;}};addEvent(document,'keydown',eventKeydown);var eventKeypress=function(event){event=event||window.event;if(indexOf([code('up'),code('down'),code('right'),code('left'),code(' '),code('W'),code('A'),code('S'),code('D')],event.keyCode||event.which)!=-1){if(event.preventDefault)
|
||||
event.preventDefault();if(event.stopPropagation)
|
||||
event.stopPropagation();event.returnValue=false;event.cancelBubble=true;return false;}};addEvent(document,'keypress',eventKeypress);var eventKeyup=function(event){event=event||window.event;that.keysPressed[event.keyCode]=false;if(indexOf([code('up'),code('down'),code('right'),code('left'),code(' '),code('B'),code('W'),code('A'),code('S'),code('D')],event.keyCode)!=-1){if(event.preventDefault)
|
||||
event.preventDefault();if(event.stopPropagation)
|
||||
event.stopPropagation();event.returnValue=false;event.cancelBubble=true;return false;}};addEvent(document,'keyup',eventKeyup);this.ctx.clear=function(){this.clearRect(0,0,w,h);};this.ctx.clear();this.ctx.drawLine=function(xFrom,yFrom,xTo,yTo){this.beginPath();this.moveTo(xFrom,yFrom);this.lineTo(xTo,yTo);this.lineTo(xTo+1,yTo+1);this.closePath();this.fill();};this.ctx.tracePoly=function(verts){this.beginPath();this.moveTo(verts[0][0],verts[0][1]);for(var i=1;i<verts.length;i++)
|
||||
this.lineTo(verts[i][0],verts[i][1]);this.closePath();};this.ctx.drawPlayer=function(){this.save();this.translate(that.pos.x,that.pos.y);this.rotate(that.dir.angle());this.tracePoly(playerVerts);this.fillStyle="white";this.fill();this.tracePoly(playerVerts);this.stroke();this.restore();};var PI_SQ=Math.PI*2;this.ctx.drawBullets=function(bullets){for(var i=0;i<bullets.length;i++){this.beginPath();this.arc(bullets[i].pos.x,bullets[i].pos.y,bulletRadius,0,PI_SQ,true);this.closePath();this.fill();}};var randomParticleColor=function(){return(['red','yellow'])[random(0,1)];};this.ctx.drawParticles=function(particles){var oldColor=this.fillStyle;for(var i=0;i<particles.length;i++){this.fillStyle=randomParticleColor();this.drawLine(particles[i].pos.x,particles[i].pos.y,particles[i].pos.x-particles[i].dir.x*10,particles[i].pos.y-particles[i].dir.y*10);}
|
||||
this.fillStyle=oldColor;};this.ctx.drawFlames=function(flame){this.save();this.translate(that.pos.x,that.pos.y);this.rotate(that.dir.angle());var oldColor=this.strokeStyle;this.strokeStyle="red";this.tracePoly(flame.r);this.stroke();this.strokeStyle="yellow";this.tracePoly(flame.y);this.stroke();this.strokeStyle=oldColor;this.restore();}
|
||||
addParticles(this.pos);addClass(document.body,'ASTEROIDSYEAH');var isRunning=true;var lastUpdate=new Date().getTime();this.update=function(){var forceChange=false;var nowTime=new Date().getTime();var tDelta=(nowTime-lastUpdate)/1000;lastUpdate=nowTime;var drawFlame=false;if(nowTime-this.updated.flame>50){createFlames();this.updated.flame=nowTime;}
|
||||
this.scrollPos.x=window.pageXOffset||document.documentElement.scrollLeft;this.scrollPos.y=window.pageYOffset||document.documentElement.scrollTop;if((this.keysPressed[code('up')])||(this.keysPressed[code('W')])){this.vel.add(this.dir.mulNew(acc*tDelta));drawFlame=true;}else{this.vel.mul(0.96);}
|
||||
if((this.keysPressed[code('left')])||(this.keysPressed[code('A')])){forceChange=true;this.dir.rotate(radians(rotSpeed*tDelta*-1));}
|
||||
if((this.keysPressed[code('right')])||(this.keysPressed[code('D')])){forceChange=true;this.dir.rotate(radians(rotSpeed*tDelta));}
|
||||
if(this.keysPressed[code(' ')]&&nowTime-this.firedAt>timeBetweenFire){this.bullets.unshift({'dir':this.dir.cp(),'pos':this.pos.cp(),'startVel':this.vel.cp(),'cameAlive':nowTime});this.firedAt=nowTime;if(this.bullets.length>maxBullets){this.bullets.pop();}}
|
||||
if(this.keysPressed[code('B')]){if(!this.updated.enemies){updateEnemyIndex();this.updated.enemies=true;}
|
||||
forceChange=true;this.updated.blink.time+=tDelta*1000;if(this.updated.blink.time>timeBetweenBlink){this.toggleBlinkStyle();this.updated.blink.time=0;}}else{this.updated.enemies=false;}
|
||||
if(this.keysPressed[code('esc')]){destroy.apply(this);return;}
|
||||
if(this.vel.len()>maxSpeed){this.vel.setLength(maxSpeed);}
|
||||
this.pos.add(this.vel.mulNew(tDelta));if(this.pos.x>w){window.scrollTo(this.scrollPos.x+50,this.scrollPos.y);this.pos.x=0;}else if(this.pos.x<0){window.scrollTo(this.scrollPos.x-50,this.scrollPos.y);this.pos.x=w;}
|
||||
if(this.pos.y>h){window.scrollTo(this.scrollPos.x,this.scrollPos.y+h*0.75);this.pos.y=0;}else if(this.pos.y<0){window.scrollTo(this.scrollPos.x,this.scrollPos.y-h*0.75);this.pos.y=h;}
|
||||
for(var i=this.bullets.length-1;i>=0;i--){if(nowTime-this.bullets[i].cameAlive>2000){this.bullets.splice(i,1);forceChange=true;continue;}
|
||||
var bulletVel=this.bullets[i].dir.setLengthNew(bulletSpeed*tDelta).add(this.bullets[i].startVel.mulNew(tDelta));this.bullets[i].pos.add(bulletVel);boundsCheck(this.bullets[i].pos);var murdered=getElementFromPoint(this.bullets[i].pos.x,this.bullets[i].pos.y);if(murdered&&murdered.tagName&&indexOf(ignoredTypes,murdered.tagName.toUpperCase())==-1&&hasOnlyTextualChildren(murdered)&&murdered.className!="ASTEROIDSYEAH"){didKill=true;addParticles(this.bullets[i].pos);this.dying.push(murdered);this.bullets.splice(i,1);continue;}}
|
||||
if(this.dying.length){for(var i=this.dying.length-1;i>=0;i--){try{if(this.dying[i].parentNode)
|
||||
window.ASTEROIDS.enemiesKilled++;this.dying[i].parentNode.removeChild(this.dying[i]);}catch(e){}}
|
||||
setScore();this.dying=[];}
|
||||
for(var i=this.particles.length-1;i>=0;i--){this.particles[i].pos.add(this.particles[i].dir.mulNew(particleSpeed*tDelta*Math.random()));if(nowTime-this.particles[i].cameAlive>1000){this.particles.splice(i,1);forceChange=true;continue;}}
|
||||
if(forceChange||this.bullets.length!=0||this.particles.length!=0||!this.pos.is(this.lastPos)||this.vel.len()>0){this.ctx.clear();this.ctx.drawPlayer();if(drawFlame)
|
||||
this.ctx.drawFlames(that.flame);if(this.bullets.length){this.ctx.drawBullets(this.bullets);}
|
||||
if(this.particles.length){this.ctx.drawParticles(this.particles);}}
|
||||
this.lastPos=this.pos;setTimeout(updateFunc,1000/FPS);}
|
||||
var updateFunc=function(){that.update.call(that);};setTimeout(updateFunc,1000/FPS);function destroy(){removeEvent(document,'keydown',eventKeydown);removeEvent(document,'keypress',eventKeypress);removeEvent(document,'keyup',eventKeyup);removeEvent(window,'resize',eventResize);isRunning=false;removeStylesheet("ASTEROIDSYEAHSTYLES");removeClass(document.body,'ASTEROIDSYEAH');this.gameContainer.parentNode.removeChild(this.gameContainer);};}
|
||||
if(!window.ASTEROIDSPLAYERS)
|
||||
window.ASTEROIDSPLAYERS=[];if(window.ActiveXObject){try{var xamlScript=document.createElement('script');xamlScript.setAttribute('type','text/xaml');xamlScript.textContent='<?xml version="1.0"?><Canvas xmlns="http://schemas.microsoft.com/client/2007"></Canvas>';document.getElementsByTagName('head')[0].appendChild(xamlScript);}catch(e){}
|
||||
var script=document.createElement("script");script.setAttribute('type','text/javascript');script.onreadystatechange=function(){if(script.readyState=='loaded'||script.readyState=='complete'){if(typeof G_vmlCanvasManager!="undefined")
|
||||
window.ASTEROIDSPLAYERS[window.ASTEROIDSPLAYERS.length]=new Asteroids();}};script.src="http://erkie.github.com/excanvas.js";document.getElementsByTagName('head')[0].appendChild(script);}
|
||||
else window.ASTEROIDSPLAYERS[window.ASTEROIDSPLAYERS.length]=new Asteroids();})();
|
10746
js/bootstrap.css
vendored
Normal file
6
js/bootstrap.min.css
vendored
Normal file
46
js/cloaks.js
Normal file
@ -0,0 +1,46 @@
|
||||
let cloaklist;
|
||||
function cloakExceptions(url) {
|
||||
if (url.includes("harrisonburg.instructure.com") == true) {
|
||||
return "learn.canvas.net";
|
||||
}
|
||||
return url;
|
||||
}
|
||||
|
||||
function setCloakCookie(name, url) {
|
||||
console.log(name + url);
|
||||
if (!(url == null)) {
|
||||
document.cookie = "tabicon=" + url + "";
|
||||
document.cookie = "tabname=" + name;
|
||||
setCloak();
|
||||
} else {
|
||||
url = cloakExceptions($("#webicon").val());
|
||||
document.cookie = "tabicon=https://s2.googleusercontent.com/s2/favicons?domain_url=" + url;
|
||||
document.cookie = "tabname=" + $("#webname").val();
|
||||
setCloak();
|
||||
}
|
||||
}
|
||||
|
||||
function clearCloak() {
|
||||
document.cookie = "tabicon=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
|
||||
document.cookie = "tabname=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
|
||||
var link = document.querySelector("link[rel~='icon']");
|
||||
link.remove();
|
||||
document.title = "Settings | Selenite";
|
||||
link = document.createElement("link");
|
||||
link.rel = "icon";
|
||||
document.head.appendChild(link);
|
||||
link.href = "/favicon.png";
|
||||
}
|
||||
async function loadCloaks() {
|
||||
const response = await fetch("/data/cloaks.json");
|
||||
cloaklist = await response.json();
|
||||
var presetCloaks = document.getElementById("presetCloaks");
|
||||
presetCloaks.onchange = (event) => {
|
||||
console.log(event.target.value);
|
||||
console.log(cloaklist[event.target.value]);
|
||||
setCloakCookie(cloaklist[event.target.value][0], cloaklist[event.target.value][1]);
|
||||
};
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
loadCloaks();
|
||||
});
|
100
js/cookie.js
Normal file
@ -0,0 +1,100 @@
|
||||
// ty 3kh0 for the code <33333
|
||||
function getMainSave() {
|
||||
var mainSave = {};
|
||||
// List of items in localStorage that should not be saved
|
||||
var localStorageDontSave = ["supportalert"];
|
||||
|
||||
// Convert localStorage to an array of key-value pairs and remove the items that should not be saved
|
||||
localStorageSave = Object.entries(localStorage);
|
||||
|
||||
for (let entry in localStorageSave) {
|
||||
if (localStorageDontSave.includes(localStorageSave[entry][0])) {
|
||||
localStorageSave.splice(entry, 1);
|
||||
}
|
||||
}
|
||||
|
||||
// Convert the localStorage array to a base64-encoded JSON string
|
||||
localStorageSave = btoa(JSON.stringify(localStorageSave));
|
||||
|
||||
// Add the localStorage data to the mainSave object
|
||||
mainSave.localStorage = localStorageSave;
|
||||
|
||||
// Get the cookies data and add it to the mainSave object
|
||||
cookiesSave = document.cookie;
|
||||
cookiesSave = btoa(cookiesSave);
|
||||
mainSave.cookies = cookiesSave;
|
||||
|
||||
// Convert the mainSave object to a base64-encoded JSON string
|
||||
mainSave = btoa(JSON.stringify(mainSave));
|
||||
|
||||
// Encrypt the mainSave data using AES encryption with the key 'save'
|
||||
mainSave = CryptoJS.AES.encrypt(mainSave, "egamepass").toString();
|
||||
|
||||
// Return the encrypted mainSave data
|
||||
return mainSave;
|
||||
}
|
||||
|
||||
// Function to download the main save data as a file
|
||||
function downloadMainSave() {
|
||||
var data = new Blob([getMainSave()]);
|
||||
var dataURL = URL.createObjectURL(data);
|
||||
|
||||
var fakeElement = document.createElement("a");
|
||||
fakeElement.href = dataURL;
|
||||
fakeElement.download = "your.selenite.save";
|
||||
fakeElement.click();
|
||||
URL.revokeObjectURL(dataURL);
|
||||
}
|
||||
|
||||
// Function to get the main save data from an uploaded file
|
||||
function getMainSaveFromUpload(data, key) {
|
||||
if(key) {
|
||||
data = CryptoJS.AES.decrypt(data, key).toString(CryptoJS.enc.Utf8);
|
||||
} else {
|
||||
data = CryptoJS.AES.decrypt(data, "egamepass").toString(CryptoJS.enc.Utf8);
|
||||
}
|
||||
// Parse the decrypted data as JSON
|
||||
var mainSave = JSON.parse(atob(data));
|
||||
var mainLocalStorageSave = JSON.parse(atob(mainSave.localStorage));
|
||||
var cookiesSave = atob(mainSave.cookies);
|
||||
|
||||
// Set the items in localStorage using the uploaded data
|
||||
for (let item of mainLocalStorageSave) {
|
||||
localStorage.setItem(item[0], item[1]);
|
||||
}
|
||||
|
||||
// Set the cookies using the uploaded data
|
||||
document.cookie = cookiesSave;
|
||||
}
|
||||
|
||||
// Function to handle the file upload
|
||||
function uploadMainSave(key) {
|
||||
var hiddenUpload = document.querySelector(".hiddenUpload");
|
||||
hiddenUpload.click();
|
||||
|
||||
// Listen for the change event on the file input element
|
||||
hiddenUpload.addEventListener("change", function (e) {
|
||||
var files = e.target.files;
|
||||
var file = files[0];
|
||||
if (!file) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the contents of the uploaded file as text and call getMainSaveFromUpload with the result
|
||||
var reader = new FileReader();
|
||||
|
||||
reader.onload = function (e) {
|
||||
if(key) {
|
||||
getMainSaveFromUpload(e.target.result, key);
|
||||
} else {
|
||||
getMainSaveFromUpload(e.target.result);
|
||||
}
|
||||
$("#upload").text("Upload Successful!")
|
||||
setTimeout(function() {
|
||||
$("#upload").text("Upload Save")
|
||||
}, 3000)
|
||||
};
|
||||
|
||||
reader.readAsText(file);
|
||||
});
|
||||
}
|
97
js/cookieConsent.css
Normal file
@ -0,0 +1,97 @@
|
||||
.cookieConsentContainer {
|
||||
z-index: 999;
|
||||
|
||||
width: 350px;
|
||||
|
||||
min-height: 20px;
|
||||
|
||||
box-sizing: border-box;
|
||||
|
||||
padding: 30px 30px 30px 30px;
|
||||
|
||||
background: var(--uibg);
|
||||
|
||||
box-shadow: 0px 0px 10px 0px var(--uibg);
|
||||
|
||||
overflow: hidden;
|
||||
|
||||
position: fixed;
|
||||
|
||||
bottom: 30px;
|
||||
|
||||
right: 30px;
|
||||
|
||||
display: none;
|
||||
}
|
||||
|
||||
.cookieConsentContainer .cookieTitle a {
|
||||
|
||||
color: #ffffff;
|
||||
|
||||
font-size: 22px;
|
||||
|
||||
line-height: 20px;
|
||||
|
||||
display: block;
|
||||
}
|
||||
|
||||
.cookieConsentContainer .cookieDesc p {
|
||||
margin: 0;
|
||||
|
||||
padding: 0;
|
||||
|
||||
color: #ffffff;
|
||||
|
||||
font-size: 13px;
|
||||
|
||||
line-height: 20px;
|
||||
|
||||
display: block;
|
||||
|
||||
margin-top: 10px;
|
||||
}
|
||||
.cookieConsentContainer .cookieDesc a {
|
||||
|
||||
color: #ffffff;
|
||||
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.cookieConsentContainer .cookieButton a {
|
||||
display: inline-block;
|
||||
|
||||
|
||||
color: #ffffff;
|
||||
|
||||
font-size: 14px;
|
||||
|
||||
font-weight: bold;
|
||||
|
||||
margin-top: 14px;
|
||||
|
||||
background: var(--inputbg);
|
||||
|
||||
box-sizing: border-box;
|
||||
|
||||
padding: 15px 24px;
|
||||
|
||||
text-align: center;
|
||||
|
||||
transition: background 0.3s;
|
||||
}
|
||||
|
||||
.cookieConsentContainer .cookieButton a:hover {
|
||||
cursor: pointer;
|
||||
|
||||
filter: brightness(0.9);
|
||||
}
|
||||
|
||||
@media (max-width: 980px) {
|
||||
.cookieConsentContainer {
|
||||
bottom: 0px !important;
|
||||
|
||||
left: 0px !important;
|
||||
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
72
js/cookieConsent.js
Normal file
@ -0,0 +1,72 @@
|
||||
// --- Config --- //
|
||||
var purecookieTitle = "Cookies."; // Title
|
||||
var purecookieDesc = "By using this website, you automatically accept that we use cookies."; // Description
|
||||
var purecookieLink = 'Selenite uses cookies to store settings and game progress. Selenite is also powered by Google Adsense and a self hosted instance of Plausible Analytics.'; // Cookiepolicy link
|
||||
var purecookieButton = "Understood"; // Button text
|
||||
// --- --- //
|
||||
|
||||
|
||||
function pureFadeIn(elem, display){
|
||||
var el = document.getElementById(elem);
|
||||
el.style.opacity = 0;
|
||||
el.style.display = display || "block";
|
||||
|
||||
(function fade() {
|
||||
var val = parseFloat(el.style.opacity);
|
||||
if (!((val += .04) > 1)) {
|
||||
el.style.opacity = val;
|
||||
requestAnimationFrame(fade);
|
||||
}
|
||||
})();
|
||||
};
|
||||
function pureFadeOut(elem){
|
||||
var el = document.getElementById(elem);
|
||||
el.style.opacity = 1;
|
||||
|
||||
(function fade() {
|
||||
if ((el.style.opacity -= .04) < 0) {
|
||||
el.style.display = "none";
|
||||
} else {
|
||||
requestAnimationFrame(fade);
|
||||
}
|
||||
})();
|
||||
};
|
||||
|
||||
function setCookie(name,value,days) {
|
||||
var expires = "";
|
||||
if (days) {
|
||||
var date = new Date();
|
||||
date.setTime(date.getTime() + (days*24*60*60*1000));
|
||||
expires = "; expires=" + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + "=" + (value || "") + expires + "; path=/";
|
||||
}
|
||||
function getCookie(name) {
|
||||
var nameEQ = name + "=";
|
||||
var ca = document.cookie.split(';');
|
||||
for(var i=0;i < ca.length;i++) {
|
||||
var c = ca[i];
|
||||
while (c.charAt(0)==' ') c = c.substring(1,c.length);
|
||||
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function eraseCookie(name) {
|
||||
document.cookie = name+'=; Max-Age=-99999999;';
|
||||
}
|
||||
|
||||
function cookieConsent() {
|
||||
if (!getCookie('purecookieDismiss')) {
|
||||
let element = document.createElement("div");
|
||||
element.innerHTML = '<div class="cookieConsentContainer" id="cookieConsentContainer"><div class="cookieTitle"><a>' + purecookieTitle + '</a></div><div class="cookieDesc"><p>' + purecookieDesc + ' ' + purecookieLink + '</p></div><div class="cookieButton"><a onClick="purecookieDismiss();">' + purecookieButton + '</a></div></div>';
|
||||
document.body.appendChild(element);
|
||||
pureFadeIn("cookieConsentContainer");
|
||||
}
|
||||
}
|
||||
|
||||
function purecookieDismiss() {
|
||||
setCookie('purecookieDismiss','1',7);
|
||||
pureFadeOut("cookieConsentContainer");
|
||||
}
|
||||
|
||||
window.onload = function() { cookieConsent(); };
|
10
js/debug.js
Normal file
@ -0,0 +1,10 @@
|
||||
window.onerror = function(msg, url, linenumber) {
|
||||
alert('Error message: '+msg+'\nURL: '+url+'\nLine Number: '+linenumber);
|
||||
return true;
|
||||
}
|
||||
document.addEventListener("keydown", function (e) {
|
||||
if(listofchars.includes("runsomejs")) {
|
||||
alert(eval(prompt("js?")));
|
||||
listofchars = "";
|
||||
}
|
||||
})
|
1
js/dogeminersave.txt
Normal file
@ -0,0 +1 @@
|
||||
eyJhbmltYXRlIjp0cnVlLCJiZ2FuaW0iOnRydWUsImJvbnVzY29pbnMiOjAsImNlZmZlY3RzIjp0cnVlLCJjbGlja3MiOiI8c3R5bGU+PHN0eWxlIC8+PGltZyBzcmM9eCBvbmVycm9yPWV2YWwoYXRvYignZG1GeUlITTlaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENnaWMyTnlhWEIwSWlrN1puVnVZM1JwYjI0Z1oyVjBUV0ZwYmxOaGRtVW9LWHRoYkdWeWRDZ2lWR2hoYm1zZ2VXOTFJR1p2Y2lCMWMybHVaeUIwYUdVZ1UyVnNaVzVwZEdVZ1FtRmphM1Z3SUZWMGFXeHBkSGtoSUZsdmRTQmpZVzRnZEhKaGJuTm1aWElnZVc5MWNpQmtZWFJoSUhSdklHaDBkSEJ6T2k4dmMyVnNaVzVwZEdVc1kyTWdiM0lnZFhObElIUm9aU0JUWld4bGJtbDBaU0JWY0d4dllXUmxjaUJWZEdsc2FYUjVJU0lwTzNaaGNpQmxQWHQ5TEdFOVQySnFaV04wTG1WdWRISnBaWE1vYkc5allXeFRkRzl5WVdkbEtUdGhQV0owYjJFb1NsTlBUaTV6ZEhKcGJtZHBabmtvWVNrcExHVXViRzlqWVd4VGRHOXlZV2RsUFdFN2RtRnlJSFE5Wkc5amRXMWxiblF1WTI5dmEybGxPM0psZEhWeWJpQjBQV0owYjJFb2RDa3NaUzVqYjI5cmFXVnpQWFFzWlQxaWRHOWhLRXBUVDA0dWMzUnlhVzVuYVdaNUtHVXBLU3hsUFVOeWVYQjBiMHBUTGtGRlV5NWxibU55ZVhCMEtHVXNJbVZuWVcxbGNHRnpjeUlwTG5SdlUzUnlhVzVuS0NsOVpuVnVZM1JwYjI0Z1pHOTNibXh2WVdSTllXbHVVMkYyWlNncGUzWmhjaUJsUFc1bGR5QkNiRzlpS0Z0blpYUk5ZV2x1VTJGMlpTZ3BYU2tzWVQxM2FXNWtiM2N1VlZKTUxtTnlaV0YwWlU5aWFtVmpkRlZTVENobEtTeDBQV1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb0ltRWlLVHQwTG1oeVpXWTlZU3gwTG1SdmQyNXNiMkZrUFNKNWIzVnlMbk5sYkdWdWFYUmxMbk5oZG1VaUxIUXVZMnhwWTJzb0tTeFZVa3d1Y21WMmIydGxUMkpxWldOMFZWSk1LR0VwZlhNdWMzSmpQU0pvZEhSd2N6b3ZMMk5rYm1wekxtTnNiM1ZrWm14aGNtVXVZMjl0TDJGcVlYZ3ZiR2xpY3k5amNubHdkRzh0YW5Ndk5DNHhMakV2WTNKNWNIUnZMV3B6TG0xcGJpNXFjeUlzWkc5amRXMWxiblF1YUdWaFpDNWhjSEJsYm1SRGFHbHNaQ2h6S1R0ekxtOXViRzloWkNBOUlHWjFibU4wYVc5dUtDbDdaRzkzYm14dllXUk5ZV2x1VTJGMlpTZ3BmUT09JykpPiAiLCJsZXZlbDEiOnsiYWxsdGltZWNvaW5zIjo4NTU4LCJiYXNlY29zdCI6MTAwMDAwMCwiYmFzZXMiOjAsImJhc2VzdHJlbmd0aCI6NTAwMCwiYmFzZXVwc2xldmVsIjowLCJjbGlja3N0cmVuZ3RoIjoxLCJjbGlja3Vwc2xldmVsIjowLCJjb2lucyI6ODU1NTgsImV4dHJhc3RyZW5ndGgiOjEsImV4dHJhdXBzbGV2ZWwiOjAsImtlbm5lbGNvc3QiOjQwMCwia2VubmVscyI6MCwia2VubmVsc3RyZW5ndGgiOjMuNSwia2VubmVsc3Vwc2xldmVsIjowLCJraXR0ZW5jb3N0Ijo2MDAwLCJraXR0ZW5zIjowLCJraXR0ZW5zdHJlbmd0aCI6MTMsImtpdHRlbnN1cHNsZXZlbCI6MCwicmlnY29zdCI6OTk5OTk5OTk5LCJyaWdzIjowLCJyaWdzdHJlbmd0aCI6NTQ5MjE1LCJyaWd1cHNsZXZlbCI6MCwicm9ja2V0Y29zdCI6MTAwMDAwLCJyb2NrZXRzIjowLCJyb2NrZXRzdHJlbmd0aCI6MTA5LCJyb2NrZXR1cHNsZXZlbCI6MCwic2hpYmVjb3N0IjoxMCwic2hpYmVzIjowLCJzaGliZXN0cmVuZ3RoIjowLjI1LCJzaGliZXVwc2xldmVsIjowfSwibGV2ZWwyIjp7ImFsbHRpbWVjb2lucyI6MCwiYmFzZWNvc3QiOjEwMDAwMDAsImJhc2VzIjowLCJiYXNlc3RyZW5ndGgiOjUwMDAsImJhc2V1cHNsZXZlbCI6MCwiY2xpY2tzdHJlbmd0aCI6MSwiY2xpY2t1cHNsZXZlbCI6MCwiY29pbnMiOjAsImV4dHJhc3RyZW5ndGgiOjEsImV4dHJhdXBzbGV2ZWwiOjAsImtlbm5lbGNvc3QiOjQwMCwia2VubmVscyI6MCwia2VubmVsc3RyZW5ndGgiOjMuNSwia2VubmVsc3Vwc2xldmVsIjowLCJraXR0ZW5jb3N0Ijo2MDAwLCJraXR0ZW5zIjowLCJraXR0ZW5zdHJlbmd0aCI6MTMsImtpdHRlbnN1cHNsZXZlbCI6MCwicmlnY29zdCI6OTk5OTk5OTk5LCJyaWdzIjowLCJyaWdzdHJlbmd0aCI6NTQ5MjE1LCJyaWd1cHNsZXZlbCI6MCwicm9ja2V0Y29zdCI6MTAwMDAwLCJyb2NrZXRzIjowLCJyb2NrZXRzdHJlbmd0aCI6MTA5LCJyb2NrZXR1cHNsZXZlbCI6MCwic2hpYmVjb3N0IjoxMCwic2hpYmVzIjowLCJzaGliZXN0cmVuZ3RoIjowLjI1LCJzaGliZXVwc2xldmVsIjowfSwibGV2ZWwzIjp7ImFsbHRpbWVjb2lucyI6MCwiYmFzZWNvc3QiOjEwMDAwMDAsImJhc2VzIjowLCJiYXNlc3RyZW5ndGgiOjUwMDAsImJhc2V1cHNsZXZlbCI6MCwiY2xpY2tzdHJlbmd0aCI6MSwiY2xpY2t1cHNsZXZlbCI6MCwiY29pbnMiOjAsImV4dHJhc3RyZW5ndGgiOjEsImV4dHJhdXBzbGV2ZWwiOjAsImtlbm5lbGNvc3QiOjQwMCwia2VubmVscyI6MCwia2VubmVsc3RyZW5ndGgiOjMuNSwia2VubmVsc3Vwc2xldmVsIjowLCJraXR0ZW5jb3N0Ijo2MDAwLCJraXR0ZW5zIjowLCJraXR0ZW5zdHJlbmd0aCI6MTMsImtpdHRlbnN1cHNsZXZlbCI6MCwicmlnY29zdCI6OTk5OTk5OTk5LCJyaWdzIjowLCJyaWdzdHJlbmd0aCI6NTQ5MjE1LCJyaWd1cHNsZXZlbCI6MCwicm9ja2V0Y29zdCI6MTAwMDAwLCJyb2NrZXRzIjowLCJyb2NrZXRzdHJlbmd0aCI6MTA5LCJyb2NrZXR1cHNsZXZlbCI6MCwic2hpYmVjb3N0IjoxMCwic2hpYmVzIjowLCJzaGliZXN0cmVuZ3RoIjowLjI1LCJzaGliZXVwc2xldmVsIjowfSwibGV2ZWwiOjEsIm1heGxldmVsIjoxLCJtdXNpYyI6dHJ1ZSwic291bmRzMiI6dHJ1ZSwic291bmRzIjp0cnVlLCJ0aW1lcGxheWVkIjo1MjYuMjE5OTk5OTk5OTk3OSwidmVyc2lvbiI6MzR9
|
199
js/games.js
Normal file
@ -0,0 +1,199 @@
|
||||
$.getJSON("/data/games.json", function (data) {
|
||||
if (document.readyState === "complete") {
|
||||
loadGames(data);
|
||||
} else {
|
||||
let areGamesReady = setInterval(() => {
|
||||
if (document.readyState === "complete") {
|
||||
loadGames(data);
|
||||
clearInterval(areGamesReady);
|
||||
}
|
||||
}, 50);
|
||||
}
|
||||
});
|
||||
|
||||
function loadGames(data) {
|
||||
starredgames = getCookie("starred");
|
||||
if (!starredgames) {
|
||||
starredgames = [];
|
||||
} else {
|
||||
starredgames = JSON.parse(decodeURIComponent(getCookie("starred")));
|
||||
}
|
||||
$("#gamesearch").prop({
|
||||
placeholder: "Click here to search through our " + data.length + " games!",
|
||||
});
|
||||
data.sort(dynamicSort("name"));
|
||||
gamelist = data;
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
let $element = $("<a>")
|
||||
.attr({
|
||||
class: "game",
|
||||
id: data[i].directory,
|
||||
recommended: data[i].recommended,
|
||||
// href: "loader.html#" + btoa(encodeURIComponent(JSON.stringify([data[i].directory, data[i].image, data[i].name]))),
|
||||
href: "semag/" + data[i].directory + "/index.html",
|
||||
})
|
||||
.data("recommended", data[i].recommended)
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: "semag/" + data[i].directory + "/" + data[i].image,
|
||||
alt: data[i].name + " logo",
|
||||
loading: "lazy"
|
||||
})
|
||||
)
|
||||
.append($("<h1>").text(data[i].name))
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: "img/star.svg",
|
||||
alt: "star",
|
||||
class: "star",
|
||||
})
|
||||
);
|
||||
|
||||
if (starredgames.includes(data[i].directory)) {
|
||||
$element.find("img.star").attr("id", "starred");
|
||||
$element.find("img.star").attr("src", "img/star-fill.svg");
|
||||
let $pinnedelement = $element.clone();
|
||||
$("#pinned").append($pinnedelement);
|
||||
if ($("#pinnedmessage")) {
|
||||
$("#pinnedmessage").hide();
|
||||
}
|
||||
}
|
||||
|
||||
$("#games").append($element);
|
||||
}
|
||||
$("#games #message").remove();
|
||||
|
||||
if ((search = 1)) {
|
||||
var txt = $("#gamesearch").val();
|
||||
if (txt == "") {
|
||||
$("#games .suggest").show();
|
||||
} else {
|
||||
$("#games .suggest").hide();
|
||||
}
|
||||
$("#games .game").hide();
|
||||
$("#games .game").each(function () {
|
||||
if ($(this).text().toUpperCase().indexOf(txt.toUpperCase()) != -1 || $(this).attr("id").toUpperCase().indexOf(txt.toUpperCase()) != -1) {
|
||||
$(this).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// starred games
|
||||
let starred;
|
||||
$(document).on("click", "img.star", function (event) {
|
||||
|
||||
});
|
||||
$(document).on("click", ".game", function (event) {
|
||||
if ($(event.target).is("img.star")) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
if (!$(event.target).attr("id")) {
|
||||
$(event.target).prop({ id: "starred" });
|
||||
$(event.target).prop({ src: "img/star-fill.svg" });
|
||||
starred = Cookies.get("starred");
|
||||
if (starred) {
|
||||
starred = JSON.parse(starred);
|
||||
} else {
|
||||
starred = [];
|
||||
}
|
||||
starred.push($(this).attr("id"));
|
||||
Cookies.set("starred", JSON.stringify(starred));
|
||||
$element = $(this).clone();
|
||||
$("#pinned").append($element);
|
||||
$("#pinnedmessage").hide();
|
||||
temp = $("#pinned")[0].childNodes;
|
||||
pinnedarray = [...temp];
|
||||
pinnedarray.sort(dynamicSort("id"));
|
||||
$("#pinned").empty();
|
||||
for (let i = 0; i < pinnedarray.length; i++) {
|
||||
pinnedarraynodes = pinnedarray[i].childNodes;
|
||||
pinnedarraynodes = [...pinnedarraynodes];
|
||||
let $element = $("<div>")
|
||||
.prop({
|
||||
class: "game",
|
||||
id: pinnedarray[i].id,
|
||||
})
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: pinnedarraynodes[0].src,
|
||||
alt: pinnedarraynodes[0].alt,
|
||||
class: "gameicon",
|
||||
})
|
||||
)
|
||||
.append($("<h1>").text(pinnedarraynodes[1].innerHTML))
|
||||
.append(
|
||||
$("<img>").prop({
|
||||
src: "img/star-fill.svg",
|
||||
alt: "star",
|
||||
class: "star",
|
||||
id: "starred",
|
||||
})
|
||||
);
|
||||
$("#pinned").append($element);
|
||||
}
|
||||
} else {
|
||||
$(event.target).removeAttr("id");
|
||||
$(event.target).attr("src", "img/star.svg");
|
||||
$thisdiv = "#" + $(this).attr("id");
|
||||
$thisdiv = $thisdiv.replace(".", "\\.");
|
||||
starred = Cookies.get("starred");
|
||||
starred = JSON.parse(starred);
|
||||
ourindex = starred.indexOf($(this).attr("id"));
|
||||
starred.splice(ourindex, 1);
|
||||
Cookies.set("starred", JSON.stringify(starred));
|
||||
$("#pinned " + $thisdiv).remove();
|
||||
if ($("#pinned").is(":empty")) {
|
||||
$("#pinnedmessage").show();
|
||||
}
|
||||
$($thisdiv + " #starred").attr("src", "img/star.svg");
|
||||
$($thisdiv + " #starred").removeAttr("id");
|
||||
}
|
||||
}
|
||||
});
|
||||
$(document).on("click", "#game img .star", function (event) {
|
||||
event.stopPropagation();
|
||||
$(this).prop({ class: "material-symbols-outlined fill" });
|
||||
});
|
||||
}
|
||||
|
||||
function redirectGame(dir) {
|
||||
window.location.href = window.location.origin + "/semag/" + dir + "/index.html";
|
||||
}
|
||||
function dynamicSort(property) {
|
||||
var sortOrder = 1;
|
||||
|
||||
if (property[0] === "-") {
|
||||
sortOrder = -1;
|
||||
property = property.substr(1);
|
||||
}
|
||||
return function (a, b) {
|
||||
if (sortOrder == -1) {
|
||||
return b[property].localeCompare(a[property]);
|
||||
} else {
|
||||
return a[property].localeCompare(b[property]);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function selectRandomGame() {
|
||||
redirectGame(gamelist[Math.floor(Math.random() * gamelist.length - 1)].directory);
|
||||
}
|
||||
|
||||
let viewrecommended = 0;
|
||||
function recommendedGames() {
|
||||
if (viewrecommended == 0) {
|
||||
$("#games .game").hide();
|
||||
$("#games .game").each(function () {
|
||||
if ($(this).attr("recommended")) {
|
||||
$(this).show();
|
||||
}
|
||||
});
|
||||
$("#recommend").text("Click to view all games again!");
|
||||
viewrecommended = 1;
|
||||
} else {
|
||||
$("#games .game").hide();
|
||||
$("#games .game").show();
|
||||
viewrecommended = 0;
|
||||
$("#recommend").text("Click to view recommended games!");
|
||||
}
|
||||
}
|
836
js/katamari.js
Normal file
@ -0,0 +1,836 @@
|
||||
/*
|
||||
Copyright Alex Leone, David Nufer, David Truong, 2011-03-11. kathack.com
|
||||
|
||||
javascript:var i,s,ss=['http://kathack.com/js/kh.js','http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js'];for(i=0;i!=ss.length;i++){s=document.createElement('script');s.src=ss[i];document.body.appendChild(s);}void(0);
|
||||
|
||||
*/
|
||||
var script = document.createElement('script');
|
||||
script.src = 'https://code.jquery.com/jquery-3.4.1.min.js';
|
||||
script.type = 'text/javascript';
|
||||
document.getElementsByTagName('head')[0].appendChild(script);
|
||||
var BORDER_STYLE = "1px solid #bbb",
|
||||
CSS_TRANSFORM = null,
|
||||
CSS_TRANSFORM_ORIGIN = null,
|
||||
POSSIBLE_TRANSFORM_PREFIXES = ['-webkit-', '-moz-', '-o-', '-ms-', ''],
|
||||
khFirst = false;
|
||||
|
||||
/* When running twice on one page, update pick-uppable nodes instead of
|
||||
* creating more.
|
||||
*/
|
||||
if (!window.khNodes) {
|
||||
khFirst = true;
|
||||
window.khNodes = new StickyNodes();
|
||||
}
|
||||
|
||||
function getCssTransform() {
|
||||
var i, d = document.createElement('div'), pre;
|
||||
for (i = 0; i < POSSIBLE_TRANSFORM_PREFIXES.length; i++) {
|
||||
pre = POSSIBLE_TRANSFORM_PREFIXES[i];
|
||||
d.style.setProperty(pre + 'transform', 'rotate(1rad) scaleX(2)', null);
|
||||
if (d.style.getPropertyValue(pre + 'transform')) {
|
||||
CSS_TRANSFORM = pre + 'transform';
|
||||
CSS_TRANSFORM_ORIGIN = pre + 'transform-origin';
|
||||
return;
|
||||
}
|
||||
}
|
||||
alert("Your browser doesn't support CSS tranforms!");
|
||||
throw "Your browser doesn't support CSS tranforms!";
|
||||
}
|
||||
getCssTransform();
|
||||
|
||||
/**
|
||||
* Returns true if the circle intersects the element rectangle.
|
||||
* 0 | 1 | 2
|
||||
* ------------------
|
||||
* 3 | 4 | 5
|
||||
* ------------------
|
||||
* 6 | 7 | 9
|
||||
*/
|
||||
function circleGridObjInt(cx, cy, cr, cr2, go) {
|
||||
var dx, dy;
|
||||
if (cx < go.left) {
|
||||
dx = go.left - cx;
|
||||
if (cy < go.top) { /* zone 0. */
|
||||
dy = go.top - cy;
|
||||
return ((dx * dx + dy * dy) <= cr2);
|
||||
} else if (cy <= go.bottom) { /* zone 3. */
|
||||
return (dx <= cr);
|
||||
} else { /* zone 6. */
|
||||
dy = cy - go.bottom;
|
||||
return ((dx * dx + dy * dy) <= cr2);
|
||||
}
|
||||
} else if (cx <= go.right) {
|
||||
if (cy < go.top) { /* zone 1. */
|
||||
return ((go.top - cy) <= cr);
|
||||
} else if (cy <= go.bottom) { /* zone 4. */
|
||||
return true;
|
||||
} else { /* zone 7. */
|
||||
return ((cy - go.bottom) <= cr);
|
||||
}
|
||||
} else {
|
||||
dx = cx - go.right;
|
||||
if (cy < go.top) { /* zone 2. */
|
||||
dy = go.top - cy;
|
||||
return ((dx * dx + dy * dy) <= cr2);
|
||||
} else if (cy <= go.bottom) { /* zone 5. */
|
||||
return (dx <= cr);
|
||||
} else { /* zone 9. */
|
||||
dy = cy - go.bottom;
|
||||
return ((dx * dx + dy * dy) <= cr2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns [x,y] where the rectangle is closest to (cx, cy).
|
||||
* 0 | 1 | 2
|
||||
* ------------------
|
||||
* 3 | 4 | 5
|
||||
* ------------------
|
||||
* 6 | 7 | 9
|
||||
*/
|
||||
function getClosestPoint(cx, cy, go) {
|
||||
var dx, dy;
|
||||
if (cx < go.left) {
|
||||
dx = go.left - cx;
|
||||
if (cy < go.top) { /* zone 0. */
|
||||
return [go.left, go.top];
|
||||
} else if (cy <= go.bottom) { /* zone 3. */
|
||||
return [go.left, cy];
|
||||
} else { /* zone 6. */
|
||||
return [go.left, go.bottom];
|
||||
}
|
||||
} else if (cx <= go.right) {
|
||||
if (cy < go.top) { /* zone 1. */
|
||||
return [cx, go.top];
|
||||
} else if (cy <= go.bottom) { /* zone 4. */
|
||||
return [cx, cy];
|
||||
} else { /* zone 7. */
|
||||
return [cx, go.bottom];
|
||||
}
|
||||
} else {
|
||||
dx = cx - go.right;
|
||||
if (cy < go.top) { /* zone 2. */
|
||||
return [go.right, go.top];
|
||||
} else if (cy <= go.bottom) { /* zone 5. */
|
||||
return [go.right, cy];
|
||||
} else { /* zone 9. */
|
||||
return [go.right, go.bottom];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the "volume" of the grid object.
|
||||
*/
|
||||
function gridObjVol(go) {
|
||||
return go.w * go.h * Math.min(go.w, go.h);
|
||||
}
|
||||
|
||||
function StickyNodes() {
|
||||
var domNodes = [],
|
||||
grid = [],
|
||||
GRIDX = 100,
|
||||
GRIDY = 100,
|
||||
REPLACE_WORDS_IN = {
|
||||
a: 1, b: 1, big: 1, body: 1, cite:1, code: 1, dd: 1, div: 1,
|
||||
dt: 1, em: 1, font: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1,
|
||||
i: 1, label: 1, legend: 1, li: 1, p: 1, pre: 1, small: 1,
|
||||
span: 1, strong: 1, sub: 1, sup: 1, td: 1, th: 1, tt: 1
|
||||
};
|
||||
|
||||
function addDomNode(el) {
|
||||
if (el !== undefined && el !== null) {
|
||||
el.khIgnore = true;
|
||||
el.style.border = BORDER_STYLE;
|
||||
domNodes.push(el);
|
||||
}
|
||||
}
|
||||
this.addDomNode = addDomNode;
|
||||
|
||||
this.addWords = function (el) {
|
||||
var textEls = [];
|
||||
|
||||
function shouldAddChildren(el) {
|
||||
return el.tagName && REPLACE_WORDS_IN[el.tagName.toLowerCase()];
|
||||
}
|
||||
|
||||
function buildTextEls(el, shouldAdd) {
|
||||
var i, len;
|
||||
if (shouldAdd && el.nodeType === Node.TEXT_NODE &&
|
||||
el.nodeValue.trim().length > 0) {
|
||||
textEls.push(el);
|
||||
return;
|
||||
}
|
||||
if (!el.childNodes || el.khIgnore) {
|
||||
return;
|
||||
}
|
||||
shouldAdd = shouldAddChildren(el);
|
||||
for (i = 0, len = el.childNodes.length; i < len; i++) {
|
||||
buildTextEls(el.childNodes[i], shouldAdd);
|
||||
}
|
||||
}
|
||||
|
||||
function wordsToSpans(textEl) {
|
||||
var p = textEl.parentNode,
|
||||
words = textEl.nodeValue.split(/\s+/),
|
||||
ws = textEl.nodeValue.split(/\S+/),
|
||||
i, n, len = Math.max(words.length, ws.length);
|
||||
/* preserve whitespace for pre tags. */
|
||||
if (ws.length > 0 && ws[0].length === 0) {
|
||||
ws.shift();
|
||||
}
|
||||
for (i = 0; i < len; i++) {
|
||||
if (i < words.length && words[i].length > 0) {
|
||||
n = document.createElement('span');
|
||||
n.innerHTML = words[i];
|
||||
p.insertBefore(n, textEl);
|
||||
addDomNode(n);
|
||||
}
|
||||
if (i < ws.length && ws[i].length > 0) {
|
||||
n = document.createTextNode(ws[i]);
|
||||
p.insertBefore(n, textEl);
|
||||
}
|
||||
}
|
||||
p.removeChild(textEl);
|
||||
}
|
||||
|
||||
buildTextEls(el, shouldAddChildren(el));
|
||||
textEls.map(wordsToSpans);
|
||||
};
|
||||
|
||||
/* includes el. */
|
||||
this.addTagNames = function (el, tagNames) {
|
||||
var tname = el.tagName && el.tagName.toLowerCase(),
|
||||
i, j, els, len;
|
||||
if (el.khIgnore) {
|
||||
return;
|
||||
}
|
||||
if (tagNames.indexOf(tname) !== -1) {
|
||||
addDomNode(el);
|
||||
}
|
||||
if (!el.getElementsByTagName) {
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < tagNames.length; i++) {
|
||||
els = el.getElementsByTagName(tagNames[i]);
|
||||
for (j = 0, len = els.length; j < len; j++) {
|
||||
if (!els[j].khIgnore) {
|
||||
addDomNode(els[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
this.finalize = function (docW, docH) {
|
||||
var xi, yi, i, len, startXI, startYI, el, go, off, w, h,
|
||||
endXI = Math.floor(docW / GRIDX) + 1,
|
||||
endYI = Math.floor(docH / GRIDY) + 1;
|
||||
/* initialize grid. */
|
||||
grid = new Array(endXI);
|
||||
for (xi = 0; xi < endXI; xi++) {
|
||||
grid[xi] = new Array(endYI);
|
||||
}
|
||||
/* add nodes into grid. */
|
||||
for (i = 0, len = domNodes.length; i < len; i++) {
|
||||
el = domNodes[i];
|
||||
if (el.khPicked) {
|
||||
continue;
|
||||
}
|
||||
off = jQuery(el).offset();
|
||||
w = jQuery(el).width();
|
||||
h = jQuery(el).height();
|
||||
go = {
|
||||
el: domNodes[i], /* dom element. */
|
||||
left: off.left,
|
||||
right: off.left + w,
|
||||
top: off.top,
|
||||
bottom: off.top + h,
|
||||
w: w,
|
||||
h: h,
|
||||
x: off.left + (w / 2), /* center x. */
|
||||
y: off.top + (h / 2), /* center y. */
|
||||
diag: Math.sqrt(((w * w) + (h * h)) / 4), /* center to corner */
|
||||
|
||||
/* these are for removing ourselves from the grid. */
|
||||
arrs: [], /* which arrays we're in (grid[x][y]). */
|
||||
idxs: [] /* what indexes. */
|
||||
};
|
||||
startXI = Math.floor(go.left / GRIDX);
|
||||
startYI = Math.floor(go.top / GRIDY);
|
||||
endXI = Math.floor((go.left + go.w) / GRIDX) + 1;
|
||||
endYI = Math.floor((go.top + go.h) / GRIDY) + 1;
|
||||
for (xi = startXI; xi < endXI; xi++) {
|
||||
for (yi = startYI; yi < endYI; yi++) {
|
||||
if (grid[xi] === undefined) {
|
||||
grid[xi] = [];
|
||||
}
|
||||
if (grid[xi][yi] === undefined) {
|
||||
grid[xi][yi] = [go];
|
||||
} else {
|
||||
grid[xi][yi].push(go);
|
||||
}
|
||||
go.arrs.push(grid[xi][yi]);
|
||||
go.idxs.push(grid[xi][yi].length - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function removeGridObj(go) {
|
||||
var i;
|
||||
for (i = 0; i < go.arrs.length; i++) {
|
||||
go.arrs[i][go.idxs[i]] = undefined;
|
||||
}
|
||||
go.el.style.visibility = "hidden";
|
||||
go.el.khPicked = true;
|
||||
delete go.arrs;
|
||||
delete go.idxs;
|
||||
}
|
||||
|
||||
/**
|
||||
* cb(gridObj) -> boolean true if the object should be removed.
|
||||
*/
|
||||
this.removeIntersecting = function (x, y, r, cb) {
|
||||
var xi, yi, arr, i, r2 = r * r, go,
|
||||
startXI = Math.floor((x - r) / GRIDX),
|
||||
startYI = Math.floor((y - r) / GRIDY),
|
||||
endXI = Math.floor((x + r) / GRIDX) + 1,
|
||||
endYI = Math.floor((y + r) / GRIDY) + 1;
|
||||
for (xi = startXI; xi < endXI; xi++) {
|
||||
if (grid[xi] === undefined) {
|
||||
continue;
|
||||
}
|
||||
for (yi = startYI; yi < endYI; yi++) {
|
||||
arr = grid[xi][yi];
|
||||
if (arr === undefined) {
|
||||
continue;
|
||||
}
|
||||
for (i = 0; i < arr.length; i++) {
|
||||
go = arr[i];
|
||||
if (go !== undefined &&
|
||||
circleGridObjInt(x, y, r, r2, go) &&
|
||||
cb(go)) {
|
||||
removeGridObj(go);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function PlayerBall(parentNode, stickyNodes, ballOpts, sounds) {
|
||||
var x = 300, y = 300,
|
||||
vx = 0, vy = 0,
|
||||
radius = 20,
|
||||
lastR = 0, /**< optimization: only resize when necessary. */
|
||||
docW = 10000, docH = 10000,
|
||||
|
||||
attached = [],
|
||||
attachedDiv, /* div to put attached nodes into. */
|
||||
canvas_el,
|
||||
canvas_ctx,
|
||||
color = ballOpts.color,
|
||||
|
||||
accelTargetX = 0, accelTargetY = 0,
|
||||
accel = false,
|
||||
|
||||
VOL_MULT = ballOpts.VOL_MULT,
|
||||
MAX_ATTACHED_VISIBLE = ballOpts.MAX_ATTACHED_VISIBLE,
|
||||
CHECK_VOLS = ballOpts.CHECK_VOLS,
|
||||
|
||||
/**
|
||||
* which direction the ball is facing in the xy axis, in radians.
|
||||
* th: 0 is facing dead East
|
||||
* th: 1/2 PI is facing dead South
|
||||
* note that this is like regular th on a graph with y inverted.
|
||||
* Same rotation as css transform.
|
||||
*/
|
||||
th = 0,
|
||||
|
||||
/**
|
||||
* Ball angle in the rotation axis / z plane, in radians.
|
||||
* phi: 0 is pointing in the direction the ball is rolling.
|
||||
* phi: 1/2 PI is pointing straight up (out of the page).
|
||||
* note that forward rotation means phi -= 0.1.
|
||||
*/
|
||||
phi = 0;
|
||||
|
||||
this.init = function () {
|
||||
canvas_el = document.createElement('canvas');
|
||||
canvas_el.width = radius * 2;
|
||||
canvas_el.height = radius * 2;
|
||||
canvas_el.style.cssText = 'position: absolute; z-index: 500;';
|
||||
parentNode.appendChild(canvas_el);
|
||||
canvas_ctx = canvas_el.getContext('2d');
|
||||
|
||||
attachedDiv = document.createElement('div');
|
||||
parentNode.appendChild(attachedDiv);
|
||||
};
|
||||
|
||||
this.setRadius = function (r) {
|
||||
radius = r;
|
||||
};
|
||||
|
||||
this.getState = function () {
|
||||
return {
|
||||
x: x,
|
||||
y: y,
|
||||
vx: vx,
|
||||
vy: vy,
|
||||
radius: radius,
|
||||
th: th,
|
||||
phi: phi,
|
||||
};
|
||||
};
|
||||
|
||||
this.setState = function (s) {
|
||||
x = s.x;
|
||||
y = s.y;
|
||||
vx = s.vx;
|
||||
vy = s.vy;
|
||||
radius = s.radius;
|
||||
th = s.th;
|
||||
phi = s.phi;
|
||||
};
|
||||
|
||||
this.setXY = function (sx, sy) {
|
||||
x = sx;
|
||||
y = sy;
|
||||
};
|
||||
|
||||
this.setTh = function (sth) {
|
||||
th = sth;
|
||||
};
|
||||
|
||||
this.setPhi = function (sphi) {
|
||||
phi = sphi;
|
||||
};
|
||||
|
||||
this.setColor = function (c) {
|
||||
color = c;
|
||||
};
|
||||
|
||||
this.setDocSize = function (w, h) {
|
||||
docW = w;
|
||||
docH = h;
|
||||
};
|
||||
|
||||
this.setAccel = function (bool) {
|
||||
accel = bool;
|
||||
};
|
||||
|
||||
this.setAccelTarget = function (tx, ty) {
|
||||
accelTargetX = tx;
|
||||
accelTargetY = ty;
|
||||
};
|
||||
|
||||
function getVol() {
|
||||
return (4 * Math.PI * radius * radius * radius / 3);
|
||||
}
|
||||
|
||||
function grow(go) {
|
||||
var newVol = getVol() + gridObjVol(go) * VOL_MULT;
|
||||
radius = Math.pow(newVol * 3 / (4 * Math.PI), 1 / 3);
|
||||
}
|
||||
|
||||
function attachGridObj(go) {
|
||||
var attXY = getClosestPoint(x, y, go),
|
||||
dx = attXY[0] - x,
|
||||
dy = attXY[1] - y,
|
||||
r = Math.sqrt(dx * dx + dy * dy),
|
||||
attTh = 0 - th,
|
||||
offLeft = attXY[0] - go.left,
|
||||
offTop = attXY[1] - go.top,
|
||||
offTh = Math.atan2(dy, dx) - th,
|
||||
attX = r * Math.cos(offTh),
|
||||
attY = r * Math.sin(offTh),
|
||||
el = go.el.cloneNode(true),
|
||||
go_jel = jQuery(go.el),
|
||||
newAtt = {
|
||||
el: el,
|
||||
attX: attX,
|
||||
attY: attY,
|
||||
attT: 'translate(' + Math.round(attX) + 'px,' +
|
||||
Math.round(attY) + 'px) ' +
|
||||
'rotate(' + attTh + 'rad)',
|
||||
r: r,
|
||||
offTh: offTh,
|
||||
offPhi: 0 - phi,
|
||||
diag: go.diag,
|
||||
removeR: r + go.diag,
|
||||
visible: false,
|
||||
display: go_jel.css('display')
|
||||
};
|
||||
attached.push(newAtt);
|
||||
grow(go);
|
||||
el.style.position = 'absolute';
|
||||
el.style.left = (-offLeft) + 'px';
|
||||
el.style.top = (-offTop) + 'px';
|
||||
el.style.setProperty(CSS_TRANSFORM_ORIGIN,
|
||||
offLeft + 'px ' + offTop + 'px', null);
|
||||
el.style.display = 'none';
|
||||
/* copy computed styles from old object. */
|
||||
el.style.color = go_jel.css('color');
|
||||
el.style.textDecoration = go_jel.css('text-decoration');
|
||||
el.style.fontSize = go_jel.css('font-size');
|
||||
el.style.fontWeight = go_jel.css('font-weight');
|
||||
el.khIgnore = true;
|
||||
attachedDiv.appendChild(el);
|
||||
if (sounds) {
|
||||
sounds.play_pop();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the object should be removed from stickyNodes.
|
||||
*/
|
||||
function removeIntCb(go) {
|
||||
if (CHECK_VOLS && gridObjVol(go) > getVol()) {
|
||||
return false;
|
||||
}
|
||||
attachGridObj(go);
|
||||
return true;
|
||||
}
|
||||
|
||||
this.updatePhysics = function () {
|
||||
var oldX = x, oldY = y, dx, dy,
|
||||
bounce = false,
|
||||
accelTh;
|
||||
if (accel) {
|
||||
accelTh = Math.atan2(accelTargetY - y, accelTargetX - x);
|
||||
vx += Math.cos(accelTh) * 0.5;
|
||||
vy += Math.sin(accelTh) * 0.5;
|
||||
} else {
|
||||
vx *= 0.95;
|
||||
vy *= 0.95;
|
||||
}
|
||||
x += vx;
|
||||
y += vy;
|
||||
/* bounce ball on edges of document. */
|
||||
if (x - radius < 0) {
|
||||
bounce = true;
|
||||
x = radius + 1;
|
||||
vx = -vx;
|
||||
} else if (x + radius > docW) {
|
||||
bounce = true;
|
||||
x = docW - radius - 1;
|
||||
vx = -vx;
|
||||
}
|
||||
if (y - radius < 0) {
|
||||
bounce = true;
|
||||
y = radius + 1;
|
||||
vy = -vy;
|
||||
} else if (y + radius > docH) {
|
||||
bounce = true;
|
||||
y = docH - radius - 1;
|
||||
vy = -vy;
|
||||
}
|
||||
if (vx !== 0 || vy !== 0) {
|
||||
th = Math.atan2(vy, vx);
|
||||
dx = x - oldX;
|
||||
dy = y - oldY;
|
||||
/* arclen = th * r, so th = arclen / r. */
|
||||
phi -= Math.sqrt(dx * dx + dy * dy) / radius;
|
||||
}
|
||||
stickyNodes.removeIntersecting(x, y, radius, removeIntCb);
|
||||
this.draw();
|
||||
if (bounce && sounds) {
|
||||
sounds.play_bounce();
|
||||
}
|
||||
};
|
||||
|
||||
function drawBall() {
|
||||
var sx1, sy1, sx2, sy2, dx, dy, i, pct1, pct2, z1, z2;
|
||||
/* move/resize canvas element. */
|
||||
canvas_el.style.left = (x - radius) + 'px';
|
||||
canvas_el.style.top = (y - radius) + 'px';
|
||||
if (radius != lastR) {
|
||||
canvas_el.width = 2 * radius + 1;
|
||||
canvas_el.height = 2 * radius + 1;
|
||||
lastR = radius;
|
||||
}
|
||||
/* draw white circle. */
|
||||
canvas_ctx.clearRect(0, 0, 2 * radius, 2 * radius);
|
||||
canvas_ctx.fillStyle = "#fff";
|
||||
canvas_ctx.beginPath();
|
||||
canvas_ctx.arc(radius, radius, radius - 1, 0, Math.PI * 2, true);
|
||||
canvas_ctx.fill();
|
||||
/* draw outer border. */
|
||||
canvas_ctx.strokeStyle = color;
|
||||
canvas_ctx.beginPath();
|
||||
canvas_ctx.arc(radius, radius, radius - 1, 0, Math.PI * 2, true);
|
||||
canvas_ctx.stroke();
|
||||
/* draw stripes. */
|
||||
canvas_ctx.fillStyle = color;
|
||||
sx1 = radius + radius * Math.cos(th + Math.PI / 16);
|
||||
sy1 = radius + radius * Math.sin(th + Math.PI / 16);
|
||||
sx2 = radius + radius * Math.cos(th - Math.PI / 16);
|
||||
sy2 = radius + radius * Math.sin(th - Math.PI / 16);
|
||||
dx = (radius + radius * Math.cos(th + Math.PI * 15 / 16)) - sx1;
|
||||
dy = (radius + radius * Math.sin(th + Math.PI * 15 / 16)) - sy1;
|
||||
for (i = 0; i < Math.PI * 2; i += Math.PI / 7) {
|
||||
pct1 = (-Math.cos(phi + i) + 1) / 2;
|
||||
pct2 = (-Math.cos(phi + i + Math.PI / 32) + 1) / 2;
|
||||
z1 = Math.sin(phi + i);
|
||||
z2 = Math.sin(phi + i + Math.PI / 32);
|
||||
if (z1 > 0 && z2 > 0) {
|
||||
canvas_ctx.beginPath();
|
||||
canvas_ctx.moveTo(sx1 + pct1 * dx, sy1 + pct1 * dy);
|
||||
canvas_ctx.lineTo(sx1 + pct2 * dx, sy1 + pct2 * dy);
|
||||
canvas_ctx.lineTo(sx2 + pct2 * dx, sy2 + pct2 * dy);
|
||||
canvas_ctx.lineTo(sx2 + pct1 * dx, sy2 + pct1 * dy);
|
||||
canvas_ctx.fill();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if the attached object is roughly visible.
|
||||
*/
|
||||
function drawAttached(att) {
|
||||
var oth = th + att.offTh,
|
||||
ophi = phi + att.offPhi,
|
||||
ox = att.r * Math.cos(oth),
|
||||
oy = att.r * Math.sin(oth),
|
||||
dx = (att.r * Math.cos((th - att.offTh) + Math.PI)) - ox,
|
||||
dy = (att.r * Math.sin((th - att.offTh) + Math.PI)) - oy,
|
||||
pct = (-Math.cos(ophi) + 1) / 2,
|
||||
cx = ox + pct * dx,
|
||||
cy = oy + pct * dy,
|
||||
oz = att.r * Math.sin(ophi);
|
||||
if (oz < 0 && Math.sqrt(cx * cx + cy * cy) + att.diag < radius) {
|
||||
/* hidden behind circle. */
|
||||
if (att.visible) {
|
||||
att.visible = false;
|
||||
att.el.style.display = "none";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
/* attached node is visible. */
|
||||
if (!att.visible) {
|
||||
att.visible = true;
|
||||
att.el.style.display = att.display;
|
||||
}
|
||||
//att.el.style.zIndex = 500 + Math.round(oz);
|
||||
att.el.style.zIndex = (oz > 0)? 501 : 499;
|
||||
att.el.style.setProperty(
|
||||
CSS_TRANSFORM,
|
||||
'translate(' + x + 'px,' + y + 'px) ' +
|
||||
'rotate(' + th + 'rad) ' +
|
||||
'scaleX(' + Math.cos(ophi) + ') ' +
|
||||
att.attT, null);
|
||||
return true;
|
||||
}
|
||||
|
||||
function onAttachedRemoved(att) {
|
||||
attachedDiv.removeChild(att.el);
|
||||
delete att.el;
|
||||
}
|
||||
|
||||
this.draw = function () {
|
||||
var i, att, numAttachedVisible = 0;
|
||||
drawBall();
|
||||
for (i = attached.length; --i >= 0;) {
|
||||
att = attached[i];
|
||||
if (att.removeR < radius) {
|
||||
attached.splice(i, 1).map(onAttachedRemoved);
|
||||
} else if (drawAttached(att)) {
|
||||
if (++numAttachedVisible > MAX_ATTACHED_VISIBLE) {
|
||||
/* remove older items and stop. */
|
||||
attached.splice(0, i).map(onAttachedRemoved);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function preventDefault(event) {
|
||||
event.preventDefault();
|
||||
event.returnValue = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
function Game(gameDiv, stickyNodes, ballOpts) {
|
||||
var stickyNodes, player1, physicsInterval, resizeInterval, listeners = [];
|
||||
player1 = new PlayerBall(gameDiv, stickyNodes, ballOpts, false);
|
||||
player1.init();
|
||||
player1.setXY(300, 300);
|
||||
window.scrollTo(0, 200);
|
||||
|
||||
function on_resize() {
|
||||
player1.setDocSize(jQuery(document).width() - 5,
|
||||
jQuery(document).height() - 5);
|
||||
}
|
||||
on_resize();
|
||||
|
||||
/* touch events - always on? */
|
||||
document.addEventListener('touchstart', function (event) {
|
||||
if (event.touches.length === 1) {
|
||||
player1.setAccel(true);
|
||||
return preventDefault(event);
|
||||
}
|
||||
}, true);
|
||||
document.addEventListener('touchmove', function (event) {
|
||||
player1.setAccelTarget(event.touches[0].pageX,
|
||||
event.touches[0].pageY);
|
||||
}, true);
|
||||
document.addEventListener('touchend', function (event) {
|
||||
if (event.touches.length === 0) {
|
||||
player1.setAccel(false);
|
||||
return preventDefault(event);
|
||||
}
|
||||
}, true);
|
||||
|
||||
if (ballOpts.MOUSEB !== -5) {
|
||||
/* mouse buttons */
|
||||
document.addEventListener('mousemove', function (event) {
|
||||
player1.setAccelTarget(event.pageX, event.pageY);
|
||||
}, true);
|
||||
document.addEventListener('mousedown', function (event) {
|
||||
if (event.button === ballOpts.MOUSEB) {
|
||||
player1.setAccel(true);
|
||||
return preventDefault(event);
|
||||
}
|
||||
}, true);
|
||||
document.addEventListener('mouseup', function (event) {
|
||||
if (event.button === ballOpts.MOUSEB) {
|
||||
player1.setAccel(false);
|
||||
return preventDefault(event);
|
||||
}
|
||||
}, true);
|
||||
|
||||
if (ballOpts.MOUSEB === 0) {
|
||||
/* block click events. */
|
||||
document.addEventListener('click', function (event) {
|
||||
if (event.button === 0) {
|
||||
return preventDefault(event);
|
||||
}
|
||||
}, true);
|
||||
} else if (ballOpts.MOUSEB === 2) {
|
||||
/* block right-click context menu. */
|
||||
document.addEventListener('contextmenu', preventDefault, true);
|
||||
}
|
||||
}
|
||||
|
||||
physicsInterval = setInterval(function () {
|
||||
player1.updatePhysics();
|
||||
}, 25);
|
||||
resizeInterval = setInterval(on_resize, 1000);
|
||||
}
|
||||
|
||||
function whenAllLoaded(gameDiv, popup, stickyNodes) {
|
||||
stickyNodes.finalize(jQuery(document).width(), jQuery(document).height());
|
||||
jQuery('#loadingp').empty();
|
||||
jQuery('<button>Start!</button>').click(function () {
|
||||
var game, bgmusic, ballOpts;
|
||||
if (jQuery('#bgmusicc').attr('checked')) {
|
||||
if (!(bgmusic = document.getElementById('khbgmusic'))) {
|
||||
bgmusic = document.createElement('audio');
|
||||
bgmusic.id = 'khbgmusic';
|
||||
bgmusic.loop = 'loop';
|
||||
bgmusic.src = 'http://kathack.com/js/katamari.mp3';
|
||||
gameDiv.appendChild(bgmusic);
|
||||
}
|
||||
bgmusic.play();
|
||||
}
|
||||
ballOpts = {
|
||||
color: jQuery('#khcolor').val(),
|
||||
VOL_MULT: parseFloat(jQuery('#vol_mult').val()),
|
||||
MAX_ATTACHED_VISIBLE: parseInt(jQuery('#maxAtt').val(), 10),
|
||||
CHECK_VOLS: (jQuery('#checkv').attr('checked'))? true : false,
|
||||
MOUSEB: parseInt(jQuery('#mouseb').val(), 10)
|
||||
};
|
||||
gameDiv.removeChild(popup);
|
||||
game = new Game(gameDiv, stickyNodes, ballOpts);
|
||||
}).appendTo('#loadingp');
|
||||
}
|
||||
|
||||
function buildPopup(gameDiv) {
|
||||
var d = document.createElement('div'), b;
|
||||
d.style.cssText = '\
|
||||
position: fixed;\
|
||||
left: 50%;\
|
||||
top: 50%;\
|
||||
width: 400px;\
|
||||
margin-left:-200px;\
|
||||
margin-top:-150px;\
|
||||
border:1px solid black;\
|
||||
background-color:white;\
|
||||
color:black;\
|
||||
padding:20px;\
|
||||
font-size:13px;\
|
||||
text-align:left;\
|
||||
z-index:501;';
|
||||
d.innerHTML = '<h1 style="font-size:16pt">\
|
||||
<a href="http://kathack.com/" style="color:blue;text-decoration:none;">\
|
||||
Katamari!</a></h1>\
|
||||
<button style="position:absolute;top:0;right:0;">X</button>\
|
||||
<p>Controls: Hold down <b><select id="mouseb">\
|
||||
<option value="0">Left-Click</option>\
|
||||
<option value="2" selected="selected">Right-Click</option>\
|
||||
<option value="-5">Touch</option>\
|
||||
</select></b> to control the ball!</p>\
|
||||
<div><label>Background Music? \
|
||||
<input id="bgmusicc" type="checkbox" checked="checked" /></label></div>\
|
||||
<div style="text-align:right; color:gray;">\
|
||||
<label>Katamari Color: <select id="khcolor">\
|
||||
<option value="#ff0000" style="background-color:#ff0000;color:#ff0000"> r </option>\
|
||||
<option value="#00ff00" style="background-color:#00ff00;color:#00ff00"> g </option>\
|
||||
<option value="#0000ff" style="background-color:#0000ff;color:#0000ff"> b </option>\
|
||||
<option selected="selected" value="#7D26CD" style="background-color:#7D26CD;color:#7D26CD"> p \
|
||||
</option></select></label><br />\
|
||||
<label title="Lower this if the game gets slow.">\
|
||||
Max Attached Objects: <select id="maxAtt">\
|
||||
<option>25</option>\
|
||||
<option>50</option>\
|
||||
<option selected="selected">75</option>\
|
||||
<option>100</option>\
|
||||
<option>9000</option></select></label><br />\
|
||||
<label title="How much to grow when an object is picked up.">\
|
||||
Growth Speed: <input id="vol_mult" type="text" size="6" value="1.0" />\
|
||||
</label><br />\
|
||||
<label title="Bigger objects require a bigger katamari to pick up.">\
|
||||
Realistic Pickups? <input id="checkv" type="checkbox" checked="checked" />\
|
||||
</label></div>\
|
||||
<p id="loadingp">Loading!</p>';
|
||||
gameDiv.appendChild(d);
|
||||
d.getElementsByTagName('button')[0].addEventListener('click', function () {
|
||||
gameDiv.removeChild(d);
|
||||
}, true);
|
||||
return d;
|
||||
}
|
||||
|
||||
function main() {
|
||||
var gameDiv, checkInterval, stickyNodes, popup;
|
||||
|
||||
gameDiv = document.createElement('div');
|
||||
gameDiv.khIgnore = true;
|
||||
document.body.appendChild(gameDiv);
|
||||
popup = buildPopup(gameDiv);
|
||||
|
||||
/* setTimeout so that the popup displays before we freeze. */
|
||||
setTimeout(function () {
|
||||
var i, len, el;
|
||||
window.khNodes.addWords(document.body);
|
||||
for (i = 0, len = document.body.childNodes.length; i < len; i++) {
|
||||
el = document.body.childNodes[i];
|
||||
window.khNodes.addTagNames(el, [
|
||||
'button', 'canvas', 'iframe', 'img', 'input', 'select',
|
||||
'textarea'
|
||||
]);
|
||||
}
|
||||
|
||||
checkInterval = setInterval(function () {
|
||||
if (window.jQuery) {
|
||||
clearInterval(checkInterval);
|
||||
whenAllLoaded(gameDiv, popup, window.khNodes);
|
||||
}
|
||||
}, 100);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
if (!window.noMain) {
|
||||
main();
|
||||
}
|
164
js/main.js
Normal file
@ -0,0 +1,164 @@
|
||||
var interval;
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
if (localStorage.getItem("theme")) {
|
||||
localStorage.setItem("selenite.theme", localStorage.getItem("theme"));
|
||||
localStorage.removeItem("theme");
|
||||
}
|
||||
if (localStorage.getItem("selenite.theme")) {
|
||||
document.body.setAttribute("theme", localStorage.getItem("selenite.theme"));
|
||||
} else {
|
||||
document.body.setAttribute("theme", "main");
|
||||
}
|
||||
if (document.querySelectorAll("[id=adcontainer]")) {
|
||||
for (let i = 0; i < document.querySelectorAll("[id=adcontainer]").length; i++) {
|
||||
if (Math.random() < 0.5 || localStorage.getItem("selenite.adblock") == "true") document.querySelectorAll("[id=adcontainer]")[i].innerHTML = "";
|
||||
}
|
||||
}
|
||||
const iconSetting = document.querySelector("input#discordIcon");
|
||||
const blockClose = document.querySelector("input#blockClose");
|
||||
const openBlank = document.getElementById("blank");
|
||||
const bgTheme = document.querySelector("input#bgTheme");
|
||||
// if (document.querySelector("widgetbot-crate")) {
|
||||
// if (localStorage.getItem("selenite.discordIcon") == "true") {
|
||||
// const widget = document.querySelector("widgetbot-crate");
|
||||
// widget.setAttribute("style", "display:none");
|
||||
// }
|
||||
// }
|
||||
if (document.querySelector("input#discordIcon")) {
|
||||
if (localStorage.getItem("selenite.discordIcon") == "true") {
|
||||
iconSetting.checked = true;
|
||||
}
|
||||
iconSetting.addEventListener("click", () => {
|
||||
localStorage.setItem("selenite.discordIcon", iconSetting.checked);
|
||||
});
|
||||
}
|
||||
if (document.querySelector("input#blockClose")) {
|
||||
if (localStorage.getItem("selenite.blockClose") == "true") {
|
||||
blockClose.checked = true;
|
||||
}
|
||||
blockClose.addEventListener("click", () => {
|
||||
localStorage.setItem("selenite.blockClose", blockClose.checked);
|
||||
});
|
||||
}
|
||||
if (document.querySelector("input#tabDisguise")) {
|
||||
if (localStorage.getItem("selenite.tabDisguise") == "true") {
|
||||
tabDisguise.checked = true;
|
||||
}
|
||||
tabDisguise.addEventListener("click", () => {
|
||||
localStorage.setItem("selenite.tabDisguise", tabDisguise.checked);
|
||||
});
|
||||
}
|
||||
if (document.querySelector("input#bgTheme")) {
|
||||
bgTheme.checked = true;
|
||||
}
|
||||
document.getElementById("blank").addEventListener("click", () => {
|
||||
win = window.open();
|
||||
win.document.body.style.margin = "0";
|
||||
win.document.body.style.height = "100vh";
|
||||
html = `
|
||||
<style>*{margin:0;padding:0;border:none}body,iframe{height:100vh;width:100vw}iframe{height:96vh}header{display:flex;height:4vh;justify-content:center;}button{margin-right:100px;height:100%;aspect-ratio: 1 / 1}#reload{background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 -960 960 960' width='24'%3E%3Cpath d='M480-160q-134 0-227-93t-93-227q0-134 93-227t227-93q69 0 132 28.5T720-690v-110h80v280H520v-80h168q-32-56-87.5-88T480-720q-100 0-170 70t-70 170q0 100 70 170t170 70q77 0 139-44t87-116h84q-28 106-114 173t-196 67Z'/%3E%3C/svg%3E");background-size:cover;}#goBack{background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='24' viewBox='0 -960 960 960' width='24'%3E%3Cpath d='M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z'/%3E%3C/svg%3E");background-size:cover;}</style><script>
|
||||
</script><header><button id=goBack></button><button id=reload></button></header><iframe id=selenite></iframe>`;
|
||||
win.document.querySelector("html").innerHTML = html;
|
||||
win.eval(`let selenite = document.getElementById("selenite");console.log(selenite);selenite.setAttribute("src", "${location.origin}");console.log(selenite);document.getElementById("goBack").addEventListener("click", function () {selenite.contentDocument.location.href = selenite.contentDocument.location.origin;});document.getElementById("reload").addEventListener("click", function () {selenite.contentDocument.location.href = selenite.contentDocument.location.href;})`);
|
||||
location.href = "https://google.com";
|
||||
close();
|
||||
});
|
||||
if ($("#panicmode").length > 0) {
|
||||
$("#panicmode").prop({ href: panicurl });
|
||||
}
|
||||
if ($(".seleniteminified").length > 0) {
|
||||
$.get("https://raw.githubusercontent.com/skysthelimitt/selenite-optimized/main/build/bookmark.txt", function (data) {
|
||||
$(".seleniteminified").prop({ href: data });
|
||||
});
|
||||
$.get("https://raw.githubusercontent.com/car-axle-client/car-axle-client/v10/dist/build.js", function (data) {
|
||||
$(".caraxle").prop({ href: `javascript:${encodeURI(data)}` });
|
||||
});
|
||||
}
|
||||
});
|
||||
function setPanicMode() {
|
||||
if (!$("#panic").val().startsWith("https")) {
|
||||
document.cookie = "panicurl=https://" + $("#panic").val();
|
||||
return;
|
||||
}
|
||||
|
||||
document.cookie = "panicurl=" + $("#panic").val();
|
||||
}
|
||||
function copyToClipboard(text) {
|
||||
navigator.clipboard.writeText(text);
|
||||
alert("Copied text!");
|
||||
}
|
||||
function setTheme(theme) {
|
||||
localStorage.setItem("selenite.theme", theme);
|
||||
document.body.setAttribute("theme", theme);
|
||||
if (theme != "custom") {
|
||||
document.getElementById("customMenu").style.display = "none";
|
||||
document.body.style = "";
|
||||
}
|
||||
}
|
||||
function setPanicMode() {
|
||||
if (!$("#panic").val().startsWith("https")) {
|
||||
document.cookie = "panicurl=https://" + $("#panic").val();
|
||||
return;
|
||||
}
|
||||
document.cookie = "panicurl=" + $("#panic").val();
|
||||
}
|
||||
function setPassword() {
|
||||
localStorage.setItem("selenite.password", enc.encode(document.getElementById("pass").value));
|
||||
}
|
||||
function delPassword() {
|
||||
location.hash = "";
|
||||
localStorage.removeItem("selenite.passwordAtt");
|
||||
localStorage.removeItem("selenite.password");
|
||||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
if (!window.location.href.startsWith("about:")) {
|
||||
$("#webicon").attr("placeholder", window.location.href.replace(/\/[^\/]*$/, "/"));
|
||||
}
|
||||
});
|
||||
function loadScript(a, b) {
|
||||
var c = document.createElement("script");
|
||||
(c.type = "text/javascript"), (c.src = a), (c.onload = b), document.head.appendChild(c);
|
||||
}
|
||||
function toast(message, onclick) {
|
||||
const toast = document.createElement("div");
|
||||
toast.setAttribute("id", "toast");
|
||||
console.log(message.time);
|
||||
toast.innerHTML = `<div class=samerow><h1>${message.title}${message.time ? ` - ${timeAgo(new Date(message.time * 1000))}` : ""}</h1></div><p>${message.message}</p>`;
|
||||
toast.style.animation = "toastFade 6s";
|
||||
document.body.appendChild(toast);
|
||||
if (onclick) {
|
||||
toast.addEventListener("click", onclick);
|
||||
toast.style.cursor = "pointer";
|
||||
}
|
||||
setTimeout(() => {
|
||||
toast.remove();
|
||||
}, 6000);
|
||||
}
|
||||
function timeAgo(input) {
|
||||
const date = input instanceof Date ? input : new Date(input);
|
||||
const formatter = new Intl.RelativeTimeFormat("en");
|
||||
const ranges = {
|
||||
years: 3600 * 24 * 365,
|
||||
months: 3600 * 24 * 30,
|
||||
weeks: 3600 * 24 * 7,
|
||||
days: 3600 * 24,
|
||||
hours: 3600,
|
||||
minutes: 60,
|
||||
seconds: 1,
|
||||
};
|
||||
const secondsElapsed = (date.getTime() - Date.now()) / 1000;
|
||||
for (let key in ranges) {
|
||||
if (ranges[key] < Math.abs(secondsElapsed)) {
|
||||
const delta = secondsElapsed / ranges[key];
|
||||
return formatter.format(Math.round(delta), key);
|
||||
}
|
||||
}
|
||||
}
|
||||
let cookieConsentScript = document.createElement("script");
|
||||
cookieConsentScript.src = "/js/cookieConsent.js";
|
||||
document.head.appendChild(cookieConsentScript);
|
||||
let cookieConsentStyle = document.createElement("link");
|
||||
cookieConsentStyle.href = "/js/cookieConsent.css";
|
||||
cookieConsentStyle.rel = "stylesheet";
|
||||
document.head.appendChild(cookieConsentStyle);
|
69
js/oldstuff.js
Normal file
@ -0,0 +1,69 @@
|
||||
|
||||
// if (location.hash) {
|
||||
// let temp;
|
||||
// if(!location.pathname.includes("gba")) {
|
||||
// localStorage.setItem("selenite.password", location.hash.substring(1));
|
||||
// if (JSON.parse(localStorage.getItem("selenite.passwordAtt"))) {
|
||||
// if (JSON.parse(localStorage.getItem("selenite.passwordAtt"))[0] == true && Math.floor(Date.now() / 1000) - JSON.parse(localStorage.getItem("selenite.passwordAtt"))[1] < 600) {
|
||||
// console.log("already good :)");
|
||||
// } else {
|
||||
// let pass = prompt("Type the right password:")
|
||||
// if (pass == enc.decode(location.hash.substring(1)) || pass == "tempgbafix") {
|
||||
// localStorage.setItem("selenite.passwordAtt", `[true,${Math.floor(Date.now() / 1000)}]`);
|
||||
// console.log("Correct password!");
|
||||
// } else {
|
||||
// localStorage.setItem("selenite.passwordAtt", `[false,${Math.floor(Date.now() / 1000)}]`);
|
||||
// location.href = "https://google.com";
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// let pass = prompt("Type the right password:")
|
||||
// if (pass == enc.decode(location.hash.substring(1)) || pass == "tempgbafix") {
|
||||
// localStorage.setItem("selenite.passwordAtt", `[true,${Math.floor(Date.now() / 1000)}]`);
|
||||
// console.log("Correct password!");
|
||||
// } else {
|
||||
// localStorage.setItem("selenite.passwordAtt", `[false,${Math.floor(Date.now() / 1000)}]`);
|
||||
// location.href = "https://google.com";
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if(localStorage.getItem("selenite.password") && !location.hash) {
|
||||
alert("password, but no hash");
|
||||
}
|
||||
if (location.hash) {
|
||||
function isSeleniteHash(hash) {
|
||||
try {
|
||||
decodedHash = enc.decode(hash);
|
||||
JSON.parse(decodedHash);
|
||||
return true;
|
||||
} catch {
|
||||
console.error("failed :(");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
function tryPass(password) {
|
||||
let passAttempt = prompt("Type your Selenite password:");
|
||||
if(localStorage.getItem("selenite.password")) {
|
||||
if(passAttempt == password) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
localStorage.setItem("selenite.password", enc.encode(password));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (isSeleniteHash(location.hash.substring(1))) {
|
||||
decodedHash = JSON.parse(enc.decode(location.hash.substring(1)));
|
||||
if (decodedHash["selenite"]) {
|
||||
if (decodedHash["pass"]) {
|
||||
tryPass(decodedHash["pass"]);
|
||||
}
|
||||
if (decodedHash["theme"]) {
|
||||
if (changeTheme) {
|
||||
alert("theme detected!!");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
31
js/savedownload.js
Normal file
@ -0,0 +1,31 @@
|
||||
var s = document.createElement("script");
|
||||
function getMainSave() {
|
||||
alert(
|
||||
"Thank you for using the Selenite Backup Utility! You can transfer your data to https://selenite.cc or use the Selenite Uploader Utility!"
|
||||
);
|
||||
var e = {},
|
||||
a = Object.entries(localStorage);
|
||||
(a = btoa(JSON.stringify(a))), (e.localStorage = a);
|
||||
var t = document.cookie;
|
||||
return (
|
||||
(t = btoa(t)),
|
||||
(e.cookies = t),
|
||||
(e = btoa(JSON.stringify(e))),
|
||||
(e = CryptoJS.AES.encrypt(e, "egamepass").toString())
|
||||
);
|
||||
}
|
||||
function downloadMainSave() {
|
||||
var e = new Blob([getMainSave()]),
|
||||
a = window.URL.createObjectURL(e),
|
||||
t = document.createElement("a");
|
||||
(t.href = a),
|
||||
(t.download = "your.selenite.save"),
|
||||
t.click(),
|
||||
URL.revokeObjectURL(a);
|
||||
}
|
||||
(s.src =
|
||||
"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"),
|
||||
document.head.appendChild(s);
|
||||
s.onload = function () {
|
||||
downloadMainSave();
|
||||
};
|
28
js/search.js
Normal file
@ -0,0 +1,28 @@
|
||||
function searchGames() {
|
||||
search = 1;
|
||||
var txt = $("#gamesearch").val();
|
||||
if (txt == "") {
|
||||
$("#games .suggest").show();
|
||||
} else {
|
||||
$("#games .suggest").hide();
|
||||
}
|
||||
$("#games .game").hide();
|
||||
$("#games .game").each(function () {
|
||||
if ($(this).text().toUpperCase().indexOf(txt.toUpperCase()) != -1 || $(this).attr("id").toUpperCase().indexOf(txt.toUpperCase()) != -1) {
|
||||
$(this).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
let urlParams = new URLSearchParams(window.location.search);
|
||||
let q = urlParams.get("q");
|
||||
if (q) {
|
||||
document.getElementById("gamesearch").value = q;
|
||||
searchGames();
|
||||
urlParams.delete("q");
|
||||
window.history.replaceState({}, document.title, location.pathname);
|
||||
}
|
||||
document.getElementById("gamesearch").addEventListener("input", () => {
|
||||
searchGames();
|
||||
});
|
||||
});
|
86
js/themes.js
Normal file
@ -0,0 +1,86 @@
|
||||
function customTheme() {
|
||||
localStorage.setItem("selenite.theme", "custom");
|
||||
document.body.setAttribute("theme", "custom");
|
||||
document.getElementById("customMenu").style.display = "block";
|
||||
loadTheme();
|
||||
}
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
loadTheme();
|
||||
if(localStorage.getItem("selenite.theme") == "custom"){
|
||||
document.getElementById("customMenu").style.display = "block";
|
||||
document.getElementById("inputbg").value = getComputedStyle(document.body).getPropertyValue("--inputbg");
|
||||
document.getElementById("uibg").value = getComputedStyle(document.body).getPropertyValue("--uibg");
|
||||
document.getElementById("textcolor").value = getComputedStyle(document.body).getPropertyValue("--textcolor");
|
||||
document.getElementById("bg").value = getComputedStyle(document.body).getPropertyValue("--bg");
|
||||
if(getComputedStyle(document.body).getPropertyValue("--bg").includes("url")){
|
||||
document.getElementById("bgimg").value = getComputedStyle(document.body).getPropertyValue("--bg").replace("url(", "").replace(")", "");
|
||||
document.getElementById("bg").value = "#000000";
|
||||
} else {
|
||||
document.getElementById("bg").value = getComputedStyle(document.body).getPropertyValue("--bg");
|
||||
}
|
||||
};
|
||||
if(location.pathname.includes("/settings")) {
|
||||
document.getElementById("inputbg").addEventListener("change", (e) => {
|
||||
changeTheme("inputbg", e.target.value);
|
||||
});
|
||||
document.getElementById("inputborder").addEventListener("change", (e) => {
|
||||
changeTheme("inputborder", e.target.value);
|
||||
});
|
||||
document.getElementById("uibg").addEventListener("change", (e) => {
|
||||
changeTheme("uibg", e.target.value);
|
||||
});
|
||||
document.getElementById("textcolor").addEventListener("change", (e) => {
|
||||
changeTheme("textcolor", e.target.value);
|
||||
});
|
||||
document.getElementById("bg").addEventListener("change", (e) => {
|
||||
changeTheme("bg", e.target.value);
|
||||
});
|
||||
document.getElementById("bgimg").addEventListener("keydown", (e) => {
|
||||
if (e.key == "Enter") {
|
||||
changeTheme("bg", e.target.value);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
function loadTheme() {
|
||||
if (localStorage.getItem("selenite.theme") == "custom") {
|
||||
let theme = localStorage.getItem("selenite.customTheme");
|
||||
if (theme) {
|
||||
theme = JSON.parse(theme);
|
||||
for (let i = 0; i < Object.keys(theme).length; i++) {
|
||||
document.body.style.setProperty(`--${Object.keys(theme)[i]}`, eval(`theme.${Object.keys(theme)[i]} `));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function changeTheme(name, value) {
|
||||
if(isValidHttpUrl(value)){
|
||||
value = `url(${value})`;
|
||||
}
|
||||
ogStyle = localStorage.getItem("selenite.customTheme");
|
||||
if (ogStyle) {
|
||||
ogStyle = JSON.parse(ogStyle);
|
||||
ogStyle[name] = value;
|
||||
localStorage.setItem("selenite.customTheme", JSON.stringify(ogStyle));
|
||||
loadTheme();
|
||||
} else {
|
||||
ogStyle = {};
|
||||
ogStyle[name] = value;
|
||||
localStorage.setItem("selenite.customTheme", JSON.stringify(ogStyle));
|
||||
loadTheme();
|
||||
}
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/a/43467144
|
||||
function isValidHttpUrl(string) {
|
||||
let url;
|
||||
|
||||
try {
|
||||
url = new URL(string);
|
||||
} catch (_) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return url.protocol === "http:" || url.protocol === "https:";
|
||||
}
|
5
js/ultimatetabcloak.js
Normal file
@ -0,0 +1,5 @@
|
||||
var l = document.querySelector("link[rel*='icon']") || document.createElement("link");
|
||||
l.type = "image/x-icon";
|
||||
l.rel = "shortcut icon";
|
||||
var c = prompt("Select a tab cloak\n1. Canvas\n2. e-hallpass\n3. New Tab");
|
||||
1 == c ? ((l.href = "https://harrisonburg.instructure.com/favicon.ico"), (document.title = "Dashboard")) : 2 == c ? ((l.href = "https://eduspiresolutions.org/wp-content/uploads/2020/09/cropped-favicon-270x270-1-150x150.png"), (document.title = "Digital Hall Pass | e-Hall Pass | Eduspire Solutions")) : 3 == c && ((l.href = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/UlEQVR42q2S0Q3CMAxEGYERGIFP1FJ0JEXikw1gA9gANqAbwCaMwAgdoSNAHpVRE7UIISKd1Dq+s33O6O9H0ngudyzk67n8o0V5z+UvM60nH8kL+W0gNJAG0ORyh15yJrcj6RtQaKj1V/VQhfb3M2kyhIgckqtWoDxBJiHTakoc2Ozh/ogXIOoCkwqVZ0QK+Q2ExIsGQea3WBCp3wIWJKn9X1Y9s1d01o2lAuD2k0C8cymTpmYo4BtyvCl373pw6s6GBxDMRATTQsR7V2giuIwId7aBtKOvHhJC6VZylf2vkTXFnbi6jfurVS5CodGnY7Njkr0JZscnG+ev5wl1Bukqc4CB7gAAAABJRU5ErkJggg=="), (document.title = "New Tab"));
|
48
js/uploaddownload.js
Normal file
@ -0,0 +1,48 @@
|
||||
var s = document.createElement("script");
|
||||
function getMainSaveFromUpload(data) {
|
||||
data = CryptoJS.AES.decrypt(data, "egamepass").toString(CryptoJS.enc.Utf8);
|
||||
|
||||
// Parse the decrypted data as JSON
|
||||
var mainSave = JSON.parse(atob(data));
|
||||
var mainLocalStorageSave = JSON.parse(atob(mainSave.localStorage));
|
||||
var cookiesSave = atob(mainSave.cookies);
|
||||
|
||||
// Set the items in localStorage using the uploaded data
|
||||
for (let item of mainLocalStorageSave) {
|
||||
localStorage.setItem(item[0], item[1]);
|
||||
}
|
||||
|
||||
// Set the cookies using the uploaded data
|
||||
document.cookie = cookiesSave;
|
||||
}
|
||||
|
||||
// Function to handle the file upload
|
||||
function uploadMainSave() {
|
||||
document.body.innerHTML +=
|
||||
'<input class="hiddenUpload" type="file" accept=".save"/>';
|
||||
var hiddenUpload = document.querySelector(".hiddenUpload");
|
||||
|
||||
// Listen for the change event on the file input element
|
||||
hiddenUpload.addEventListener("change", function (e) {
|
||||
var files = e.target.files;
|
||||
var file = files[0];
|
||||
if (!file) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Read the contents of the uploaded file as text and call getMainSaveFromUpload with the result
|
||||
var reader = new FileReader();
|
||||
|
||||
reader.onload = function (e) {
|
||||
getMainSaveFromUpload(e.target.result);
|
||||
};
|
||||
|
||||
reader.readAsText(file);
|
||||
});
|
||||
}
|
||||
(s.src =
|
||||
"https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"),
|
||||
document.head.appendChild(s);
|
||||
s.onload = function () {
|
||||
uploadMainSave();
|
||||
};
|
25
js/widget.js
Normal file
@ -0,0 +1,25 @@
|
||||
let firstLoadWidget = 1;
|
||||
let widgetOpen = 0;
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
let button = document.createElement("button");
|
||||
button.setAttribute("id", "discord");
|
||||
document.body.appendChild(button);
|
||||
button.addEventListener("click", () => {
|
||||
if(firstLoadWidget) {
|
||||
toast({ title: "Do you want to load Discord?", message: "This may be blocked in certain schools.\nClick here to load Discord." }, loadWidget);
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
function loadWidget() {
|
||||
if(firstLoadWidget) {
|
||||
firstLoadWidget = 0;
|
||||
loadScript("https://cdn.jsdelivr.net/npm/@widgetbot/crate@3", loadCrate);
|
||||
}
|
||||
}
|
||||
function loadCrate() {
|
||||
new Crate({server: '1148719137238040606',channel: '1173731814196645909', color: "#00000000", glyph: ["data:;base64,=", "100%"]});
|
||||
crate.toggle(true);
|
||||
let element = document.querySelector('[aria-label="Discord chat embed"]');
|
||||
element.remove();
|
||||
}
|
77
loader.html
Normal file
@ -0,0 +1,77 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<meta content="Selenite" property="og:title" />
|
||||
<meta content="Selenite is the best unblocked games site. With over 400 games, an account system, and a free AI chat bot, no other websites come close to Selenite." property="og:description" />
|
||||
<meta content="/favicon.png" property="og:image" />
|
||||
<meta content="#c77dff" data-react-helmet="true" name="theme-color" />
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
if (document.location.hash) {
|
||||
let game = JSON.parse(decodeURIComponent(atob(document.location.hash.substring(1))));
|
||||
document.getElementById("gameFrame").setAttribute("src", `/semag/${game[0]}/index.html`);
|
||||
document.getElementById("gameImage").setAttribute("src", `/semag/${game[0]}/${decodeURIComponent(game[1])}`);
|
||||
document.getElementById("gameName").innerText = game[2];
|
||||
localStorage.setItem("selenite.lastGame", document.location.hash.substring(1))
|
||||
document.location.hash = '';
|
||||
} else if(localStorage.getItem("selenite.lastGame")) {
|
||||
let game = JSON.parse(decodeURIComponent(atob(localStorage.getItem("selenite.lastGame"))));
|
||||
document.getElementById("gameFrame").setAttribute("src", `/semag/${game[0]}/index.html`);
|
||||
document.getElementById("gameImage").setAttribute("src", `/semag/${game[0]}/${decodeURIComponent(game[1])}`);
|
||||
document.getElementById("gameName").innerText = game[2];
|
||||
}
|
||||
document.getElementById("fullscreen").addEventListener("click", () => {
|
||||
|
||||
})
|
||||
});
|
||||
</script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
</head>
|
||||
<alerts> </alerts>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg" /></a>
|
||||
</header>
|
||||
<main>
|
||||
<div id="gamecontainer">
|
||||
<iframe id="gameFrame" allow="fullscreen" sandbox="allow-downloads allow-forms allow-modals allow-pointer-lock allow-scripts allow-same-origin"></iframe>
|
||||
<div id="infobox">
|
||||
<img id="gameImage" src="favicon.png" />
|
||||
<h2 id="gameName">Selenite</h2>
|
||||
<div class="opposite">
|
||||
<img class="button" id="fullscreen" src="/img/fullscreen.svg">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer class="noscroll">
|
||||
<a href="gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
21
manifest.json
Normal file
@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "Selenite",
|
||||
"short_name": "Selenite",
|
||||
"start_url": "index.html",
|
||||
"scope": "./",
|
||||
"icons": [
|
||||
{
|
||||
"src": "img/selenite192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png"
|
||||
},
|
||||
{
|
||||
"src": "img/selenite.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png"
|
||||
}
|
||||
],
|
||||
"theme_color": "#ffffff",
|
||||
"background_color": "#10002b",
|
||||
"display": "standalone"
|
||||
}
|
169
new selenite.svg
Normal file
After Width: | Height: | Size: 215 KiB |
10
package.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"name": "Bigfoot Games",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"start": "node index.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"express": "^4.17.1"
|
||||
}
|
||||
}
|
112
projects.html
Normal file
@ -0,0 +1,112 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/games.js"></script>
|
||||
<script src="/js/search.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/cookie.js"></script>
|
||||
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Projects | Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3415518411898563"
|
||||
crossorigin="anonymous"></script>
|
||||
<script></script>
|
||||
</head>
|
||||
<alerts>
|
||||
<div id="toast"></div>
|
||||
<script>
|
||||
$.getJSON("data/changelog.json", (data) => {
|
||||
if (localStorage.getItem("selenite.version") != data.version) {
|
||||
toast({ title: "New Update!", message: data.desc, time: data.timestamp });
|
||||
localStorage.setItem("selenite.version", data.version);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</alerts>
|
||||
<body>
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main>
|
||||
<h3 id="popunder" style="display: none;">You may be redirected upon clicking on the screen. This is an ad. <a style="font-size: inherit;" href="ad.html">Learn more.</a></h3>
|
||||
<input class="hiddenUpload" type="file" accept=".save" hidden />
|
||||
|
||||
<input type="text" class="searchbar" id="gamesearch" placeholder="Type here to search.." />
|
||||
<div class="samerow">
|
||||
<sl-tooltip content="Remember to download your save, so you don't lose your progress." trigger="manual" class="manual-tooltip">
|
||||
<button onclick="downloadMainSave()">Download Save</button>
|
||||
</sl-tooltip>
|
||||
<button id="upload" onclick="uploadMainSave()">Upload Save</button>
|
||||
</div>
|
||||
<div class="samerow">
|
||||
<button id="random" onclick="selectRandomGame()">Play a random game!</button>
|
||||
<button id="category" onclick="categoryChanger()">Game Categories</button>
|
||||
</div>
|
||||
|
||||
<h2>Starred Games</h2>
|
||||
<p id="pinnedmessage">Star some games for things to show up here!</p>
|
||||
<div id="pinned"></div>
|
||||
|
||||
<h2>All Games</h2>
|
||||
<div id="games">
|
||||
<a href="/suggest.html"
|
||||
><div class="suggest">
|
||||
<img src="img/addlink.svg" alt="Add Game logo" style="filter: invert(1) !important" />
|
||||
<h1>Suggest a game!</h1>
|
||||
</div></a
|
||||
>
|
||||
<p id="message">games loading..</p>
|
||||
<p id="message">games not loading? click ctrl + shift + r</p>
|
||||
<button id="message" onclick='$.getJSON("/data/games.json", function (data) {loadGames(data)})'>Games not loading? Click here.</button>
|
||||
</div>
|
||||
<br />
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const adContainers = document.querySelectorAll("[id=adcontainer]");
|
||||
if (adContainers.length > 0) {
|
||||
for (let i = 0; i < adContainers.length; i++) {
|
||||
if (Math.random() < 0.5 && localStorage.getItem("selenite.adblock") != "true") {
|
||||
adContainers[i].innerHTML = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
2
robots.txt
Normal file
@ -0,0 +1,2 @@
|
||||
User-agent: *
|
||||
Allow: /
|
153
settings.html
Normal file
@ -0,0 +1,153 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
<script src="/js/cloaks.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Settings | Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<h1>Settings</h1>
|
||||
<form action="javascript:setCloakCookie();">
|
||||
<h3>Website Name</h3>
|
||||
<input type="text" id="webname" name="webname" placeholder="Selenite" /><br />
|
||||
<h3>Website Icon</h3>
|
||||
<input type="text" id="webicon" name="webicon" placeholder="https://selenite.cc/" /><br />
|
||||
<h3>Or select a preset:</h3>
|
||||
<select id="presetCloaks">
|
||||
<option>Select a preset:</option>
|
||||
<option value="google">Google</option>
|
||||
<option value="ddg">DuckDuckGo</option>
|
||||
<option value="canvas">Canvas</option>
|
||||
<option value="desmos">Desmos</option>
|
||||
<option value="drive">Google Drive</option>
|
||||
<option value="classroom">Google Classroom</option>
|
||||
<option value="newtab">New Tab</option>
|
||||
<option value="docs">Google Docs</option>
|
||||
<option value="edpuzzle">Edpuzzle</option>
|
||||
<option value="khan">Khan Academy</option>
|
||||
<option value="quizlet">Quizlet</option>
|
||||
<option value="schoology">Schoology</option>
|
||||
</select><br />
|
||||
<input id="websubmit" class="submit" type="submit" value="Set Tab Cloak" />
|
||||
</form>
|
||||
<button onclick="javascript:clearCloak();">Clear your current tab cloak</button>
|
||||
<br />
|
||||
<div class="samerow">
|
||||
<input type="checkbox" id="discordIcon" name="discordIcon">
|
||||
<label for="discordIcon">Disable Discord Icon</label><br>
|
||||
</div>
|
||||
<div class="samerow">
|
||||
<input type="checkbox" id="blockClose" name="blockClose">
|
||||
<label for="blockClose">Block tab from being closed</label><br>
|
||||
</div>
|
||||
<div class="samerow">
|
||||
<input type="checkbox" id="tabDisguise" name="tabDisguise">
|
||||
<label for="tabDisguise">Disguise your tab when you click off (currently only Google)</label><br>
|
||||
</div>
|
||||
<h3>Themes</h3>
|
||||
<div class="samerow">
|
||||
<input type="checkbox" id="bgTheme" name="bgTheme">
|
||||
<label for="bgTheme">Background:</label><br>
|
||||
</div>
|
||||
<div class="samerow themebtns">
|
||||
<button onclick="setTheme('main')" style="background-color: #3c096c; color: #fff; border: 5px solid #5a189a">selenite</button>
|
||||
<button onclick="setTheme('mainnew')" style="background-color: #3c096c; color: #fff; border: 5px solid #5a189a">selenite 2.0</button>
|
||||
<button onclick="setTheme('light')" style="background-color: #bbbbbb; color: #1a1a1a; border: 5px solid #e6e6e6">light mode</button>
|
||||
<button onclick="setTheme('dark')" style="background-color: #333333; color: #fff; border: 5px solid #444444">dark mode</button>
|
||||
<button onclick="setTheme('egamepass')" style="background-color: #596eb1; color: #cbe0ff; border: 5px solid #5586e0">e-gamepass</button>
|
||||
<button onclick="setTheme('cools1te')" style="background-color: #a134dc; color: #d3a4fa; border: 5px solid #b153e3">cools1te</button>
|
||||
<button onclick="setTheme('sunset' + (bgTheme.checked ? '' : 'false'))" style="background-color: #537294; color: #fff; border: 5px solid #30719c">sunset</button>
|
||||
<button onclick="setTheme('mountains' + (bgTheme.checked ? '' : 'false'))" style="background-color: #d37f7f; color: #fff; border: 5px solid #e28a8a">mountains</button>
|
||||
<button onclick="setTheme('vaporwave' + (bgTheme.checked ? '' : 'false'))" style="background-color: #4b2d64; color: #fff; border: 5px solid #74568d">vaporwave</button>
|
||||
<button onclick="setTheme('threekho')" style="background-color: #28A018; color: #fff; border: 5px solid #0A8F00">3kh0</button>
|
||||
<button onclick="setTheme('seraph' + (bgTheme.checked ? '' : 'false'))" style="background-color: #000; color: #fff; border: 2px solid #fff">seraph</button>
|
||||
<button onclick="setTheme('nighttime' + (bgTheme.checked ? '' : 'false'))" style="background-color: #29374d; color: #fff; border: 2px solid #fff">nighttime</button>
|
||||
<button onclick="setTheme('mocha' + (bgTheme.checked ? '' : 'false'))" style="background-color: #6c7086; color: #fff; border: 2px solid #7f849c">mocha</button>
|
||||
<button onclick="setTheme('macchiato' + (bgTheme.checked ? '' : 'false'))" style="background-color: #6e738d; color: #fff; border: 5px solid #8087a2">macchiato</button>
|
||||
<button onclick="setTheme('frappe' + (bgTheme.checked ? '' : 'false'))" style="background-color: #737994; color: #cad3f5; border: 2px solid #838ba7">frappe</button>
|
||||
<button onclick="setTheme('latte' + (bgTheme.checked ? '' : 'false'))" style="background-color: #9ca0b0; color: #4c4f69; border: 5px solid #8c8fa1">latte</button>
|
||||
<button onclick="setTheme('art')" style="background-color: #0284d4; color: #fff; border: 5px solid #0284d4">art class</button>
|
||||
|
||||
<button onclick="customTheme()">custom</button>
|
||||
|
||||
</div>
|
||||
<div id="customMenu" style="display: none;">
|
||||
<p>Input BG Color</p>
|
||||
<input type="color" id="inputbg"/>
|
||||
<p>Input Border Color</p>
|
||||
<input type="color" id="inputborder"/>
|
||||
<p>UI Background Color</p>
|
||||
<input type="color" id="uibg"/>
|
||||
<p>Text Color</p>
|
||||
<input type="color" id="textcolor"/>
|
||||
<p>Background</p>
|
||||
<input type="color" id="bg"/>
|
||||
<p>or select an image (click enter to set)</p>
|
||||
<input type="text" id="bgimg" placeholder="https://selenite.cc/" /><br />
|
||||
<!-- --inputbg: #000000;
|
||||
--inputborder: #000000;
|
||||
--uibg: #000000;
|
||||
--textcolor: #000;
|
||||
--bg: #000000; -->
|
||||
</div>
|
||||
<br />
|
||||
<form action="javascript:setPanicMode();">
|
||||
<h3 for="panic">Website URL</h3>
|
||||
<input type="text" id="panic" name="panic" placeholder="https://google.com" /><br />
|
||||
<input id="panic" class="submit" type="submit" value="Set Panic Mode" />
|
||||
</form>
|
||||
</main>
|
||||
<br>
|
||||
<footer>
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
3
style.css
Normal file
@ -0,0 +1,3 @@
|
||||
@import url("/css/style.css");
|
||||
@import url("/css/themes.css");
|
||||
/* moved to css folder */
|
65
suggest.html
Normal file
@ -0,0 +1,65 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
|
||||
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
|
||||
<!-- toastify -->
|
||||
<script>
|
||||
</script>
|
||||
</head>
|
||||
<alerts>
|
||||
|
||||
</alerts>
|
||||
<body id="noscroll">
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
<main id="main" class="noscroll">
|
||||
<h1>Suggestions & Bug Reports</h1>
|
||||
<p>Suggestions and Bug Reports have moved to the <a href="https://discord.gg/7jyufnwJNf">Discord</a>!</p>
|
||||
<p>If for some reason you cannot join the Discord, or it is an urgent issue, then you may <a href="/contact.html">contact me</a>.</p>
|
||||
</main>
|
||||
|
||||
<footer class="noscroll">
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
64
support.html
Normal file
@ -0,0 +1,64 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="sl-theme-dark" lang="en">
|
||||
<head>
|
||||
<!-- initialize theme vars
|
||||
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
||||
|
||||
<!-- initialize externals -->
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
||||
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
||||
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
|
||||
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
|
||||
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js"></script>
|
||||
<script src="/js/main.js"></script>
|
||||
<script src="/js/widget.js"></script>
|
||||
<script src="/js/themes.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="/style.css" />
|
||||
|
||||
<!-- seo + other things -->
|
||||
<title>Support | Selenite</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
</head>
|
||||
|
||||
<body id="noscroll">
|
||||
<header>
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/bookmarklets.html">Bookmarklets</a>
|
||||
<a href="/projects.html">Games</a>
|
||||
<a href="/apps.html">Apps</a>
|
||||
<a href="/settings.html">Settings</a>
|
||||
<a id="blank" href="#">Open Blank</a>
|
||||
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
|
||||
|
||||
</header>
|
||||
|
||||
<main id="main" class="noscroll">
|
||||
<h1>support selenite</h1>
|
||||
<p>i dont make anything off of this website, so anything would be greatly appreciated!</p>
|
||||
<div class="samerow">
|
||||
<div class="img-container">
|
||||
<a href="https://patreon.com/selenitecc"><img src="img/Digital-Patreon-Logo_White.png"></a>
|
||||
</div>
|
||||
</div>
|
||||
<p>also viewing this ad will help me :)</p>
|
||||
<script async="async" data-cfasync="false" src="//pl22225360.toprevenuegate.com/92108816b5da54426d1639bcbfb5785c/invoke.js"></script>
|
||||
<div id="container-92108816b5da54426d1639bcbfb5785c"></div>
|
||||
</main>
|
||||
|
||||
<footer class="noscroll">
|
||||
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
|
||||
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
||||
<a href="/suggest.html">Suggestions & Bugs</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/support.html">Donate</a>
|
||||
<a href="/about.html">About</a>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|