summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Views/Mods/Index.cshtml
blob: 5592078c45ca3c37c2362a2d87b51303c7bad913 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
@using Newtonsoft.Json
@model StardewModdingAPI.Web.ViewModels.ModListModel
@{
    ViewData["Title"] = "Mod compatibility";
}
@section Head {
    <link rel="stylesheet" href="~/Content/css/mods.css?r=20190302" />
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.min.js" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/tablesorter@2.31.0/dist/js/jquery.tablesorter.combined.min.js" crossorigin="anonymous"></script>
    <script src="~/Content/js/mods.js?r=20190302"></script>
    <script>
        $(function() {
            var data = @Json.Serialize(Model.Mods, new JsonSerializerSettings { Formatting = Formatting.None });
            var enableBeta = @Json.Serialize(Model.BetaVersion != null);
            smapi.modList(data, enableBeta);
        });
    </script>
}

<div id="intro">
    <p>This page shows all known SMAPI mods and (incompatible) content packs, whether they work with the latest versions of Stardew Valley and SMAPI, and how to fix them if not. If a mod doesn't work after following the instructions below, check <a href="https://stardewvalleywiki.com/Modding:Player_Guide/Troubleshooting">the troubleshooting guide</a> or <a href="https://stardewvalleywiki.com/Modding:Player_Guide/Troubleshooting#Ask_for_help">ask for help</a>.</p>

    <p>The list is updated every few days (you can help <a href="https://stardewvalleywiki.com/Modding:Mod_compatibility">update it</a>!). It doesn't include XNB mods (see <a href="https://stardewvalleywiki.com/Modding:Using_XNB_mods"><em>using XNB mods</em> on the wiki</a> instead) or compatible content packs.</p>

    @if (Model.BetaVersion != null)
    {
        <p id="beta-blurb"><strong>Note:</strong> "SDV beta only" means Stardew Valley @Model.BetaVersion-beta; if you didn't opt in to the beta, you have the stable version and can ignore that line. If a mod doesn't have a "SDV beta only" line, the compatibility applies to both versions of the game.</p>
    }
</div>

<div id="app">
    <div id="options">
        <div>
            <label for="search-box">Search: </label>
            <input type="text" id="search-box" v-model="search" v-on:input="applyFilters" />
        </div>
        <div id="filter-area">
            <input type="checkbox" id="show-advanced" v-model="showAdvanced" />
            <label for="show-advanced">show advanced info and options</label>
            <div id="filters" v-show="showAdvanced">
                <div v-for="(filterGroup, key) in filters">
                    {{filterGroup.label}}: <span v-for="filter in filterGroup.value" v-bind:class="{ active: filter.value }"><input type="checkbox" v-bind:id="filter.id" v-model="filter.value" v-on:change="applyFilters" /> <label v-bind:for="filter.id">{{filter.label}}</label></span>
                </div>
            </div>
        </div>
    </div>
    <div id="mod-count" v-show="showAdvanced">
        <div v-if="visibleStats.total > 0">
            {{visibleStats.total}} mods shown ({{Math.round((visibleStats.compatible + visibleStats.workaround) / visibleStats.total * 100)}}% compatible or have a workaround, {{Math.round((visibleStats.soon + visibleStats.broken) / visibleStats.total * 100)}}% broken, {{Math.round(visibleStats.abandoned / visibleStats.total * 100)}}% obsolete).<br />
            SMAPI 3.0 (upcoming): {{Math.round(visibleStats.smapi3_ok / visibleStats.total * 100)}}% ready, {{Math.round(visibleStats.smapi3_soon / visibleStats.total * 100)}}% soon, {{Math.round(visibleStats.smapi3_broken / visibleStats.total * 100)}}% broken, {{Math.round(visibleStats.smapi3_unknown / visibleStats.total * 100)}}% unknown.
        </div>
        <span v-else>No matching mods found.</span>
    </div>
    <table class="wikitable" id="mod-list">
        <thead>
            <tr>
                <th>mod name</th>
                <th>links</th>
                <th>author</th>
                <th>compatibility</th>
                <th v-show="showAdvanced">broke in</th>
                <th v-show="showAdvanced">code</th>
                <th><small><a href="http://smapi.io/3.0">3.0 ready</a></small></th>
                <th>&nbsp;</th>
            </tr>
        </thead>
        <tbody>
            <tr v-for="mod in mods" :key="mod.Name" v-bind:id="mod.Slug" :key="mod.Slug" v-bind:data-status="mod.LatestCompatibility.Status" v-show="mod.Visible">
                <td>
                    {{mod.Name}}
                    <small class="mod-alt-names" v-if="mod.AlternateNames">(aka {{mod.AlternateNames}})</small>
                </td>
                <td class="mod-page-links">
                    <span v-for="(link, i) in mod.ModPages">
                        <a v-bind:href="link.Url">{{link.Text}}</a>{{i < mod.ModPages.length - 1 ? ', ' : ''}}
                    </span>
                </td>
                <td>
                    {{mod.Author}}
                    <small class="mod-alt-authors" v-if="mod.AlternateAuthors">(aka {{mod.AlternateAuthors}})</small>
                </td>
                <td>
                    <div v-html="mod.Compatibility.Summary"></div>
                    <div v-if="mod.BetaCompatibility">
                        <strong v-if="mod.BetaCompatibility">SDV beta only:</strong>
                        <span v-html="mod.BetaCompatibility.Summary"></span>
                    </div>
                    <div v-for="(warning, i) in mod.Warnings">⚠ {{warning}}</div>
                </td>
                <td class="mod-broke-in" v-html="mod.LatestCompatibility.BrokeIn" v-show="showAdvanced"></td>
                <td v-show="showAdvanced">
                    <span v-if="mod.SourceUrl"><a v-bind:href="mod.SourceUrl">source</a></span>
                    <span v-else class="mod-closed-source">no source</span>
                </td>
                <td class="smapi-3-col">
                    <small v-if="mod.LatestCompatibility.Status == 'ok' || mod.LatestCompatibility.Status == 'unofficial' || mod.LatestCompatibility.Status == 'optional' || mod.Smapi3Status == 'ok' || mod.Smapi3Status == 'soon' || mod.Smapi3Url">
                        <a v-if="mod.Smapi3Url" v-bind:href="mod.Smapi3Url" v-bind:title="mod.Smapi3Tooltip">{{mod.Smapi3DisplayText}}</a>
                        <span v-else v-bind:title="mod.Smapi3Tooltip">{{mod.Smapi3DisplayText}}</span>
                    </small>
                </td>
                <td>
                    <small><a v-bind:href="'#' + mod.Slug">#</a></small>
                </td>
            </tr>
        </tbody>
    </table>
</div>