diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2019-08-04 03:28:34 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2019-09-14 19:00:41 -0400 |
commit | 3ba567eaddeaa0bb2bdd749b56e0601d1cf65a25 (patch) | |
tree | 61d5bc41560246da5ce727f47287b6730b525fad /src/SMAPI.Web/Views/JsonValidator | |
parent | c86db64880d52630c372aa24f7aadf0036fb3fcf (diff) | |
download | SMAPI-3ba567eaddeaa0bb2bdd749b56e0601d1cf65a25.tar.gz SMAPI-3ba567eaddeaa0bb2bdd749b56e0601d1cf65a25.tar.bz2 SMAPI-3ba567eaddeaa0bb2bdd749b56e0601d1cf65a25.zip |
add JSON validator with initial support for manifest format (#654)
Diffstat (limited to 'src/SMAPI.Web/Views/JsonValidator')
-rw-r--r-- | src/SMAPI.Web/Views/JsonValidator/Index.cshtml | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/SMAPI.Web/Views/JsonValidator/Index.cshtml b/src/SMAPI.Web/Views/JsonValidator/Index.cshtml new file mode 100644 index 00000000..cd7ca912 --- /dev/null +++ b/src/SMAPI.Web/Views/JsonValidator/Index.cshtml @@ -0,0 +1,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>@error.Line</td> + <td>@error.Path</td> + <td>@error.Message</td> + </tr> + } + </table> + } + else + { + <p>No errors found.</p> + } + } + + <h2>Raw content</h2> + <pre class="sunlight-highlight-javascript">@Model.Content</pre> + </div> +} |