Compare commits

...

22 Commits

Author SHA1 Message Date
sky
4bedce429e dont work on cf 2026-02-14 16:57:38 -05:00
sky
c63b9716cd fix apps 2026-02-08 19:10:06 -05:00
sky
1ab57e0d4b fix apps 2026-02-08 19:08:09 -05:00
sky
228fc53083 fix apps 2026-02-08 19:04:44 -05:00
sky
755211d4b9 optimizations 2026-02-07 14:45:07 -05:00
sky
62b2436fbf update 2025-12-25 19:05:41 -05:00
sky
65b5d89f69 disable top games toggle 2025-12-16 23:49:25 -05:00
sky
e8c619b19e yeah im gonna fucking KILL MYSELF FUCKING FGGOGHT AIJKESH DAKJSHd akshd asd 2025-12-16 23:28:05 -05:00
sky
0057b8ddf1 🫩 2025-12-16 23:26:30 -05:00
sky
d4bd776889 christmas update 2025-11-27 12:13:08 -05:00
sky
e60e6791d9 cdn 2025-11-23 10:56:29 -05:00
sky
3cdee505d9 privacy policy 2025-11-20 14:36:37 -05:00
sky
65ab793b69 fix 2025-11-19 11:08:34 -05:00
sky
ad28426269 anti skid :3 2025-11-19 11:06:00 -05:00
sky
6dfacfe47c more educational looking 2025-11-15 11:17:21 -05:00
sky
0896de8220 BRING BACK CACHING 2025-11-14 21:54:15 -05:00
sky
7596d7283d mobile support and shit 2025-11-14 21:53:45 -05:00
sky
896b2a0133 add clear caching 2025-11-04 22:09:32 -05:00
sky
51bac6f65f caching service worker 2025-10-29 20:29:39 -04:00
sky
7aa97c31ca html stuff 2025-10-26 18:48:39 -04:00
sky
cfd2eb107d reconnect to socket 2025-10-26 15:29:53 -04:00
sky
9b5a3592e0 remove ads some places 2025-10-26 15:22:25 -04:00
36 changed files with 1139 additions and 1034 deletions

View File

