whatbere i want

This commit is contained in:
first@lynx.com
2026-06-17 00:08:35 -04:00
parent 0605271327
commit b3b907367f
3 changed files with 348 additions and 335 deletions

View File

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

View File

@ -17,7 +17,7 @@ function getHiddenGames() {
} }
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.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" };
else { sAlert("this is not valid"); return; } else { sAlert("this is not valid"); return; }

View File

@ -1,14 +1,15 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head>
<!-- initialize theme vars <head>
<!-- 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 -->
<!-- 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>
<script type="application/ld+json"> <script type="application/ld+json">
{ {
"@context": "https://schema.org", "@context": "https://schema.org",
"@type": "Organization", "@type": "Organization",
@ -25,321 +26,326 @@
} }
</script> </script>
<!-- initialize my stuff --> <!-- initialize my stuff -->
<script src="/js/all.min.js" async></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> -->
<link rel="stylesheet" href="/css/main.css" /> <link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" /> <link rel="stylesheet" href="/css/pages.css" />
<link rel="stylesheet" href="/css/settings.css" /> <link rel="stylesheet" href="/css/settings.css" />
<link rel="manifest" href="/manifest.json" /> <link rel="manifest" href="/manifest.json" />
<!-- 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> <script>
let cloaks = { let cloaks = {
"powerschool": [ "powerschool": [
"Grades and Attendance", "https://www.powerschool.com/" "Grades and Attendance", "https://www.powerschool.com/"
], ],
"canvas": [ "canvas": [
"Dashboard", "https://usc.instructure.com/" "Dashboard", "https://usc.instructure.com/"
], ],
"google": [ "google": [
"Google", "https://google.com/" "Google", "https://google.com/"
], ],
"drive": [ "drive": [
"My Drive - Google Drive", "https://drive.google.com" "My Drive - Google Drive", "https://drive.google.com"
], ],
"classroom": [ "classroom": [
"Home", "https://google-classroom.en.softonic.com" "Home", "https://google-classroom.en.softonic.com"
], ],
"khan": [ "khan": [
"Dashboard | Khan Academy", "https://www.khanacademy.org/favicon.ico" "Dashboard | Khan Academy", "https://www.khanacademy.org/favicon.ico"
] ]
}
document.addEventListener("DOMContentLoaded", () => {
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") {
document.getElementById("colorPicker").style.display = "block";
document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor");
} else {
document.getElementById("colorPicker").style.display = "none";
} }
document.addEventListener("DOMContentLoaded", () => { if (localStorage.getItem("selenite.fast-mode") == 'true') {
document.querySelector(`option[value="${localStorage.getItem("selenite.theme") || ""}"]`).setAttribute("selected", ""); document.getElementById("fastMode").setAttribute("checked", "")
document.getElementById("toggleCDN").checked = localStorage.getItem("selenite.disableCDN") ? false : true; };
if(document.getElementById("themes").value == "custom") { if (localStorage.getItem("selenite.super-fast-mode") == 'true') {
document.getElementById("superFastMode").setAttribute("checked", "")
};
if (localStorage.getItem("selenite.disableTopGames") == 'false') {
document.getElementById("topGamesToggle").setAttribute("checked", "")
};
document.getElementById("themes").addEventListener("input", (e) => {
localStorage.setItem("selenite.theme", e.target.value);
document.body.setAttribute("theme", e.target.value);
if (e.target.value == "custom") {
document.getElementById("colorPicker").style.display = "block"; document.getElementById("colorPicker").style.display = "block";
document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor"); document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor");
} else { } else {
document.getElementById("colorPicker").style.display = "none"; document.getElementById("colorPicker").style.display = "none";
} document.body.removeAttribute("style");
if(localStorage.getItem("selenite.fast-mode") == 'true') {
document.getElementById("fastMode").setAttribute("checked", "")
};
if(localStorage.getItem("selenite.super-fast-mode") == 'true') {
document.getElementById("superFastMode").setAttribute("checked", "")
};
if(localStorage.getItem("selenite.disableTopGames") == 'false') {
document.getElementById("topGamesToggle").setAttribute("checked", "")
};
document.getElementById("themes").addEventListener("input", (e)=>{
localStorage.setItem("selenite.theme", e.target.value);
document.body.setAttribute("theme", e.target.value);
if(e.target.value == "custom") {
document.getElementById("colorPicker").style.display = "block";
document.getElementById("colorPicker").value = localStorage.getItem("selenite.customThemeMainColor");
} else {
document.getElementById("colorPicker").style.display = "none";
document.body.removeAttribute("style");
}
});
document.getElementById("colorPicker").addEventListener("input", (e) => {
let generatedTheme = generatePallete(e.target.value);
localStorage.setItem("selenite.customTheme", JSON.stringify(generatedTheme));
localStorage.setItem("selenite.customThemeMainColor", e.target.value);
setTheme(generatedTheme);
})
document.getElementById("fastMode").addEventListener("click", (e) => {
localStorage.setItem("selenite.fast-mode", !(e.target.checked == false));
location.reload();
});
document.getElementById("superFastMode").addEventListener("click", (e) => {
localStorage.setItem("selenite.super-fast-mode", !(e.target.checked == false));
location.reload();
});
document.getElementById("topGamesToggle").addEventListener("click", (e) => {
localStorage.setItem("selenite.disableTopGames", (e.target.checked == false));
});
document.getElementById("submitCloak").addEventListener("click", (e) => {
if(document.getElementById("cloaks").value) {
localStorage.setItem("selenite.tab-cloak", JSON.stringify({
"name": cloaks[document.getElementById("cloaks").value][0],
"icon": cloaks[document.getElementById("cloaks").value][1]
}));
} else {
localStorage.setItem("selenite.tab-cloak", JSON.stringify({
"name": document.getElementById("cloakName").value || "",
"icon": document.getElementById("cloakIcon").value || ""
}));
}
});
document.getElementById("submitPanic").addEventListener("click", (e) => {
localStorage.setItem("selenite.panic-mode", JSON.stringify({
"key": document.getElementById("panicKey").value || "",
"url": document.getElementById("panicURL").value || ""
}));
});
document.getElementById("toggleCDN").addEventListener("change", () => {
let toggle = document.getElementById("toggleCDN");
if(toggle.checked) {
localStorage.removeItem("selenite.disableCDN");
} else {
localStorage.setItem("selenite.disableCDN", "true")
}
});
initHiddenGameSettings();
function generatePallete(color) {
let theme = {};
let chromaColor = chroma(color);
theme["color-1"] = chromaColor.hex();
theme["color-2"] = chromaColor.darken(1).hex();
theme["color-3"] = chromaColor.darken(2).hex();
theme["color-4"] = chromaColor.darken(3).hex();
theme["bg-1"] = chromaColor.darken(1.5).hex();
theme["bg-2"] = chromaColor.darken(2.5).hex();
theme["text-color"] = "#fff"
return theme;
} }
}); });
document.getElementById("colorPicker").addEventListener("input", (e) => {
let generatedTheme = generatePallete(e.target.value);
localStorage.setItem("selenite.customTheme", JSON.stringify(generatedTheme));
localStorage.setItem("selenite.customThemeMainColor", e.target.value);
setTheme(generatedTheme);
function getHiddenGames() { })
try { document.getElementById("fastMode").addEventListener("click", (e) => {
const parsed = JSON.parse(localStorage.getItem("selenite.hiddenGames") || "[]"); localStorage.setItem("selenite.fast-mode", !(e.target.checked == false));
return parsed; location.reload();
} catch { });
return []; document.getElementById("superFastMode").addEventListener("click", (e) => {
localStorage.setItem("selenite.super-fast-mode", !(e.target.checked == false));
location.reload();
});
document.getElementById("topGamesToggle").addEventListener("click", (e) => {
localStorage.setItem("selenite.disableTopGames", (e.target.checked == false));
});
document.getElementById("submitCloak").addEventListener("click", (e) => {
if (document.getElementById("cloaks").value) {
localStorage.setItem("selenite.tab-cloak", JSON.stringify({
"name": cloaks[document.getElementById("cloaks").value][0],
"icon": cloaks[document.getElementById("cloaks").value][1]
}));
} else {
localStorage.setItem("selenite.tab-cloak", JSON.stringify({
"name": document.getElementById("cloakName").value || "",
"icon": document.getElementById("cloakIcon").value || ""
}));
} }
} });
document.getElementById("submitPanic").addEventListener("click", (e) => {
function setHiddenGames(games) { localStorage.setItem("selenite.panic-mode", JSON.stringify({
localStorage.setItem("selenite.hiddenGames", JSON.stringify(games)); "key": document.getElementById("panicKey").value || "",
} "url": document.getElementById("panicURL").value || ""
}));
function updateHiddenGamesCount(total) { });
const hiddenCount = getHiddenGames().length; document.getElementById("toggleCDN").addEventListener("change", () => {
const countEl = document.getElementById("hiddenGamesCount"); let toggle = document.getElementById("toggleCDN");
countEl.innerText = `${hiddenCount} hidden${total ? ` / ${total} total` : ""}`; if (toggle.checked) {
} localStorage.removeItem("selenite.disableCDN");
} else {
function renderHiddenGameList(games, hiddenSet, filter = "") { localStorage.setItem("selenite.disableCDN", "true")
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;
} }
});
initHiddenGameSettings();
function generatePallete(color) {
let theme = {};
let chromaColor = chroma(color);
theme["color-1"] = chromaColor.hex();
theme["color-2"] = chromaColor.darken(1).hex();
theme["color-3"] = chromaColor.darken(2).hex();
theme["color-4"] = chromaColor.darken(3).hex();
theme["bg-1"] = chromaColor.darken(1.5).hex();
theme["bg-2"] = chromaColor.darken(2.5).hex();
theme["text-color"] = "#fff"
return theme;
}
});
shown.forEach((game) => { function getHiddenGames() {
const row = document.createElement("label"); try {
row.className = "hidden-game-row"; const parsed = JSON.parse(localStorage.getItem("selenite.hiddenGames") || "[]");
return parsed;
} catch {
return [];
}
}
const checkbox = document.createElement("input"); function setHiddenGames(games) {
checkbox.type = "checkbox"; localStorage.setItem("selenite.hiddenGames", JSON.stringify(games));
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"); function updateHiddenGamesCount(total) {
text.innerText = game.name; const hiddenCount = getHiddenGames().length;
const countEl = document.getElementById("hiddenGamesCount");
countEl.innerText = `${hiddenCount} hidden${total ? ` / ${total} total` : ""}`;
}
row.appendChild(checkbox); function renderHiddenGameList(games, hiddenSet, filter = "") {
row.appendChild(text); const list = document.getElementById("hiddenGamesList");
list.appendChild(row); 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.json")).json();
} catch {
document.getElementById("hiddenGamesList").innerHTML = "<p>failed to load games list</p>";
return;
} }
async function initHiddenGameSettings() { games.sort((a, b) => a.name.localeCompare(b.name));
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);
renderHiddenGameList(games, new Set(getHiddenGames())); searchInput.addEventListener("input", () => {
updateHiddenGamesCount(games.length); renderHiddenGameList(games, new Set(getHiddenGames()), searchInput.value);
});
}
searchInput.addEventListener("input", () => { function wipeData() {
renderHiddenGameList(games, new Set(getHiddenGames()), searchInput.value); if (prompt("Wiping your data means you will lose all progress in every game, and every setting you have selected.\nAre you sure you would like to continue?\n\nType \"please wipe my data\" to continue.") == "please wipe my data") {
}); localStorage.clear();
} document.cookie.split(";").forEach(e => {
document.cookie = e.split("=")[0] + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"
function wipeData() {
if(prompt("Wiping your data means you will lose all progress in every game, and every setting you have selected.\nAre you sure you would like to continue?\n\nType \"please wipe my data\" to continue.") == "please wipe my data") {
localStorage.clear();
document.cookie.split(";").forEach(e => {
document.cookie = e.split("=")[0] + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"
})
}
}
function downloadData() {
let storage = JSON.stringify(localStorage);
let cookies = document.cookie;
let data = btoa(JSON.stringify({localStorage: storage, cookies: cookies}));
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() {
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") {
let fileReader = new FileReader();
fileReader.addEventListener("load", e => {
let data = JSON.parse(atob(e.target.result));
let local = JSON.parse(data["localStorage"]);
let cookies = data["cookies"];
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> }
</head> function downloadData() {
<body> let storage = JSON.stringify(localStorage);
<h1 class="title">settings</h1> let cookies = document.cookie;
<sections> let data = btoa(JSON.stringify({ localStorage: storage, cookies: cookies }));
<section>
<h2>style</h2> let file = new Blob([data], { type: "text" });
<p style="font-size:20px;margin:6px;">themes</p> let a = document.createElement("a");
<select id="themes"> a.href = URL.createObjectURL(file);
<option value="">selenite</option> a.download = "selenite.dat";
<option value="xmas">CHRISTMAS! (limited)</option> a.click();
<option value="blackandwhite">black and white</option> }
<option value="grass">grass</option> function uploadData() {
<option value="evil">evil</option> let input = document.createElement("input");
<option value="sky">sky</option> input.type = "file";
<option value="custom">custom</option> input.accept = "dat";
</select> input.click();
<input type="color" id="colorPicker" style="display: none"> input.addEventListener("change", e => {
<p style="font-size:20px;margin:6px;">toggles</p> 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") {
<div class="samerow"><input type="checkbox" id="fastMode"><label for="fastMode" title="disables particles, animated background, & other misc effects">fast mode</label></div> let fileReader = new FileReader();
<div class="samerow"><input type="checkbox" id="superFastMode"><label for="superFastMode" title="disables all blurs and transparency">super fast mode</label></div> fileReader.addEventListener("load", e => {
<div class="samerow"><input type="checkbox" id="topGamesToggle"><label for="topGamesToggle">disable top games</label></div> let data = JSON.parse(atob(e.target.result));
</section> let local = JSON.parse(data["localStorage"]);
<section> let cookies = data["cookies"];
<h2>tab cloak</h2>
<p>website name</p> document.cookie = cookies;
<input type="text" id="cloakName"> Object.keys(local).forEach(e => {
<p>website icon</p> localStorage.setItem(e, local[e]);
<input type="text" id="cloakIcon"> })
<select id="cloaks"> });
<option value="">or select a preset</option> fileReader.readAsText(e.target.files[0]);
<option value="powerschool">powerschool</option> }
<option value="canvas">canvas</option> })
<option value="google">google</option> };
<option value="drive">google drive</option> async function deleteAllCaches() {
<option value="classroom">google classroom</option> try {
<option value="khan">khan academy</option> const cacheNames = await caches.keys();
</select>
await Promise.all(
<button id="submitCloak">set tab cloak</button> cacheNames.map(cacheName => {
</section> return caches.delete(cacheName);
<section> })
<h2>panic mode</h2> );
<p title="the key you need to click to automatically exit selenite">key</p> } catch { }
<input type="text" id="panicKey" maxlength="1"> }
<p title="the url itll direct you to">website</p> </script>
<input type="text" id="panicURL"> </head>
<button id="submitPanic">set panic mode</button>
</section> <body>
<section> <h1 class="title">settings</h1>
<h2>manage data</h2> <sections>
<button onclick="downloadData()">download</button> <section>
<button onclick="uploadData()">upload</button> <h2>style</h2>
<button onclick="wipeData()">wipe (erases all game data)</button> <p style="font-size:20px;margin:6px;">themes</p>
<button onclick="deleteAllCaches()">wipe all cache</button> <select id="themes">
<input id="toggleCDN" name="toggleCDN" type="checkbox"></inpuit> <label for="toggleCDN">cdn enabled</label> <option value="">selenite</option>
</section> <option value="xmas">CHRISTMAS! (limited)</option>
<section> <option value="blackandwhite">black and white</option>
<h2>hidden games</h2> <option value="grass">grass</option>
<p id="hiddenGamesCount">0 hidden</p> <option value="evil">evil</option>
<input type="text" id="hiddenGamesSearch" placeholder="search games"> <option value="sky">sky</option>
<div id="hiddenGamesList"></div> <option value="custom">custom</option>
</section> </select>
</sections> <input type="color" id="colorPicker" style="display: none">
</body> <p style="font-size:20px;margin:6px;">toggles</p>
</html> <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="topGamesToggle"><label for="topGamesToggle">disable top
games</label></div>
</section>
<section>
<h2>tab cloak</h2>
<p>website name</p>
<input type="text" id="cloakName">
<p>website icon</p>
<input type="text" id="cloakIcon">
<select id="cloaks">
<option value="">or select a preset</option>
<option value="powerschool">powerschool</option>
<option value="canvas">canvas</option>
<option value="google">google</option>
<option value="drive">google drive</option>
<option value="classroom">google classroom</option>
<option value="khan">khan academy</option>
</select>
<button id="submitCloak">set tab cloak</button>
</section>
<section>
<h2>panic mode</h2>
<p title="the key you need to click to automatically exit selenite">key</p>
<input type="text" id="panicKey" maxlength="1">
<p title="the url itll direct you to">website</p>
<input type="text" id="panicURL">
<button id="submitPanic">set panic mode</button>
</section>
<section>
<h2>manage data</h2>
<button onclick="downloadData()">download</button>
<button onclick="uploadData()">upload</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>
<h2>hidden games</h2>
<p id="hiddenGamesCount">0 hidden</p>
<input type="text" id="hiddenGamesSearch" placeholder="search games">
<div id="hiddenGamesList"></div>
</section>
</sections>
</body>
</html>