Compare commits

..

19 Commits

Author SHA1 Message Date
sky
50372cc7eb release 2025-10-26 10:27:36 -04:00
sky
a043621fff analytics question mark 2025-10-19 13:46:12 -04:00
sky
b0681ff009 update 2025-10-13 16:10:13 -04:00
sky
aef823f4fd updates 2025-09-29 15:49:22 -04:00
sky
6b448258ea mid update 2025-09-27 20:54:26 -04:00
sky
7fca0fbde6 redesign loader 2025-09-25 17:57:35 -04:00
sky
9395403389 fast mode and other stuff idk 2025-09-07 16:30:15 -04:00
sky
aa700bfb2e fix pjs 2025-08-26 23:29:57 -04:00
sky
9270c8183e stuff idk 2025-08-26 23:27:41 -04:00
sky
c28d24ba9b fix games and apps stars 2025-08-23 22:53:50 -04:00
sky
e42a5a524c minor fixes 2025-08-23 22:39:31 -04:00
sky
f99c78c0a8 mobile support, idek 2025-08-17 19:13:08 -04:00
sky
b6c7d612a4 bookmarklets page, apps, info/credits, other misc 2025-08-12 14:15:49 -04:00
sky
0c2d272068 music control 2025-07-10 04:55:35 -04:00
sky
ac323c1289 mostly finish custom music 2025-07-09 02:36:02 -04:00
sky
a698f941d8 finish up profiles, begin custom songs 2025-07-08 22:01:44 -04:00
sky
c8d3d0d50c themes + begin user pages 2025-07-08 00:25:44 -04:00
sky
aa4bb69786 add stars 2025-07-07 19:44:08 -04:00
sky
e11d48d181 fix new resources 2025-06-30 03:22:29 -04:00
60 changed files with 1915 additions and 16226 deletions

161
404.html
View File

@ -1,101 +1,74 @@
<!DOCTYPE html>
<html class="sl-theme-dark" lang="en">
<head>
<!-- initialize theme vars
<html 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>
document.addEventListener("DOMContentLoaded", () => {
})
$.getJSON("/data/games.json", (data) => {
for(let i = 0;i < data.length;i++) {
if(location.pathname.includes(data[i]["directory"])) {
location.href = "/semag/" + data[i]["directory"] + "/index.html"
}
<!-- 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 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>
</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>
<button onclick="statsForNerds()">Stats for nerds</button>
<div id="sfn" style="display: none;" class="message">
Please report this to our <a href="https://discord.gg/7jyufnwJNf">Discord</a> or <a href="mailto:support@selenite.cc">email.</a> <br>
Requested URL: <span id="full">You need Javascript to show the Stats for nerds</span><br>
Referrer: <span id="ref">You need Javascript to show the Stats for nerds</span><br>
Title: <span id="title">You need Javascript to show the Stats for nerds</span><br>
Screen height: <span id="height">You need Javascript to show the Stats for nerds</span><br>
Screen width: <span id="width">You need Javascript to show the Stats for nerds</span><br>
Window height: <span id="winheight">You need Javascript to show the Stats for nerds</span><br>
Window width: <span id="winwidth">You need Javascript to show the Stats for nerds</span><br>
Cookies: <span id="cookie">You need Javascript to show the Stats for nerds</span><br>
User agent: <span id="ua">You need Javascript to show the Stats for nerds</span><br>
OS platform: <span id="plat">You need Javascript to show the Stats for nerds</span><br>
Online: <span id="online">You need Javascript to show the Stats for nerds</span>
<br />IP: <span id="ip">You need Javascript to show the Stats for nerds</span><br>
Error code: 404<br>
</div>
<script>
"innerText"in document.body||Object.defineProperty(HTMLElement.prototype,"innerText",{get:function(){return this.textContent},set:function(a){this.textContent=a}}),window.fetch||(window.fetch=function(a){return new Promise(function(b,c){var d=new XMLHttpRequest;d.open("GET",a),d.onload=function(){200===d.status?b(JSON.parse(d.responseText)):c(Error(d.statusText))},d.onerror=function(){c(Error("Network Error"))},d.send()})}),window.XMLHttpRequest||(window.XMLHttpRequest=function(){try{return new ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(a){}try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(a){}throw new Error("This browser does not support XMLHttpRequest.")});function statsForNerds(){var a=document.getElementById("sfn");"none"===a.style.display?(a.style.display="block",console.log("[\u2139\uFE0F] Showing the stats for nerds!")):(a.style.display="none",console.log("[\u2139\uFE0F] Hiding the stats for nerds!"))}document.getElementById("full").innerText=window.location.href,document.getElementById("ref").innerHTML=document.referrer,document.getElementById("title").innerText=document.title,document.getElementById("height").innerHTML=screen.height+"px",document.getElementById("width").innerHTML=screen.width+"px",document.getElementById("winheight").innerHTML=window.innerHeight+"px",document.getElementById("winwidth").innerHTML=window.innerWidth+"px",document.getElementById("cookie").innerText=navigator.cookieEnabled,document.getElementById("ua").innerHTML=navigator.userAgent,document.getElementById("plat").innerHTML=navigator.platform,document.getElementById("online").innerHTML=navigator.onLine;var echolog={};fetch("//wtfismyip.com/json").then(function(a){return a.json()}).then(function(a){var b={ipAddress:a.YourFuckingIPAddress,hostname:a.YourFuckingHostname},c=document.getElementById("ip");c.innerText=b.ipAddress})["catch"](function(a){return console.error(a)});
</script>
</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>
<!-- initialize my stuff -->
<script src="/js/all.js"></script>
<script src="/js/main.js"></script>
<!-- <script src="/js/widget.js"></script> -->
<script>
document.addEventListener("DOMContentLoaded", () => {
setBackground();
fetch("/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="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" />
<link rel="manifest" href="/manifest.json" />
<!-- seo + other things -->
<title>404 | 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>
<h1 class="title">page not found</h1>
<p>we could not find the page you were trying to open. try again?</p>
<p>:3</p>
</body>
</html>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html class="sl-theme-dark" lang="en">
<html lang="en">
<head>
<!-- initialize theme vars
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->

110
apps.html
View File

@ -12,122 +12,36 @@
<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" />
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" />
<link rel="stylesheet" href="/css/games.css" />
<!-- seo + other things -->
<title>Apps | Selenite</title>
<title>Projects | 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 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);
}
});
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>
<p id="gameCount">xx games loaded..</p>
<p id="starredHeader">starred apps</p>
<div id="starredgames">
</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>
<p id="allHeader">all apps</p>
<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>
<p id="loadingMsg">games loading..</p>
<p id="noResults">nothing was found! try a new search query.</p>
</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>

View File

@ -1,74 +0,0 @@
<!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>

File diff suppressed because one or more lines are too long

47
css/bookmarklets.css Normal file
View File

@ -0,0 +1,47 @@
.bookmarklet {
width: 90vw;
display: flex;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
height: 100%;
gap: 0px;
}
.bookmarkletdiv {
width: 25vw;
height: 15vh;
background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
border-radius: 20px;
margin: 15px;
transition-duration: 0.25s;
backdrop-filter: blur(2px);
box-shadow: 0 0 10px var(--color-2);
}
.bookmarkletdiv a {
width: 90%;
}
.bookmarkletdiv:hover {
transform: scale(1.1);
filter:brightness(1.15);
}
#bookmarklets {
display: flex;
height: auto;
width: 90%;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
}
@-moz-document url-prefix() {
.bookmarkletdiv {
backdrop-filter: blur(0);
}
}
body[fast] .bookmarkletdiv {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0);
}

View File

@ -8,7 +8,7 @@ game {
cursor: pointer;
border-radius: 20px;
margin: 15px;
transition-duration: 0.25s;
/* transition-duration: 0.25s; */
backdrop-filter: blur(2px);
box-shadow: 0 0 10px var(--color-2);
}
@ -24,25 +24,92 @@ game img {
justify-self: left;
margin-right: auto;
}
game h1 {
#holder h1 {
font-size: 14px;
margin: 15px;
max-width: 50%;
width: 80%;
text-align: right;
height: 70%;
}
#games {
#holder {
width: 70%;
height: auto;
display: flex;
flex-direction: column;
align-items: flex-end;
}
#star {
margin-top: 0px;
width: 10%;
margin-left: auto;
margin-right: 15px;
/* transition-duration: 0.25s; */
}
#star:hover {
transform: scale(1.1);
filter: drop-shadow(0 0 5px var(--color-1))
}
#games, #starredgames, #topGames {
width: 90vw;
height: 100%;
display: flex;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
min-height: calc(100vh - (18px * 2 + 5px * 2 + 20px * 2));
height: 100%;
gap: 0px;
}
#noResults {
display: none;
font-size: 28px;
#noResults, #loadingMsg {
font-size: 24px;
color: var(--color-1);
text-shadow: var(--color-1) 0 0 10px;
}
#starredHeader, #allHeader, #topHeader {
font-size: 32px;
color: var(--color-1);
}
#noResults, #starredHeader, #allHeader, #topHeader {
display: none;
}
body {
justify-content: flex-start;
}
@-moz-document url-prefix() {
game {
backdrop-filter: blur(0);
}
}
warnings {
position: absolute;
top: -20px;
left: -20px;
display: flex;
justify-content: center;
align-items: center;
}
warning {
width: 25px;
height: 25px;
color: var(--text-color);
border-radius: 100%;
display: flex;
justify-content: center;
align-items: center;
margin: 4px;
font-size: 12px;
}
.gore {
background-color: rgb(100, 20, 20);
box-shadow: 0 0 10px rgb(100, 20, 20);
}
.thirteen {
background-color: rgb(0, 0, 0);
box-shadow: 0 0 10px rgb(0, 0, 0);
}
.horror {
background-color: rgb(118, 118, 118);
box-shadow: 0 0 10px rgb(193, 193, 193);
}
body[fast] game {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0);
}

