summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Views/JsonValidator/Index.cshtml
blob: 6658e7b919c5504e628c9327f4aeb5a1e4dbb3b3 (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
@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.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>
}