From fffc11741fa5b9edea57925719c8a1ccc740b9e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= Date: Fri, 6 Dec 2019 11:07:04 +0100 Subject: [PATCH] web_renderjs_ui: make error page a bit more readable - indent the json representation of error - if error is an XMLHttpRequest: - include the server side error response in an iframe - split response headers --- .../rjs_gadget_erp5_launcher_js.js | 32 ++++++++++++++++--- .../rjs_gadget_erp5_launcher_js.xml | 2 +- .../testErrorPageFirstLoad.zpt | 31 +++++++++++++++++- 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.js index 92795c7e2a8..39910e928e2 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.js +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.js @@ -120,9 +120,9 @@ var error_list = [original_error], i, error, + error_response, error_text = ""; - // Do not break the application in case of errors. // Display it to the user for now, // and allow user to go back to the frontpage @@ -144,6 +144,9 @@ } } if (error instanceof XMLHttpRequest) { + if (error.getResponseHeader('Content-Type').indexOf('text/') === 0) { + error_response = error.response; + } error = { message: error.toString(), readyState: error.readyState, @@ -151,14 +154,16 @@ statusText: error.statusText, response: error.response, responseUrl: error.responseUrl, - response_headers: error.getAllResponseHeaders() + response_headers: (error.getAllResponseHeaders() + ? error.getAllResponseHeaders().split('\r\n') + : null) }; } if (error.constructor === Array || error.constructor === String || error.constructor === Object) { try { - error = JSON.stringify(error); + error = JSON.stringify(error, null, ' '); } catch (ignore) { } } @@ -185,9 +190,20 @@ // Gadget has not yet been correctly initialized throw error; } - + if (error_response && error_response.text) { + return error_response.text().then( + function (request_error_text) { + return gadget.changeState({ + error_text: error_text, + request_error_text: request_error_text, + url: undefined + }); + } + ); + } return gadget.changeState({ error_text: error_text, + request_error_text: error_response, url: undefined }); @@ -683,6 +699,7 @@ var element = gadget.props.content_element, container = document.createElement("section"), paragraph, + iframe, link; paragraph = document.createElement("p"); @@ -731,6 +748,13 @@ } element.appendChild(container); + // make an iframe to display error page from XMLHttpRequest. + if (gadget.state.request_error_text) { + iframe = document.createElement('iframe'); + container.appendChild(iframe); + iframe.srcdoc = gadget.state.request_error_text; + } + // reset gadget state gadget.state = JSON.parse(default_state_json_string); }); diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.xml index e6993cdfdf8..7acad43133d 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_launcher_js.xml @@ -313,7 +313,7 @@ - 1469697401.26 + 1469697401.27 UTC diff --git a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_zuite/testErrorPageFirstLoad.zpt b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_zuite/testErrorPageFirstLoad.zpt index 51e6b13dde8..24cc148c7c9 100644 --- a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_zuite/testErrorPageFirstLoad.zpt +++ b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_zuite/testErrorPageFirstLoad.zpt @@ -50,7 +50,7 @@ assertTextPresent - "status":404 + "status": 404 @@ -60,6 +60,35 @@ + + + waitForElementPresent + //div[@role="main"]//iframe + + + + selectFrame + //div[@role="main"]//iframe + + + + waitForTextPresent + Not Found + + + + verifyTextPresent + gadget_erp5_page_foobar.html was not found on this server. + + + + selectFrame + relative=top + + + + + assertTextPresent #/?page=foobar -- 2.30.9