mirror of
https://gitlab.com/skysthelimit.dev/selenite.git
synced 2025-06-15 18:12:08 -05:00
147 lines
5.3 KiB
HTML
147 lines
5.3 KiB
HTML
<!DOCTYPE html>
|
|
<html class="sl-theme-dark" lang="en">
|
|
<head>
|
|
<!-- initialize theme vars
|
|
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
|
|
|
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
|
|
<script src=" https://cdn.jsdelivr.net/npm/js-cookie@3.0.5/dist/js.cookie.min.js "></script>
|
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
|
|
<!-- initialize my stuff -->
|
|
<script src="/js/all.js"></script>
|
|
<script src="/js/apps.js"></script>
|
|
<script src="/js/search.js"></script>
|
|
<script src="/js/main.js"></script>
|
|
<script src="/js/themes.js"></script>
|
|
<script src="/js/cookie.js"></script>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/@widgetbot/crate@3" async defer>
|
|
new Crate({
|
|
server: '1148719137238040606', // Selenite
|
|
channel: '1173731814196645909', // #commands
|
|
color: getComputedStyle(document.body).getPropertyValue("--uibg")
|
|
})
|
|
</script>
|
|
<link rel="stylesheet" href="/style.css" />
|
|
<link rel="stylesheet" href="/themes.css" />
|
|
|
|
<!-- seo + other things -->
|
|
<title>Apps | Selenite</title>
|
|
<link rel="icon" href="/favicon.ico" />
|
|
|
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
|
|
<!-- toastify -->
|
|
<script></script>
|
|
</head>
|
|
<alerts>
|
|
<div id="toast"></div>
|
|
<script>
|
|
$.getJSON("data/changelog.json", (data) => {
|
|
if (localStorage.getItem("selenite.version") != data.version) {
|
|
toast({ title: "New Update!", message: data.desc, time: data.timestamp });
|
|
localStorage.setItem("selenite.version", data.version);
|
|
}
|
|
});
|
|
function toast(message, type) {
|
|
const toast = document.getElementById("toast");
|
|
toast.innerHTML = `<div class=samerow><h1>${message.title} - ${timeAgo(new Date(message.time * 1000))}</h1></div><p>${message.message}</p>`;
|
|
toast.style.animation = "toastFade 6s";
|
|
}
|
|
|
|
function timeAgo(input) {
|
|
const date = input instanceof Date ? input : new Date(input);
|
|
const formatter = new Intl.RelativeTimeFormat("en");
|
|
const ranges = {
|
|
years: 3600 * 24 * 365,
|
|
months: 3600 * 24 * 30,
|
|
weeks: 3600 * 24 * 7,
|
|
days: 3600 * 24,
|
|
hours: 3600,
|
|
minutes: 60,
|
|
seconds: 1,
|
|
};
|
|
const secondsElapsed = (date.getTime() - Date.now()) / 1000;
|
|
for (let key in ranges) {
|
|
if (ranges[key] < Math.abs(secondsElapsed)) {
|
|
const delta = secondsElapsed / ranges[key];
|
|
return formatter.format(Math.round(delta), key);
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</alerts>
|
|
<body>
|
|
<header>
|
|
<a href="/index.html">Home</a>
|
|
<a href="/bookmarklets.html">Bookmarklets</a>
|
|
<a href="/projects.html">Games</a>
|
|
<a href="/apps.html">Games</a>
|
|
<a href="/settings.html">Settings</a>
|
|
<a id="blank" href="#">Open Blank</a>
|
|
<div id="status">
|
|
<p id="time">00:00 AM</p>
|
|
</div>
|
|
</header>
|
|
<main>
|
|
<div id="adcontainer">
|
|
<h3><a href="ad.html">AD (click to read more):</a></h3>
|
|
<script async="async" data-cfasync="false" src="//snailthreatenedinvited.com/92108816b5da54426d1639bcbfb5785c/invoke.js"></script>
|
|
<div id="container-92108816b5da54426d1639bcbfb5785c"></div>
|
|
</div>
|
|
<h3 id="popunder" style="display: none;">You may be redirected upon clicking on the screen. This is an ad. <a style="font-size: inherit;" href="ad.html">Learn more.</a></h3>
|
|
<input class="hiddenUpload" type="file" accept=".save" hidden />
|
|
|
|
<input type="text" class="searchbar" id="gamesearch" placeholder="Type here to search.." />
|
|
<div class="samerow">
|
|
<sl-tooltip content="Remember to download your save, so you don't lose your progress." trigger="manual" class="manual-tooltip">
|
|
<button onclick="downloadMainSave()">Download Save</button>
|
|
</sl-tooltip>
|
|
<button id="upload" onclick="uploadMainSave()">Upload Save</button>
|
|
</div>
|
|
|
|
<h2>Starred Apps</h2>
|
|
<p id="pinnedmessage">Star some apps for things to show up here!</p>
|
|
<div id="pinned"></div>
|
|
|
|
<h2>All Apps</h2>
|
|
<div id="games">
|
|
<a href="/suggest.html"
|
|
><div class="suggest">
|
|
<img src="img/addlink.svg" alt="Add Game logo" style="filter: invert(1) !important" />
|
|
<h1>Suggest a app!</h1>
|
|
</div></a
|
|
>
|
|
<p id="message">apps loading..</p>
|
|
<p id="message">apps not loading? click ctrl + shift + r</p>
|
|
<button id="message" onclick='$.getJSON("/data/apps.json", function (data) {loadGames(data)})'>Apps not loading? Click here.</button>
|
|
</div>
|
|
<div id="adcontainer">
|
|
<script type="text/javascript" src="//snailthreatenedinvited.com/f9/78/06/f97806fd0f338057a67abb4e5e710970.js"></script>
|
|
</div>
|
|
<br />
|
|
</main>
|
|
|
|
<footer>
|
|
<a href="https://codeberg.org/skysthelimitt/selenite">Source</a>
|
|
<a href="https://discord.gg/7jyufnwJNf">Discord</a>
|
|
<a href="/suggest.html">Suggestions & Bugs</a>
|
|
<a href="/contact.html">Contact</a>
|
|
<a href="/support.html">Donate</a>
|
|
<a href="/about.html">About</a>
|
|
</footer>
|
|
<script>
|
|
document.addEventListener("DOMContentLoaded", function () {
|
|
const adContainers = document.querySelectorAll("[id=adcontainer]");
|
|
if (adContainers.length > 0) {
|
|
for (let i = 0; i < adContainers.length; i++) {
|
|
if (Math.random() < 0.5 && localStorage.getItem("selenite.adblock") != "true") {
|
|
adContainers[i].innerHTML = "";
|
|
}
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|