@ -5,15 +5,6 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- 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"> <script type="application/ld+json">
{ {

View File

@ -1,164 +0,0 @@
<!DOCTYPE html>
<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>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
<!-- initialize my stuff -->
<script src="/js/all.min.js"></script>
<script src="/js/main.js"></script>
<script src="/js/widget.js"></script>
<script src="/js/themes.js"></script>
<link rel="stylesheet" href="/style.css" />
<!-- seo + other things -->
<title>About | Selenite</title>
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<style>
.samerow p {
margin-right: 4px;
}
</style>
<!-- toastify -->
<script></script>
</head>
<body>
<header>
<a href="/index.html">Home</a>
<a href="/bookmarklets.html">Bookmarklets</a>
<a href="/projects.html">Games</a>
<a href="/apps.html">Apps</a>
<a href="/settings.html">Settings</a>
<a id="blank" href="#">Open Blank</a>
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
</header>
<main id="main">
<h1>About Selenite</h1>
<p style="padding-left: 100px; padding-right: 100px; padding-bottom: 20px">Selenite is a unblocked games website with over 200 games, with a simple tab cloak. Selenite was started as a small project started on Padlet, shared between friends. After ~1 month, we transferred to a custom made website. After a few rebrandings and redesigns, we've ended up at the Selenite you know and love (unless you work at a school).</p>
<h2>Credits</h2>
<p><a href="https://jquery.com/">jQuery</a>: a lot of the more technical stuff.</p>
<p><a href="https://github.com/js-cookie/js-cookie/">js-cookie</a>: working with cookies.</p>
<p><a href="https://shoelace.style">Shoelace</a>: a lot of smaller styling, such as the safe mode alert</p>
<p><a href="https://www.bootcss.com/">Bootstrap</a>: useful as a base for some smaller, styling such as the new games popup</p>
<p><a href="https://3kh0.net">3kh0</a>: a lot of games, the download/upload save feature, and the main inspiration</p>
<p><a href="/backgrounds.html">View Background Credits</a></p>
<h2>Developers</h2>
<div class="samerow">
<a href="https://github.com/skysthelimitt"
><sl-avatar image="/img/pfps/sky.webp" label="skysthelimitt"></sl-avatar>
<p>Sky</p></a
>
<a href="https://codeberg.org/LEGALISE_PIRACY"
><sl-avatar image="/img/pfps/legalise.webp" label="LEGALISE_PIRACY"></sl-avatar>
<p>LEGALISE</p></a
>
<a href="https://github.com/a456pur"
><sl-avatar image="/img/pfps/astra.webp" label="a456pur"></sl-avatar>
<p>a456pur</p></a
>
</div>
<h2>Supporters</h2>
<div class="samerow">
<a class="avatar" href="https://discord.com/users/731338278082445376"
><sl-avatar image="/img/pfps/caidn.webp" label="Caidn"></sl-avatar>
<p>Caidn</p></a
>
<a class="avatar" href="https://discord.com/users/704499571400638554"
><sl-avatar image="/img/pfps/buttsfart.webp" label="Buttsfart"></sl-avatar>
<p>Buttsfart</p></a
>
<a class="avatar" href="https://discord.com/users/778709612621987850"
><sl-avatar image="/img/pfps/ayo.webp" label="ayo"></sl-avatar>
<p>ayo</p></a
>
<a class="avatar" href="https://discord.com/users/510677660775743500"
><sl-avatar image="/img/pfps/astra.webp" label="astra"></sl-avatar>
<p>a456pur</p></a
>
<a class="avatar" href="https://discord.com/users/724793658011811862"
><sl-avatar image="/img/pfps/dire.webp" label="direflaws"></sl-avatar>
<p>DireFlaws</p></a
>
<a class="avatar" href="https://discord.com/users/1068293020534964306"
><sl-avatar image="/img/pfps/awesome.webp" label="awesome"></sl-avatar>
<p>Awesome-XV</p></a
>
</div>
<h2>Partners</h2>
<div class="samerow">
<a class="avatar" href="https://discord.gg/echodev-971769908205604864"
><sl-avatar image="/img/pfps/3kh0.webp" label="3kh0"></sl-avatar>
<p>3kh0.net</p></a
>
<a class="avatar" href="https://discord.gg/Cqaa8x82Ch"
><sl-avatar image="/img/pfps/snor.webp" label="snorlax"></sl-avatar>
<p>Snorlax's Cave</p></a
>
<a class="avatar" href="https://discord.gg/DYSB3TeQ2y"
><sl-avatar image="/img/pfps/shadow.webp" label="shadow"></sl-avatar>
<p>Shadow Network</p></a
>
<a class="avatar" href="https://discord.gg/DmQMtsTPD6"
><sl-avatar image="/img/pfps/night.webp" label="night"></sl-avatar>
<p>Night Network</p></a
>
<a class="avatar" href="https://discord.gg/xMyUXZ7Z8y"
><sl-avatar image="/img/pfps/math.webp" label="orbit"></sl-avatar>
<p>Math Orbit</p></a
>
<a class="avatar" href="https://discord.gg/H7JqRwykhk"
><sl-avatar image="/img/pfps/wrnd.gif" label="wrnd"></sl-avatar>
<p>WRND</p></a
>
<a class="avatar" href="https://discord.gg/sSWRxaHhvA"
><sl-avatar image="/img/pfps/lunar.webp" label="lunarsync"></sl-avatar>
<p>Lunarsync</p></a
>
<a class="avatar" href="https://discord.gg/nPzc5ambR4"
><sl-avatar image="/img/pfps/ultra.webp" label="ultrabrowse"></sl-avatar>
<p>Ultrabrowse</p></a
>
<a class="avatar" href="https://discord.gg/yNJ6Yx6qVu"
><sl-avatar image="/img/pfps/compass.png" label="compass"></sl-avatar>
<p>Compass Network</p></a
>
<a class="avatar" href="https://discord.gg/HynWJ8aq"
><sl-avatar image="/img/pfps/ocular.webp" label="ocular"></sl-avatar>
<p>Ocular Network</p></a
> <!--Note: Ocular is Breakium.com -->
</div>
</div>
</main>
<footer>
<a href="gitlab.com/skysthelimit.dev/selenite">Source</a>
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
<a href="/suggest.html">Suggestions & Bugs</a>
<a href="/contact.html">Contact</a>
<a href="/support.html">Donate</a>
<a href="/about.html">About</a>
</footer>
</body>
</html>

59
ad.html
View File

@ -1,59 +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>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
<!-- initialize my stuff -->
<script src="/js/all.min.js"></script>
<script src="/js/main.js"></script>
<script src="/js/widget.js"></script>
<script src="/js/themes.js"></script>
<link rel="stylesheet" href="/style.css" />
<!-- seo + other things -->
<title>Contact | Selenite</title>
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<!-- toastify -->
<script></script>
</head>
<body id="noscroll">
<header>
<a href="/index.html">Home</a>
<a href="/bookmarklets.html">Bookmarklets</a>
<a href="/projects.html">Games</a>
<a href="/settings.html">Settings</a>
<a id="blank" href="#">Open Blank</a>
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
</header>
<main id="main" class="noscroll">
<h2>What happened? Why does Selenite have ads?</h2>
<p style="padding-left: 100px; padding-right: 100px; padding-bottom: 20px">After a lot of thinking, I have decided that the best course of action for Selenite is to add ads. I have spent a lot of time to make sure they are the least intrusive on your experience while still allowing me to make a profit off of the website. This decision was not out of greed or anything, it was because I can't expand Selenite past a certain point without a guaranteed income, and I can't do that solely off of donations.</p>
<p>Ads are powered by Adsterra, and we use the Social bar and the Native banners, with erotic ads disabled.</p>
<p>There is still an option to disable ads. You can also use an adblocker (which I <strong >HIGHLY</strong> recommend).</p>
<button onclick="localStorage.setItem('selenite.adblock', 'true')">Click here to disable ads.</button>
</main>
<footer class="noscroll">
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
<a href="/suggest.html">Suggestions & Bugs</a>
<a href="/contact.html">Contact</a>
<a href="/support.html">Donate</a>
<a href="/about.html">About</a>
</footer>
</body>
</html>

1
alive.txt Normal file
View File

@ -0,0 +1 @@
yeah true

View File

@ -4,16 +4,11 @@
<!-- initialize theme vars <!-- initialize theme vars
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<!-- initialize my stuff --> <!-- initialize my stuff -->
<script src="/js/all.min.js"></script> <script src="/js/all.min.js" async></script>
<script src="/js/apps.js"></script> <script>let type = "a";</script>
<script src="/js/search.js"></script> <script src="/js/loader.js"></script>
<script src="/js/main.js"></script> <script src="/js/main.js"></script>
<script src="/js/themes.js"></script>
<script src="/js/cookie.js"></script>
<link rel="stylesheet" href="/css/main.css" /> <link rel="stylesheet" href="/css/main.css" />
@ -36,9 +31,9 @@
<input type="text" class="searchbar" id="gamesearch" placeholder="Type here to search.." /> <input type="text" class="searchbar" id="gamesearch" placeholder="Type here to search.." />
<p id="gameCount">xx games loaded..</p> <p id="gameCount">xx games loaded..</p>
<p id="starredHeader">starred apps</p> <p id="starredHeader">starred apps</p>
<div id="starredgames"> <div id="starredgames"></div>
</div> <div id="topGames"></div>
<p id="allHeader">all apps</p> <p id="allHeader" class="title">all apps</p>
<div id="games"> <div id="games">
<p id="loadingMsg">games loading..</p> <p id="loadingMsg">games loading..</p>
<p id="noResults">nothing was found! try a new search query.</p> <p id="noResults">nothing was found! try a new search query.</p>

View File

@ -5,16 +5,6 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- 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"> <script type="application/ld+json">
{ {

View File

@ -1,63 +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>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
<!-- initialize my stuff -->
<script src="/js/all.min.js"></script>
<script src="/js/main.js"></script>
<script src="/js/widget.js"></script>
<script src="/js/themes.js"></script>
<link rel="stylesheet" href="/style.css" />
<!-- seo + other things -->
<title>Contact | Selenite</title>
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<!-- toastify -->
<script></script>
</head>
<body id="noscroll">
<header>
<a href="/index.html">Home</a>
<a href="/bookmarklets.html">Bookmarklets</a>
<a href="/projects.html">Games</a>
<a href="/apps.html">Apps</a>
<a href="/settings.html">Settings</a>
<a id="blank" href="#">Open Blank</a>
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
</header>
<main id="main" class="noscroll">
<h2>Have a question or concern?</h2>
<h3>You can contact me using the following methods:</h3>
<a href="mailto:support@selenite.cc">Email me</a>
<a href="https://discord.com/users/1014608595263950848">Message me on discord at @skysthelimit.dev</a>
<a href="https://discord.gg/7jyufnwJNf">Join the discord</a>
</main>
<footer class="noscroll">
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
<a href="/suggest.html">Suggestions & Bugs</a>
<a href="/contact.html">Contact</a>
<a href="/support.html">Donate</a>
<a href="/about.html">About</a>
</footer>
</body>
</html>

View File

@ -1,4 +1,4 @@
game { .game {
width: 20vw; width: 20vw;
height: 10vh; height: 10vh;
background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%); background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%);
@ -11,12 +11,15 @@ game {
/* transition-duration: 0.25s; */ /* transition-duration: 0.25s; */
backdrop-filter: blur(2px); backdrop-filter: blur(2px);
box-shadow: 0 0 10px var(--color-2); box-shadow: 0 0 10px var(--color-2);
text-decoration: none;
content-visibility: auto;
contain-intrinsic-size: auto 10vh;
} }
game:hover { .game:hover {
transform: scale(1.1); transform: scale(1.1);
filter:brightness(1.15); filter:brightness(1.15);
} }
game img { .game img {
height: 80%; height: 80%;
border-radius: 15px; border-radius: 15px;
aspect-ratio: 1 / 1; aspect-ratio: 1 / 1;
@ -80,15 +83,15 @@ body {
} }
warnings { warnings {
position: absolute; position: absolute;
top: -20px; top: 0px;
left: -20px; right: 5px;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
warning { warning {
width: 25px; width: 20px;
height: 25px; height: 20px;
color: var(--text-color); color: var(--text-color);
border-radius: 100%; border-radius: 100%;
display: flex; display: flex;
@ -113,3 +116,13 @@ body[fast] game {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%); background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0); backdrop-filter: blur(0);
} }
@media screen and (max-width: 900px) {
game {
width: 40vw;
}
}
@media screen and (max-width: 660px) {
game {
width: 60vw;
}
}

View File

@ -5,6 +5,7 @@ body {
width: 100vw; width: 100vw;
height: 90vh; height: 90vh;
margin: 0; margin: 0;
background-color: black;
} }
#infobox { #infobox {
height: 10vh; height: 10vh;
@ -57,3 +58,15 @@ body[fast] #gamecontainer {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%); background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0); backdrop-filter: blur(0);
} }
@media screen and (max-width: 660px) {
#infobox h2 {
max-width: 45%;
font-size: 16px;
}
.button {
width: 22%;
margin: 0.5%;
aspect-ratio: 1 / 1;
border-radius: 8px;
}
}

View File

@ -122,3 +122,23 @@ mobile-warning, loading-game {
/* transition-duration: 1s; */ /* transition-duration: 1s; */
text-align: center; text-align: center;
} }
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);
}

View File