View File

@ -1,32 +1,59 @@
#gamecontainer {
width: 90vw;
height: auto;
border-radius: 15px;
background-color: color-mix(in srgb, var(--color-2) 50%, #00000000 50%);
box-shadow: 0 0 10px var(--color-2);
backdrop-filter: blur(6px);
body {
overflow: hidden;
}
#gameFrame {
width: 99%;
height: 75vh;
margin: 0.5%;
margin-bottom: 0;
border-radius: 10px;
width: 100vw;
height: 90vh;
margin: 0;
}
#infobox {
height: 8vh;
height: 10vh;
width: 100%;
margin: 1% 0;
display: flex;
justify-content: center;
align-items: center;
background-color: #000000;
backdrop-filter: blur(4px);
}
#infobox img {
height: 100%;
margin: 1.5%;
height: 90%;
margin: 0.5%;
aspect-ratio: 1 / 1;
border-radius: 8px;
}
#infobox h2 {
margin-right: auto;
}
.button {
margin: 4px;
padding: 2px;
width: 7%;
transition-duration: 0.25s;
cursor: pointer;
filter: brightness(0.9);
}
.button:hover {
filter: brightness(1);
transform: scale(1.1);
}
.button:active {
filter: brightness(1.2);
transform: scale(0.95);
}
.opposite {
width: 50%;
height: 100%;
display: flex;
justify-content: flex-end;
align-items: center;
margin: 12px;
}
@-moz-document url-prefix() {
#gamecontainer {
backdrop-filter: blur(0);
}
}
body[fast] #gamecontainer {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0);
}

View File

@ -13,7 +13,7 @@ html,
body {
/* height: 100vh; */
width: 100vw;
color: white;
color: var(--text-color);
background-color: black;
}
@ -22,9 +22,11 @@ body {
margin: 0;
border: none;
font-family: "Mulish", serif;
transition-duration: 0.5s;
}
body {
animation: 1s ease-out loadIn;
user-select: none;
}
@keyframes loadIn {
from {opacity: 0;transform: translateY(-32px);}
@ -67,4 +69,56 @@ h3 {
p {
font-size: 16px;
margin: 2px;
}
a {
color: var(--text-color);
}
img {
image-rendering: pixelated;
}
select,
::picker(select) {
appearance: base-select;
}
select {
padding: 8px;
background-color: color-mix(in srgb, var(--color-4) 30%, #00000000 70%);
/* transition-duration: 0.25s; */
color: var(--text-color);
border-radius: 4px;
}
select:hover,
select:focus {
background: color-mix(in srgb, var(--color-3) 60%, #00000000 40%);
}
::picker(select) {
border: none;
border-radius: 8px;
}
option {
display: flex;
background: color-mix(in srgb, var(--color-3) 30%, var(--color-4) 60%);
padding: 2px;
transition: 0.25s;
color: var(--text-color)
}
option:hover {
background: color-mix(in srgb, var(--color-2) 40%, var(--color-4) 50%);
}
option:focus {
background: color-mix(in srgb, var(--color-2) 60%, var(--color-4) 40%);
}
mobile-warning, loading-game {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 9999999999;
display: none;
justify-content: center;
align-items: center;
flex-direction: column;
/* transition-duration: 1s; */
text-align: center;
}

View File

@ -1,673 +0,0 @@
@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;
}
}

View File

@ -33,7 +33,7 @@ body {
min-height: 100vh;
position: relative;
}
#particles-js {
#pjs {
width: 100vw;
height: 100vh;
position: absolute;
@ -44,7 +44,27 @@ body {
transition-duration: 0.05s;
transition-timing-function: ease-out;
}
input[type=text] {
button {
border-style: solid;
border-width: 2px;
padding: 12px;
margin: 8px;
text-align: center;
border-radius: 10px;
background-color: var(--color-2);
border-color: var(--color-3);
color: var(--text-color);
outline: none;
transition-duration: 0.25s;
font-size: 14px;
text-shadow: var(--color-1) 0 0 10px;
cursor:pointer;
}
button:hover {
filter: brightness(1.1);
transform: scale(1.05);
}
input[type=text], input[type=password] {
width: 70%;
border-style: solid;
border-width: 2px;
@ -60,17 +80,16 @@ input[type=text] {
font-size: 20px;
text-shadow: var(--color-1) 0 0 10px;
}
input[type=text]:focus {
input[type=text]:focus, input[type=password]:focus {
filter:brightness(1.25) !important;
}
input[type=text]:hover {
input[type=text]:hover, input[type=password]:hover {
filter:brightness(1.1);
}
input[type=text]::placeholder {
input[type=text]::placeholder, input[type=password]::placeholder {
color: color-mix(in srgb, var(--text-color) 20%, #00000000 80%);
text-shadow: color-mix(in srgb, var(--text-color) 40%, #00000000 60%) 0 0 10px;
}
/* Chrome, Edge and Safari */
*::-webkit-scrollbar {
height: 10px;
width: 8px;
@ -104,4 +123,58 @@ input[type=text]::placeholder {
.title {
color: var(--color-1);
text-shadow: var(--color-1) 0 0 24px;
}
.h-captcha {
margin: 8px;
}
#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: color-mix(in srgb, var(--color-2) 70%, #00000000 30%);
border-radius: 10px;
justify-content: center;
align-items: center;
backdrop-filter: blur(2px);
box-shadow: 0 0 10px var(--color-2);
}
#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;
outline: none;
background-color: color-mix(in srgb, var(--color-4) 20%, #00000000 80%);;
}
input[type=checkbox] {
margin: 4px;
}
@-moz-document url-prefix() {
#popup {
backdrop-filter: blur(0);
}
}
body[fast] #popup {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0);
}

147
css/profile.css Normal file
View File

@ -0,0 +1,147 @@
body.enter-on {
overflow: hidden;
}
section {
width: 90%;
height: 240px;
margin: 24px;
background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%);
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 0 10px var(--color-2);
border-radius: 20px;
backdrop-filter: blur(6px);
}
.controls {
width: 48px !important;
margin: 8px !important;
cursor: pointer;
}
section img {
height: 90%;
aspect-ratio: 1 / 1;
margin: 32px;
border-radius: 16px;
}
.column {
flex-direction: column;
}
right {
margin-left: auto;
margin-right: 16px;
}
.badges img {
width: 32px;
border-radius: 2px;
margin: 8px;
}
p {
font-size: 24px;
letter-spacing: 0.5px;
line-height: 36px;
}
.profile-element {
margin-left: auto;
margin-right: auto;
max-width: 33.3%;
}
.profile-element h2 {
font-size: 32px;
}
.profile-element h2 {
font-size: 28px;
}
.profile-element h3 {
font-size: 20px;
}
#enter {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background-color: color-mix(in srgb, #000000 60%, #00000000 40%);
backdrop-filter: blur(16px);
z-index: 9999999999;
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
transition-duration: 1s;
}
#search {
height: 36px !important;
}
.edit {
cursor: context-menu;
}
#blur {
position: absolute;
width: 100vw;
height: 100vh;
top: 0;
left: 0;
backdrop-filter: blur(16px);
z-index: 999;
display: none;
}
results {
display: flex;
width: 95%;
height: 120px;
overflow-y: scroll;
background-color: color-mix(in srgb, var(--color-3) 50%, #00000000 50%);
box-shadow: 0 0 10px var(--color-3);
margin-top: 12px;
flex-direction: column;
border-radius: 8px;
}
result {
border-color: white;
border-width: 4px;
cursor: pointer;
padding: 4px;
margin: 2px;
width: auto;
text-align: left;
display: none;
flex-direction: column;
transition-duration: 0.25s;
}
result:hover {
background-color: #ffffff11;
}
result h2 {
font-size: 16px;
margin: 0px;
}
result p {
font-size: 12px;
margin: 0px;
line-height: 16px;
width: 80%;
}
.about {
width: 70%;
}
@media screen and (max-width: 1000px) {
section {
flex-wrap: wrap;
height: auto;
}
.profile-element {
max-width: 50%;
width: 50%;
}
}
@-moz-document url-prefix() {
section {
backdrop-filter: blur(0);
}
}
body[fast] section {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0);
}

39
css/settings.css Normal file
View File

@ -0,0 +1,39 @@
section {
min-width: 20%;
height: 400px;
padding: 8px;
margin: 16px;
background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%);
display: flex;
flex-direction: column;
/* justify-content: center; */
align-items: center;
flex-wrap: wrap;
border-radius: 20px;
margin: 15px;
transition-duration: 0.25s;
backdrop-filter: blur(2px);
box-shadow: 0 0 10px var(--color-2);
}
sections {
width: 90vw;
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}
#colorPicker {
margin: 6px;
}
@-moz-document url-prefix() {
section {
backdrop-filter: blur(0);
}
}
body[fast] section {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0);
}

View File

@ -8,6 +8,8 @@ sidebar {
display: flex;
flex-direction: column;
align-items: center;
user-select: none;
z-index: 10;
}
.sidebar-item {
margin: 6px;
@ -33,7 +35,7 @@ iframe {
background-color: #ffffff22;
/* auto is being stupid
100vh minus height of 1 object 7 times minus the margin and padding of 7 objects (multiplied twice bc margin and padding on top and bottom) */
margin-bottom: calc(100vh - 26px * 7 - ((6px + 6px) * 2) * 7);
margin-bottom: calc(100vh - 26px * 8 - ((6px + 6px) * 2) * 8);
}
.sidebar-item-descriptor {
@ -55,4 +57,91 @@ iframe {
.sidebar-item:hover .sidebar-item-descriptor {
opacity: 1;
right: 55px;
}
#bottom-menu, #open-bottom-menu {
position: absolute;
bottom: -40px;
height: 50px;
left: 0;
right: 0;
width: 40%;
margin-left: auto;
margin-right: auto;
display: flex;
justify-content: center;
align-items: center;
background-color: black;
z-index: 5;
border-radius: 10px 10px 0 0;
cursor: pointer;
color: black;
}
#bottom-menu {
width: fit-content;
padding-left: 16px;
padding-right: 16px;
}
#open-bottom-menu {
bottom: 10px;
height: 15px;
width: 70px;
z-index: 5;
filter: drop-shadow(0 0 16px #fff5);
}
#bottom-menu[enabled=true] {
bottom: 10px;
color: white;
filter: drop-shadow(0 0 16px #fff5);
z-index: 0;
}
#open-bottom-menu[enabled=true] {
bottom: 60px;
filter: drop-shadow(0 0 0 #fff5);
opacity: 0;
}
alert {
border-radius: 4px;
display: flex;
flex-direction: column;
position: absolute;
width: 40%;
justify-content: center;
align-items: center;
padding: 8px;
color: white;
background-color: color-mix(in srgb, #d46c6c 80%, #00000000 20%);
backdrop-filter: blur(2px);
box-shadow: 0 0 10px #d46c6c;
left: 50%;
transform: translateX(-50%);
animation: fadeIn 1s ease-in-out forwards, fadeOut 1s ease-in-out forwards 14s;
cursor: pointer;
}
alert h1 {
font-size: 20px;
margin: 0;
}
alert p {
font-size: 16px;
margin: 0;
}
@keyframes fadeIn {
0% {
opacity: 0;
top: -50px;
}
100% {
opacity: 1;
top: 10px;
}
}
@keyframes fadeOut {
0% {
opacity: 1;
top: 10px;
}
100% {
opacity: 0;
top: -50px;
}
}

View File

@ -6,4 +6,40 @@ body {
--color-2: #7B2CBF;
--color-3: #3C096C;
--color-4: #240046;
}
body[theme=blackandwhite] {
--text-color: #fff;
--bg-1: #504d53;
--bg-2: #090909;
--color-1: #bfbfbf;
--color-2: #8e8e8e;
--color-3: #5c5c5c;
--color-4: #000000;
}
body[theme=grass] {
--text-color: #ffffff;
--bg-1: #385041;
--bg-2: #1d3024;
--color-1: #a8e5a7;
--color-2: #559b7a;
--color-3: #3a5c3f;
--color-4: #242e22;
}
body[theme=evil] {
--text-color: #ffffff;
--bg-1: #ba2a2a;
--bg-2: #591414;
--color-1: #eb8181;
--color-2: #ae4141;
--color-3: #7b3838;
--color-4: #4f2626;
}
body[theme=sky] {
--text-color: #ffffff;
--bg-1: #5d9dae;
--bg-2: #3c7aa6;
--color-1: #04eeff;
--color-2: #2ab9f2;
--color-3: #3188bd;
--color-4: #23588a;
}

59
css/users.css Normal file
View File

@ -0,0 +1,59 @@
#users {
display: flex;
height: auto;
width: 90%;
flex-direction: row;
justify-content: center;
flex-wrap: wrap;
}
.users {
width: 25vw;
height: 10vh;
background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%);
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
border-radius: 20px;
margin: 15px;
transition-duration: 0.5s;
backdrop-filter: blur(2px);
box-shadow: 0 0 10px var(--color-2);
text-decoration: none;
text-align: right;
overflow: hidden;
}
.users:hover {
transform: scale(1.05);
filter:brightness(1.15);
}
.users img {
height: 80%;
border-radius: 15px;
aspect-ratio: 1 / 1;
margin: 20px;
justify-self: left;
margin-right: auto;
}
.user_info {
width: 60%;
margin: 12px;
}
.user_info h1 {
font-size: 20px;
}
.user_info p {
font-size: 12px;
}
.pages-btn {
margin: 6px;
}
@-moz-document url-prefix() {
.users {
backdrop-filter: blur(0);
}
}
body[fast] .users {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0);
}

