mirror of
https://github.com/cemu-project/cemu_graphic_packs.git
synced 2024-11-25 02:56:53 +01:00
e619010716
Also added a thing where you can add totally not available packs, for situations where there isn't any graphic pack for either V2 or V3
154 lines
7.3 KiB
JavaScript
154 lines
7.3 KiB
JavaScript
// Download latest version
|
|
|
|
fetch("https://api.github.com/repos/slashiee/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",
|
|
"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",
|
|
"breath of the dicknut": "The Legend of Zelda: Breath of the Wild"
|
|
};
|
|
|
|
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()];
|
|
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 == 3) versionBadgeText = document.createTextNode("Latest Cemu version");
|
|
else if (supportedGames[currResult].version == 2) versionBadgeText = document.createTextNode("Only supported on version 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 === 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="https://github.com/Crementif/cemu_graphic_packs/blob/gh-pages/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;
|
|
document.getElementById("information-box").classList.add(supportedGames[clickedGame].version3 ? "version-3-supported" : "version-3-unsupported");
|
|
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://compat.cemu.info/w/api?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; |