From 01365a3f625c9e7a80d78cf9c29ffa3d90435cd1 Mon Sep 17 00:00:00 2001 From: Thanh Dodeur Date: Thu, 11 Jul 2019 09:23:59 +0000 Subject: [PATCH] [FIX] mail: removes unsupported usage of formData.delete MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit replaces the usage of `formData.delete()` as it is not supported by Internet Explorer and Safari Mobile. closes odoo/odoo#34787 Signed-off-by: Alexandre Kühn (aku) --- .../static/src/js/composers/basic_composer.js | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/addons/mail/static/src/js/composers/basic_composer.js b/addons/mail/static/src/js/composers/basic_composer.js index 1beeea18644..af193572024 100644 --- a/addons/mail/static/src/js/composers/basic_composer.js +++ b/addons/mail/static/src/js/composers/basic_composer.js @@ -437,10 +437,27 @@ var BasicComposer = Widget.extend({ * @param {boolean} params.submitForm [optional] */ _processAttachmentChange: function (params) { - var self = this, - attachments = this.get('attachment_ids'), - files = params.files, - submitForm = params.submitForm; + var self = this; + var attachments = this.get('attachment_ids'); + var files = params.files; + var submitForm = params.submitForm; + var $form = this.$('form.o_form_binary_form'); + + /** + * makes a new formData as formData.delete() is not supported by IE or Safari Mobile. + * + * @return {FormData} + */ + function makeFormDataWithoutUfile() { + var newFormData = new window.FormData(); + $form.find('input').each(function (index, input) { + if (input.name !== 'ufile') { + newFormData.append(input.name, input.value); + } + }); + return newFormData; + } + _.each(files, function (file) { var attachment = _.findWhere(attachments, { name: file.name, @@ -452,24 +469,20 @@ var BasicComposer = Widget.extend({ attachments = _.without(attachments, attachment); } }); - var $form = this.$('form.o_form_binary_form'); if (submitForm) { $form.submit(); this._$attachmentButton.prop('disabled', true); } else { - var data = new FormData($form[0]); _.each(files, function (file) { - // removing existing key with blank data and appending again with file info - // In safari, existing key will not be updated when append with new file. - data.delete("ufile"); - data.append("ufile", file, file.name); + var formData = makeFormDataWithoutUfile(); + formData.append("ufile", file, file.name); $.ajax({ url: $form.attr("action"), type: "POST", enctype: 'multipart/form-data', processData: false, contentType: false, - data: data, + data: formData, success: function (result) { var $el = $(result); $.globalEval($el.contents().text());