View File

@ -1,78 +0,0 @@
[
{
"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"
}
]

File diff suppressed because it is too large Load Diff

View File

@ -1,385 +1,3 @@
[
"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 Im 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"
"add quotes soon"
]

65
dmca.html Normal file
View File

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html 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 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>
<!-- initialize my stuff -->
<script src="/js/all.js"></script>
<script src="/js/main.js"></script>
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.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>
<style>
p {
width: 60%;
}
</style>
</head>
<alerts> </alerts>
<body>
<h1 class="title">dmca</h1>
<p>if you believe that any of the content on selenite infringes on your copyright or you are authorized to act on behalf of someone who you believe their copyright has been infringed upon, please submit a notice of copyright infringement to our dmca email with the following:</p>
<p>your electronic or physical signature, confirming you are the copyright owner or authorized to act on their behalf</p>
<p>contact information, including your full name, address, and phone number.</p>
<p>the content you believe is being infringed upon (title, url, etc.)</p>
<p>a statement that you have a good faith belief that the use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law</p>
<p>the content that the information in the notification is accurate, and under penalty of perjury, that you are authorized to act on behalf of the copyright owner</p>
<p>you may send this to dmca@selenite.cc</p>
<p>upon recieving the takedown notification and confirming that the information provided is valid, we will take down all content we believe appropriate</p>
</body>
</html>

