From 9fa8368b01b9cee5fcc97d9c267e2308296501e2 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 30 Jun 2014 13:56:06 +0200 Subject: [PATCH] Support images drag-n-drop into image browser dialog in html signature editor --- program/js/app.js | 2 +- program/js/editor.js | 16 +++++++++++++--- program/steps/settings/edit_identity.inc | 2 +- program/steps/settings/upload.inc | 14 +++++++------- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/program/js/app.js b/program/js/app.js index 3b5ff0422..db9a2ff5f 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -7629,7 +7629,7 @@ function rcube_webmail() $.ajax({ type: 'POST', dataType: 'json', - url: ref.url(ref.env.filedrop.action||'upload', { _id:ref.env.compose_id||ref.env.cid||'', _uploadid:ts, _remote:1 }), + url: ref.url(ref.env.filedrop.action || 'upload', {_id: ref.env.compose_id||ref.env.cid||'', _uploadid: ts, _remote: 1, _from: ref.env.action}), contentType: formdata ? false : 'multipart/form-data; boundary=' + boundary, processData: false, timeout: 0, // disable default timeout set in ajaxSetup() diff --git a/program/js/editor.js b/program/js/editor.js index 0dd8fef9a..3b49968a7 100644 --- a/program/js/editor.js +++ b/program/js/editor.js @@ -589,8 +589,14 @@ function rcube_text_editor(config, id) this.hack_file_input(elem, rcmail.gui_objects.uploadform); // enable drag-n-drop area - if (rcmail.gui_objects.filedrop && rcmail.env.filedrop && ((window.XMLHttpRequest && XMLHttpRequest.prototype && XMLHttpRequest.prototype.sendAsBinary) || window.FormData)) { - rcmail.env.old_file_drop = rcmail.gui_objects.filedrop; + if ((window.XMLHttpRequest && XMLHttpRequest.prototype && XMLHttpRequest.prototype.sendAsBinary) || window.FormData) { + if (!rcmail.env.filedrop) { + rcmail.env.filedrop = {}; + } + if (rcmail.gui_objects.filedrop) { + rcmail.env.old_file_drop = rcmail.gui_objects.filedrop; + } + rcmail.gui_objects.filedrop = $('#image-selector-form'); rcmail.gui_objects.filedrop.addClass('droptarget') .bind('dragover dragleave', function(e) { @@ -639,6 +645,10 @@ function rcube_text_editor(config, id) return; } + if (rcmail.file_upload_id) { + rcmail.set_busy(false, null, rcmail.file_upload_id); + } + var rx, img_src; switch (rcmail.env.file_browser_type) { @@ -692,7 +702,7 @@ function rcube_text_editor(config, id) this.hack_file_input = function(elem, clone_form) { var link = $(elem), - file = $('').attr('name', '_files[]'), + file = $('').attr('name', '_file[]'), form = $('
').attr({method: 'post', enctype: 'multipart/form-data'}), offset = link.offset(); diff --git a/program/steps/settings/edit_identity.inc b/program/steps/settings/edit_identity.inc index 34fe9798f..cd7ba5fa6 100644 --- a/program/steps/settings/edit_identity.inc +++ b/program/steps/settings/edit_identity.inc @@ -52,7 +52,7 @@ else { $OUTPUT->include_script('list.js'); $OUTPUT->add_handler('identityform', 'rcube_identity_form'); $OUTPUT->set_env('identities_level', IDENTITIES_LEVEL); -$OUTPUT->add_label('deleteidentityconfirm'); +$OUTPUT->add_label('deleteidentityconfirm', 'uploading'); $OUTPUT->set_pagetitle($RCMAIL->gettext(($RCMAIL->action == 'add-identity' ? 'addidentity' : 'editidentity'))); diff --git a/program/steps/settings/upload.inc b/program/steps/settings/upload.inc index 8d338ebb9..41e19f8fa 100644 --- a/program/steps/settings/upload.inc +++ b/program/steps/settings/upload.inc @@ -51,15 +51,15 @@ $post_size = $RCMAIL->show_bytes(parse_bytes(ini_get('upload_max_filesize'))); $uploadid = rcube_utils::get_input_value('_uploadid', rcube_utils::INPUT_GET); -if (is_array($_FILES['_files']['tmp_name'])) { - $multiple = count($_FILES['_files']['tmp_name']) > 1; +if (is_array($_FILES['_file']['tmp_name'])) { + $multiple = count($_FILES['_file']['tmp_name']) > 1; - foreach ($_FILES['_files']['tmp_name'] as $i => $filepath) { + foreach ($_FILES['_file']['tmp_name'] as $i => $filepath) { // Process uploaded attachment if there is no error - $err = $_FILES['_files']['error'][$i]; + $err = $_FILES['_file']['error'][$i]; if (!$err) { - if ($max_size < $_FILES['_files']['size'][$i]) { + if ($max_size < $_FILES['_file']['size'][$i]) { $err = 'size_error'; } // check image file type @@ -77,8 +77,8 @@ if (is_array($_FILES['_files']['tmp_name'])) { if (!$err) { $attachment = $RCMAIL->plugins->exec_hook('attachment_upload', array( 'path' => $filepath, - 'size' => $_FILES['_files']['size'][$i], - 'name' => $_FILES['_files']['name'][$i], + 'size' => $_FILES['_file']['size'][$i], + 'name' => $_FILES['_file']['name'][$i], 'mimetype' => 'image/' . $imageprop['type'], 'group' => $type, ));