summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/wwwroot/Content/js/json-validator.js
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-08-04 03:28:34 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2019-09-14 19:00:41 -0400
commit3ba567eaddeaa0bb2bdd749b56e0601d1cf65a25 (patch)
tree61d5bc41560246da5ce727f47287b6730b525fad /src/SMAPI.Web/wwwroot/Content/js/json-validator.js
parentc86db64880d52630c372aa24f7aadf0036fb3fcf (diff)
downloadSMAPI-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/wwwroot/Content/js/json-validator.js')
-rw-r--r--src/SMAPI.Web/wwwroot/Content/js/json-validator.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/SMAPI.Web/wwwroot/Content/js/json-validator.js b/src/SMAPI.Web/wwwroot/Content/js/json-validator.js
new file mode 100644
index 00000000..3f7a1775
--- /dev/null
+++ b/src/SMAPI.Web/wwwroot/Content/js/json-validator.js
@@ -0,0 +1,60 @@
+/* globals $ */
+
+var smapi = smapi || {};
+smapi.jsonValidator = function (sectionUrl, pasteID) {
+ /**
+ * Rebuild the syntax-highlighted element.
+ */
+ var formatCode = function () {
+ Sunlight.highlightAll();
+ };
+
+ /**
+ * Initialise the JSON validator page.
+ */
+ var init = function () {
+ // code formatting
+ formatCode();
+
+ // change format
+ $("#output #format").on("change", function() {
+ var schemaName = $(this).val();
+ location.href = new URL(schemaName + "/" + pasteID, sectionUrl).toString();
+ });
+
+ // upload form
+ var input = $("#input");
+ if (input.length) {
+ // disable submit if it's empty
+ var toggleSubmit = function () {
+ var hasText = !!input.val().trim();
+ submit.prop("disabled", !hasText);
+ };
+ input.on("input", toggleSubmit);
+ toggleSubmit();
+
+ // drag & drop file
+ input.on({
+ 'dragover dragenter': function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ },
+ 'drop': function (e) {
+ var dataTransfer = e.originalEvent.dataTransfer;
+ if (dataTransfer && dataTransfer.files.length) {
+ e.preventDefault();
+ e.stopPropagation();
+ var file = dataTransfer.files[0];
+ var reader = new FileReader();
+ reader.onload = $.proxy(function (file, $input, event) {
+ $input.val(event.target.result);
+ toggleSubmit();
+ }, this, file, $("#input"));
+ reader.readAsText(file);
+ }
+ }
+ });
+ }
+ };
+ init();
+};