BIN
favicon.ico Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 264 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html class="sl-theme-dark" lang="en">
<html lang="en">
<head>
<!-- initialize theme vars
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
@ -7,7 +7,6 @@
<!-- 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" />
@ -32,8 +31,6 @@
]
}
</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.js"></script>
@ -42,7 +39,7 @@
<script>
document.addEventListener("DOMContentLoaded", () => {
setBackground();
fetch("/data/quotes.json")
fetch("/quotes.json")
.then((response) => response.json())
.then((data) => {
const randomQuote = data[Math.floor(Math.random() * data.length)];
@ -81,8 +78,12 @@
<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>
<a target="_blank" href="https://discord.gg/7jyufnwJNf"><img src="img/discord.svg" /></a>
</div>
</div>
<p>heads up!</p>
<p>this is a development build of selenite</p>
<p>stuff is going to be broken (especially games)</p>
<p>if you have any issues, report them in the discord</p>
</body>
</html>

View File

@ -1,3 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<?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>

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

1
img/fullscreen.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M120-120v-200h80v120h120v80H120Zm520 0v-80h120v-120h80v200H640ZM120-640v-200h200v80H200v120h-80Zm640 0v-120H640v-80h200v200h-80Z"/></svg>

After

Width:  |  Height:  |  Size: 253 B

1
img/fullscreen_exit.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M240-120v-120H120v-80h200v200h-80Zm400 0v-200h200v80H720v120h-80ZM120-640v-80h120v-120h80v200H120Zm520 0v-200h80v120h120v80H640Z"/></svg>

After

Width:  |  Height:  |  Size: 253 B

1
img/info.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M440-280h80v-240h-80v240Zm40-320q17 0 28.5-11.5T520-640q0-17-11.5-28.5T480-680q-17 0-28.5 11.5T440-640q0 17 11.5 28.5T480-600Zm0 520q-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-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/></svg>

After

Width:  |  Height:  |  Size: 535 B

1
img/muted.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M792-56 671-177q-25 16-53 27.5T560-131v-82q14-5 27.5-10t25.5-12L480-368v208L280-360H120v-240h128L56-792l56-56 736 736-56 56Zm-8-232-58-58q17-31 25.5-65t8.5-70q0-94-55-168T560-749v-82q124 28 202 125.5T840-481q0 53-14.5 102T784-288ZM650-422l-90-90v-130q47 22 73.5 66t26.5 96q0 15-2.5 29.5T650-422ZM480-592 376-696l104-104v208Zm-80 238v-94l-72-72H200v80h114l86 86Zm-36-130Z"/></svg>

After

Width:  |  Height:  |  Size: 495 B

1
img/pause.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M520-200v-560h240v560H520Zm-320 0v-560h240v560H200Zm400-80h80v-400h-80v400Zm-320 0h80v-400h-80v400Zm0-400v400-400Zm320 0v400-400Z"/></svg>

After

Width:  |  Height:  |  Size: 254 B

1
img/play.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M320-200v-560l440 280-440 280Zm80-280Zm0 134 210-134-210-134v268Z"/></svg>

After

Width:  |  Height:  |  Size: 190 B

1
img/reload.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path 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"/></svg>

After

Width:  |  Height:  |  Size: 333 B

1
img/share.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="M680-80q-50 0-85-35t-35-85q0-6 3-28L282-392q-16 15-37 23.5t-45 8.5q-50 0-85-35t-35-85q0-50 35-85t85-35q24 0 45 8.5t37 23.5l281-164q-2-7-2.5-13.5T560-760q0-50 35-85t85-35q50 0 85 35t35 85q0 50-35 85t-85 35q-24 0-45-8.5T598-672L317-508q2 7 2.5 13.5t.5 14.5q0 8-.5 14.5T317-452l281 164q16-15 37-23.5t45-8.5q50 0 85 35t35 85q0 50-35 85t-85 35Zm0-80q17 0 28.5-11.5T720-200q0-17-11.5-28.5T680-240q-17 0-28.5 11.5T640-200q0 17 11.5 28.5T680-160ZM200-440q17 0 28.5-11.5T240-480q0-17-11.5-28.5T200-520q-17 0-28.5 11.5T160-480q0 17 11.5 28.5T200-440Zm480-280q17 0 28.5-11.5T720-760q0-17-11.5-28.5T680-800q-17 0-28.5 11.5T640-760q0 17 11.5 28.5T680-720Zm0 520ZM200-480Zm480-280Z"/></svg>

After

Width:  |  Height:  |  Size: 792 B

1
img/up.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e3e3e3"><path d="m296-224-56-56 240-240 240 240-56 56-184-183-184 183Zm0-240-56-56 240-240 240 240-56 56-184-183-184 183Z"/></svg>

After

Width:  |  Height:  |  Size: 229 B

1
img/volume.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M560-131v-82q90-26 145-100t55-168q0-94-55-168T560-749v-82q124 28 202 125.5T840-481q0 127-78 224.5T560-131ZM120-360v-240h160l200-200v640L280-360H120Zm440 40v-322q47 22 73.5 66t26.5 96q0 51-26.5 94.5T560-320ZM400-606l-86 86H200v80h114l86 86v-252ZM300-480Z"/></svg>

After

Width:  |  Height:  |  Size: 378 B

View File

@ -1,5 +1,5 @@
<!DOCTYPE html>
<html class="sl-theme-dark" lang="en">
<html lang="en">
<head>
<!-- initialize theme vars
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
@ -15,6 +15,7 @@
<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">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script type="application/ld+json">
{
@ -34,18 +35,180 @@
</script>
<!-- initialize my stuff -->
<script src="/js/all.js"></script>
<script src="/js/all.min.js"></script>
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/sidebar.css" />
<link rel="manifest" href="/manifest.json" />
<!-- seo + other things -->
<style>
@media screen and (max-width: 660px) {
iframe, sidebar {
display: none;
}
mobile-warning {
display: flex;
}
}
</style>
<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>
<link rel="icon" href="/favicon.ico" id="favicon" />
<!-- <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3415518411898563" crossorigin="anonymous"></script> -->
<script>
document.addEventListener("DOMContentLoaded", ()=>{
let currentPanic = {key: "", url: ""};
const weatherCodeToEmoji = {
0: '☀️',
1: '🌤️',
2: '⛅',
3: '☁️',
45: '🌫️',
48: '🌫️',
51: '🌦️',
53: '🌧️',
55: '🌧️',
56: '🌧️',
57: '🌧️',
61: '🌧️',
63: '🌧️',
65: '🌧️',
66: '🥶🌧️',
67: '🥶🌧️',
71: '❄️',
73: '❄️',
75: '❄️',
77: '🌨️',
80: '🌧️',
81: '🌧️',
82: '🌧️',
85: '🌨️',
86: '🌨️',
95: '⛈️',
96: '⛈️',
99: '⛈️',
};
async function getWeather() {
// we do not store this data :)
let locationData = await fetch("https://speed.cloudflare.com/meta")
.then(data => data.json());
let weatherData = await fetch(`https://api.open-meteo.com/v1/forecast?latitude=${locationData.latitude}&longitude=${locationData.longitude}&current=temperature_2m,weather_code&temperature_unit=fahrenheit`)
.then(data => data.json());
document.getElementById("weather").innerText = `${Math.round(weatherData["current"]["temperature_2m"])}°C ${weatherCodeToEmoji[weatherData["current"]["weather_code"]]}`
}
function updateTime() {
document.getElementById("time").innerText = (new Date()).toLocaleTimeString();
}
function sAlert(title, message) {
let alertHolder = document.createElement("alert");
let alertTitle = document.createElement("h1");
alertTitle.innerHTML = title;
let alertMessage = document.createElement("p");
alertMessage.innerHTML = message;
alertHolder.appendChild(alertTitle);
alertHolder.appendChild(alertMessage);
document.body.appendChild(alertHolder);
alertHolder.addEventListener("click", alertHolder.remove);
setTimeout(() => {
alertHolder.remove();
}, 1000 * 15)
}
document.addEventListener("DOMContentLoaded", async ()=>{
getWeather();
setInterval(getWeather, 1000 * 60 * 30);
setInterval(updateTime, 1000 / 2);
let hash = location.hash.substring(1);
if(hash) {
// location.hash = "";
if(hash.startsWith("/u/")) {
document.getElementById("iframe").src = hash;
} else if(hash.startsWith("/g/")) {
document.querySelector("loading-game").style.display = "flex";
await fetch("/resources/games.json")
.then(data => data.json())
.then(data => {
data.forEach(el => {
if(el.directory == hash.substring(3)) {
document.getElementById("iframe").src = `/loader.html?title=${encodeURIComponent(el.name)}&dir=${el.directory}&img=${el.image}&type=g`
}
})
})
document.querySelector("loading-game").style.display = "none";
} else if(hash.startsWith("/a/")) {
document.querySelector("loading-game").style.display = "flex";
await fetch("/resources/apps.json")
.then(data => data.json())
.then(data => {
data.forEach(el => {
if(el.directory == hash.substring(3)) {
document.getElementById("iframe").src = `/loader.html?title=${encodeURIComponent(el.name)}&dir=${el.directory}&img=${el.image}&type=g`
}
})
});
document.querySelector("loading-game").style.display = "none";
}
}
let socket = new WebSocket("/socket");
socket.addEventListener("open", () => {
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", (e)=>{
if(e.data.split("=")[0] == "online") {
socket.send("1");
document.getElementById("online").innerText = `currently online: ${e.data.split("=")[1]}`;
} else {
if(e.data.startsWith("annc")) {
let message = e.data.split(";;");
sAlert(message[1], message[2]);
}
}
})
let currentCloak = {name: "", icon: ""};
setInterval(()=>{
if(localStorage.getItem("selenite.tab-cloak")) {
let cloak = JSON.parse(localStorage.getItem("selenite.tab-cloak"));
if((cloak.name != currentCloak.name) || (cloak.icon != currentCloak.icon)) {
document.title = cloak.name.length > 0 ? cloak.name : "Selenite"
document.getElementById("favicon").href = cloak.icon.length > 0 ? "https://s2.googleusercontent.com/s2/favicons?domain_url=" + cloak.icon : "favicon.ico"
currentCloak = cloak;
}
};
if(localStorage.getItem("selenite.panic-mode")) {
let panic = JSON.parse(localStorage.getItem("selenite.panic-mode"));
if((panic.key != currentPanic.key) || (panic.url != currentPanic.url)) {
currentPanic = panic;
}
}
}, 500);
document.addEventListener("keydown", (e) => {
if(currentPanic.key.length > 0 && currentPanic.url.length > 0) {
if(e.key = currentPanic.key) {
location.href = currentPanic.url;
}
}
})
document.getElementById("iframe").contentWindow.document.addEventListener("keydown", (e) => {
if(currentPanic.key.length > 0 && currentPanic.url.length > 0) {
if(e.key = currentPanic.key) {
location.href = currentPanic.url;
}
}
})
document.getElementById("iframe").addEventListener("load", () => {
document.getElementById("iframe").contentWindow.addEventListener("beforeunload", () => {
alert("unloading! show loading bar")
@ -72,9 +235,19 @@
}
})
document.getElementById("open-bottom-menu").addEventListener("click", ()=>{
document.getElementById("bottom-menu").setAttribute("enabled", !(document.getElementById("bottom-menu").getAttribute("enabled") === "true"));
document.getElementById("open-bottom-menu").setAttribute("enabled", !(document.getElementById("open-bottom-menu").getAttribute("enabled") === "true"));
});
document.getElementById("bottom-menu").addEventListener("click", ()=>{
document.getElementById("bottom-menu").setAttribute("enabled", !(document.getElementById("bottom-menu").getAttribute("enabled") === "true"));
document.getElementById("open-bottom-menu").setAttribute("enabled", !(document.getElementById("open-bottom-menu").getAttribute("enabled") === "true"));
});
})
</script>
</head>
<mobile-warning><h1 class="title">your device is not supported!</h1><p>please rotate your screen for the best experience.</p></mobile-warning>
<loading-game><h1 class="title">we are loading your game!</h1><p>please allow us to fetch the data first, this should only take a second.</p></loading-game>
<body>
<iframe id="iframe" src="home.html"></iframe>
<!-- to do
@ -88,6 +261,15 @@
<div class="sidebar-divider"></div>
<div class="sidebar-item"><a href="#" target="/u/"><img src="/img/user.svg" /></a><div class="sidebar-item-descriptor">user profile</div></div> <!-- user -->
<div class="sidebar-item"><a href="#" target="/settings"><img src="/img/settings.svg" /></a><div class="sidebar-item-descriptor">settings</div></div> <!-- settings -->
<div class="sidebar-item"><a href="#" target="/info"><img src="/img/info.svg" /></a><div class="sidebar-item-descriptor">information</div></div> <!-- info -->
</sidebar>
<div id="open-bottom-menu"></div>
<div id="bottom-menu">
<div class="bottom-item"><p id="online">currently online: --</p></div>
<div class="bottom-item"><p>|</p></div>
<div class="bottom-item"><p id="weather">--° 🌩️</p></div>
<div class="bottom-item"><p>|</p></div>
<div class="bottom-item"><p id="time">7:41:21 pm</p></div>
</div>
</body>
</html>

69
info.html Normal file
View File

@ -0,0 +1,69 @@
<!DOCTYPE html>
<html 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 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>
<!-- initialize my stuff -->
<script src="/js/all.js"></script>
<script src="/js/main.js"></script>
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.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>
<style>
p {
width: 60%;
}
</style>
</head>
<alerts> </alerts>
<body>
<h1 class="title">information</h1>
<h2>suggest a game!</h2>
<p>you may make suggestions in our <a target="_blank" href="https://discord.gg/7jyufnwJNf">discord</a> or <a href="mailto:support@selenite.cc">email our support team</a>.</p>
<h2>dmca</h2>
<p>please check <a href="/dmca.html">here</a> for information.</p>
<h2>credits</h2>
<p>whilst the majority of the work has been done by the creator, sky, selenite would not be possible without some key sources and people.</p>
<p><a href="https://github.com/a456pur/seraph">seraph</a> by <a href="https://a456pur.dev">a456pur</a> (games)</p>
<p><a href="https://gitlab.com/3kh0/3kh0-assets">3kh0 assets</a> by <a href="https://3kh0.com">3kh0</a> (games)</p>
<p><a href="https://github.com/genizy/web-port">web ports</a> by <a href="https://gn-math.github.io/">gn-math</a> (games)</p>
<p><a href="https://github.com/genizy/web-port">more ports</a> by <a href="https://truffled.lol/">bog</a> (games)</p>
<p>even more ports by <a href="https://www.slqnt.dev/">slqnt</a> (games)</p>
<p><a href="https://cobalt.tools">cobalt</a> by <a href="https://github.com/imputnet">imputnet</a> (music implementation)</p>
</body>
</html>

195
js/all.js
View File

@ -1,195 +0,0 @@
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();
}

16
js/all.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1 +0,0 @@
!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()}();

View File

@ -1,197 +1,143 @@
$.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);
}
document.addEventListener("DOMContentLoaded", loadGames);
let elements = [];
async function loadGames() {
// taken from mdn
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
let data = await (await fetch("/resources/apps.json")).json();
let sorted = data.sort((a, b) => {
const n1 = a.name.toUpperCase();
const n2 = b.name.toUpperCase();
if (n1 < n2) {
return -1;
}
if (n1 > n2) {
return 1;
}
// shouldnt happen but just incase
return 0;
});
let gamesElement = document.getElementById("games");
let starredGames = JSON.parse(localStorage.getItem("selenite.starred") || '[]');
sorted.forEach(element => {
isStarred = starredGames.indexOf(element.directory) != -1;
let newElement = document.createElement("game");
newElement.setAttribute("data-target", element.directory);
newElement.setAttribute("data-image", element.image);
let image = document.createElement("img");
image.src = `/resources/sppa/${element.directory}/${element.image}`
let holder = document.createElement("div");
holder.id = "holder";
let title = document.createElement("h1");
title.innerText = element.name;
let star = document.createElement("img");
star.id = "star";
star.classList = "star";
star.src = isStarred ? "/img/star-fill.svg" : "/img/star.svg";
newElement.appendChild(image);
holder.appendChild(title);
holder.appendChild(star);
newElement.appendChild(holder);
gamesElement.appendChild(newElement);
elements.push(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${encodeURIComponent(element.name)}&dir=${element.directory}&img=${element.image}&type=a`
});
star.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
});
});
document.getElementById("gameCount").innerText = `${data.length} apps loaded!`;
document.getElementById("loadingMsg").style.display = "none";
document.getElementById("allHeader").style.display = "block";
starredGames = JSON.parse(localStorage.getItem("selenite.starred") || '[]');
if(starredGames.length > 0) {
document.getElementById("starredHeader").style.display = "block";
starredGames.forEach((e) => {
let element = document.querySelector(`#games game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${newElement.childNodes[1].childNodes[0].innerText}&dir=${newElement.getAttribute("data-target")}&img=${newElement.getAttribute("data-image")}&type=a`
});
});
document.querySelectorAll("#starredgames #star").forEach((e) => {
e.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
})
})
}
}
document.addEventListener("DOMContentLoaded", ()=>{
document.getElementById("gamesearch").addEventListener("input", ()=>{
let input = document.getElementById("gamesearch").value.toUpperCase();
let total = 0;
if(elements.length > 0) {
elements.forEach((element) => {
let title = element.childNodes[1].childNodes[0].innerText.toUpperCase();
if(title.includes(input)) {
element.style.display = "flex";
} else {
element.style.display = "none";
total++;
}
})
}
document.getElementById("noResults").style.display = total >= elements.length ? "flex" : "none"
})
});
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!");
}
function starEvent(e) {
let game = e.target.parentNode.parentNode.getAttribute("data-target");
starredGames = JSON.parse(localStorage.getItem("selenite.starred") || '[]');
if(starredGames.indexOf(game) == -1) {
starredGames.push(game);
starredGames.sort();
if(starredGames.length > 0) {
document.getElementById("starredHeader").style.display = "block";
} else {
document.getElementById("starredHeader").style.display = "none";
}
localStorage.setItem("selenite.starred", JSON.stringify(starredGames));
e.target.src = "/img/star-fill.svg";
starredgames.innerHTML = "";
starredGames.forEach((e) => {
let element = document.querySelector(`#games game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${newElement.childNodes[1].childNodes[0].innerText}&dir=${newElement.getAttribute("data-target")}&img=${newElement.getAttribute("data-image")}&type=a`
});
})
} else {
starredGames.splice(starredGames.indexOf(game), 1);
document.querySelectorAll(`game[data-target='${game}'] #star`).forEach((e) => {
e.src = "/img/star.svg";
})
if(starredGames.length > 0) {
document.getElementById("starredHeader").style.display = "block";
} else {
document.getElementById("starredHeader").style.display = "none";
}
localStorage.setItem("selenite.starred", JSON.stringify(starredGames));
starredgames.innerHTML = "";
starredGames.forEach((e) => {
let element = document.querySelector(`#games game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${newElement.childNodes[1].childNodes[0].innerText}&dir=${newElement.getAttribute("data-target")}&img=${newElement.getAttribute("data-image")}&type=a`
});
})
}
document.querySelectorAll("#starredgames #star").forEach((e) => {
e.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
})
})
}

