summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Views/JsonValidator/Index.cshtml
blob: 5c3168e515b1d0911ecc35b2c03a6f3a2f80f865 (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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
@using StardewModdingAPI.Web.ViewModels.JsonValidator
@model JsonValidatorModel

@{
    ViewData["Title"] = "JSON validator";
}

@section Head {
    @if (Model.PasteID != null)
    {
        <meta name="robots" content="noindex" />
    }
    <link rel="stylesheet" href="~/Content/css/json-validator.css" />
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/tmont/sunlight@1.22.0/src/themes/sunlight.default.min.css" />

    <script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/gh/tmont/sunlight@1.22.0/src/sunlight.min.js" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/gh/tmont/sunlight@1.22.0/src/plugins/sunlight-plugin.linenumbers.min.js" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/gh/tmont/sunlight@1.22.0/src/lang/sunlight.javascript.min.js" crossorigin="anonymous"></script>
    <script src="~/Content/js/json-validator.js"></script>
    <script>
        $(function () {
            smapi.jsonValidator(@Json.Serialize(Model.SectionUrl), @Json.Serialize(Model.PasteID));
        });
    </script>
}

@* upload result banner *@
@if (Model.UploadError != null)
{
    <div class="banner error">
        <strong>Oops, the server ran into trouble saving that file.</strong><br />
        <small>Error details: @Model.UploadError</small>
    </div>
}
else if (Model.ParseError != null)
{
    <div class="banner error">
        <strong>Oops, couldn't parse that JSON.</strong><br />
        Share this link to let someone see this page: <code>@(new Uri(new Uri(Model.SectionUrl), Model.PasteID))</code><br />
        (Or <a href="@Model.SectionUrl">validate a new file</a>.)<br />
        <br />
        <small v-pre>Error details: @Model.ParseError</small>
    </div>
}
else if (Model.PasteID != null)
{
    <div class="banner success">
        <strong>Share this link to let someone else see this page:</strong> <code>@(new Uri(new Uri(Model.SectionUrl), $"{Model.SchemaName}/{Model.PasteID}"))</code><br />
        (Or <a href="@Model.SectionUrl">validate a new file</a>.)
    </div>
}

@* upload new file *@
@if (Model.Content == null)
{
    <h2>Upload a JSON file</h2>
    <form action="@Model.SectionUrl" method="post">
        <ol>
            <li>
                Choose the JSON format:<br />
                <select id="format" name="SchemaName">
                    @foreach (var pair in Model.SchemaFormats)
                    {
                        <option value="@pair.Key" selected="@(Model.SchemaName == pair.Key)">@pair.Value</option>
                    }
                </select>
            </li>
            <li>
                Drag the file onto this textbox (or paste the text in):<br />
                <textarea id="input" name="Content" placeholder="paste file here"></textarea>
            </li>
            <li>
                Click this button:<br />
                <input type="submit" id="submit" value="save file" />
            </li>
        </ol>
    </form>
}

@* validation results *@
@if (Model.Content != null)
{
    <div id="output">
        @if (Model.UploadError == null)
        {
            <div>
                Change JSON format:
                <select id="format" name="format">
                    @foreach (var pair in Model.SchemaFormats)
                    {
                        <option value="@pair.Key" selected="@(Model.SchemaName == pair.Key)">@pair.Value</option>
                    }
                </select>
            </div>

            <h2>Validation errors</h2>
            @if (Model.FormatUrl != null)
            {
                <p>See <a href="@Model.FormatUrl">format documentation</a>.</p>
            }

            @if (Model.Errors.Any())
            {
                <table id="metadata" class="table">
                    <tr>
                        <th>Line</th>
                        <th>Field</th>
                        <th>Error</th>
                    </tr>

                    @foreach (JsonValidatorErrorModel error in Model.Errors)
                    {
                        <tr>
                            <td><a href="#L@(error.Line)">@error.Line</a></td>
                            <td>@error.Path</td>
                            <td>@error.Message</td>
                        </tr>
                    }
                </table>
            }
            else
            {
                <p>No errors found.</p>
            }
        }

        <h2>Raw content</h2>
        <pre id="raw-content" class="sunlight-highlight-javascript">@Model.Content</pre>
    </div>
}