From 1d364de8c89cb9a78accdc1331123db6b51955d8 Mon Sep 17 00:00:00 2001 From: Christoph Haas Date: Thu, 18 Feb 2021 01:59:40 +0100 Subject: [PATCH] Handle uploads using Ctrl-V --- app/assets/javascripts/application.js | 39 ++++++++++++++++++++++++++ app/controllers/packages_controller.rb | 7 ++++- app/views/packages/upload.slim | 4 ++- 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 1a4a0b7..b419b6f 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -54,3 +54,42 @@ upload_form_files_selected = function() { $('#file-form').submit(); // start upload } }; + + +function upload_paste(event){ + console.log("paste!"); + var items = (event.clipboardData || event.originalEvent.clipboardData).items; + + // /*Make Sure Only One File is Copied*/ + // if (items.length != 1) { + // return; + // } + + for (var i = 0 ; i < items.length ; i++) { + var item = items[i]; + if (!item.type.startsWith('image/')){ continue } + var file = item.getAsFile(); + console.log(file); + upload_file_with_ajax(file); + } +} + +function upload_file_with_ajax(file){ + var formData = new FormData(); + formData.append('file', file); + + $.ajax('#{{upload_receive_path}}' , { + + type: 'POST', + contentType: false, + processData: false, + data: formData, + dataType: 'text', + error: function(xhr, txt, err) { + console.log("error: "+txt+" / "+err); + }, + success: function(res) { + console.log("AJAX file upload was ok"); + } + }); +} diff --git a/app/controllers/packages_controller.rb b/app/controllers/packages_controller.rb index 1f9923c..bc486b1 100644 --- a/app/controllers/packages_controller.rb +++ b/app/controllers/packages_controller.rb @@ -59,7 +59,12 @@ class PackagesController < ApplicationController all_errors = [] - params[:file].each do |img| + files = params[:file] + + # Turn into array if a single image was uploaded through AJAX + files=[files] if files.class != Array + + files.each do |img| # Log.log "Uploaded img=#{img.path}" new_screenshot = @package.screenshots.new(simage: img) diff --git a/app/views/packages/upload.slim b/app/views/packages/upload.slim index 87161ae..9d91dd9 100644 --- a/app/views/packages/upload.slim +++ b/app/views/packages/upload.slim @@ -66,4 +66,6 @@ h1 = "Upload screenshots for #{@package.name}" javascript: // Hide the submit button unless images are selected for upload $(document).ready(upload_form_init); - // TODO: Move into javascripts/packages/upload... + + // Handle Ctrl-V to paste an image directly + document.onpaste = upload_paste;