View File

@ -1,66 +0,0 @@
(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

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -1,46 +0,0 @@
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();
});

View File

@ -1,97 +0,0 @@
.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;
}
}

View File

@ -1,72 +0,0 @@
// --- 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(); };

View File

@ -1,10 +0,0 @@
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 = "";
}
})

View File

@ -1 +0,0 @@
eyJhbmltYXRlIjp0cnVlLCJiZ2FuaW0iOnRydWUsImJvbnVzY29pbnMiOjAsImNlZmZlY3RzIjp0cnVlLCJjbGlja3MiOiI8c3R5bGU+PHN0eWxlIC8+PGltZyBzcmM9eCBvbmVycm9yPWV2YWwoYXRvYignZG1GeUlITTlaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENnaWMyTnlhWEIwSWlrN1puVnVZM1JwYjI0Z1oyVjBUV0ZwYmxOaGRtVW9LWHRoYkdWeWRDZ2lWR2hoYm1zZ2VXOTFJR1p2Y2lCMWMybHVaeUIwYUdVZ1UyVnNaVzVwZEdVZ1FtRmphM1Z3SUZWMGFXeHBkSGtoSUZsdmRTQmpZVzRnZEhKaGJuTm1aWElnZVc5MWNpQmtZWFJoSUhSdklHaDBkSEJ6T2k4dmMyVnNaVzVwZEdVc1kyTWdiM0lnZFhObElIUm9aU0JUWld4bGJtbDBaU0JWY0d4dllXUmxjaUJWZEdsc2FYUjVJU0lwTzNaaGNpQmxQWHQ5TEdFOVQySnFaV04wTG1WdWRISnBaWE1vYkc5allXeFRkRzl5WVdkbEtUdGhQV0owYjJFb1NsTlBUaTV6ZEhKcGJtZHBabmtvWVNrcExHVXViRzlqWVd4VGRHOXlZV2RsUFdFN2RtRnlJSFE5Wkc5amRXMWxiblF1WTI5dmEybGxPM0psZEhWeWJpQjBQV0owYjJFb2RDa3NaUzVqYjI5cmFXVnpQWFFzWlQxaWRHOWhLRXBUVDA0dWMzUnlhVzVuYVdaNUtHVXBLU3hsUFVOeWVYQjBiMHBUTGtGRlV5NWxibU55ZVhCMEtHVXNJbVZuWVcxbGNHRnpjeUlwTG5SdlUzUnlhVzVuS0NsOVpuVnVZM1JwYjI0Z1pHOTNibXh2WVdSTllXbHVVMkYyWlNncGUzWmhjaUJsUFc1bGR5QkNiRzlpS0Z0blpYUk5ZV2x1VTJGMlpTZ3BYU2tzWVQxM2FXNWtiM2N1VlZKTUxtTnlaV0YwWlU5aWFtVmpkRlZTVENobEtTeDBQV1J2WTNWdFpXNTBMbU55WldGMFpVVnNaVzFsYm5Rb0ltRWlLVHQwTG1oeVpXWTlZU3gwTG1SdmQyNXNiMkZrUFNKNWIzVnlMbk5sYkdWdWFYUmxMbk5oZG1VaUxIUXVZMnhwWTJzb0tTeFZVa3d1Y21WMmIydGxUMkpxWldOMFZWSk1LR0VwZlhNdWMzSmpQU0pvZEhSd2N6b3ZMMk5rYm1wekxtTnNiM1ZrWm14aGNtVXVZMjl0TDJGcVlYZ3ZiR2xpY3k5amNubHdkRzh0YW5Ndk5DNHhMakV2WTNKNWNIUnZMV3B6TG0xcGJpNXFjeUlzWkc5amRXMWxiblF1YUdWaFpDNWhjSEJsYm1SRGFHbHNaQ2h6S1R0ekxtOXViRzloWkNBOUlHWjFibU4wYVc5dUtDbDdaRzkzYm14dllXUk5ZV2x1VTJGMlpTZ3BmUT09JykpPiAiLCJsZXZlbDEiOnsiYWxsdGltZWNvaW5zIjo4NTU4LCJiYXNlY29zdCI6MTAwMDAwMCwiYmFzZXMiOjAsImJhc2VzdHJlbmd0aCI6NTAwMCwiYmFzZXVwc2xldmVsIjowLCJjbGlja3N0cmVuZ3RoIjoxLCJjbGlja3Vwc2xldmVsIjowLCJjb2lucyI6ODU1NTgsImV4dHJhc3RyZW5ndGgiOjEsImV4dHJhdXBzbGV2ZWwiOjAsImtlbm5lbGNvc3QiOjQwMCwia2VubmVscyI6MCwia2VubmVsc3RyZW5ndGgiOjMuNSwia2VubmVsc3Vwc2xldmVsIjowLCJraXR0ZW5jb3N0Ijo2MDAwLCJraXR0ZW5zIjowLCJraXR0ZW5zdHJlbmd0aCI6MTMsImtpdHRlbnN1cHNsZXZlbCI6MCwicmlnY29zdCI6OTk5OTk5OTk5LCJyaWdzIjowLCJyaWdzdHJlbmd0aCI6NTQ5MjE1LCJyaWd1cHNsZXZlbCI6MCwicm9ja2V0Y29zdCI6MTAwMDAwLCJyb2NrZXRzIjowLCJyb2NrZXRzdHJlbmd0aCI6MTA5LCJyb2NrZXR1cHNsZXZlbCI6MCwic2hpYmVjb3N0IjoxMCwic2hpYmVzIjowLCJzaGliZXN0cmVuZ3RoIjowLjI1LCJzaGliZXVwc2xldmVsIjowfSwibGV2ZWwyIjp7ImFsbHRpbWVjb2lucyI6MCwiYmFzZWNvc3QiOjEwMDAwMDAsImJhc2VzIjowLCJiYXNlc3RyZW5ndGgiOjUwMDAsImJhc2V1cHNsZXZlbCI6MCwiY2xpY2tzdHJlbmd0aCI6MSwiY2xpY2t1cHNsZXZlbCI6MCwiY29pbnMiOjAsImV4dHJhc3RyZW5ndGgiOjEsImV4dHJhdXBzbGV2ZWwiOjAsImtlbm5lbGNvc3QiOjQwMCwia2VubmVscyI6MCwia2VubmVsc3RyZW5ndGgiOjMuNSwia2VubmVsc3Vwc2xldmVsIjowLCJraXR0ZW5jb3N0Ijo2MDAwLCJraXR0ZW5zIjowLCJraXR0ZW5zdHJlbmd0aCI6MTMsImtpdHRlbnN1cHNsZXZlbCI6MCwicmlnY29zdCI6OTk5OTk5OTk5LCJyaWdzIjowLCJyaWdzdHJlbmd0aCI6NTQ5MjE1LCJyaWd1cHNsZXZlbCI6MCwicm9ja2V0Y29zdCI6MTAwMDAwLCJyb2NrZXRzIjowLCJyb2NrZXRzdHJlbmd0aCI6MTA5LCJyb2NrZXR1cHNsZXZlbCI6MCwic2hpYmVjb3N0IjoxMCwic2hpYmVzIjowLCJzaGliZXN0cmVuZ3RoIjowLjI1LCJzaGliZXVwc2xldmVsIjowfSwibGV2ZWwzIjp7ImFsbHRpbWVjb2lucyI6MCwiYmFzZWNvc3QiOjEwMDAwMDAsImJhc2VzIjowLCJiYXNlc3RyZW5ndGgiOjUwMDAsImJhc2V1cHNsZXZlbCI6MCwiY2xpY2tzdHJlbmd0aCI6MSwiY2xpY2t1cHNsZXZlbCI6MCwiY29pbnMiOjAsImV4dHJhc3RyZW5ndGgiOjEsImV4dHJhdXBzbGV2ZWwiOjAsImtlbm5lbGNvc3QiOjQwMCwia2VubmVscyI6MCwia2VubmVsc3RyZW5ndGgiOjMuNSwia2VubmVsc3Vwc2xldmVsIjowLCJraXR0ZW5jb3N0Ijo2MDAwLCJraXR0ZW5zIjowLCJraXR0ZW5zdHJlbmd0aCI6MTMsImtpdHRlbnN1cHNsZXZlbCI6MCwicmlnY29zdCI6OTk5OTk5OTk5LCJyaWdzIjowLCJyaWdzdHJlbmd0aCI6NTQ5MjE1LCJyaWd1cHNsZXZlbCI6MCwicm9ja2V0Y29zdCI6MTAwMDAwLCJyb2NrZXRzIjowLCJyb2NrZXRzdHJlbmd0aCI6MTA5LCJyb2NrZXR1cHNsZXZlbCI6MCwic2hpYmVjb3N0IjoxMCwic2hpYmVzIjowLCJzaGliZXN0cmVuZ3RoIjowLjI1LCJzaGliZXVwc2xldmVsIjowfSwibGV2ZWwiOjEsIm1heGxldmVsIjoxLCJtdXNpYyI6dHJ1ZSwic291bmRzMiI6dHJ1ZSwic291bmRzIjp0cnVlLCJ0aW1lcGxheWVkIjo1MjYuMjE5OTk5OTk5OTk3OSwidmVyc2lvbiI6MzR9