@ -44,26 +44,6 @@ body {
transition-duration: 0.05s; transition-duration: 0.05s;
transition-timing-function: ease-out; transition-timing-function: ease-out;
} }
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] { input[type=text], input[type=password] {
width: 70%; width: 70%;
border-style: solid; border-style: solid;

View File

@ -1,8 +1,12 @@
html,
body { body {
overflow: hidden; overflow: hidden;
height: 100%;
} }
sidebar { sidebar {
background-color: linear-gradient(19deg,rgba(87, 199, 133, 1) 0%, rgba(237, 221, 83, 1) 100%);; background-color: linear-gradient(19deg, rgba(87, 199, 133, 1) 0%, rgba(237, 221, 83, 1) 100%);
;
height: 100%; height: 100%;
width: 50px; width: 50px;
display: flex; display: flex;
@ -11,6 +15,7 @@ sidebar {
user-select: none; user-select: none;
z-index: 10; z-index: 10;
} }
.sidebar-item { .sidebar-item {
margin: 6px; margin: 6px;
padding: 6px; padding: 6px;
@ -29,13 +34,10 @@ iframe {
} }
.sidebar-divider { .sidebar-divider {
height: 2px;
border-radius: 20px;
width: 80%;
background-color: #ffffff22; background-color: #ffffff22;
/* auto is being stupid /* 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) */ 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 * 8 - ((6px + 6px) * 2) * 8); margin-bottom: calc(100vh - 26px * 9 - ((6px + 6px) * 2) * 9);
} }
.sidebar-item-descriptor { .sidebar-item-descriptor {
@ -54,11 +56,14 @@ iframe {
transition: opacity 0.5s 0.2s, right 0.5s 0.2s; transition: opacity 0.5s 0.2s, right 0.5s 0.2s;
font-family: "Mulish", serif; font-family: "Mulish", serif;
} }
.sidebar-item:hover .sidebar-item-descriptor { .sidebar-item:hover .sidebar-item-descriptor {
opacity: 1; opacity: 1;
right: 55px; right: 55px;
} }
#bottom-menu, #open-bottom-menu {
#bottom-menu,
#open-bottom-menu {
position: absolute; position: absolute;
bottom: -40px; bottom: -40px;
height: 50px; height: 50px;
@ -76,11 +81,13 @@ iframe {
cursor: pointer; cursor: pointer;
color: black; color: black;
} }
#bottom-menu { #bottom-menu {
width: fit-content; width: fit-content;
padding-left: 16px; padding-left: 16px;
padding-right: 16px; padding-right: 16px;
} }
#open-bottom-menu { #open-bottom-menu {
bottom: 10px; bottom: 10px;
height: 15px; height: 15px;
@ -88,17 +95,20 @@ iframe {
z-index: 5; z-index: 5;
filter: drop-shadow(0 0 16px #fff5); filter: drop-shadow(0 0 16px #fff5);
} }
#bottom-menu[enabled=true] { #bottom-menu[enabled=true] {
bottom: 10px; bottom: 10px;
color: white; color: white;
filter: drop-shadow(0 0 16px #fff5); filter: drop-shadow(0 0 16px #fff5);
z-index: 0; z-index: 0;
} }
#open-bottom-menu[enabled=true] { #open-bottom-menu[enabled=true] {
bottom: 60px; bottom: 60px;
filter: drop-shadow(0 0 0 #fff5); filter: drop-shadow(0 0 0 #fff5);
opacity: 0; opacity: 0;
} }
alert { alert {
border-radius: 4px; border-radius: 4px;
display: flex; display: flex;
@ -117,31 +127,122 @@ alert {
animation: fadeIn 1s ease-in-out forwards, fadeOut 1s ease-in-out forwards 14s; animation: fadeIn 1s ease-in-out forwards, fadeOut 1s ease-in-out forwards 14s;
cursor: pointer; cursor: pointer;
} }
alert h1 { alert h1 {
font-size: 20px; font-size: 20px;
margin: 0; margin: 0;
} }
alert p { alert p {
font-size: 16px; font-size: 16px;
margin: 0; margin: 0;
} }
@keyframes fadeIn { @keyframes fadeIn {
0% { 0% {
opacity: 0; opacity: 0;
top: -50px; top: -50px;
} }
100% { 100% {
opacity: 1; opacity: 1;
top: 10px; top: 10px;
} }
} }
@keyframes fadeOut { @keyframes fadeOut {
0% { 0% {
opacity: 1; opacity: 1;
top: 10px; top: 10px;
} }
100% { 100% {
opacity: 0; opacity: 0;
top: -50px; top: -50px;
} }
} }
#fullscreen {
display: none;
}
welcome {
position: absolute;
width: 400px;
height: 600px;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto auto;
overflow: hidden;
transition-duration: 1s;
display: none;
opacity: 0;
/* display: flex; */
background-color: color-mix(in srgb, var(--color-3) 95%, #00000000 5%);
border-radius: 20px;
backdrop-filter: blur(8px);
box-shadow: 0 0 10px var(--color-3);
z-index: 1000;
}
welcome section {
width: 100%;
height: 100%;
position: absolute;
transition-duration: 1s;
transition-timing-function: cubic-bezier(.53, 0, .5, 1);
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
text-align: center;
}
#blur {
backdrop-filter: blur(8px);
width: 100%;
height: 100%;
position: absolute;
z-index: 999;
}
@media screen and (max-width: 660px) {
sidebar {
height: 50px;
width: 100vw;
display: flex;
flex-direction: row;
align-items: center;
user-select: none;
z-index: 10;
overflow: scroll;
justify-content: center;
}
iframe {
width: calc(100% - 20px);
height: calc(100% - 50px - 20px);
margin: 10px;
margin-right: 0px;
border-radius: 8px;
}
body {
display: flex;
flex-direction: column-reverse;
}
#bottom-menu,
#open-bottom-menu,
.sidebar-item-descriptor {
display: none;
}
#openblank {
display: none;
}
#fullscreen {
display: block;
}
}

View File

@ -43,3 +43,12 @@ body[theme=sky] {
--color-3: #3188bd; --color-3: #3188bd;
--color-4: #23588a; --color-4: #23588a;
} }
body[theme=xmas] {
--text-color: #dcffab;
--bg-1: #a00000;
--bg-2: #400000;
--color-1: #dcffab;
--color-2: #a32a2a;
--color-3: #000000;
--color-4: #630000;
}

View File

@ -57,3 +57,13 @@ body[fast] .users {
background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%); background-color: color-mix(in srgb, var(--color-2) 70%, #000000 30%);
backdrop-filter: blur(0); backdrop-filter: blur(0);
} }
@media screen and (max-width: 900px) {
.users {
width: 40vw;
}
}
@media screen and (max-width: 660px) {
.users {
width: 80vw;
}
}

View File

