oh wow i was meant to push this a long time ago

This commit is contained in:
sky
2026-06-11 23:04:06 -04:00
parent e12d4d3017
commit 0605271327
7 changed files with 141 additions and 113 deletions

View File

@ -42,7 +42,7 @@ body {
overflow-y: hidden; overflow-y: hidden;
top: 0; top: 0;
} }
input[type=text], input[type=password] { input {
width: 70%; width: 70%;
border-style: solid; border-style: solid;
border-width: 2px; border-width: 2px;
@ -58,13 +58,13 @@ input[type=text], input[type=password] {
font-size: 20px; font-size: 20px;
text-shadow: var(--color-1) 0 0 10px; text-shadow: var(--color-1) 0 0 10px;
} }
input[type=text]:focus, input[type=password]:focus { input:focus {
filter:brightness(1.25) !important; filter:brightness(1.25) !important;
} }
input[type=text]:hover, input[type=password]:hover { input:hover {
filter:brightness(1.1); filter:brightness(1.1);
} }
input[type=text]::placeholder, input[type=password]::placeholder { input::placeholder {
color: color-mix(in srgb, var(--text-color) 20%, #00000000 80%); color: color-mix(in srgb, var(--text-color) 20%, #00000000 80%);
text-shadow: color-mix(in srgb, var(--text-color) 40%, #00000000 60%) 0 0 10px; text-shadow: color-mix(in srgb, var(--text-color) 40%, #00000000 60%) 0 0 10px;
} }

View File

@ -1,6 +1,6 @@
section { section {
min-width: 20%; min-width: 20%;
height: 400px; height: 420px;
padding: 8px; padding: 8px;
margin: 16px; margin: 16px;
background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%); background-color: color-mix(in srgb, var(--color-2) 40%, #00000000 60%);
@ -27,6 +27,28 @@ sections {
margin: 6px; margin: 6px;
} }
#hiddenGamesList {
width: min(280px, 90%);
height: 200px;
overflow-y: auto;
border: 1px solid color-mix(in srgb, var(--color-1) 50%, #00000000 50%);
border-radius: 12px;
padding: 8px;
margin: 8px 0;
}
.hidden-game-row {
display: flex;
align-items: center;
gap: 8px;
margin: 4px 0;
width: 100%;
}
#hiddenGamesSearch {
width: min(280px, 90%);
}
@-moz-document url-prefix() { @-moz-document url-prefix() {
section { section {
backdrop-filter: blur(0); backdrop-filter: blur(0);

View File

@ -137,7 +137,7 @@
let index = 0; let index = 0;
let welcome = document.querySelector("welcome"); let welcome = document.querySelector("welcome");
let blur = document.getElementById("blur"); // let blur = document.getElementById("blur");
// TODO: finish // TODO: finish
hideAll(); hideAll();
@ -147,11 +147,11 @@
function hideAll() { function hideAll() {
welcome.remove(); welcome.remove();
blur.remove(); // blur.remove();
} }
function finish() { function finish() {
welcome.style.opacity = "0"; welcome.style.opacity = "0";
blur.style.opacity = "0"; // blur.style.opacity = "0";
setTimeout(() => { setTimeout(() => {
hideAll(); hideAll();
document.cookie = "selenite.welcomeFinished=true"; document.cookie = "selenite.welcomeFinished=true";
@ -315,7 +315,7 @@
<button id="nextPage">done</button> <button id="nextPage">done</button>
</section> </section>
</welcome> </welcome>
<div id="blur"></div> <!-- <div id="blur"></div> -->
<iframe id="iframe" src="home.html" allow="cross-origin-isolated"></iframe> <iframe id="iframe" src="home.html" allow="cross-origin-isolated"></iframe>
<!-- to do <!-- to do
add colors --> add colors -->

View File

@ -7,6 +7,15 @@ let pageData;
let starredGames = []; let starredGames = [];
let globalPlays = null; let globalPlays = null;
function getHiddenGames() {
try {
const parsed = JSON.parse(localStorage.getItem("selenite.hiddenGames") || "[]");
return parsed;
} catch {
return [];
}
}
async function loadGames() { async function loadGames() {
if (type == "g") pageData = { path: "/resources/games-tagged.json", prefix: "semag", type: "g" }; if (type == "g") pageData = { path: "/resources/games-tagged.json", prefix: "semag", type: "g" };
else if (type == "a") pageData = { path: "/resources/apps.json", prefix: "sppa", type: "a" }; else if (type == "a") pageData = { path: "/resources/apps.json", prefix: "sppa", type: "a" };
@ -22,10 +31,18 @@ async function loadGames() {
const gamesFragment = document.createDocumentFragment(); const gamesFragment = document.createDocumentFragment();
const topFragment = document.createDocumentFragment(); const topFragment = document.createDocumentFragment();
const hiddenGames = pageData.type === "g" ? getHiddenGames() : [];
const hiddenSet = new Set(hiddenGames);
starredGames = JSON.parse(localStorage.getItem("selenite.starred") || "[]"); starredGames = JSON.parse(localStorage.getItem("selenite.starred") || "[]");
if (hiddenGames.length > 0) {
starredGames = starredGames.filter((game) => !hiddenSet.has(game));
localStorage.setItem("selenite.starred", JSON.stringify(starredGames));
}
const starredSet = new Set(starredGames); const starredSet = new Set(starredGames);
data.forEach((element) => { data.forEach((element) => {
if (hiddenSet.has(element.directory)) return;
const isStarred = starredSet.has(element.directory); const isStarred = starredSet.has(element.directory);
const newElement = document.createElement("a"); const newElement = document.createElement("a");
newElement.dataset.target = element.directory; newElement.dataset.target = element.directory;
@ -98,7 +115,11 @@ async function loadGames() {
gamesElement.appendChild(gamesFragment); gamesElement.appendChild(gamesFragment);
if (topGElement) topGElement.appendChild(topFragment); if (topGElement) topGElement.appendChild(topFragment);
document.getElementById("gameCount").innerText = `${data.length} games loaded!`; const visibleGameCount = elements.length;
const hiddenCount = hiddenGames.length;
document.getElementById("gameCount").innerText = hiddenCount > 0
? `${visibleGameCount} games loaded (${hiddenCount} hidden)`
: `${visibleGameCount} games loaded!`;
document.getElementById("loadingMsg").style.display = "none"; document.getElementById("loadingMsg").style.display = "none";
document.getElementById("allHeader").style.display = "block"; document.getElementById("allHeader").style.display = "block";
const topHeader = document.getElementById("topHeader"); const topHeader = document.getElementById("topHeader");

View File

@ -1,58 +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 type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Selenite",
"alternateName": "selenite.cc",
"url": "https://selenite.cc",
"logo": "https://selenite.cc/favicon.png",
"sameAs": [
"https://github.com/selenite-cc",
"https://youtube.com/@selenitecc",
"https://tiktok.com/@selenitecc",
"https://selenite.cc",
]
}
</script>
<!-- initialize my stuff -->
<script src="/js/all.js"></script>
<script src="/js/main.js"></script>
<!-- <script src="/js/widget.js"></script> -->
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" />
<link rel="stylesheet" href="/css/profile.css" />
<link rel="manifest" href="/manifest.json" />
<!-- seo + other things -->
<title>{{ name }}'s Profile | Selenite</title>
<link rel="icon" href="/favicon.ico" />
</head>
<alerts> </alerts>
<body>
<section>
<img src="{{ user_pfp }}" class="pfp" />
<div>
<h1>{{ name }}</h1>
<p>/u/{{ username }}</p>
<div class="badges">{{ badges }}</div>
</div>
<right>
<h2>Joined {{ join_date }}</h2>
<h2>Last online {{ online_time }}</h2>
</right>
</section>
<section class="column">
<h1>About Me</h1>
<p>{{ about }}</p>
</section>
</body>
</html>

View File

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

@ -131,7 +131,8 @@
} else { } else {
localStorage.setItem("selenite.disableCDN", "true") localStorage.setItem("selenite.disableCDN", "true")
} }
}) });
initHiddenGameSettings();
function generatePallete(color) { function generatePallete(color) {
let theme = {}; let theme = {};
let chromaColor = chroma(color); let chromaColor = chroma(color);
@ -145,6 +146,85 @@
return theme; return theme;
} }
}); });
function getHiddenGames() {
try {
const parsed = JSON.parse(localStorage.getItem("selenite.hiddenGames") || "[]");
return parsed;
} catch {
return [];
}
}
function setHiddenGames(games) {
localStorage.setItem("selenite.hiddenGames", JSON.stringify(games));
}
function updateHiddenGamesCount(total) {
const hiddenCount = getHiddenGames().length;
const countEl = document.getElementById("hiddenGamesCount");
countEl.innerText = `${hiddenCount} hidden${total ? ` / ${total} total` : ""}`;
}
function renderHiddenGameList(games, hiddenSet, filter = "") {
const list = document.getElementById("hiddenGamesList");
list.innerHTML = "";
const input = filter.trim().toUpperCase();
const shown = games.filter((game) => game.name.toUpperCase().includes(input));
if (shown.length === 0) {
const empty = document.createElement("p");
empty.innerText = "no games matched your search";
list.appendChild(empty);
return;
}
shown.forEach((game) => {
const row = document.createElement("label");
row.className = "hidden-game-row";
const checkbox = document.createElement("input");
checkbox.type = "checkbox";
checkbox.checked = hiddenSet.has(game.directory);
checkbox.addEventListener("change", () => {
const next = new Set(getHiddenGames());
if (checkbox.checked) next.add(game.directory);
else next.delete(game.directory);
const hidden = [...next].sort();
setHiddenGames(hidden);
updateHiddenGamesCount(games.length);
});
const text = document.createElement("span");
text.innerText = game.name;
row.appendChild(checkbox);
row.appendChild(text);
list.appendChild(row);
});
}
async function initHiddenGameSettings() {
const searchInput = document.getElementById("hiddenGamesSearch");
let games = [];
try {
games = await (await fetch("/resources/games-tagged.json")).json();
} catch {
document.getElementById("hiddenGamesList").innerHTML = "<p>failed to load games list</p>";
return;
}
games.sort((a, b) => a.name.localeCompare(b.name));
renderHiddenGameList(games, new Set(getHiddenGames()));
updateHiddenGamesCount(games.length);
searchInput.addEventListener("input", () => {
renderHiddenGameList(games, new Set(getHiddenGames()), searchInput.value);
});
}
function wipeData() { function wipeData() {
if(prompt("Wiping your data means you will lose all progress in every game, and every setting you have selected.\nAre you sure you would like to continue?\n\nType \"please wipe my data\" to continue.") == "please wipe my data") { if(prompt("Wiping your data means you will lose all progress in every game, and every setting you have selected.\nAre you sure you would like to continue?\n\nType \"please wipe my data\" to continue.") == "please wipe my data") {
localStorage.clear(); localStorage.clear();
@ -254,6 +334,12 @@
<button onclick="deleteAllCaches()">wipe all cache</button> <button onclick="deleteAllCaches()">wipe all cache</button>
<input id="toggleCDN" name="toggleCDN" type="checkbox"></inpuit> <label for="toggleCDN">cdn enabled</label> <input id="toggleCDN" name="toggleCDN" type="checkbox"></inpuit> <label for="toggleCDN">cdn enabled</label>
</section> </section>
<section>
<h2>hidden games</h2>
<p id="hiddenGamesCount">0 hidden</p>
<input type="text" id="hiddenGamesSearch" placeholder="search games">
<div id="hiddenGamesList"></div>
</section>
</sections> </sections>
</body> </body>
</html> </html>