diff --git a/renderer/renderer.js b/renderer/renderer.js
index d0bf2fc..6b18b36 100644
--- a/renderer/renderer.js
+++ b/renderer/renderer.js
@@ -4,7 +4,8 @@ const view = document.getElementById("view");
const HomeTemplate = document.getElementById("home-template");
const installedModsTemplate = document.getElementById("installed-mods-template");
-const onlineModsTemplate = document.getElementById("online-mods-template");
+const nexusModsTemplate = document.getElementById("nexus-mods-template");
+const thunderstoreModsTemplate = document.getElementById("thunderstore-mods-template");
const settingsTemplate = document.getElementById("settings-template");
const installedModTemplate = document.getElementById("installed-mod-template");
const modTemplate = document.getElementById("mod-template");
@@ -14,18 +15,31 @@ let actualTheme = [];
let searchValueNexus = "";
let searchValueInstalled = "";
+let searchValueThunderstore = "";
+
let onlineSortFilter = "downloads";
let installedSortFilter = "name";
+let thunderstoreSortFilter = "downloads";
+
let onlineSortOrder = "DESC";
let installedSortOrder = "ASC";
+let thunderstoreSortOrder = "DESC";
+
let onlineOffset = 0;
let installedOffset = 0;
+let thunderstoreOffset = 0;
+
let lastOnlineOffset = 0;
let lastInstalledOffset = 0;
+let lastThunderstoreOffset = 0;
+
let onlineModsCount = 10;
let installedModsCount = 10;
+let thunderstoreModsCount = 10;
+
let onlineModsTotalCount;
let installedModsTotalCount;
+let thunderstoreModsTotalCount;
//////////////////////////////////////////////////////
///////////////// CONST FOR WELCOME //////////////////
@@ -183,8 +197,8 @@ async function navigate(page) {
break;
case "mods-online":
- title.innerText = "Online Mods";
- const onlineModsTemplateCopy = onlineModsTemplate.content.cloneNode(true);
+ title.innerText = "Nexus Mods";
+ const onlineModsTemplateCopy = nexusModsTemplate.content.cloneNode(true);
const ModsContainer = onlineModsTemplateCopy.getElementById("mods-container");
const searchFormNexus = onlineModsTemplateCopy.getElementById("search-form");
const searchInputNexus = onlineModsTemplateCopy.getElementById("search-input");
@@ -266,6 +280,22 @@ async function navigate(page) {
}
break;
+ case "mods-thunderstore":
+ title.innerText = "Thunderstore Mods";
+ const thunderstoreModsTemplateCopy = thunderstoreModsTemplate.content.cloneNode(true);
+ const thunderstoreModsContainer = thunderstoreModsTemplateCopy.getElementById("mods-container");
+ const searchFormThunderstore = thunderstoreModsTemplateCopy.getElementById("search-form");
+ const searchInputThunderstore = thunderstoreModsTemplateCopy.getElementById("search-input");
+
+ searchFormThunderstore.addEventListener("submit", async function (event) {
+ event.preventDefault();
+ });
+ searchInputThunderstore.value = searchValueThunderstore;
+
+ view.appendChild(thunderstoreModsTemplateCopy);
+ toggleSelectedListButton("sort-menu", thunderstoreSortFilter);
+ setSortOrderButton();
+ break;
case "general-settings":
title.innerText = "Settings";
const settingsTemplateCopy = settingsTemplate.content.cloneNode(true);
@@ -469,7 +499,7 @@ async function searchInstalledMods() {
}
//////////////////////////////////////////////////////
-/////////////////////// NEXUS ////////////////////////
+//////////////// NEXUS / THUNDERSTORE ////////////////
async function verifyNexusAPI() {
response = await nexus.verifyAPI();
@@ -521,6 +551,15 @@ async function resetNexusAPI() {
}
}
+async function searchThunderstoreMods() {
+ let searchInput = document.getElementById("search-input");
+ searchValueThunderstore = searchInput.value;
+ await thunderstore.search(searchValueThunderstore, thunderstoreOffset, thunderstoreModsCount, thunderstoreSortFilter, thunderstoreSortOrder);
+ await navigate("refresh");
+ searchInput = document.getElementById("search-input");
+ searchInput.value = searchValueThunderstore;
+}
+
//////////////////////////////////////////////////////
//////////////// THEMES / SORT / LIST ////////////////
@@ -599,6 +638,8 @@ function setSortOrderButton() {
sortOrder = installedSortOrder;
} else if (oldPage == "mods-online") {
sortOrder = onlineSortOrder;
+ } else if (oldPage == "mods-thunderstore") {
+ sortOrder = thunderstoreSortOrder;
}
const sortOrderButton = document.getElementById("sort-order-image");
@@ -621,6 +662,9 @@ function changeSort(sortFilterParameter) {
} else if (oldPage == "mods-online") {
onlineSortFilter = sortFilterParameter;
searchNexusMods();
+ } else if (oldPage == "mods-thunderstore") {
+ thunderstoreSortFilter = sortFilterParameter;
+ searchThunderstoreMods();
}
}
@@ -639,6 +683,13 @@ function inverseSort() {
onlineSortOrder = "ASC";
}
searchNexusMods();
+ } else if (oldPage == "mods-thunderstore") {
+ if (thunderstoreSortOrder == "ASC") {
+ thunderstoreSortOrder = "DESC";
+ } else {
+ thunderstoreSortOrder = "ASC";
+ }
+ searchThunderstoreMods();
}
}
@@ -717,6 +768,20 @@ function changeModsPage(offsetChange) {
lastOnlineOffset = onlineOffset;
searchNexusMods();
}
+ } else if (oldPage == "mods-thunderstore") {
+ if (offsetChange == "min") {
+ thunderstoreOffset = 0;
+ } else if (offsetChange == "max") {
+ thunderstoreOffset = thunderstoreModsTotalCount;
+ } else {
+ thunderstoreOffset += thunderstoreModsCount * offsetChange;
+ thunderstoreOffset = clamp(thunderstoreOffset, 0, thunderstoreModsTotalCount);
+ }
+ thunderstoreOffset = Math.floor(thunderstoreOffset / 10) * 10;
+ if (lastThunderstoreOffset != thunderstoreOffset) {
+ lastThunderstoreOffset = thunderstoreOffset;
+ searchNexusMods();
+ }
}
}