@ -5,16 +5,6 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- 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"> <script type="application/ld+json">
{ {
@ -43,7 +33,6 @@
<!-- seo + other things --> <!-- seo + other things -->
<title>Selenite</title> <title>Selenite</title>
<link rel="icon" href="/favicon.ico" /> <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> <style>
p { p {
width: 60%; width: 60%;

View File

@ -5,15 +5,6 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- 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"> <script type="application/ld+json">
{ {
@ -81,9 +72,5 @@
<a target="_blank" 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>
</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> </body>
</html> </html>

1
img/missing.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="M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm40-337 160-160 160 160 160-160 40 40v-183H200v263l40 40Zm-40 257h560v-264l-40-40-160 160-160-160-160 160-40-40v184Zm0 0v-264 80-376 560Z"/></svg>

After

Width:  |  Height:  |  Size: 381 B

View File

@ -5,57 +5,65 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- 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 content="#c77dff" data-react-helmet="true" name="theme-color" />
<meta name="googlebot" content="index, follow, snippet" /> <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"> <meta property="og:type" content="website">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta property="og:title" content="IXL | Math, Language Arts, Science, Social Studies, and Spanish"/>
<script type="application/ld+json"> <meta
{ property="og:description"
"@context": "https://schema.org", content="IXL is the world's most popular subscription-based learning site for K12. Used by over 17 million students, IXL provides personalized learning in more than 17,000 topics, covering math, language arts, science, social studies, and Spanish. Interactive questions, awards, and certificates keep kids motivated as they master skills."
"@type": "Organization", />
"name": "Selenite", <meta property="og:url" content="https://www.ixl.com"/>
"alternateName": "selenite.cc", <meta property="og:type" content="website"/>
"url": "https://selenite.cc", <meta property="og:site_name" content="IXL Learning"/>
"logo": "https://selenite.cc/favicon.png", <meta property="og:image"content="https://www.ixl.com/dv3/powZqMuTE7du4asFrVyNGxxoqkw/yui3/opengraph/assets/general_us.png"/>
"sameAs": [
"https://github.com/selenite-cc",
"https://youtube.com/@selenitecc",
"https://tiktok.com/@selenitecc",
"https://selenite.cc",
]
}
</script>
<!-- initialize my stuff --> <!-- initialize my stuff -->
<script src="/js/all.min.js"></script> <script src="/js/all.min.js" async></script>
<link rel="stylesheet" href="/css/main.css" /> <link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/sidebar.css" /> <link rel="stylesheet" href="/css/sidebar.css" />
<link rel="manifest" href="/manifest.json" /> <link rel="manifest" href="/manifest.json" />
<!-- seo + other things --> <!-- seo + other things -->
<style> <title>IXL | Math, Language Arts, Science, Social Studies, and Spanish</title>
@media screen and (max-width: 660px) { <link rel="icon" href="https://ixl.com/ixl-favicon.png" id="favicon" />
iframe, sidebar {
display: none;
}
mobile-warning {
display: flex;
}
}
</style>
<title>Selenite</title>
<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 async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3415518411898563" crossorigin="anonymous"></script> -->
<script> <script>
window.addEventListener('beforeunload', function (event) {
event.preventDefault();
event.returnValue = '';
return 'Are you sure you want to leave? Any unsaved changes will be lost.';
});
function connectToSocket() {
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]);
}
}
})
socket.addEventListener("close", () => {
setTimeout(() => {
connectToSocket();
}, 1000 * 3)
})
}
let currentPanic = {key: "", url: ""}; let currentPanic = {key: "", url: ""};
const weatherCodeToEmoji = { const weatherCodeToEmoji = {
0: '☀️', 0: '☀️',
@ -104,7 +112,7 @@
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`) 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()); .then(data => data.json());
document.getElementById("weather").innerText = `${Math.round(weatherData["current"]["temperature_2m"])}°C ${weatherCodeToEmoji[weatherData["current"]["weather_code"]]}` document.getElementById("weather").innerText = `${Math.round(weatherData["current"]["temperature_2m"])}°F ${weatherCodeToEmoji[weatherData["current"]["weather_code"]]}`
} }
function updateTime() { function updateTime() {
document.getElementById("time").innerText = (new Date()).toLocaleTimeString(); document.getElementById("time").innerText = (new Date()).toLocaleTimeString();
@ -123,7 +131,50 @@
alertHolder.remove(); alertHolder.remove();
}, 1000 * 15) }, 1000 * 15)
} }
function welcomeScreen() {
let screenIDs = ["zero", "one", "two", "three", "four"];
let screens = screenIDs.map((e) => document.getElementById(e));
let index = 0;
let welcome = document.querySelector("welcome");
let blur = document.getElementById("blur");
// TODO: finish
hideAll();
return;
// LEAKED LEAKED!!!
// new selenite feature woah
function hideAll() {
welcome.remove();
blur.remove();
}
function finish() {
welcome.style.opacity = "0";
blur.style.opacity = "0";
setTimeout(() => {
hideAll();
document.cookie = "selenite.welcomeFinished=true";
}, 1000)
}
function showNextScreen() {
index++;
if(index == screens.length) {finish();return;};
screens[index-1].style.transform = "translateY(-100%)";
screens[index].style.transform = "translateY(0%)";
screens[index].querySelector("#nextPage").addEventListener("click", showNextScreen);
}
if(document.cookie.includes("selenite.welcomeFinished")) hideAll();
welcome.style.display = "block";
welcome.style.opacity = "1";
screens[0].style.transform = "translateY(0%)";
screens[0].querySelector("#nextPage").addEventListener("click", showNextScreen);
screens[0].querySelector("#skip").addEventListener("click", finish);
}
document.addEventListener("DOMContentLoaded", async ()=>{ document.addEventListener("DOMContentLoaded", async ()=>{
connectToSocket();
getWeather(); getWeather();
setInterval(getWeather, 1000 * 60 * 30); setInterval(getWeather, 1000 * 60 * 30);
setInterval(updateTime, 1000 / 2); setInterval(updateTime, 1000 / 2);
@ -156,28 +207,12 @@
}) })
}); });
document.querySelector("loading-game").style.display = "none"; 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 { } else {
if(e.data.startsWith("annc")) { welcomeScreen();
let message = e.data.split(";;");
sAlert(message[1], message[2]);
} }
} else {
welcomeScreen();
} }
})
let currentCloak = {name: "", icon: ""}; let currentCloak = {name: "", icon: ""};
setInterval(()=>{ setInterval(()=>{
if(localStorage.getItem("selenite.tab-cloak")) { if(localStorage.getItem("selenite.tab-cloak")) {
@ -232,7 +267,10 @@
location.href = "https://google.com"; location.href = "https://google.com";
window.close(); window.close();
}) })
} else if(item.childNodes[0].id == "fullscreen") {
item.childNodes[0].addEventListener("click", (e)=>{
document.getElementById("iframe").requestFullscreen();
})
} }
}) })
document.getElementById("open-bottom-menu").addEventListener("click", ()=>{ document.getElementById("open-bottom-menu").addEventListener("click", ()=>{
@ -249,7 +287,36 @@
<mobile-warning><h1 class="title">your device is not supported!</h1><p>please rotate your screen for the best experience.</p></mobile-warning> <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> <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> <body>
<iframe id="iframe" src="home.html"></iframe> <welcome>
<section id="zero" style="transform: translateY(100%);">
<h1>welcome to selenite!</h1>
<button id="nextPage">next</button>
<button id="skip">skip</button>
</section>
<section id="one" style="transform: translateY(100%);">
<h1>themes</h1>
<p>theme selector</p>
<button id="nextPage">next</button>
</section>
<section id="two" style="transform: translateY(100%);">
<h1>settings</h1>
<p>tab cloak</p>
<p>panic button</p>
<p>automaically launch in tab cloak</p>
<button id="nextPage">next</button>
</section>
<section id="three" style="transform: translateY(100%);">
<h1>performance</h1>
<p>fast mode</p>
<button id="nextPage">next</button>
</section>
<section id="four" style="transform: translateY(100%);">
<h1>thank you! enjoy</h1>
<button id="nextPage">done</button>
</section>
</welcome>
<div id="blur"></div>
<iframe id="iframe" src="home.html" allow="cross-origin-isolated"></iframe>
<!-- to do <!-- to do
add colors --> add colors -->
<sidebar> <sidebar>
@ -258,6 +325,7 @@
<div class="sidebar-item"><a href="#" target="/apps"><img src="/img/apps.svg" /></a><div class="sidebar-item-descriptor">apps</div></div> <!-- apps --> <div class="sidebar-item"><a href="#" target="/apps"><img src="/img/apps.svg" /></a><div class="sidebar-item-descriptor">apps</div></div> <!-- apps -->
<div class="sidebar-item"><a href="#" target="/bookmarklets"><img src="/img/bookmarklets.svg" /></a><div class="sidebar-item-descriptor">bookmarklets</div></div> <!-- reload --> <div class="sidebar-item"><a href="#" target="/bookmarklets"><img src="/img/bookmarklets.svg" /></a><div class="sidebar-item-descriptor">bookmarklets</div></div> <!-- reload -->
<div class="sidebar-item"><a href="#" id="openblank"><img src="/img/open.svg" /></a><div class="sidebar-item-descriptor">open blank</div></div> <!-- open blank --> <div class="sidebar-item"><a href="#" id="openblank"><img src="/img/open.svg" /></a><div class="sidebar-item-descriptor">open blank</div></div> <!-- open blank -->
<div class="sidebar-item"><a href="#" id="fullscreen"><img src="/img/fullscreen.svg" /></a><div class="sidebar-item-descriptor">fullscreen</div></div> <!-- open blank -->
<div class="sidebar-divider"></div> <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="/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="/settings"><img src="/img/settings.svg" /></a><div class="sidebar-item-descriptor">settings</div></div> <!-- settings -->
@ -267,9 +335,37 @@
<div id="bottom-menu"> <div id="bottom-menu">
<div class="bottom-item"><p id="online">currently online: --</p></div> <div class="bottom-item"><p id="online">currently online: --</p></div>
<div class="bottom-item"><p>|</p></div> <div class="bottom-item"><p>|</p></div>
<div class="bottom-item"><p id="weather">--° 🌩️</p></div> <div class="bottom-item"><p id="weather">--°F 🌩️</p></div>
<div class="bottom-item"><p>|</p></div> <div class="bottom-item"><p>|</p></div>
<div class="bottom-item"><p id="time">7:41:21 pm</p></div> <div class="bottom-item"><p id="time">7:41:21 pm</p></div>
</div> </div>
<div style="display:none">
<h1 id="edu-title">Johnson Education</h1>
<button id="edu-button">Math Lessons</button>
<p id="edu-text">Educational Resources for Students</p>
<p id="edu-text">Science Textbooks</p>
<h1>Educational Resources and Online Learning Platform</h1>
<p>Comprehensive education platform for students, teachers, and lifelong learners. Access online courses, study materials, exam preparation resources, and interactive learning tools.</p>
<section>
<h2>Academic Subjects</h2>
<p>Mathematics, Science, English, History, Literature, Writing, Reading, Social Studies, Geography, Biology, Chemistry, Physics, Algebra, Geometry, Calculus, Statistics, Computer Science, Programming, Foreign Languages, Art, Music</p>
</section>
<section>
<h2>Educational Services</h2>
<p>Online courses, college credit, exam preparation, test prep, tutoring, homework help, study guides, practice tests, educational videos, interactive lessons, learning resources, curriculum development, academic support, student success, teacher resources, educational technology, e-learning, distance education, virtual classroom, online tutoring, academic coaching</p>
</section>
<section>
<h2>Student Levels</h2>
<p>K-12 education, elementary school, middle school, high school, college, university, graduate school, continuing education, adult learning, professional development, certification programs, degree programs, homeschool education</p>
</section>
<section>
<h2>Test Preparation</h2>
<p>SAT prep, ACT prep, GRE prep, GMAT prep, LSAT prep, MCAT prep, AP courses, Advanced Placement, standardized tests, college entrance exams, professional certification exams, state assessments, final exams, midterms</p>
</section>
<section>
<h3>Learning Methods</h3>
<p>Interactive learning, video lessons, practice quizzes, flashcards, study notes, educational games, adaptive learning, personalized education, self-paced learning, collaborative learning, project-based learning, STEM education, critical thinking, problem solving</p>
</section>
</div>
</body> </body>
</html> </html>

View File

@ -5,16 +5,6 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- 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"> <script type="application/ld+json">
{ {
@ -43,7 +33,6 @@
<!-- seo + other things --> <!-- seo + other things -->
<title>Selenite</title> <title>Selenite</title>
<link rel="icon" href="/favicon.ico" /> <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> <style>
p { p {
width: 60%; width: 60%;
@ -57,6 +46,8 @@
<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> <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> <h2>dmca</h2>
<p>please check <a href="/dmca.html">here</a> for information.</p> <p>please check <a href="/dmca.html">here</a> for information.</p>
<h2>privacy policy</h2>
<p>please check <a href="/privacy.html">here</a> to see how we process your information.</p>
<h2>credits</h2> <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>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://github.com/a456pur/seraph">seraph</a> by <a href="https://a456pur.dev">a456pur</a> (games)</p>

59
js/all.min.js vendored
View File

@ -9,7 +9,64 @@ loadAnalytics.unami = function() {
script.setAttribute("data-website-id", "cdb79ddd-06a6-478f-b726-be39b502d6a5"); script.setAttribute("data-website-id", "cdb79ddd-06a6-478f-b726-be39b502d6a5");
document.head.appendChild(script); document.head.appendChild(script);
}; };
loadAnalytics.cloudflare = function() {
// <script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "e5b0ef8807e74cef81287ac77bd18938"}'></script>
let script = document.createElement("script");
script.setAttribute("defer", "");
script.setAttribute("src", "https://static.cloudflareinsights.com/beacon.min.js");
script.setAttribute("data-cf-beacon", '{"token": "e5b0ef8807e74cef81287ac77bd18938"}');
document.head.appendChild(script);
};
loadAnalytics.google = function() {
// <script async src="https://www.googletagmanager.com/gtag/js?id=G-63PV9BWZK5"></script>
let script = document.createElement("script");
script.setAttribute("async", "");
script.setAttribute("src", "https://www.googletagmanager.com/gtag/js?id=G-63PV9BWZK5");
document.head.appendChild(script);
/* <script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-63PV9BWZK5');
</script> */
let script2 = document.createElement("script");
script2.innerText = "window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('config', 'G-63PV9BWZK5');";
document.head.appendChild(script2);
}
function antiSkid() {
if(window != window.parent && location.hostname != new URL(document.referrer).hostname) {
let warning = document.createElement("warning");
warning.innerText = "Check out more games at selenite.cc!";
warning.style.position = "absolute";
warning.style.width = "200px";
warning.style.textAlign = "center";
if(Math.random() > 0.5) {
warning.style.bottom = "20px";
} else {
warning.style.top = "20px";
}
if(Math.random() > 0.5) {
warning.style.right = "20px";
} else {
warning.style.left = "20px";
}
warning.style.backgroundColor = "#00000077";
warning.style.padding = "8px";
warning.style.cursor = "pointer";
warning.style.borderRadius = "6px";
warning.style.color = "white";
warning.addEventListener("click", () => {window.open(location.origin)});
document.body.appendChild(warning);
}
};
document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
loadAnalytics.unami(); // yo why are all analytic providers mid
// loadAnalytics.unami();
// loadAnalytics.cloudflare();
// bag under eyes emoji
loadAnalytics.google();
antiSkid();
}) })

View File

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

@ -0,0 +1,110 @@
{
"particles": {
"number": {
"value": 94,
"density": {
"enable": true,
"value_area": 800
}
},
"color": {
"value": "#fff"
},
"shape": {
"type": "circle",
"stroke": {
"width": 0,
"color": "#000000"
},
"polygon": {
"nb_sides": 5
},
"image": {
"src": "img/github.svg",
"width": 100,
"height": 100
}
},
"opacity": {
"value": 0.5,
"random": true,
"anim": {
"enable": false,
"speed": 1,
"opacity_min": 0.1,
"sync": false
}
},
"size": {
"value": 10,
"random": true,
"anim": {
"enable": false,
"speed": 40,
"size_min": 0.1,
"sync": false
}
},
"line_linked": {
"enable": false,
"distance": 500,
"color": "#ffffff",
"opacity": 0.4,
"width": 2
},
"move": {
"enable": true,
"speed": 9.590256299599611,
"direction": "bottom",
"random": false,
"straight": false,
"out_mode": "out",
"bounce": false,
"attract": {
"enable": false,
"rotateX": 1678.2948524299318,
"rotateY": 3196.752099866537
}
}
},
"interactivity": {
"detect_on": "window",
"events": {
"onhover": {
"enable": true,
"mode": "bubble"
},
"onclick": {
"enable": true,
"mode": "repulse"
},
"resize": true
},
"modes": {
"grab": {
"distance": 400,
"line_linked": {
"opacity": 0.5
}
},
"bubble": {
"distance": 400,
"size": 4,
"duration": 0.3,
"opacity": 1,
"speed": 3
},
"repulse": {
"distance": 79.60199004975124,
"duration": 0.4
},
"push": {
"particles_nb": 4
},
"remove": {
"particles_nb": 2
}
}
},
"retina_detect": true
}

View File

@ -1,178 +0,0 @@
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("/resources/games.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 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 = `/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);
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", ()=>{
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 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);
})
})
}

