summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/wwwroot
diff options
context:
space:
mode:
Diffstat (limited to 'src/SMAPI.Web/wwwroot')
-rw-r--r--src/SMAPI.Web/wwwroot/Content/js/mods.js178
-rw-r--r--src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json117
2 files changed, 189 insertions, 106 deletions
diff --git a/src/SMAPI.Web/wwwroot/Content/js/mods.js b/src/SMAPI.Web/wwwroot/Content/js/mods.js
index 28992908..05114b00 100644
--- a/src/SMAPI.Web/wwwroot/Content/js/mods.js
+++ b/src/SMAPI.Web/wwwroot/Content/js/mods.js
@@ -2,7 +2,7 @@
var smapi = smapi || {};
var app;
-smapi.modList = function (mods) {
+smapi.modList = function (mods, enableBeta) {
// init data
var defaultStats = {
total: 0,
@@ -23,101 +23,73 @@ smapi.modList = function (mods) {
visibleStats: $.extend({}, defaultStats),
filters: {
source: {
- open: {
- label: "open",
- id: "show-open-source",
- value: true
- },
- closed: {
- label: "closed",
- id: "show-closed-source",
- value: true
+ value: {
+ open: { value: true },
+ closed: { value: true }
}
},
status: {
- ok: {
- label: "ok",
- id: "show-status-ok",
- value: true
- },
- optional: {
- label: "optional",
- id: "show-status-optional",
- value: true
- },
- unofficial: {
- label: "unofficial",
- id: "show-status-unofficial",
- value: true
- },
- workaround: {
- label: "workaround",
- id: "show-status-workaround",
- value: true
- },
- broken: {
- label: "broken",
- id: "show-status-broken",
- value: true
- },
- abandoned: {
- label: "abandoned",
- id: "show-status-abandoned",
- value: true
- },
- obsolete: {
- label: "obsolete",
- id: "show-status-obsolete",
- value: true
+ label: enableBeta ? "main status" : "status",
+ value: {
+ // note: keys must match status returned by the API
+ ok: { value: true },
+ optional: { value: true },
+ unofficial: { value: true },
+ workaround: { value: true },
+ broken: { value: true },
+ abandoned: { value: true },
+ obsolete: { value: true }
}
},
+ betaStatus: {
+ label: "beta status",
+ value: {} // cloned from status field if needed
+ },
download: {
- chucklefish: {
- label: "Chucklefish",
- id: "show-chucklefish",
- value: true
- },
- moddrop: {
- label: "ModDrop",
- id: "show-moddrop",
- value: true
- },
- nexus: {
- label: "Nexus",
- id: "show-nexus",
- value: true
- },
- custom: {
- label: "custom",
- id: "show-custom",
- value: true
+ value: {
+ chucklefish: { value: true, label: "Chucklefish" },
+ moddrop: { value: true, label: "ModDrop" },
+ nexus: { value: true, label: "Nexus" },
+ custom: { value: true }
}
},
- "SMAPI 3.0": {
- ok: {
- label: "ready",
- id: "show-smapi-3-ready",
- value: true
- },
- soon: {
- label: "soon",
- id: "show-smapi-3-soon",
- value: true
- },
- broken: {
- label: "broken",
- id: "show-smapi-3-broken",
- value: true
- },
- unknown: {
- label: "unknown",
- id: "show-smapi-3-unknown",
- value: true
+ smapi3: {
+ label: "SMAPI 3.0",
+ value: {
+ // note: keys must match status returned by the API
+ ok: { value: true, label: "ready" },
+ soon: { value: true },
+ broken: { value: true },
+ unknown: { value: true }
}
}
},
search: ""
};
+
+ // init filters
+ Object.entries(data.filters).forEach(([groupKey, filterGroup]) => {
+ filterGroup.label = filterGroup.label || groupKey;
+ Object.entries(filterGroup.value).forEach(([filterKey, filter]) => {
+ filter.id = ("filter_" + groupKey + "_" + filterKey).replace(/[^a-zA-Z0-9]/g, "_");
+ filter.label = filter.label || filterKey;
+ });
+ });
+
+ // init beta filters
+ if (enableBeta) {
+ var filterGroup = data.filters.betaStatus;
+ $.extend(true, filterGroup.value, data.filters.status.value);
+ Object.entries(filterGroup.value).forEach(([filterKey, filter]) => {
+ filter.id = "beta_" + filter.id;
+ });
+ }
+ else
+ delete data.filters.betaStatus;
+
+ window.boop = data.filters;
+
+ // init mods
for (var i = 0; i < data.mods.length; i++) {
var mod = mods[i];
@@ -127,6 +99,21 @@ smapi.modList = function (mods) {
// set overall compatibility
mod.LatestCompatibility = mod.BetaCompatibility || mod.Compatibility;
+ // set SMAPI 3.0 display text
+ switch (mod.Smapi3Status) {
+ case "ok":
+ mod.Smapi3DisplayText = "✓";
+ break;
+
+ case "broken":
+ mod.Smapi3DisplayText = "✖";
+ break;
+
+ default:
+ mod.Smapi3DisplayText = "↻ " + mod.Smapi3Status;
+ break;
+ }
+
// concatenate searchable text
mod.SearchableText = [mod.Name, mod.AlternateNames, mod.Author, mod.AlternateAuthors, mod.Compatibility.Summary, mod.BrokeIn];
if (mod.Compatibility.UnofficialVersion)
@@ -199,30 +186,37 @@ smapi.modList = function (mods) {
var filters = data.filters;
// check source
- if (!filters.source.open.value && mod.SourceUrl)
+ if (!filters.source.value.open.value && mod.SourceUrl)
return false;
- if (!filters.source.closed.value && !mod.SourceUrl)
+ if (!filters.source.value.closed.value && !mod.SourceUrl)
return false;
// check status
- var status = mod.LatestCompatibility.Status;
- if (filters.status[status] && !filters.status[status].value)
+ var mainStatus = mod.Compatibility.Status;
+ if (filters.status.value[mainStatus] && !filters.status.value[mainStatus].value)
return false;
+ // check beta status
+ if (enableBeta) {
+ var betaStatus = mod.LatestCompatibility.Status;
+ if (filters.betaStatus.value[betaStatus] && !filters.betaStatus.value[betaStatus].value)
+ return false;
+ }
+
// check SMAPI 3.0 compatibility
- if (filters["SMAPI 3.0"][mod.Smapi3Status] && !filters["SMAPI 3.0"][mod.Smapi3Status].value)
+ if (filters.smapi3.value[mod.Smapi3Status] && !filters.smapi3.value[mod.Smapi3Status].value)
return false;
// check download sites
var ignoreSites = [];
- if (!filters.download.chucklefish.value)
+ if (!filters.download.value.chucklefish.value)
ignoreSites.push("Chucklefish");
- if (!filters.download.moddrop.value)
+ if (!filters.download.value.moddrop.value)
ignoreSites.push("ModDrop");
- if (!filters.download.nexus.value)
+ if (!filters.download.value.nexus.value)
ignoreSites.push("Nexus");
- if (!filters.download.custom.value)
+ if (!filters.download.value.custom.value)
ignoreSites.push("custom");
if (ignoreSites.length) {
diff --git a/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json b/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json
index b16cb99f..45a4959d 100644
--- a/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json
+++ b/src/SMAPI.Web/wwwroot/StardewModdingAPI.metadata.json
@@ -52,6 +52,70 @@
*/
"ModData": {
/*********
+ ** Common dependencies for friendly errors
+ *********/
+ "Advanced Location Loader": {
+ "ID": "Entoarox.AdvancedLocationLoader",
+ "Default | UpdateKey": "Nexus:2270"
+ },
+
+ "Content Patcher": {
+ "ID": "Pathoschild.ContentPatcher",
+ "Default | UpdateKey": "Nexus:1915"
+ },
+
+ "Custom Farming Redux": {
+ "ID": "Platonymous.CustomFarming",
+ "Default | UpdateKey": "Nexus:991"
+ },
+
+ "Custom Shirts": {
+ "ID": "Platonymous.CustomShirts",
+ "Default | UpdateKey": "Nexus:2416"
+ },
+
+ "Entoarox Framework": {
+ "ID": "Entoarox.EntoaroxFramework",
+ "Default | UpdateKey": "Nexus:2269"
+ },
+
+ "JSON Assets": {
+ "ID": "spacechase0.JsonAssets",
+ "Default | UpdateKey": "Nexus:1720"
+ },
+
+ "Mail Framework": {
+ "ID": "DIGUS.MailFrameworkMod",
+ "Default | UpdateKey": "Nexus:1536"
+ },
+
+ "MTN": {
+ "ID": "SgtPickles.MTN",
+ "Default | UpdateKey": "Nexus:2256",
+ "~1.2.6 | Status": "AssumeBroken" // replaces Game1.multiplayer, which breaks SMAPI's multiplayer API.
+ },
+
+ "PyTK": {
+ "ID": "Platonymous.Toolkit",
+ "Default | UpdateKey": "Nexus:1726"
+ },
+
+ "SpaceCore": {
+ "ID": "spacechase0.SpaceCore",
+ "Default | UpdateKey": "Nexus:1348"
+ },
+
+ "Stardust Core": {
+ "ID": "Omegasis.StardustCore",
+ "Default | UpdateKey": "Nexus:2341"
+ },
+
+ "TMX Loader": {
+ "ID": "Platonymous.TMXLoader",
+ "Default | UpdateKey": "Nexus:1820"
+ },
+
+ /*********
** Content packs
*********/
"Canon-Friendly Dialogue Expansion": {
@@ -82,6 +146,11 @@
}
},
+ "Always Scroll Map": {
+ "ID": "bcmpinc.AlwaysScrollMap",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
+ },
+
"Animal Mood Fix": {
"ID": "GPeters-AnimalMoodFix",
"~ | Status": "Obsolete",
@@ -151,6 +220,11 @@
"MapLocalVersions": { "1.2-beta": "1.2" }
},
+ "Craft Counter": {
+ "ID": "bcmpinc.CraftCounter",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
+ },
+
"Crafting Counter": {
"ID": "lolpcgaming.CraftingCounter",
"MapRemoteVersions": { "1.1": "1.0" } // not updated in manifest
@@ -172,11 +246,6 @@
"MapRemoteVersions": { "1.1": "1.0" } // manifest not updated
},
- "Custom Shirts": {
- "ID": "Platonymous.CustomShirts",
- "Default | UpdateKey": "Nexus:2416" // keep for dependencies
- },
-
"Dynamic Horses": {
"ID": "Bpendragon-DynamicHorses",
"MapRemoteVersions": { "1.2": "1.1-release" } // manifest not updated
@@ -207,6 +276,11 @@
"~1.1 | Status": "AssumeBroken" // runtime errors with Harmony 1.2.0.1 in SMAPI 2.8+
},
+ "Fix Animal Tools": {
+ "ID": "bcmpinc.FixAnimalTools",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
+ },
+
"Fix Scythe Exp": {
"ID": "bcmpinc.FixScytheExp",
"~0.3 | Status": "AssumeBroken" // broke in 1.3: Exception from HarmonyInstance "bcmpinc.FixScytheExp" [...] Bad label content in ILGenerator.
@@ -219,7 +293,7 @@
"Grass Growth": {
"ID": "bcmpinc.GrassGrowth",
- "~0.3 | Status": "AssumeBroken" // broke in 1.3.29 (runtime errors: System.IndexOutOfRangeException: Could not find instruction sequence)
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
},
"Hunger Mod (skn)": {
@@ -258,9 +332,9 @@
"~1.0.1 | Status": "AssumeBroken" // doesn't do anything as of SDV 1.2.33 (bad Harmony patch?)
},
- "MTN": {
- "ID": "SgtPickles.MTN",
- "~1.2.5 | Status": "AssumeBroken" // replaces Game1.multiplayer, which breaks SMAPI's multiplayer API.
+ "Movement Speed": {
+ "ID": "bcmpinc.MovementSpeed",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
},
"Multiple Sprites and Portraits On Rotation (File Loading)": {
@@ -290,11 +364,6 @@
"Default | UpdateKey": "GitHub:lambui/StardewValleyMod_OmniFarm"
},
- "PyTK - Platonymous Toolkit": {
- "ID": "Platonymous.Toolkit",
- "Default | UpdateKey": "Nexus:1726"
- },
-
"Point-and-Plant": {
"ID": "jwdred.PointAndPlant",
"MapRemoteVersions": { "1.0.3": "1.0.2" } // manifest not updated
@@ -364,6 +433,11 @@
"~3.0.1 | Status": "AssumeBroken" // broke in SMAPI 2.6-beta.16 due to reflection into SMAPI internals
},
+ "Stardew Hack": {
+ "ID": "bcmpinc.StardewHack",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
+ },
+
"Stardew Notification": {
"ID": "stardewnotification",
"Default | UpdateKey": "GitHub:monopandora/StardewNotification"
@@ -381,6 +455,11 @@
"~1.0.2 | Status": "AssumeBroken" // broke in SDV 1.3 (runtime errors)
},
+ "Tilled Soil Decay": {
+ "ID": "bcmpinc.TilledSoilDecay",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
+ },
+
"Time Reminder": {
"ID": "KoihimeNakamura.TimeReminder",
"MapLocalVersions": { "1.0-20170314": "1.0.2" }
@@ -391,11 +470,21 @@
"Default | UpdateKey": "GitHub:mralbobo/stardew-tool-charging"
},
+ "Tree Spread": {
+ "ID": "bcmpinc.TreeSpread",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
+ },
+
"Variable Grass": {
"ID": "dantheman999.VariableGrass",
"Default | UpdateKey": "GitHub:dantheman999301/StardewMods"
},
+ "Yet Another Harvest With Scythe Mod": {
+ "ID": "bcmpinc.HarvestWithScythe",
+ "~0.6 | Status": "AssumeBroken" // breaks newer versions of bcmpinc mods (per bcmpinc's request)
+ },
+
"Zoom Out Extreme": {
"ID": "RockinMods.ZoomMod",
"FormerIDs": "ZoomMod", // changed circa 1.2.1