mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-11-25 11:06:54 +01:00
185 lines
8.7 KiB
JavaScript
185 lines
8.7 KiB
JavaScript
// Download latest version
|
|
|
|
fetch("https://api.github.com/repos/cemu-project/cemu_graphic_packs/releases/latest").then(fetchRes => fetchRes.json()).then(fetchJson => {
|
|
console.debug("Fetched releases from github...");
|
|
document.getElementById("primary_download").href = fetchJson.assets[0].browser_download_url;
|
|
return;
|
|
}).catch(fetchErr => {
|
|
console.error("Seems like something isn't working...", fetchErr);
|
|
});
|
|
|
|
// Search Supported Games
|
|
|
|
var supportedGames = undefined;
|
|
var supportedGamesSearchSet = undefined;
|
|
var supportedGamesSearchSetHalfTitles = {};
|
|
|
|
const altNames = {
|
|
"botw": "The Legend of Zelda: Breath of the Wild",
|
|
"hw": "Hyrule Warriors",
|
|
"mc": "Minecraft",
|
|
"slw": "Sonic Lost World",
|
|
"smm": "Super Mario Maker",
|
|
"mk8": "Mario Kart 8",
|
|
"tphd": "The Legend of Zelda: Twilight Princess HD",
|
|
"wwhd": "The Legend of Zelda: The Wind Waker HD",
|
|
// easter eggs
|
|
"zemu": "The Legend of Zelda: Breath of the Wild",
|
|
"breath of the dicknut": "The Legend of Zelda: Breath of the Wild",
|
|
"f-zero": "FAST Racing NEO",
|
|
"m&m": "Sonic",
|
|
"michael": "Sonic",
|
|
"best game": "Meme Run"
|
|
};
|
|
|
|
async function searchSupportedGames(searchString) {
|
|
document.getElementById("supported-games-search").classList.add("loading");
|
|
document.getElementById("supported-games-search-results").innerHTML = "";
|
|
|
|
if (!supportedGames) {
|
|
supportedGames = true;
|
|
await fetch((window.location.origin+window.location.pathname)+"/supported_titles.json", {cache: "no-store"}).then(fetchRes => fetchRes.json()).then(fetchJson => {
|
|
console.debug("Fetched supported titles from '/supported_titles.json'.");
|
|
supportedGames = fetchJson;
|
|
supportedGamesSearchSet = FuzzySet([], false, 2, 3);
|
|
for (supportedGame in supportedGames) {
|
|
supportedGamesSearchSet.add(supportedGame);
|
|
}
|
|
return;
|
|
}).catch(fetchErr => {
|
|
console.error("Seems like something bad happened!", fetchErr);
|
|
});
|
|
}
|
|
if (supportedGames === true) return; // Fix race errors with input
|
|
|
|
let resultsHintSearch = [];
|
|
if (Object.keys(altNames).includes(searchString.toLowerCase())) searchString = altNames[searchString.toLowerCase()];
|
|
switch (searchString.toLowerCase()) {
|
|
case "digital foundry": {
|
|
document.title = "Home - CEMU Hacks";
|
|
document.getElementsByClassName("navbar-brand")[0].innerText="CEMU Hacks";
|
|
document.getElementsByClassName("display-4")[0].innerText="CEMU Hacks";
|
|
document.getElementsByClassName("lead")[0].innerText = "Get your online CEMU hax here!!";
|
|
break;
|
|
}
|
|
case "ign": {
|
|
// IGN based for calling it community built presets & plugins instead of hacks
|
|
document.title = "Home - Cemu Plugins";
|
|
document.getElementsByClassName("navbar-brand")[0].innerText="Cemu Plugins";
|
|
document.getElementsByClassName("display-4")[0].innerText="Cemu Plugins";
|
|
break;
|
|
}
|
|
}
|
|
if (searchString != "*") resultsHintSearch = supportedGamesSearchSet.get(searchString);
|
|
else {
|
|
for (supportedGame in supportedGames) {
|
|
resultsHintSearch.push([0, supportedGame]);
|
|
}
|
|
|
|
}
|
|
|
|
if (resultsHintSearch != undefined && resultsHintSearch != null) {
|
|
for (let i=0; i<resultsHintSearch.length; i++) {
|
|
let currResult = resultsHintSearch[i][1];
|
|
|
|
let searchResultEntry = document.createElement("li");
|
|
let gameTitleText = document.createTextNode(currResult);
|
|
let versionBadge = document.createElement("span");
|
|
let versionBadgeText;
|
|
if (supportedGames[currResult].version == 4) versionBadgeText = document.createTextNode("Fully supports OpenGL and Vulkan");
|
|
else if (supportedGames[currResult].version == 3) versionBadgeText = document.createTextNode("Fully supports OpenGL");
|
|
else if (supportedGames[currResult].version == 2) versionBadgeText = document.createTextNode("Only supported on 1.8.0 through 1.13.2");
|
|
else versionBadgeText = document.createTextNode("No resolution pack yet :(");
|
|
let resolutionBadge = document.createElement("span");
|
|
let resolutionBadgeText = document.createTextNode(supportedGames[currResult].nativeRes+"p");
|
|
|
|
searchResultEntry.className = "list-group-item list-group-item-action";
|
|
versionBadge.className = "badge badge-light ml-2";
|
|
resolutionBadge.className = "badge badge-pill badge-primary float-right";
|
|
|
|
searchResultEntry.onclick=searchInfoModalTrigger
|
|
if (supportedGames[currResult].version === 4) {
|
|
searchResultEntry.classList.add("list-group-item-danger");
|
|
}
|
|
else if (supportedGames[currResult].version === 3) {
|
|
searchResultEntry.classList.add("list-group-item-primary");
|
|
}
|
|
else {
|
|
searchResultEntry.classList.add("list-group-item-secondary");
|
|
}
|
|
|
|
searchResultEntry.appendChild(gameTitleText);
|
|
versionBadge.appendChild(versionBadgeText);
|
|
searchResultEntry.appendChild(versionBadge);
|
|
resolutionBadge.appendChild(resolutionBadgeText);
|
|
searchResultEntry.appendChild(resolutionBadge);
|
|
document.getElementById("supported-games-search-results").appendChild(searchResultEntry);
|
|
}
|
|
}
|
|
|
|
|
|
document.getElementById("supported-games-search").classList.remove("loading");
|
|
}
|
|
|
|
async function searchInfoModalTrigger(clickedElem) {
|
|
$("#searchInfoModal").modal(); // Initiate animation
|
|
let clickedGame = clickedElem.target.firstChild.textContent;
|
|
|
|
// Reset Compat Information
|
|
document.getElementById("modal-preview-image").src="assets/images/no-cover-available.png";
|
|
document.getElementById("information-box").className="compat-status-loading";
|
|
|
|
document.getElementById("gameTitle").innerText=clickedGame;
|
|
document.getElementById("compatWikiButton").href=supportedGames[clickedGame].compatLink;
|
|
document.getElementById("nativeResolution").textContent=supportedGames[clickedGame].nativeRes;
|
|
if (supportedGames[clickedGame].version == 4) document.getElementById("information-box").classList.add("version-4-supported");
|
|
else if (supportedGames[clickedGame].version == 3) document.getElementById("information-box").classList.add("version-3-supported");
|
|
else if (supportedGames[clickedGame].version == 2) document.getElementById("information-box").classList.add("version-2-supported");
|
|
document.getElementById("information-box").classList.add(supportedGames[clickedGame].hasUltrawide ? "ultrawide-supported" : "ultrawide-unsupported");
|
|
|
|
if (supportedGames[clickedGame].hasOwnProperty("compatLink")) {
|
|
await fetch(`https://cors-anywhere.herokuapp.com/http://wiki.cemu.info/api.php?action=parse&page=${supportedGames[clickedGame].compatLink.split("http://compat.cemu.info/wiki/")[1]}&redirects=true&prop=parsetree&format=json`).then(fetchRes => fetchRes.json()).then(fetchJson => {
|
|
console.debug(`Fetched ${clickedGame}'s(=${supportedGames[clickedGame].compatLink.split("http://compat.cemu.info/wiki/")[1]}) compat wiki`, fetchJson);
|
|
let compatTemplates = new DOMParser().parseFromString(fetchJson.parse.parsetree["*"], "application/xml").documentElement.getElementsByTagName("template");
|
|
let compatJson = [];
|
|
|
|
for (let i=0; i<compatTemplates.length; i++) {
|
|
if (compatTemplates[i].firstChild.textContent.includes("Infobox VG")) {
|
|
let infoboxParts = compatTemplates[i].getElementsByTagName("name");
|
|
for (let j=0; j<infoboxParts.length; j++) {
|
|
compatJson[infoboxParts[j].textContent.trim()] = infoboxParts[j].nextElementSibling.textContent.trim();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
console.debug("Parsed compat info...", compatJson)
|
|
|
|
if (!compatJson.image.includes("*.jpg")) {
|
|
document.getElementById("modal-preview-image").src="https://images.weserv.nl/?url=compat.cemu.info/wiki/Special:Redirect/file/"+compatJson.image.split("File:")[1].split("|")[0];
|
|
}
|
|
document.getElementById("information-box").classList.remove("compat-status-loading");
|
|
document.getElementById("information-box").classList.add("compat-status-"+compatJson.rating.toLowerCase());
|
|
});
|
|
}
|
|
|
|
$("#searchInfoModal").modal();
|
|
}
|
|
|
|
function viewAllGames() {
|
|
searchSupportedGames("*");
|
|
document.getElementById("viewAllGames").onclick=hideAllGames;
|
|
document.getElementById("viewAllGames").innerText="Hide the game list...";
|
|
}
|
|
|
|
function hideAllGames() {
|
|
searchSupportedGames("");
|
|
document.getElementById("viewAllGames").onclick=viewAllGames;
|
|
document.getElementById("viewAllGames").innerText="Or view a list with all supported games...";
|
|
}
|
|
|
|
// searchSupportedGames(document.querySelector("#supported-games-search input.form-control").value); // If a user loads the page, execute the search inmediately. Initially meant so that if you'd return to the page and still had a search term, it would look correct.
|
|
document.querySelector("#supported-games-search input.form-control").value = ""; // Don't fetch stuff automatically when the user doesn't want to search. Considered better since it's an optional feature.
|
|
timeago().render(document.querySelectorAll('.commit-time'));
|
|
document.getElementById("viewAllGames").onclick=viewAllGames;
|