197
js/loader.js Executable file
View File

@ -0,0 +1,197 @@
document.addEventListener("DOMContentLoaded", loadGames);
let elements = [];
let isDev = [];
let pageData;
async function loadGames() {
if (type == "g") pageData = { path: "/resources/games.json", prefix: "semag", type: "g" };
else if (type == "a") pageData = { path: "/resources/apps.json", prefix: "sppa", type: "a" };
else sAlert("this is not valid");
// taken from mdn
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
let data = await (await fetch(pageData.path)).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 topGElement = document.getElementById("topGames");
let gamesFragment = document.createDocumentFragment();
let topFragment = document.createDocumentFragment();
let starredGames = JSON.parse(localStorage.getItem("selenite.starred") || "[]");
sorted.forEach((element) => {
isStarred = starredGames.indexOf(element.directory) != -1;
let newElement = document.createElement("a");
newElement.setAttribute("data-target", element.directory);
newElement.setAttribute("data-image", element.image);
newElement.setAttribute("class", "game");
newElement.setAttribute("href", `/loader.html?title=${encodeURIComponent(element.name)}&dir=${element.directory}&img=${element.image}&type=${pageData.type}`);
let image = document.createElement("img");
image.src = `/resources/${pageData.prefix}/${element.directory}/${element.image}`;
image.loading = `lazy`;
image.onerror = function () {
this.src = "/img/missing.svg";
};
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);
holder.appendChild(title);
newElement.appendChild(holder);
newElement.appendChild(warnings);
if (element.tags) {
if (element.tags.includes("18+")) {
let thirteenplus = document.createElement("warning");
thirteenplus.innerText = "18+";
thirteenplus.classList = "thirteen";
warnings.appendChild(thirteenplus);
}
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") && localStorage.getItem("selenite.disableTopGames") != "false") {
topFragment.appendChild(newElement);
} else {
gamesFragment.appendChild(newElement);
holder.appendChild(star);
}
if (element.tags.includes("wip")) {
isDev.push(element.directory);
let thirteenplus = document.createElement("warning");
thirteenplus.innerText = "WIP";
thirteenplus.classList = "thirteen";
warnings.appendChild(thirteenplus);
}
} else {
gamesFragment.appendChild(newElement);
holder.appendChild(star);
}
elements.push(newElement);
star.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
});
});
gamesElement.appendChild(gamesFragment);
topGElement.appendChild(topFragment);
document.getElementById("gameCount").innerText = `${data.length} games loaded!`;
document.getElementById("loadingMsg").style.display = "none";
document.getElementById("allHeader").style.display = "block";
if (localStorage.getItem("selenite.disableTopGames") != "false") {
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 a.game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
});
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 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 a.game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
});
} else {
starredGames.splice(starredGames.indexOf(game), 1);
document.querySelectorAll(`a.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 a.game[data-target='${e}']`);
let newElement = element.cloneNode(true);
document.getElementById("starredgames").appendChild(newElement);
});
}
document.querySelectorAll("#starredgames #star").forEach((e) => {
e.addEventListener("click", (e) => {
e.preventDefault();
e.stopPropagation();
starEvent(e);
});
});
}