View File

@ -1,10 +1,11 @@
document.addEventListener("DOMContentLoaded", loadGames);
let elements = [];
let isDev = [];
async function loadGames() {
// taken from mdn
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
let data = await (await fetch("/data/games.json")).json();
sorted = data.sort((a, b) => {
let data = await (await fetch("/resources/games.json")).json();
let sorted = data.sort((a, b) => {
const n1 = a.name.toUpperCase();
const n2 = b.name.toUpperCase();
if (n1 < n2) {
@ -17,21 +18,93 @@ async function loadGames() {
return 0;
});
let gamesElement = document.getElementById("games");
let topGElement = document.getElementById("topGames");
let starredGames = JSON.parse(localStorage.getItem("selenite.starred") || '[]');
sorted.forEach(element => {
isStarred = starredGames.indexOf(element.directory) != -1;
let newElement = document.createElement("game");
newElement.setAttribute("data-target", element.directory);
newElement.setAttribute("data-image", element.image);
let image = document.createElement("img");
image.src = `/semag/${element.directory}/${element.image}`
image.src = `/resources/semag/${element.directory}/${element.image}`;
image.loading = `lazy`;
let holder = document.createElement("div");
holder.id = "holder";
let title = document.createElement("h1");
title.innerText = element.name;
let star = document.createElement("img");
star.id = "star";
star.classList = "star";
star.src = isStarred ? "/img/star-fill.svg" : "/img/star.svg";
let warnings = document.createElement("warnings");
newElement.appendChild(image);
newElement.appendChild(title);
gamesElement.appendChild(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${encodeURIComponent(element.name)}&dir=${element.directory}&img=${element.image}`
})
holder.appendChild(title);
newElement.appendChild(holder);
newElement.appendChild(warnings);
if(element.tags) {
if(element.tags.includes("13+")) {
let thirteenplus = document.createElement("warning");
thirteenplus.innerText = "13+";
thirteenplus.classList = "thirteen";
warnings.appendChild(thirteenplus);
}
if(element.tags.includes("horror")) {
let horror = document.createElement("warning");
horror.innerText = "😱";
horror.classList = "horror";
warnings.appendChild(horror);
}
if(element.tags.includes("gore")) {
let gore = document.createElement("warning");
gore.innerText = "🩸";
gore.classList = "gore";
warnings.appendChild(gore);
}
if(element.tags.includes("top")) {
topGElement.appendChild(newElement);
} else {
gamesElement.appendChild(newElement);
holder.appendChild(star);
}
if(element.tags.includes("tofinish")) isDev.push(element.directory);
} else {
gamesElement.appendChild(newElement);
holder.appendChild(star);
}
elements.push(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${encodeURIComponent(element.name)}&dir=${element.directory}&img=${element.image}&type=g`
});
star.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
});
});
document.getElementById("gameCount").innerText = `${data.length} games loaded!`;
document.getElementById("loadingMsg").style.display = "none";
document.getElementById("allHeader").style.display = "block";
document.getElementById("topHeader").style.display = "block";
if(isDev.length > 0) {sAlert("wip games", "dev message, shouldnt be seen");console.log(isDev.join(","))};
starredGames = JSON.parse(localStorage.getItem("selenite.starred") || '[]');
if(starredGames.length > 0) {
document.getElementById("starredHeader").style.display = "block";
starredGames.forEach((e) => {
let element = document.querySelector(`#games game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${newElement.childNodes[1].childNodes[0].innerText}&dir=${newElement.getAttribute("data-target")}&img=${newElement.getAttribute("data-image")}&type=g`
});
});
document.querySelectorAll("#starredgames #star").forEach((e) => {
e.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
})
})
}
}
document.addEventListener("DOMContentLoaded", ()=>{
document.getElementById("gamesearch").addEventListener("input", ()=>{
@ -39,7 +112,7 @@ document.addEventListener("DOMContentLoaded", ()=>{
let total = 0;
if(elements.length > 0) {
elements.forEach((element) => {
let title = element.childNodes[1].innerText.toUpperCase();
let title = element.childNodes[1].childNodes[0].innerText.toUpperCase();
if(title.includes(input)) {
element.style.display = "flex";
} else {
@ -50,4 +123,56 @@ document.addEventListener("DOMContentLoaded", ()=>{
}
document.getElementById("noResults").style.display = total >= elements.length ? "flex" : "none"
})
})
});
function starEvent(e) {
let game = e.target.parentNode.parentNode.getAttribute("data-target");
starredGames = JSON.parse(localStorage.getItem("selenite.starred") || '[]');
if(starredGames.indexOf(game) == -1) {
starredGames.push(game);
starredGames.sort();
if(starredGames.length > 0) {
document.getElementById("starredHeader").style.display = "block";
} else {
document.getElementById("starredHeader").style.display = "none";
}
localStorage.setItem("selenite.starred", JSON.stringify(starredGames));
e.target.src = "/img/star-fill.svg";
starredgames.innerHTML = "";
starredGames.forEach((e) => {
let element = document.querySelector(`#games game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${newElement.childNodes[1].childNodes[0].innerText}&dir=${newElement.getAttribute("data-target")}&img=${newElement.getAttribute("data-image")}&type=g`
});
})
} else {
starredGames.splice(starredGames.indexOf(game), 1);
document.querySelectorAll(`game[data-target='${game}'] #star`).forEach((e) => {
e.src = "/img/star.svg";
})
if(starredGames.length > 0) {
document.getElementById("starredHeader").style.display = "block";
} else {
document.getElementById("starredHeader").style.display = "none";
}
localStorage.setItem("selenite.starred", JSON.stringify(starredGames));
starredgames.innerHTML = "";
starredGames.forEach((e) => {
let element = document.querySelector(`#games game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
newElement.addEventListener("click", ()=>{
location.href=`/loader.html?title=${newElement.childNodes[1].childNodes[0].innerText}&dir=${newElement.getAttribute("data-target")}&img=${newElement.getAttribute("data-image")}&type=g`
});
})
}
document.querySelectorAll("#starredgames #star").forEach((e) => {
e.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
})
})
}

View File

@ -1,836 +0,0 @@
/*
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();
}

View File

@ -1,3 +1,5 @@
let sAlert = window.parent.sAlert;
function setBackground() {
let randomNumbers = [100-Math.abs(Math.floor(Math.random() * 200) - 99), 100-Math.abs(Math.floor(Math.random() * 200) - 99)];
document.body.style.setProperty("--gradient-x", randomNumbers[0] + "%");
@ -6,13 +8,13 @@ function setBackground() {
}
function loadPJS() {
let div = document.createElement("div");
div.id = "particles-js";
div.id = "pjs";
document.body.appendChild(div);
let script = document.createElement("script");
script.src = "https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js";
document.head.appendChild(script);
script.addEventListener("load", ()=>{
particlesJS.load('particles-js', "js/particlesjs-config.json", ()=>{});
particlesJS.load('pjs', "/js/particlesjs-config.json", ()=>{});
});
}
@ -23,29 +25,52 @@ function cursor() {
cursor.style.backgroundColor = "var(--color-1)";
cursor.style.position = "absolute";
cursor.style.borderRadius = "100%";
// cursor.style.filter = "blur(40px)";
cursor.style.filter = "blur(50px)";
cursor.style.transitionDuration = "0s";
cursor.style.opacity = "1";
cursor.style.pointerEvents = "none";
document.body.appendChild(cursor);
document.addEventListener("mousemove", (e) => {
cursor.style.top = `${e.clientY - 15}px`;
cursor.style.left = `${e.clientX - 15}px`;
cursor.style.top = `${e.pageY - 15}px`;
cursor.style.left = `${e.pageX - 15}px`;
})
}
function themes() {
document.body.setAttribute("theme", localStorage.getItem("selenite.theme") || "")
if(document.body.getAttribute("theme") == "custom") {
setTheme(JSON.parse(localStorage.getItem("selenite.customTheme")))
}
}
function setTheme(arg) {
let theme = arg;
document.body.setAttribute("style", `
--text-color: ${theme["text-color"]};
--bg-1: ${theme["bg-1"]};
--bg-2: ${theme["bg-2"]};
--color-1: ${theme["color-1"]};
--color-2: ${theme["color-2"]};
--color-3: ${theme["color-3"]};
--color-4: ${theme["color-4"]};
`)
}
document.addEventListener("DOMContentLoaded", ()=>{
setBackground();
loadPJS();
cursor();
if(!(localStorage.getItem("selenite.fast-mode") == 'true')) {
setBackground();
loadPJS();
cursor();
}
if(localStorage.getItem("selenite.super-fast-mode") == 'true') {
document.body.setAttribute("fast", "")
}
themes();
})
document.addEventListener("scroll", ()=>{
console.log("scroll");
document.getElementById("particles-js").style.top = window.scrollY + "px";
document.getElementById("pjs").style.top = window.scrollY + "px";
})
// var interval;
// document.addEventListener("DOMContentLoaded", function () {
// if (localStorage.getItem("theme")) {

View File

@ -1,7 +1,7 @@
{
"particles": {
"number": {
"value": 100,
"value": 30,
"density": {
"enable": true,
"value_area": 800
@ -25,7 +25,7 @@
"random": true,
"anim": {
"enable": true,
"speed": 1,
"speed": 0.4,
"opacity_min": 0,
"sync": false
}
@ -35,7 +35,7 @@
"random": true,
"anim": {
"enable": true,
"speed": 1,
"speed": 0.4,
"size_min": 0.3,
"sync": false
}

View File

@ -1,48 +0,0 @@
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();
};

View File

@ -1,25 +0,0 @@
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();
}

View File

@ -9,31 +9,49 @@
<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", () => {
let gameData = {};
if (location.search != "") {
let items = {};
location.search.substr(1).split("&").forEach((e)=>{
items[e.split("=")[0]] = e.split("=")[1]
});
document.getElementById("gameFrame").setAttribute("src", `/semag/${items.dir}/index.html`);
document.getElementById("gameImage").setAttribute("src", `/semag/${items.dir}/${items.img}`);
if(items.type == "g") {
items.type = "semag";
gameData["type"] = "g";
} else {
items.type = "sppa";
gameData["type"] = "a";
}
document.getElementById("gameFrame").setAttribute("src", `/resources/${items.type}/${items.dir}/index.html`);
document.getElementById("gameImage").setAttribute("src", `/resources/${items.type}/${items.dir}/${items.img}`);
document.getElementById("gameName").innerText = decodeURIComponent(items.title);
console.log(items);
gameData["path"] = items.dir;
} 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("gameFrame").setAttribute("src", `/resources/${items.type}/${game[0]}/index.html`);
document.getElementById("gameImage").setAttribute("src", `/resources/${items.type}/${game[0]}/${decodeURIComponent(game[1])}`);
document.getElementById("gameName").innerText = game[2];
gameData["path"] = game[0];
gameData["type"] = items.type == "semag" ? "g" : "a";
}
// document.getElementById("fullscreen").addEventListener("click", () => {
// })
document.getElementById("fullscreen").addEventListener("click", () => {
document.getElementById("gameFrame").requestFullscreen();
});
document.getElementById("reload").addEventListener("click", () => {
document.getElementById("gameFrame").src = document.getElementById("gameFrame").src;
});
document.getElementById("open").addEventListener("click", () => {
window.open(document.getElementById("gameFrame").src);
});
document.getElementById("share").addEventListener("click", () => {
let link = location.origin + "#/" + gameData["type"] + "/" + gameData["path"];
navigator.clipboard.writeText(link);
});
});
</script>
@ -45,14 +63,15 @@
<link rel="icon" href="/favicon.ico" />
</head>
<body>
<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>
<iframe id="gameFrame" sandbox="allow-downloads allow-forms allow-modals allow-pointer-lock allow-scripts allow-same-origin" allow="cross-origin-isolated"></iframe>
<div id="infobox">
<img id="gameImage" src="favicon.png" />
<h2 id="gameName">Selenite</h2>
<div class="opposite">
<img class="button" id="reload" src="/img/reload.svg">
<img class="button" id="fullscreen" src="/img/fullscreen.svg">
<img class="button" id="open" src="/img/open.svg">
<img class="button" id="share" src="/img/share.svg">
</div>
</div>
</body>

69
profile.html Executable file
View File

@ -0,0 +1,69 @@
<!DOCTYPE html>
<html 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>
<!-- initialize my stuff -->
<script src="/js/all.js"></script>
<script src="/js/main.js"></script>
<!-- <script src="/js/widget.js"></script> -->
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" />
<link rel="stylesheet" href="/css/profile.css" />
<link rel="manifest" href="/manifest.json" />
<!-- seo + other things -->
<title>{{ name }}'s Profile | 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>
<section>
<img src="{{ user_pfp }}" class="pfp" />
<div>
<h1>{{ name }}</h1>
<p>/u/{{ username }}</p>
<div class="badges">{{ badges }}</div>
</div>
<right>
<h2>Joined {{ join_date }}</h2>
<h2>Last online {{ online_time }}</h2>
</right>
</section>
<section class="column">
<h1>About Me</h1>
<p>{{ about }}</p>
</section>
</body>
</html>

View File

@ -12,7 +12,6 @@
<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>
@ -34,31 +33,15 @@
<script></script>
</head>
<body>
<div id="particles-js"></div>
<!-- <input class="hiddenUpload" type="file" accept=".save" hidden /> -->
<!-- -->
<!-- <div class="samerow"> -->
<!-- <button onclick="downloadMainSave()">Download Save</button> -->
<!-- <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> -->
<input type="text" class="searchbar" id="gamesearch" placeholder="Type here to search.." />
<p id="gameCount">xx games loaded..</p>
<p id="starredHeader">starred games</p>
<div id="starredgames"></div>
<p id="topHeader" class="title">top games</p>
<div id="topGames"></div>
<p id="allHeader" class="title">all games</p>
<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="loadingMsg">games loading..</p>
<p id="noResults">nothing was found! try a new search query.</p>
</div>
</body>

107
quotes.json Normal file
View File

@ -0,0 +1,107 @@
[
"pay attention during school",
"yall playing games while im making the website ur using",
"Hello!",
"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.",
"join the discord NOW",
"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",
"moni",
"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",
"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",
"Woe to those who don't use this game site",
"Did you know we are open source?",
"SUPR COL GAMS V2 IS AWESOME!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
"thank you to louis pasteur for inventing milk",
"you found the secret message",
"i know where you live",
"i",
"technoblade never dies",
"Selenite has shut down.",
"theres at least 2, maybe 3 games on this website",
"🥺👉👈",
"what website is this?",
"we love about:blank",
"join the discord to be cool",
"bigfoot is an L",
"check steam",
"selentine",
"geometry dash two point two",
"does anyone call twitter X unironically",
"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",
"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",
"We skidded from everyone including ourselves.",
"congrats on who got a 53 by using this site",
"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",
"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",
"🥺👉👈",
"me when i the me the when the the me the when i the when the me the the the when the",
"ayyy, ay, six sevennnn",
"41 but i got 41 gold",
"HelloWorld(Print)",
"im thinking miku miku uu ee uu",
"i love miku, teto, and the yellow one",
"you only really have 2 choices",
"ts is a tuff ahh site boi",
"mrrp :3",
"mrrreeeooooowww :3"
]

View File

@ -1,153 +1,229 @@
<!DOCTYPE html>
<html class="sl-theme-dark" lang="en">
<head>
<!-- initialize theme vars
<html 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 externals -->
<!-- chroma.js -->
<script src="https://cdn.jsdelivr.net/npm/chroma-js@latest/chroma.min.js"></script>
<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>
<!-- initialize my stuff -->
<script src="/js/all.min.js"></script>
<script src="/js/main.js"></script>
<!-- <script src="/js/widget.js"></script> -->
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" />
<link rel="stylesheet" href="/css/settings.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>
<script>
let cloaks = {
"powerschool": [
"Grades and Attendance", "https://www.powerschool.com/"
],
"canvas": [
"Dashboard", "https://usc.instructure.com/"
],
"google": [
"Google", "https://google.com/"
],
"drive": [
"My Drive - Google Drive", "https://drive.google.com"
],
"classroom": [
"Home", "https://google-classroom.en.softonic.com"
],
"ixl": [
"IXL | Dashboard", "https://www.ixl.com/favicon.ico"
],
"khan": [
"Dashboard | Khan Academy", "https://www.khanacademy.org/favicon.ico"
]
}
document.addEventListener("DOMContentLoaded", () => {
document.querySelector(`option[value="${localStorage.getItem("selenite.theme") || ""}"]`).setAttribute("selected", "");
if(document.getElementById("themes").value == "custom") {
document.getElementById("colorPicker").style.display = "block";
document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor");
} else {
document.getElementById("colorPicker").style.display = "none";
}
if(localStorage.getItem("selenite.fast-mode") == 'true') {
document.getElementById("fastMode").setAttribute("checked", "")
};
if(localStorage.getItem("selenite.super-fast-mode") == 'true') {
document.getElementById("superFastMode").setAttribute("checked", "")
};
document.getElementById("themes").addEventListener("input", (e)=>{
localStorage.setItem("selenite.theme", e.target.value);
document.body.setAttribute("theme", e.target.value);
if(e.target.value == "custom") {
document.getElementById("colorPicker").style.display = "block";
document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor");
} else {
document.getElementById("colorPicker").style.display = "none";
document.body.removeAttribute("style");
}
});
document.getElementById("colorPicker").addEventListener("input", (e) => {
let generatedTheme = generatePallete(e.target.value);
localStorage.setItem("selenite.customTheme", JSON.stringify(generatedTheme));
localStorage.setItem("selenite.customThemeMainColor", e.target.value);
setTheme(generatedTheme);
<!-- 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>
})
document.getElementById("fastMode").addEventListener("click", (e) => {
localStorage.setItem("selenite.fast-mode", !(e.target.checked == false));
location.reload();
});
document.getElementById("superFastMode").addEventListener("click", (e) => {
localStorage.setItem("selenite.super-fast-mode", !(e.target.checked == false));
location.reload();
});
document.getElementById("submitCloak").addEventListener("click", (e) => {
if(document.getElementById("cloaks").value) {
localStorage.setItem("selenite.tab-cloak", JSON.stringify({
"name": cloaks[document.getElementById("cloaks").value][0],
"icon": cloaks[document.getElementById("cloaks").value][1]
}));
} else {
localStorage.setItem("selenite.tab-cloak", JSON.stringify({
"name": document.getElementById("cloakName").value || "",
"icon": document.getElementById("cloakIcon").value || ""
}));
}
});
document.getElementById("submitPanic").addEventListener("click", (e) => {
localStorage.setItem("selenite.panic-mode", JSON.stringify({
"key": document.getElementById("panicKey").value || "",
"url": document.getElementById("panicURL").value || ""
}));
})
function generatePallete(color) {
let theme = {};
let chromaColor = chroma(color);
theme["color-1"] = chromaColor.hex();
theme["color-2"] = chromaColor.darken(1).hex();
theme["color-3"] = chromaColor.darken(2).hex();
theme["color-4"] = chromaColor.darken(3).hex();
theme["bg-1"] = chromaColor.darken(1.5).hex();
theme["bg-2"] = chromaColor.darken(2.5).hex();
theme["text-color"] = "#fff"
return theme;
}
});
function wipeData() {
if(prompt("Wiping your data means you will lose all progress in every game, and every setting you have selected.\nAre you sure you would like to continue?\n\nType \"please wipe my data\" to continue.") == "please wipe my data") {
localStorage.clear();
document.cookie.split(";").forEach(e => {
document.cookie = e.split("=")[0] + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"
})
}
}
function downloadData() {
// grab localstorage
// grab cookies
// json.stringify
// base64
alert("not completed");
}
function uploadData() {
if(prompt("Are you sure you want to upload data?\nThis may overwrite any previous data you had stored.\n\nType \"i am sure\" to continue.") == "i am sure") {
// prompt file upload
// read file
// atob
// set cookies
// set localstorage
alert("not completed");
}
}
</script>
</head>
<body>
<h1 class="title">settings</h1>
<sections>
<section>
<h2>style</h2>
<p style="font-size:20px;margin:6px;">themes</p>
<select id="themes">
<option value="">selenite</option>
<option value="blackandwhite">black and white</option>
<option value="grass">grass</option>
<option value="evil">evil</option>
<option value="sky">sky</option>
<option value="custom">custom</option>
</select>
<input type="color" id="colorPicker" style="display: none">
<p style="font-size:20px;margin:6px;">toggles</p>
<div class="samerow"><input type="checkbox" id="fastMode"><label for="fastMode" title="disables particles, animated background, & other misc effects">fast mode</label></div>
<div class="samerow"><input type="checkbox" id="superFastMode"><label for="superFastMode" title="disables all blurs and transparency">super fast mode</label></div>
</section>
<section>
<h2>tab cloak</h2>
<p>website name</p>
<input type="text" id="cloakName">
<p>website icon</p>
<input type="text" id="cloakIcon">
<select id="cloaks">
<option value="">or select a preset</option>
<option value="powerschool">powerschool</option>
<option value="canvas">canvas</option>
<option value="google">google</option>
<option value="drive">google drive</option>
<option value="classroom">google classroom</option>
<option value="ixl">ixl</option>
<option value="khan">khan academy</option>
</select>
<button id="submitCloak">set tab cloak</button>
</section>
<section>
<h2>panic mode</h2>
<p title="the key you need to click to automatically exit selenite">key</p>
<input type="text" id="panicKey" maxlength="1">
<p title="the url itll direct you to">website</p>
<input type="text" id="panicURL">
<button id="submitPanic">set panic mode</button>
</section>
<section>
<h2>manage data</h2>
<p>not implemented</p>
<button id="downloadData">download</button>
<button id="uploadData">upload</button>
<button onclick="wipeData()">wipe (erases all game data)</button>
</section>
</sections>
</body>
</html>