diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 64b4e18a5..92dce5c9d 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -1,5 +1,4 @@ /* eslint no-console:0 */ -/* global require */ function importAll(r) { r.keys().forEach(r); @@ -7,8 +6,6 @@ function importAll(r) { require('jquery-ujs'); require('hammerjs'); -require('dropzone'); -require('spark-md5'); require('stupid-table-plugin'); require('jquery-hotkeys'); @@ -41,8 +38,6 @@ export { default as PostModeMenu } from '../src/javascripts/post_mode_menu.js'; export { default as PostTooltip } from '../src/javascripts/post_tooltips.js'; export { default as RelatedTag } from '../src/javascripts/related_tag.js'; export { default as Shortcuts } from '../src/javascripts/shortcuts.js'; -export { default as Upload } from '../src/javascripts/uploads.js'; +export { default as Upload } from '../src/javascripts/uploads.js.erb'; export { default as Utility } from '../src/javascripts/utility.js'; export { default as Ugoira } from '../src/javascripts/ugoira.js'; -export { default as Dropzone } from 'dropzone'; -export { default as SparkMD5 } from 'spark-md5'; diff --git a/app/javascript/src/javascripts/related_tag.js b/app/javascript/src/javascripts/related_tag.js index 7591d6565..f101073a5 100644 --- a/app/javascript/src/javascripts/related_tag.js +++ b/app/javascript/src/javascripts/related_tag.js @@ -1,4 +1,4 @@ -import Uploads from './uploads'; +import Uploads from './uploads.js.erb'; import Utility from './utility'; import Post from './posts.js.erb'; diff --git a/app/javascript/src/javascripts/uploads.js b/app/javascript/src/javascripts/uploads.js.erb similarity index 71% rename from app/javascript/src/javascripts/uploads.js rename to app/javascript/src/javascripts/uploads.js.erb index 2a8702441..4d456f78f 100644 --- a/app/javascript/src/javascripts/uploads.js +++ b/app/javascript/src/javascripts/uploads.js.erb @@ -1,7 +1,11 @@ import Post from './posts.js.erb' +import Dropzone from 'dropzone'; +import SparkMD5 from 'spark-md5'; let Upload = {}; +Upload.MAX_FILE_SIZE = <%= Danbooru.config.max_file_size.to_json %> / (1024 * 1024); + Upload.initialize_all = function() { if ($("#c-uploads,#c-posts").length) { this.initialize_enter_on_tags(); @@ -29,6 +33,10 @@ Upload.initialize_all = function() { }); } + if ($("#c-uploads #a-new").length) { + this.initialize_dropzone(); + } + if ($("#iqdb-similar").length) { this.initialize_iqdb_source(); } @@ -133,6 +141,57 @@ Upload.toggle_commentary = function() { $(".artist-commentary").slideToggle(); }; +Upload.initialize_dropzone = function() { + if (!window.FileReader) { + $("#filedropzone").remove(); + return; + } + + let dropzone = new Dropzone("#filedropzone", { + paramName: "upload[file]", + url: "/uploads/preprocess", + createImageThumbnails: false, + addRemoveLinks: false, + maxFiles: 1, + maxFilesize: Upload.MAX_FILE_SIZE, + timeout: 0, + acceptedFiles: "image/jpeg,image/png,image/gif,video/mp4,video/webm,.swf", + previewTemplate: $("#dropzone-preview-template").html(), + init: function() { + $(".fallback").hide(); + this.on("drop", function(event) { + $("#filedropzone .dropzone-hint").hide(); + }); + this.on("complete", function(file) { + $("#filedropzone .dz-progress").hide(); + }); + this.on("addedfile", function(file) { + // replace the previous file with the new one. + dropzone.files.forEach(f => { + if (f !== file) { + dropzone.removeFile(f); + } + }); + + let reader = new FileReader(); + reader.addEventListener("loadend", function() { + let buf = new SparkMD5.ArrayBuffer(); + buf.append(this.result); + let hash = buf.end(); + $("#upload_md5_confirmation").val(hash); + }); + reader.readAsArrayBuffer(file); + }); + this.on("success", function(file) { + $("#filedropzone").addClass("success"); + }); + this.on("error", function(file, msg) { + $("#filedropzone").addClass("error"); + }); + } + }); +}; + $(function() { Upload.initialize_all(); }); diff --git a/app/views/uploads/_dropzone_preview.html.erb b/app/views/uploads/_dropzone_preview.html.erb new file mode 100644 index 000000000..c65b208d4 --- /dev/null +++ b/app/views/uploads/_dropzone_preview.html.erb @@ -0,0 +1,14 @@ +