View File

@ -1,5 +1,4 @@
let sAlert = window.parent.sAlert; let sAlert = window.parent.sAlert;
function setBackground() { function setBackground() {
let randomNumbers = [100-Math.abs(Math.floor(Math.random() * 200) - 99), 100-Math.abs(Math.floor(Math.random() * 200) - 99)]; 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] + "%"); document.body.style.setProperty("--gradient-x", randomNumbers[0] + "%");
@ -14,7 +13,7 @@ function loadPJS() {
script.src = "https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"; script.src = "https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js";
document.head.appendChild(script); document.head.appendChild(script);
script.addEventListener("load", ()=>{ script.addEventListener("load", ()=>{
particlesJS.load('pjs', "/js/particlesjs-config.json", ()=>{}); particlesJS.load('pjs', "/js/main-particlesjs-config.json", ()=>{});
}); });
} }
@ -53,7 +52,50 @@ function setTheme(arg) {
--color-4: ${theme["color-4"]}; --color-4: ${theme["color-4"]};
`) `)
} }
document.addEventListener("DOMContentLoaded", ()=>{
async function caching() {
if(sessionStorage.getItem("cdns")) return "done";
let cdns = JSON.parse(atob("WyJodHRwczovL2NhY2hpbmcuZnJlZXRscy5mYXN0bHkubmV0IiwiaHR0cHM6Ly9jYWNoaW5nLmdsb2JhbC5zc2wuZmFzdGx5Lm5ldCJd"));
let goods = [];
let cfStatus = (await fetch("/alive.txt")).headers.get("Cf-Ray") != null;
if(cfStatus) {
localStorage.setItem("selenite.disableCDN", "true");
return;
}
for(let i = 0;i<cdns.length;i++) {
let cdn = cdns[i];
await fetch(cdn + "/alive.txt")
.then(data => data.text())
.then(data => {
if(data.startsWith("yeah true")) {
goods.push(cdn);
}
})
}
sessionStorage.setItem("cdns", JSON.stringify(goods));
return;
}
function sendData() {
let data = {
cdns: JSON.parse(sessionStorage.getItem("cdns")),
disableCDN: localStorage.getItem("selenite.disableCDN") ? true : false,
type: 'localStorage'
};
if (navigator.serviceWorker.controller) {
navigator.serviceWorker.controller.postMessage(data);
} else {
navigator.serviceWorker.addEventListener('controllerchange', () => {
if (navigator.serviceWorker.controller) {
navigator.serviceWorker.controller.postMessage(data);
}
});
}
}
document.addEventListener("DOMContentLoaded", async ()=>{
if("serviceWorker" in navigator) {
navigator.serviceWorker.register("/sw.js", { scope: '/' });
}
if(!(localStorage.getItem("selenite.fast-mode") == 'true')) { if(!(localStorage.getItem("selenite.fast-mode") == 'true')) {
setBackground(); setBackground();
loadPJS(); loadPJS();
@ -63,12 +105,21 @@ document.addEventListener("DOMContentLoaded", ()=>{
document.body.setAttribute("fast", "") document.body.setAttribute("fast", "")
} }
themes(); themes();
if(await caching() == "done") {
sendData();
}
}) })
document.addEventListener("scroll", ()=>{ document.addEventListener("scroll", ()=>{
document.getElementById("pjs").style.top = window.scrollY + "px"; document.getElementById("pjs").style.top = window.scrollY + "px";
}) })
navigator.serviceWorker.addEventListener('message', (event) => {
if (event.data.command === 'localStorage') {
const data = localStorage.getItem(event.data.key);
event.ports[0].postMessage({ data: data });
}
});
// var interval; // var interval;

View File

@ -5,13 +5,9 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- initialize externals -->
<meta content="Selenite" property="og:title" />
<meta content="Selenite is the best unblocked games site. With over 400 games, an account system, and a free AI chat bot, no other websites come close to Selenite." property="og:description" />
<meta content="/favicon.png" property="og:image" />
<meta content="#c77dff" data-react-helmet="true" name="theme-color" />
<!-- initialize my stuff --> <!-- initialize my stuff -->
<script src="/js/all.min.js"></script> <script src="/js/all.min.js" async></script>
<script> <script>
document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
let gameData = {}; let gameData = {};
@ -52,6 +48,13 @@
let link = location.origin + "#/" + gameData["type"] + "/" + gameData["path"]; let link = location.origin + "#/" + gameData["type"] + "/" + gameData["path"];
navigator.clipboard.writeText(link); navigator.clipboard.writeText(link);
}); });
fetch("/api/analytics/game", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({type: gameData["type"], path: gameData["path"]})
})
}); });
</script> </script>
@ -63,7 +66,7 @@
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
</head> </head>
<body> <body>
<iframe id="gameFrame" sandbox="allow-downloads allow-forms allow-modals allow-pointer-lock allow-scripts allow-same-origin" allow="cross-origin-isolated"></iframe> <iframe id="gameFrame" allow="cross-origin-isolated"></iframe>
<div id="infobox"> <div id="infobox">
<img id="gameImage" src="favicon.png" /> <img id="gameImage" src="favicon.png" />
<h2 id="gameName">Selenite</h2> <h2 id="gameName">Selenite</h2>

102
privacy.html Normal file
View File

@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- initialize theme vars
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals -->
<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" />
<style>
p,li,ul,h2,h1,h3,div {
width: 60%;
text-align: center;
}
</style>
</head>
<alerts> </alerts>
<body>
<h1>Privacy Policy</h1>
<p><strong>Last Updated:</strong> November 20th, 2025</p>
<p>Selenite ("we," "us," or "our") operates the website https://selenite.cc (the "Site"). This page informs you of our policies regarding the collection, use, and disclosure of personal data when you use our Service.</p>
<h2>1. Information Collection and Use</h2>
<p>We strictly limit the amount of personal data we collect. Unlike many other websites, we <strong>do not</strong> collect or store your email address, phone number, or physical address.</p>
<h3>A. Account Information</h3>
<p>To use certain features of our Site, you must create an account. We only require:</p>
<ul>
<li>A unique <strong>Username</strong></li>
<li>A <strong>Password</strong> (which is encrypted/hashed)</li>
</ul>
<p>We do not link this account to a real-world identity or email address.</p>
<h3>B. User-Generated Content (Images)</h3>
<p>We collect and store the images you voluntarily upload to the Site.</p>
<h2>2. Cookies and Third-Party Advertising (Google AdSense)</h2>
<p>While we do not use internal trackers to monitor your behavior, we use <strong>Google AdSense</strong> to support our website. Google AdSense acts as a third-party vendor.</p>
<ul>
<li><strong>Third-Party Cookies:</strong> Google uses cookies to serve ads based on your prior visits to our website or other websites.</li>
<li><strong>The DoubleClick Cookie:</strong> Google's use of advertising cookies enables it and its partners to serve ads to you based on your visit to our Site and/or other sites on the Internet.</li>
</ul>
<div class="highlight-box">
<strong>How to Opt-Out:</strong><br>
You may opt out of personalized advertising by visiting <a href="https://www.google.com/settings/ads" target="_blank" rel="nofollow">Google Ads Settings</a>. Alternatively, you can opt out of a third-party vendor's use of cookies for personalized advertising by visiting <a href="https://www.aboutads.info" target="_blank" rel="nofollow">www.aboutads.info</a>.
</div>
<h2>3. How We Use Your Data</h2>
<p>We use the limited data we collect for the following purposes:</p>
<ul>
<li>To provide and maintain our Service (allowing you to log in).</li>
<li>To host and display the images you upload.</li>
<li>To monitor the usage of our Service to detect and prevent technical issues.</li>
</ul>
<h2>4. Data Sharing and Disclosure</h2>
<p>We <strong>do not</strong> sell, trade, or rent your personal identification information to others. We do not share your uploaded content with third parties, except in the following specific circumstances:</p>
<ul>
<li><strong>Service Providers:</strong> We may share data with trusted third-party hosting providers or infrastructure services required to keep the website online.</li>
<li><strong>Legal Requirements:</strong> We may disclose your information if required to do so by law or in response to valid requests by public authorities (e.g., a court or a government agency).</li>
</ul>
<h2>5. Data Security</h2>
<p>The security of your data is important to us. We use commercially acceptable means to protect your password and uploaded content. However, please remember that no method of transmission over the Internet or method of electronic storage is 100% secure. Because we do not collect email addresses, we cannot verify your identity to restore lost accounts.</p>
<h2>6. Children's Privacy</h2>
<p>Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If you are a parent or guardian and you are aware that your child has provided us with personal data, please contact us. If we become aware that we have collected personal data from children without verification of parental consent, we take steps to remove that information from our servers.</p>
<h2>7. Changes to This Privacy Policy</h2>
<p>We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page. You are advised to review this Privacy Policy periodically for any changes.</p>
<h2>8. Contact Us</h2>
<p>If you have any questions about this Privacy Policy, please contact us: support@selenite.cc</p>
<br>
<br>
<br>
</body>
</html>

