whatbere i want

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

View File

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

View File

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

View File

@ -1,14 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- initialize theme vars
<head>
<!-- initialize theme vars
https://coolors.co/10002b-240046-3c096c-5a189a-7b2cbf-9d4edd-c77dff-e0aaff -->
<!-- initialize externals -->
<!-- chroma.js -->
<script src="https://cdn.jsdelivr.net/npm/chroma-js@latest/chroma.min.js"></script>
<!-- initialize externals -->
<!-- chroma.js -->
<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",
"@type": "Organization",
@ -25,321 +26,326 @@
}
</script>
<!-- initialize my stuff -->
<script src="/js/all.min.js" async></script>
<script src="/js/main.js"></script>
<!-- <script src="/js/widget.js"></script> -->
<!-- initialize my stuff -->
<script src="/js/all.min.js" async></script>
<script src="/js/main.js"></script>
<!-- <script src="/js/widget.js"></script> -->
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" />
<link rel="stylesheet" href="/css/settings.css" />
<link rel="manifest" href="/manifest.json" />
<!-- seo + other things -->
<title>Selenite</title>
<link rel="icon" href="/favicon.ico" />
<script>
let cloaks = {
"powerschool": [
"Grades and Attendance", "https://www.powerschool.com/"
],
"canvas": [
"Dashboard", "https://usc.instructure.com/"
],
"google": [
"Google", "https://google.com/"
],
"drive": [
"My Drive - Google Drive", "https://drive.google.com"
],
"classroom": [
"Home", "https://google-classroom.en.softonic.com"
],
"khan": [
"Dashboard | Khan Academy", "https://www.khanacademy.org/favicon.ico"
]
<link rel="stylesheet" href="/css/main.css" />
<link rel="stylesheet" href="/css/pages.css" />
<link rel="stylesheet" href="/css/settings.css" />
<link rel="manifest" href="/manifest.json" />
<!-- seo + other things -->
<title>Selenite</title>
<link rel="icon" href="/favicon.ico" />
<script>
let cloaks = {
"powerschool": [
"Grades and Attendance", "https://www.powerschool.com/"
],
"canvas": [
"Dashboard", "https://usc.instructure.com/"
],
"google": [
"Google", "https://google.com/"
],
"drive": [
"My Drive - Google Drive", "https://drive.google.com"
],
"classroom": [
"Home", "https://google-classroom.en.softonic.com"
],
"khan": [
"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", () => {
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 (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";
}
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.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);
function getHiddenGames() {
try {
const parsed = JSON.parse(localStorage.getItem("selenite.hiddenGames") || "[]");
return parsed;
} catch {
return [];
})
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 || ""
}));
}
}
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;
});
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;
}
});
shown.forEach((game) => {
const row = document.createElement("label");
row.className = "hidden-game-row";
function getHiddenGames() {
try {
const parsed = JSON.parse(localStorage.getItem("selenite.hiddenGames") || "[]");
return parsed;
} catch {
return [];
}
}
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);
});
function setHiddenGames(games) {
localStorage.setItem("selenite.hiddenGames", JSON.stringify(games));
}
const text = document.createElement("span");
text.innerText = game.name;
function updateHiddenGamesCount(total) {
const hiddenCount = getHiddenGames().length;
const countEl = document.getElementById("hiddenGamesCount");
countEl.innerText = `${hiddenCount} hidden${total ? ` / ${total} total` : ""}`;
}
row.appendChild(checkbox);
row.appendChild(text);
list.appendChild(row);
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.json")).json();
} catch {
document.getElementById("hiddenGamesList").innerHTML = "<p>failed to load games list</p>";
return;
}
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));
games.sort((a, b) => a.name.localeCompare(b.name));
renderHiddenGameList(games, new Set(getHiddenGames()));
updateHiddenGamesCount(games.length);
renderHiddenGameList(games, new Set(getHiddenGames()));
updateHiddenGamesCount(games.length);
searchInput.addEventListener("input", () => {
renderHiddenGameList(games, new Set(getHiddenGames()), searchInput.value);
});
}
searchInput.addEventListener("input", () => {
renderHiddenGameList(games, new Set(getHiddenGames()), searchInput.value);
});
}
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]);
}
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"
})
};
async function deleteAllCaches() {
try {
const cacheNames = await caches.keys();
await Promise.all(
cacheNames.map(cacheName => {
return caches.delete(cacheName);
})
);
} catch {}
}
</script>
</head>
<body>
<h1 class="title">settings</h1>
<sections>
<section>
<h2>style</h2>
<p style="font-size:20px;margin:6px;">themes</p>
<select id="themes">
<option value="">selenite</option>
<option value="xmas">CHRISTMAS! (limited)</option>
<option value="blackandwhite">black and white</option>
<option value="grass">grass</option>
<option value="evil">evil</option>
<option value="sky">sky</option>
<option value="custom">custom</option>
</select>
<input type="color" id="colorPicker" style="display: none">
<p style="font-size:20px;margin:6px;">toggles</p>
<div class="samerow"><input type="checkbox" id="fastMode"><label for="fastMode" title="disables particles, animated background, & other misc effects">fast mode</label></div>
<div class="samerow"><input type="checkbox" id="superFastMode"><label for="superFastMode" title="disables all blurs and transparency">super fast mode</label></div>
<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>
}
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>
<body>
<h1 class="title">settings</h1>
<sections>
<section>
<h2>style</h2>
<p style="font-size:20px;margin:6px;">themes</p>
<select id="themes">
<option value="">selenite</option>
<option value="xmas">CHRISTMAS! (limited)</option>
<option value="blackandwhite">black and white</option>
<option value="grass">grass</option>
<option value="evil">evil</option>
<option value="sky">sky</option>
<option value="custom">custom</option>
</select>
<input type="color" id="colorPicker" style="display: none">
<p style="font-size:20px;margin:6px;">toggles</p>
<div class="samerow"><input type="checkbox" id="fastMode"><label for="fastMode"
title="disables particles, animated background, & other misc effects">fast mode</label></div>
<div class="samerow"><input type="checkbox" id="superFastMode"><label for="superFastMode"
title="disables all blurs and transparency">super fast mode</label></div>
<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>
<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>