diff options
author | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2020-03-22 19:52:42 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <Pathoschild@users.noreply.github.com> | 2020-03-22 19:52:42 -0400 |
commit | 7ca5efbbc576f3c6c43493654b2a0ac040fd4f31 (patch) | |
tree | fae7a4e06a14ff7f8d709e2f4d5b8b92b8784a37 /src/SMAPI.Web/wwwroot/Content/js/file-upload.js | |
parent | 5ae640dc91adff8dfb0827e2a3c3f6b54be7c612 (diff) | |
parent | 6d1494a56c5d04e7bc1ee406810a5a53dea2229a (diff) | |
download | SMAPI-7ca5efbbc576f3c6c43493654b2a0ac040fd4f31.tar.gz SMAPI-7ca5efbbc576f3c6c43493654b2a0ac040fd4f31.tar.bz2 SMAPI-7ca5efbbc576f3c6c43493654b2a0ac040fd4f31.zip |
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Web/wwwroot/Content/js/file-upload.js')
-rw-r--r-- | src/SMAPI.Web/wwwroot/Content/js/file-upload.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/SMAPI.Web/wwwroot/Content/js/file-upload.js b/src/SMAPI.Web/wwwroot/Content/js/file-upload.js new file mode 100644 index 00000000..411efad3 --- /dev/null +++ b/src/SMAPI.Web/wwwroot/Content/js/file-upload.js @@ -0,0 +1,71 @@ +/* globals $ */ +var smapi = smapi || {}; + +/** + * Implements the logic for a log/JSON file upload form. + * + * @param {object} opts The file upload form options. + * @param {jQuery} opts.chooseFileLink The clickable link which shows the file chooser. + * @param {jQuery} opts.chooseFileInput The file input element. + * @param {jQuery} opts.contentArea The file content area. + * @param {jQuery} opts.submitButton The submit button. + */ +smapi.fileUpload = function (opts) { + /** + * Toggle the submit button if the form has content. + */ + var toggleSubmit = function () { + var hasText = !!opts.contentArea.val().trim(); + opts.submitButton.prop("disabled", !hasText); + }; + + /** + * Paste the content of a file into the content area. + * @param {File} file The file whose content to paste. + */ + var pasteFile = function (file) { + var reader = new FileReader(); + reader.onload = $.proxy(function (file, $input, event) { + $input.val(event.target.result); + toggleSubmit(); + }, this, file, $("#input")); + reader.readAsText(file); + }; + + // initialize + if (opts.contentArea.length) { + // disable submit button if it's empty + opts.contentArea.on("input", toggleSubmit); + toggleSubmit(); + + // drag & drop file + opts.contentArea.on({ + "dragover dragenter": function (e) { + e.preventDefault(); + }, + "drop": function (e) { + e.preventDefault(); + + var transfer = e.originalEvent.dataTransfer; + if (transfer && transfer.files.length) + pasteFile(transfer.files[0]); + } + }); + + // choose file + opts.chooseFileLink.on({ + "click": function (e) { + e.preventDefault(); + opts.chooseFileInput.click(); + } + }); + opts.chooseFileInput.on({ + "change": function (e) { + if (!e.target.files || !e.target.files.length) + return; + + pasteFile(e.target.files[0]); + } + }); + } +}; |