View File

@ -5,16 +5,6 @@
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals --> <!-- 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"> <script type="application/ld+json">
{ {
@ -45,7 +35,6 @@
<!-- seo + other things --> <!-- seo + other things -->
<title>{{ name }}'s Profile | Selenite</title> <title>{{ name }}'s Profile | Selenite</title>
<link rel="icon" href="/favicon.ico" /> <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> </head>
<alerts> </alerts> <alerts> </alerts>
<body> <body>

View File

@ -4,16 +4,11 @@
<!-- initialize theme vars <!-- initialize theme vars
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff --> https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
<!-- initialize my stuff --> <!-- initialize my stuff -->
<script src="/js/all.min.js"></script> <script src="/js/all.min.js" async></script>
<script src="/js/games.js"></script> <script>let type = "g";</script>
<script src="/js/search.js"></script> <script src="/js/loader.js"></script>
<script src="/js/main.js"></script> <script src="/js/main.js"></script>
<script src="/js/themes.js"></script>
<script src="/js/cookie.js"></script>
<link rel="stylesheet" href="/css/main.css" /> <link rel="stylesheet" href="/css/main.css" />

43
projects_opt.html Executable file
View File

@ -0,0 +1,43 @@
<!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 my stuff -->
<script src="/js/all.min.js" async></script>
<!-- <script src="/js/games.js"></script> -->
<script src="/js/games_improved.js"></script>
<script src="/js/main.js"></script>
<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>Projects | Selenite</title>
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<!-- toastify -->
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3415518411898563"
crossorigin="anonymous"></script>
<script></script>
</head>
<body>
<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">
<p id="loadingMsg">games loading..</p>
<p id="noResults">nothing was found! try a new search query.</p>
</div>
</body>
</html>

View File

@ -1,6 +1,5 @@
[ [
"pay attention during school", "pay attention during school",
"yall playing games while im making the website ur using",
"Hello!", "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.", "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", "join the discord NOW",
@ -15,8 +14,6 @@
"uWu", "uWu",
"OwO", "OwO",
"UwU", "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", "Fun fact: Your chromebook is likely being monitored 24/7",
"Activate Selenite, Go to settings to activate Selenite", "Activate Selenite, Go to settings to activate Selenite",
"This copy of Selenite is not genuine.", "This copy of Selenite is not genuine.",
@ -24,7 +21,6 @@
"You may be a victim of software counterfeiting", "You may be a victim of software counterfeiting",
"Woe to those who don't use this game site", "Woe to those who don't use this game site",
"Did you know we are open source?", "Did you know we are open source?",
"SUPR COL GAMS V2 IS AWESOME!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
"thank you to louis pasteur for inventing milk", "thank you to louis pasteur for inventing milk",
"you found the secret message", "you found the secret message",
"i know where you live", "i know where you live",
@ -36,12 +32,11 @@
"what website is this?", "what website is this?",
"we love about:blank", "we love about:blank",
"join the discord to be cool", "join the discord to be cool",
"bigfoot is an L",
"check steam", "check steam",
"selentine", "selentine",
"geometry dash two point two", "geometry dash two point two",
"does anyone call twitter X unironically", "does anyone call twitter X unironically",
"rights to the trans people 🏳️‍⚧️ (trans rights)", "trans rights 🏳️‍⚧️",
"happy new years everyone", "happy new years everyone",
"merry christmas everyone", "merry christmas everyone",
"happy easter day everyone", "happy easter day everyone",
@ -57,7 +52,6 @@
"penguinify", "penguinify",
"a456pur", "a456pur",
"selenite", "selenite",
"3kh0",
"selenite is the best", "selenite is the best",
"selenite is the best website", "selenite is the best website",
"selenite is the best website ever", "selenite is the best website ever",
@ -103,5 +97,7 @@
"you only really have 2 choices", "you only really have 2 choices",
"ts is a tuff ahh site boi", "ts is a tuff ahh site boi",
"mrrp :3", "mrrp :3",
"mrrreeeooooowww :3" "mrrreeeooooowww :3",
"fortnite when",
"add roblox"
] ]

View File

@ -7,16 +7,6 @@
<!-- initialize externals --> <!-- initialize externals -->
<!-- chroma.js --> <!-- chroma.js -->
<script src="https://cdn.jsdelivr.net/npm/chroma-js@latest/chroma.min.js"></script> <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"> <script type="application/ld+json">
{ {
@ -36,7 +26,7 @@
</script> </script>
<!-- initialize my stuff --> <!-- initialize my stuff -->
<script src="/js/all.min.js"></script> <script src="/js/all.min.js" async></script>
<script src="/js/main.js"></script> <script src="/js/main.js"></script>
<!-- <script src="/js/widget.js"></script> --> <!-- <script src="/js/widget.js"></script> -->
@ -47,7 +37,6 @@
<!-- seo + other things --> <!-- seo + other things -->
<title>Selenite</title> <title>Selenite</title>
<link rel="icon" href="/favicon.ico" /> <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> <script>
let cloaks = { let cloaks = {
"powerschool": [ "powerschool": [
@ -74,6 +63,7 @@
} }
document.addEventListener("DOMContentLoaded", () => { document.addEventListener("DOMContentLoaded", () => {
document.querySelector(`option[value="${localStorage.getItem("selenite.theme") || ""}"]`).setAttribute("selected", ""); document.querySelector(`option[value="${localStorage.getItem("selenite.theme") || ""}"]`).setAttribute("selected", "");
document.getElementById("toggleCDN").checked = localStorage.getItem("selenite.disableCDN") ? false : true;
if(document.getElementById("themes").value == "custom") { if(document.getElementById("themes").value == "custom") {
document.getElementById("colorPicker").style.display = "block"; document.getElementById("colorPicker").style.display = "block";
document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor"); document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor");
@ -86,6 +76,9 @@
if(localStorage.getItem("selenite.super-fast-mode") == 'true') { if(localStorage.getItem("selenite.super-fast-mode") == 'true') {
document.getElementById("superFastMode").setAttribute("checked", "") document.getElementById("superFastMode").setAttribute("checked", "")
}; };
if(localStorage.getItem("selenite.disableTopGames") == 'false') {
document.getElementById("topGamesToggle").setAttribute("checked", "")
};
document.getElementById("themes").addEventListener("input", (e)=>{ document.getElementById("themes").addEventListener("input", (e)=>{
localStorage.setItem("selenite.theme", e.target.value); localStorage.setItem("selenite.theme", e.target.value);
document.body.setAttribute("theme", e.target.value); document.body.setAttribute("theme", e.target.value);
@ -112,6 +105,9 @@
localStorage.setItem("selenite.super-fast-mode", !(e.target.checked == false)); localStorage.setItem("selenite.super-fast-mode", !(e.target.checked == false));
location.reload(); location.reload();
}); });
document.getElementById("topGamesToggle").addEventListener("click", (e) => {
localStorage.setItem("selenite.disableTopGames", (e.target.checked == false));
});
document.getElementById("submitCloak").addEventListener("click", (e) => { document.getElementById("submitCloak").addEventListener("click", (e) => {
if(document.getElementById("cloaks").value) { if(document.getElementById("cloaks").value) {
localStorage.setItem("selenite.tab-cloak", JSON.stringify({ localStorage.setItem("selenite.tab-cloak", JSON.stringify({
@ -130,6 +126,14 @@
"key": document.getElementById("panicKey").value || "", "key": document.getElementById("panicKey").value || "",
"url": document.getElementById("panicURL").value || "" "url": document.getElementById("panicURL").value || ""
})); }));
});
document.getElementById("toggleCDN").addEventListener("change", () => {
let toggle = document.getElementById("toggleCDN");
if(toggle.checked) {
localStorage.removeItem("selenite.disableCDN");
} else {
localStorage.setItem("selenite.disableCDN", "true")
}
}) })
function generatePallete(color) { function generatePallete(color) {
let theme = {}; let theme = {};
@ -153,21 +157,48 @@
} }
} }
function downloadData() { function downloadData() {
// grab localstorage let storage = JSON.stringify(localStorage);
// grab cookies let cookies = document.cookie;
// json.stringify let data = btoa(JSON.stringify({localStorage: storage, cookies: cookies}));
// base64
alert("not completed"); let file = new Blob([data], {type: "text"});
let a = document.createElement("a");
a.href = URL.createObjectURL(file);
a.download = "selenite.dat";
a.click();
} }
function uploadData() { function uploadData() {
let input = document.createElement("input");
input.type = "file";
input.accept = "dat";
input.click();
input.addEventListener("change", e => {
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") { 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 let fileReader = new FileReader();
// read file fileReader.addEventListener("load", e => {
// atob let data = JSON.parse(atob(e.target.result));
// set cookies let local = JSON.parse(data["localStorage"]);
// set localstorage let cookies = data["cookies"];
alert("not completed");
document.cookie = cookies;
Object.keys(local).forEach(e => {
localStorage.setItem(e, local[e]);
})
});
fileReader.readAsText(e.target.files[0]);
} }
})
};
async function deleteAllCaches() {
try {
const cacheNames = await caches.keys();
await Promise.all(
cacheNames.map(cacheName => {
return caches.delete(cacheName);
})
);
} catch {}
} }
</script> </script>
</head> </head>
@ -179,6 +210,7 @@
<p style="font-size:20px;margin:6px;">themes</p> <p style="font-size:20px;margin:6px;">themes</p>
<select id="themes"> <select id="themes">
<option value="">selenite</option> <option value="">selenite</option>
<option value="xmas">CHRISTMAS! (limited)</option>
<option value="blackandwhite">black and white</option> <option value="blackandwhite">black and white</option>
<option value="grass">grass</option> <option value="grass">grass</option>
<option value="evil">evil</option> <option value="evil">evil</option>
@ -189,6 +221,7 @@
<p style="font-size:20px;margin:6px;">toggles</p> <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="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> <div class="samerow"><input type="checkbox" id="superFastMode"><label for="superFastMode" title="disables all blurs and transparency">super fast mode</label></div>
<div class="samerow"><input type="checkbox" id="topGamesToggle"><label for="topGamesToggle">disable top games</label></div>
</section> </section>
<section> <section>
<h2>tab cloak</h2> <h2>tab cloak</h2>
@ -219,10 +252,11 @@
</section> </section>
<section> <section>
<h2>manage data</h2> <h2>manage data</h2>
<p>not implemented</p> <button onclick="downloadData()">download</button>
<button id="downloadData">download</button> <button onclick="uploadData()">upload</button>
<button id="uploadData">upload</button>
<button onclick="wipeData()">wipe (erases all game data)</button> <button onclick="wipeData()">wipe (erases all game data)</button>
<button onclick="deleteAllCaches()">wipe all cache</button>
<input id="toggleCDN" name="toggleCDN" type="checkbox"></inpuit> <label for="toggleCDN">cdn enabled</label>
</section> </section>
</sections> </sections>
</body> </body>

View File

@ -1,65 +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>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
<!-- initialize my stuff -->
<script src="/js/all.min.js"></script>
<script src="/js/main.js"></script>
<script src="/js/widget.js"></script>
<script src="/js/themes.js"></script>
<link rel="stylesheet" href="/style.css" />
<!-- seo + other things -->
<title>Selenite</title>
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<!-- toastify -->
<script>
</script>
</head>
<alerts>
</alerts>
<body id="noscroll">
<header>
<a href="/index.html">Home</a>
<a href="/bookmarklets.html">Bookmarklets</a>
<a href="/projects.html">Games</a>
<a href="/apps.html">Apps</a>
<a href="/settings.html">Settings</a>
<a id="blank" href="#">Open Blank</a>
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
</header>
<main id="main" class="noscroll">
<h1>Suggestions & Bug Reports</h1>
<p>Suggestions and Bug Reports have moved to the <a href="https://discord.gg/7jyufnwJNf">Discord</a>!</p>
<p>If for some reason you cannot join the Discord, or it is an urgent issue, then you may <a href="/contact.html">contact me</a>.</p>
</main>
<footer class="noscroll">
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
<a href="/suggest.html">Suggestions & Bugs</a>
<a href="/contact.html">Contact</a>
<a href="/support.html">Donate</a>
<a href="/about.html">About</a>
</footer>
</body>
</html>

View File

@ -1,64 +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>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/themes/dark.css" />
<script type="module" src="https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.9.0/cdn/shoelace-autoloader.js"></script>
<!-- initialize my stuff -->
<script src="/js/all.min.js"></script>
<script src="/js/main.js"></script>
<script src="/js/widget.js"></script>
<script src="/js/themes.js"></script>
<link rel="stylesheet" href="/style.css" />
<!-- seo + other things -->
<title>Support | Selenite</title>
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
</head>
<body id="noscroll">
<header>
<a href="/index.html">Home</a>
<a href="/bookmarklets.html">Bookmarklets</a>
<a href="/projects.html">Games</a>
<a href="/apps.html">Apps</a>
<a href="/settings.html">Settings</a>
<a id="blank" href="#">Open Blank</a>
<a href="/u/" class="usericon"><img src="/img/user.svg"></a>
</header>
<main id="main" class="noscroll">
<h1>support selenite</h1>
<p>i dont make anything off of this website, so anything would be greatly appreciated!</p>
<div class="samerow">
<div class="img-container">
<a href="https://patreon.com/selenitecc"><img src="img/Digital-Patreon-Logo_White.png"></a>
</div>
</div>
<p>also viewing this ad will help me :)</p>
<script async="async" data-cfasync="false" src="//pl22225360.toprevenuegate.com/92108816b5da54426d1639bcbfb5785c/invoke.js"></script>
<div id="container-92108816b5da54426d1639bcbfb5785c"></div>
</main>
<footer class="noscroll">
<a href="https://gitlab.com/skysthelimit.dev/selenite">Source</a>
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
<a href="/suggest.html">Suggestions & Bugs</a>
<a href="/contact.html">Contact</a>
<a href="/support.html">Donate</a>
<a href="/about.html">About</a>
</footer>
</body>
</html>

77
sw.js Normal file
View File

@ -0,0 +1,77 @@
importScripts(
'https://storage.googleapis.com/workbox-cdn/releases/6.4.1/workbox-sw.js'
);
let localStorageData = {
cdns: [],
disableCDN: true,
};
// yandere sim big files, cuphead, ddlc assets, renpy, renpy, buckshot roulette, half life, undertale & deltarune, hollow knight
let cacheable_files = ["YandereSim.data", "cuphead/Build/Build.data.unityweb.", "/ddlc/game/", "/ddlcplus/game/", "/co09/game/", "/co09flipside/game/", "/co09reup/game/", "renpy.data", "game.zip", "buckshot-roulette.pck", "halva_en-", "game.unx", "bog.data", "FTFHAPort.data.unityweb", "Content.tar.part", "thats-not-my-neighbor.pck", ".unityweb", "index.data.path"];
self.addEventListener("message", e => {
if (e.data && e.data.type == "localStorage") {
localStorageData = e.data;
}
});
if (workbox) {
self.skipWaiting();
workbox.core.clientsClaim();
workbox.routing.registerRoute(
({ url }) => {
if (localStorageData.disableCDN) return false;
if (localStorageData.cdns.length == 0) return false;
if (url.origin != location.origin) return false;
if (!url.pathname.includes("/resources/")) return false;
for (const file of cacheable_files) {
if (url.pathname.includes(file)) return true;
}
return false;
},
async ({ url }) => {
let cdn = localStorageData.cdns[0];
console.warn(url.href);
return Response.redirect(cdn + url.pathname, 302);
}
);
workbox.routing.registerRoute(
/\.(?:png|gif|jpg|jpeg|svg|webp|avif|gif)$/,
new workbox.strategies.CacheFirst({
cacheName: 'images-cache',
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 1200,
maxAgeSeconds: 365 * 24 * 60 * 60,
}),
],
})
);
workbox.routing.registerRoute(
/.*resources\/(semag|sppa).*/,
new workbox.strategies.CacheFirst({
cacheName: 'resources-cache',
plugins: [
new workbox.expiration.ExpirationPlugin({
maxEntries: 700,
maxAgeSeconds: 365 * 24 * 60 * 60,
}),
],
})
);
workbox.routing.registerRoute(
/.*resources\/(games|apps)\.json$/,
new workbox.strategies.StaleWhileRevalidate({
cacheName: 'json-cache',
plugins: [
new workbox.expiration.ExpirationPlugin({
maxAgeSeconds: 3 * 60 * 60,
maxEntries: 2,
}),
],
})
);
};