From d9286f70edbe86419586bd14a656d99ba9e15733 Mon Sep 17 00:00:00 2001 From: LEGALISE_PIRACY Date: Mon, 11 Mar 2024 15:30:33 +0000 Subject: [PATCH] Add js/apps.js --- js/apps.js | 197 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 js/apps.js diff --git a/js/apps.js b/js/apps.js new file mode 100644 index 00000000..610aea3b --- /dev/null +++ b/js/apps.js @@ -0,0 +1,197 @@ +$.getJSON("/data/apps.json", function (data) { + if (document.readyState === "complete") { + loadGames(data); + } else { + let areGamesReady = setInterval(() => { + if (document.readyState === "complete") { + loadGames(data); + clearInterval(areGamesReady); + } + }, 50); + } +}); + +function loadGames(data) { + starredgames = getCookie("starred"); + if (!starredgames) { + starredgames = []; + } else { + starredgames = JSON.parse(decodeURIComponent(getCookie("starred"))); + } + $("#gamesearch").prop({ + placeholder: "Click here to search through our " + data.length + " apps!", + }); + data.sort(dynamicSort("name")); + gamelist = data; + for (let i = 0; i < data.length; i++) { + let $element = $("") + .attr({ + class: "game", + id: data[i].directory, + recommended: data[i].recommended, + href: "semag/" + data[i].directory + "/index.html", + }) + .data("recommended", data[i].recommended) + .append( + $("").prop({ + src: "sppa/" + data[i].directory + "/" + data[i].image, + alt: data[i].name + " logo", + }) + ) + .append($("

").text(data[i].name)) + .append( + $("").prop({ + src: "img/star.svg", + alt: "star", + class: "star", + }) + ); + + if (starredgames.includes(data[i].directory)) { + $element.find("img.star").attr("id", "starred"); + $element.find("img.star").attr("src", "img/star-fill.svg"); + let $pinnedelement = $element.clone(); + $("#pinned").append($pinnedelement); + if ($("#pinnedmessage")) { + $("#pinnedmessage").hide(); + } + } + + $("#games").append($element); + } + $("#games #message").remove(); + + if ((search = 1)) { + var txt = $("#gamesearch").val(); + if (txt == "") { + $("#games .suggest").show(); + } else { + $("#games .suggest").hide(); + } + $("#games .game").hide(); + $("#games .game").each(function () { + if ($(this).text().toUpperCase().indexOf(txt.toUpperCase()) != -1 || $(this).attr("id").toUpperCase().indexOf(txt.toUpperCase()) != -1) { + $(this).show(); + } + }); + } + + // starred games + let starred; + $(document).on("click", "img.star", function (event) { + + }); + $(document).on("click", ".game", function (event) { + if ($(event.target).is("img.star")) { + event.preventDefault(); + event.stopPropagation(); + if (!$(event.target).attr("id")) { + $(event.target).prop({ id: "starred" }); + $(event.target).prop({ src: "img/star-fill.svg" }); + starred = Cookies.get("starred"); + if (starred) { + starred = JSON.parse(starred); + } else { + starred = []; + } + starred.push($(this).attr("id")); + Cookies.set("starred", JSON.stringify(starred)); + $element = $(this).clone(); + $("#pinned").append($element); + $("#pinnedmessage").hide(); + temp = $("#pinned")[0].childNodes; + pinnedarray = [...temp]; + pinnedarray.sort(dynamicSort("id")); + $("#pinned").empty(); + for (let i = 0; i < pinnedarray.length; i++) { + pinnedarraynodes = pinnedarray[i].childNodes; + pinnedarraynodes = [...pinnedarraynodes]; + let $element = $("
") + .prop({ + class: "game", + id: pinnedarray[i].id, + }) + .append( + $("").prop({ + src: pinnedarraynodes[0].src, + alt: pinnedarraynodes[0].alt, + class: "gameicon", + }) + ) + .append($("

").text(pinnedarraynodes[1].innerHTML)) + .append( + $("").prop({ + src: "img/star-fill.svg", + alt: "star", + class: "star", + id: "starred", + }) + ); + $("#pinned").append($element); + } + } else { + $(event.target).removeAttr("id"); + $(event.target).attr("src", "img/star.svg"); + $thisdiv = "#" + $(this).attr("id"); + $thisdiv = $thisdiv.replace(".", "\\."); + starred = Cookies.get("starred"); + starred = JSON.parse(starred); + ourindex = starred.indexOf($(this).attr("id")); + starred.splice(ourindex, 1); + Cookies.set("starred", JSON.stringify(starred)); + $("#pinned " + $thisdiv).remove(); + if ($("#pinned").is(":empty")) { + $("#pinnedmessage").show(); + } + $($thisdiv + " #starred").attr("src", "img/star.svg"); + $($thisdiv + " #starred").removeAttr("id"); + } + } + }); + $(document).on("click", "#game img .star", function (event) { + event.stopPropagation(); + $(this).prop({ class: "material-symbols-outlined fill" }); + }); +} + +function redirectGame(dir) { + window.location.href = window.location.origin + "/semag/" + dir + "/index.html"; +} +function dynamicSort(property) { + var sortOrder = 1; + + if (property[0] === "-") { + sortOrder = -1; + property = property.substr(1); + } + return function (a, b) { + if (sortOrder == -1) { + return b[property].localeCompare(a[property]); + } else { + return a[property].localeCompare(b[property]); + } + }; +} + +function selectRandomGame() { + redirectGame(gamelist[Math.floor(Math.random() * gamelist.length - 1)].directory); +} + +let viewrecommended = 0; +function recommendedGames() { + if (viewrecommended == 0) { + $("#games .game").hide(); + $("#games .game").each(function () { + if ($(this).attr("recommended")) { + $(this).show(); + } + }); + $("#recommend").text("Click to view all apps again!"); + viewrecommended = 1; + } else { + $("#games .game").hide(); + $("#games .game").show(); + viewrecommended = 0; + $("#recommend").text("Click to view recommended apps!"); + } +} \ No newline at end of file