optimize a lot of stuff
This commit is contained in:
131
loader.html
131
loader.html
@ -7,70 +7,72 @@
|
||||
<!-- initialize externals -->
|
||||
|
||||
<!-- initialize my stuff -->
|
||||
<script src="/js/all.min.js" async></script>
|
||||
<script>
|
||||
<script src="/js/all.min.js" defer></script>
|
||||
<script defer>
|
||||
let gameData = {};
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
if (location.search != "") {
|
||||
let items = {};
|
||||
location.search.substr(1).split("&").forEach((e)=>{
|
||||
items[e.split("=")[0]] = e.split("=")[1]
|
||||
});
|
||||
if(items.type == "g") {
|
||||
items.type = "semag";
|
||||
gameData["type"] = "g";
|
||||
} else {
|
||||
items.type = "sppa";
|
||||
gameData["type"] = "a";
|
||||
}
|
||||
document.getElementById("gameFrame").setAttribute("src", `/resources/${items.type}/${items.dir}/index.html`);
|
||||
document.getElementById("gameImage").setAttribute("src", `/resources/${items.type}/${items.dir}/${items.img}`);
|
||||
document.getElementById("gameName").innerText = decodeURIComponent(items.title);
|
||||
gameData["path"] = items.dir;
|
||||
} else if(localStorage.getItem("selenite.lastGame")) {
|
||||
let game = JSON.parse(decodeURIComponent(atob(localStorage.getItem("selenite.lastGame"))));
|
||||
document.getElementById("gameFrame").setAttribute("src", `/resources/${items.type}/${game[0]}/index.html`);
|
||||
document.getElementById("gameImage").setAttribute("src", `/resources/${items.type}/${game[0]}/${decodeURIComponent(game[1])}`);
|
||||
document.getElementById("gameName").innerText = game[2];
|
||||
gameData["path"] = game[0];
|
||||
gameData["type"] = items.type == "semag" ? "g" : "a";
|
||||
const gameFrame = document.getElementById("gameFrame");
|
||||
const gameImage = document.getElementById("gameImage");
|
||||
const gameName = document.getElementById("gameName");
|
||||
const infobox = document.getElementById("infobox");
|
||||
const toggle = document.getElementById("infobox-toggle");
|
||||
|
||||
const params = new URLSearchParams(location.search);
|
||||
if (params.has("dir")) {
|
||||
const prefix = params.get("type") == "g" ? "semag" : "sppa";
|
||||
gameData.type = params.get("type");
|
||||
gameData.path = params.get("dir");
|
||||
gameFrame.src = `/resources/${prefix}/${gameData.path}/index.html`;
|
||||
gameImage.src = `/resources/${prefix}/${gameData.path}/${params.get("img")}`;
|
||||
gameName.innerText = decodeURIComponent(params.get("title"));
|
||||
} else if (localStorage.getItem("selenite.lastGame")) {
|
||||
const game = JSON.parse(decodeURIComponent(atob(localStorage.getItem("selenite.lastGame"))));
|
||||
gameData.type = game[3];
|
||||
gameData.path = game[0];
|
||||
const prefix = gameData.type == "g" ? "semag" : "sppa";
|
||||
gameFrame.src = `/resources/${prefix}/${gameData.path}/index.html`;
|
||||
gameImage.src = `/resources/${prefix}/${gameData.path}/${decodeURIComponent(game[1])}`;
|
||||
gameName.innerText = game[2];
|
||||
}
|
||||
document.getElementById("fullscreen").addEventListener("click", () => {
|
||||
document.getElementById("gameFrame").requestFullscreen();
|
||||
});
|
||||
document.getElementById("reload").addEventListener("click", () => {
|
||||
document.getElementById("gameFrame").src = document.getElementById("gameFrame").src;
|
||||
});
|
||||
document.getElementById("open").addEventListener("click", () => {
|
||||
window.open(document.getElementById("gameFrame").src);
|
||||
});
|
||||
|
||||
document.getElementById("fullscreen").addEventListener("click", () => gameFrame.requestFullscreen());
|
||||
document.getElementById("reload").addEventListener("click", () => { gameFrame.src = gameFrame.src; });
|
||||
document.getElementById("open").addEventListener("click", () => window.open(gameFrame.src));
|
||||
document.getElementById("share").addEventListener("click", () => {
|
||||
let link = location.origin + "#/" + gameData["type"] + "/" + gameData["path"];
|
||||
navigator.clipboard.writeText(link);
|
||||
navigator.clipboard.writeText(location.origin + "#/" + gameData.type + "/" + gameData.path);
|
||||
});
|
||||
|
||||
const isMobile = window.innerWidth <= 660;
|
||||
const savedCollapsed = localStorage.getItem("selenite.infobarCollapsed");
|
||||
const startCollapsed = savedCollapsed !== null ? savedCollapsed === "true" : isMobile;
|
||||
if (startCollapsed) infobox.classList.add("collapsed");
|
||||
toggle.addEventListener("click", () => {
|
||||
const collapsed = infobox.classList.toggle("collapsed");
|
||||
localStorage.setItem("selenite.infobarCollapsed", String(collapsed));
|
||||
});
|
||||
|
||||
fetch("/api/analytics/game", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({type: gameData["type"], path: gameData["path"]})
|
||||
})
|
||||
});
|
||||
setInterval(() => {
|
||||
let data = JSON.parse(localStorage.getItem("selenite.playTime") || "{}");
|
||||
let date = getDate();
|
||||
if(data[date]) {
|
||||
if(data[date][gameData.path]) {
|
||||
data[date][gameData.path] = Number(data[date][gameData.path]) + 1;
|
||||
} else {
|
||||
data[date][gameData.path] = 1;
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ type: gameData.type, path: gameData.path })
|
||||
});
|
||||
|
||||
let playTimeDirty = false;
|
||||
let playTimeCache = JSON.parse(localStorage.getItem("selenite.playTime") || "{}");
|
||||
setInterval(() => {
|
||||
if (!gameData.path) return;
|
||||
const date = getDate();
|
||||
if (!playTimeCache[date]) playTimeCache[date] = {};
|
||||
playTimeCache[date][gameData.path] = (playTimeCache[date][gameData.path] || 0) + 1;
|
||||
playTimeDirty = true;
|
||||
}, 1000);
|
||||
setInterval(() => {
|
||||
if (playTimeDirty) {
|
||||
localStorage.setItem("selenite.playTime", JSON.stringify(playTimeCache));
|
||||
playTimeDirty = false;
|
||||
}
|
||||
} else {
|
||||
data[date]={};
|
||||
data[date][gameData.path] = 1;
|
||||
}
|
||||
localStorage.setItem("selenite.playTime", JSON.stringify(data));
|
||||
}, 1000)
|
||||
}, 10000);
|
||||
});
|
||||
</script>
|
||||
|
||||
<link rel="stylesheet" href="/css/main.css" />
|
||||
@ -83,14 +85,17 @@
|
||||
<body>
|
||||
<iframe id="gameFrame" allow="cross-origin-isolated"></iframe>
|
||||
<div id="infobox">
|
||||
<img id="gameImage" src="favicon.png" />
|
||||
<h2 id="gameName">Selenite</h2>
|
||||
<div class="opposite">
|
||||
<img class="button" id="reload" src="/img/reload.svg">
|
||||
<img class="button" id="fullscreen" src="/img/fullscreen.svg">
|
||||
<img class="button" id="open" src="/img/open.svg">
|
||||
<img class="button" id="share" src="/img/share.svg">
|
||||
<div id="infobox-content">
|
||||
<img id="gameImage" src="favicon.png" />
|
||||
<h2 id="gameName">Selenite</h2>
|
||||
<div class="opposite">
|
||||
<img class="button" id="reload" src="/img/reload.svg">
|
||||
<img class="button" id="fullscreen" src="/img/fullscreen.svg">
|
||||
<img class="button" id="open" src="/img/open.svg">
|
||||
<img class="button" id="share" src="/img/share.svg">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<img id="infobox-toggle" src="/img/up.svg" />
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user