From 5aaeb9d255f477eda1d649e5f990ff4132b6472a Mon Sep 17 00:00:00 2001
From: Tristan Cavelier <tristan.cavelier@nexedi.com>
Date: Mon, 27 Mar 2017 12:44:53 +0000
Subject: [PATCH] erp5_web_renderjs_ui: handle responseType on putAttachment

ERP5Storage.putAttachment is going to return a blob instead of a
string in the resulting event.target.response. This patch allows
to handle blob responses and keep backward compatibility.
---
 .../rjs_gadget_erp5_pt_form_dialog_js.js      | 29 +++++++++++++++----
 ...js_gadget_erp5_pt_form_view_editable_js.js | 18 ++++++++++--
 2 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.js
index 0207cd0181..a26c8c93ad 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.js
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_dialog_js.js
@@ -1,6 +1,6 @@
 /*jslint nomen: true, indent: 2, maxerr: 3 */
-/*global window, rJS, RSVP, URI, calculatePageTitle */
-(function (window, rJS, RSVP, URI, calculatePageTitle) {
+/*global window, rJS, RSVP, URI, calculatePageTitle, jIO */
+(function (window, rJS, RSVP, URI, calculatePageTitle, jIO) {
   "use strict";
 
   rJS(window)
@@ -158,12 +158,23 @@
 
         })
         .push(function (evt) {
-          var location = evt.target.getResponseHeader("X-Location"),
+          if (evt.target.responseType === "blob") {
+            return RSVP.all([
+              evt,
+              jIO.util.readBlobAsText(evt.target.response)
+            ]);
+          }
+          return [evt, {target: {result: evt.target.response}}];
+        })
+        .push(function (result_list) {
+          var evt = result_list[0],
+            responseText = result_list[1].target.result,
+            location = evt.target.getResponseHeader("X-Location"),
             jio_key,
             list = [],
             message;
           try {
-            message = JSON.parse(evt.target.response).portal_status_message;
+            message = JSON.parse(responseText).portal_status_message;
           } catch (ignore) {
           }
           list.push(form_gadget.notifySubmitted(message));
@@ -196,7 +207,13 @@
                 return form_gadget.notifyChange(message + '.');
               })
               .push(function () {
-                return form_gadget.displayFormulatorValidationError(JSON.parse(error.target.responseText));
+                if (error.target.responseType === "blob") {
+                  return jIO.util.readBlobAsText(error.target.response);
+                }
+                return {target: {result: error.target.response}};
+              })
+              .push(function (event) {
+                return form_gadget.displayFormulatorValidationError(JSON.parse(event.target.result));
               });
           }
           throw error;
@@ -205,4 +222,4 @@
     }, false, true);
 
 
-}(window, rJS, RSVP, URI, calculatePageTitle));
\ No newline at end of file
+}(window, rJS, RSVP, URI, calculatePageTitle, jIO));
\ No newline at end of file
diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_view_editable_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_view_editable_js.js
index 6a503e3f12..e83306f65c 100644
--- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_view_editable_js.js
+++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_form_view_editable_js.js
@@ -135,9 +135,16 @@
                 ]);
               })
               .push(function (result_list) {
+                if (result_list[1].target.responseType === "blob") {
+                  return jIO.util.readBlobAsText(result_list[1].target.response);
+                } else {
+                  return {target: {result: result_list[1].target.response}};
+                }
+              })
+              .push(function (event) {
                 var message;
                 try {
-                  message = JSON.parse(result_list[1].target.responseText).portal_status_message;
+                  message = JSON.parse(event.target.result).portal_status_message;
                 } catch (ignore) {
                 }
                 return form_gadget.notifySubmitted(message);
@@ -162,7 +169,14 @@
                         return form_gadget.notifyChange(message + '.');
                       })
                       .push(function () {
-                        return form_gadget.displayFormulatorValidationError(JSON.parse(error.target.responseText));
+                        if (error.target.responseType === "blob") {
+                          return jIO.util.readBlobAsText(error.target.response);
+                        } else {
+                          return {target: {result: error.target.response}};
+                        }
+                      })
+                      .push(function (event) {
+                        return form_gadget.displayFormulatorValidationError(JSON.parse(event.target.result));
                       });
                   }
                 }
-- 
2.30.9