From 93f39e708fb3f2faf66bd3debf0e8e44223478ec Mon Sep 17 00:00:00 2001 From: Tristan Cavelier Date: Tue, 11 Jun 2019 15:17:17 +0000 Subject: [PATCH 1/2] [erp5_web_renderjs_ui] Handle errors while typing in a relation input For instance, typing a backslash in a relation field does not crash the ui anymore. /bug #20180123-D78557 https://nexedijs.erp5.net/#/bug_module/20180123-D78557 --- .../rjs_gadget_erp5_relation_input_html.html | 2 +- .../rjs_gadget_erp5_relation_input_html.xml | 4 +- .../rjs_gadget_erp5_relation_input_js.js | 40 ++++-- .../rjs_gadget_erp5_relation_input_js.xml | 6 +- .../testRelationFieldBackslash.xml | 58 +++++++++ .../testRelationFieldBackslash.zpt | 115 ++++++++++++++++++ 6 files changed, 209 insertions(+), 16 deletions(-) create mode 100644 bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.xml create mode 100644 bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.zpt diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.html b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.html index dae35721404..12bc01e1c19 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.html +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.html @@ -5,7 +5,7 @@ data-i18n=No such document was found data-i18n=Create New data-i18n=Explore the Search Result List - data-i18n=No such document was found + data-i18n=Invalid search criteria --> diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.xml index 3097fbba7d4..7c1e2d834e1 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_html.xml @@ -232,7 +232,7 @@ serial - 971.20733.1333.20838 + 974.59811.2178.43622 state @@ -250,7 +250,7 @@ - 1541150851.14 + 1563201471.02 UTC diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js index cd6796ecea6..6d1d0b0ebee 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js @@ -243,7 +243,8 @@ return RSVP.Queue() .push(function () { var plane = gadget.element.querySelector("a"), - ul = gadget.element.querySelector(".search_ul"); + ul = gadget.element.querySelector(".search_ul"), + translation_promise; plane.href = ''; // uid is known @@ -309,8 +310,12 @@ return RSVP.delay(200); }) .push(function () { - return RSVP.all([ - gadget.jio_allDocs({ + translation_promise = gadget.getTranslationList([ + 'Create New', + 'Explore the Search Result List' + ]); + + return gadget.jio_allDocs({ query: Query.objectToSearchText(new ComplexQuery({ operator: "AND", query_list: [ @@ -326,13 +331,12 @@ limit: [0, 10], select_list: [gadget.state.catalog_index, "uid"], sort_on: JSON.parse(gadget.state.sort_list_json) - }), - gadget.getTranslationList([ - 'Create New', - 'Explore the Search Result List' - ]) - ]); - }) + }) + .push(function (result) { + return new RSVP.Queue() + .push(function () { + return RSVP.all([result, translation_promise]); + }) .push(function (result_list) { var i, row, @@ -396,6 +400,22 @@ } ul.appendChild(fragment_element); }); + }, function (error) { + if (error instanceof Error && + error.hash && + error.hash.expected && + error.hash.expected.length === 1 && + error.hash.expected[0] === "'QUOTE'") { + return gadget.getTranslationList([ + "Invalid search criteria" + ]) + .push(function (translation_list) { + return gadget.notifyInvalid(translation_list[0]); + }); + } + throw error; + }); + }); }); }) diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.xml index 33202becdcd..a13a0a390bd 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.xml @@ -234,7 +234,7 @@ serial - 971.23288.3697.17425 + 977.6117.6830.21572 state @@ -252,7 +252,7 @@ - 1541156739.42 + 1563260997.53 UTC @@ -311,7 +311,7 @@ - 1541669313.00 + 1541669313.0 UTC diff --git a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.xml b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.xml new file mode 100644 index 00000000000..5fff8d2a9df --- /dev/null +++ b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.xml @@ -0,0 +1,58 @@ + + + + + + + + + + _bind_names + + + + + + + + + + _asgns + + + + name_subpath + traverse_subpath + + + + + + + + + + + content_type + text/html + + + expand + 0 + + + id + testRelationFieldBackslash + + + output_encoding + utf-8 + + + title + + + + + + diff --git a/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.zpt b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.zpt new file mode 100644 index 00000000000..575c3f9aa8f --- /dev/null +++ b/bt5/erp5_web_renderjs_ui_test/PathTemplateItem/portal_tests/renderjs_ui_relation_field_zuite/testRelationFieldBackslash.zpt @@ -0,0 +1,115 @@ + + + +Test RenderJS UI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Test RenderJS UI
open${base_url}/foo_module/ListBoxZuite_reset
assertTextPresentReset Successfully.
open${base_url}/foo_module/FooModule_createObjects?num:int=1
waitForTextPresentCreated Successfully.
open${base_url}/web_site_module/renderjs_runner/#/foo_module?editable=true
waitForElementPresent//a[text()="Title 0"]
click//a[text()="Title 0"]
type//input[@name="field_my_foo_category_title"]\
fireEvent//input[@name='field_my_foo_category_title']input
waitForTextPresentInvalid search criteria
type//input[@name="field_my_foo_category_title"]Quantity
fireEvent//input[@name='field_my_foo_category_title']input
waitForElementPresent//li[@data-relative-url='portal_categories/divergence_scope/quantity']
fireEvent//input[@name='field_my_foo_category_title']blur
click//li[@data-relative-url='portal_categories/divergence_scope/quantity']
verifyValue//input[@name="field_my_foo_category_title"]Quantity
+ + \ No newline at end of file -- 2.30.9 From dec0c5ab0a6e5ab13e7058a03839613f75269011 Mon Sep 17 00:00:00 2001 From: Tristan Cavelier Date: Mon, 17 Jun 2019 16:07:31 +0000 Subject: [PATCH 2/2] [erp5_web_renderjs_ui] jslint rjs_gadget_erp5_relation_input_js --- .../rjs_gadget_erp5_relation_input_js.js | 147 +++++++++--------- 1 file changed, 75 insertions(+), 72 deletions(-) diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js index 6d1d0b0ebee..aadbf0cdfc1 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_relation_input_js.js @@ -311,95 +311,98 @@ }) .push(function () { translation_promise = gadget.getTranslationList([ - 'Create New', - 'Explore the Search Result List' + 'Create New', + 'Explore the Search Result List' ]); return gadget.jio_allDocs({ - query: Query.objectToSearchText(new ComplexQuery({ - operator: "AND", - query_list: [ - QueryFactory.create( - new URI(gadget.state.query).query(true).query - ), - new SimpleQuery({ - key: gadget.state.catalog_index, - value: value_text - }) - ] - })), - limit: [0, 10], - select_list: [gadget.state.catalog_index, "uid"], - sort_on: JSON.parse(gadget.state.sort_list_json) + query: Query.objectToSearchText(new ComplexQuery({ + operator: "AND", + query_list: [ + QueryFactory.create( + new URI(gadget.state.query).query(true).query + ), + new SimpleQuery({ + key: gadget.state.catalog_index, + value: value_text + }) + ] + })), + limit: [0, 10], + select_list: [gadget.state.catalog_index, "uid"], + sort_on: JSON.parse(gadget.state.sort_list_json) }) .push(function (result) { return new RSVP.Queue() .push(function () { return RSVP.all([result, translation_promise]); }) - .push(function (result_list) { - var i, - row, - portal_type_list, - translated_portal_type_list, - fragment_element = document.createDocumentFragment(), - li_element; + .push(function (result_list) { + var i, + row, + portal_type_list, + translated_portal_type_list, + fragment_element = document.createDocumentFragment(), + li_element; - plane.className = JUMP_UNKNOWN_CLASS_STR; + plane.className = JUMP_UNKNOWN_CLASS_STR; - // Documents + // Documents // - for (i = 0; i < result_list[0].data.rows.length; i += 1) { - row = result_list[0].data.rows[i]; - li_element = document.createElement('li'); - li_element.setAttribute('class', - 'ui-icon-sign-in ui-btn-icon-right'); - li_element.setAttribute('data-relative-url', row.id); - li_element.setAttribute('data-uid', row.value.uid); - li_element.textContent = row.value[gadget.state.catalog_index]; - fragment_element.appendChild(li_element); - } - - // New documents + for (i = 0; i < result_list[0].data.rows.length; i += 1) { + row = result_list[0].data.rows[i]; + li_element = document.createElement('li'); + li_element.setAttribute('class', + 'ui-icon-sign-in ui-btn-icon-right'); + li_element.setAttribute('data-relative-url', row.id); + li_element.setAttribute('data-uid', row.value.uid); + li_element.textContent = + row.value[gadget.state.catalog_index]; + fragment_element.appendChild(li_element); + } + + // New documents //
  • Create New // {{name}}: {{../value}}
  • - if (gadget.state.allow_creation) { - portal_type_list = JSON.parse(gadget.state.portal_types); - translated_portal_type_list = - JSON.parse(gadget.state.translated_portal_types); - for (i = 0; i < portal_type_list.length; i += 1) { - li_element = document.createElement('li'); - li_element.setAttribute('class', - 'ui-icon-plus ui-btn-icon-right'); - li_element.setAttribute('data-create-object', - portal_type_list[i]); - li_element.setAttribute('name', - translated_portal_type_list[i]); - li_element.textContent = - result_list[1][0] + ' ' + translated_portal_type_list[i] + - ': ' + value_text; - fragment_element.appendChild(li_element); - } - } - - // Explore + if (gadget.state.allow_creation) { + portal_type_list = + JSON.parse(gadget.state.portal_types); + translated_portal_type_list = + JSON.parse(gadget.state.translated_portal_types); + for (i = 0; i < portal_type_list.length; i += 1) { + li_element = document.createElement('li'); + li_element.setAttribute('class', + 'ui-icon-plus ui-btn-icon-right'); + li_element.setAttribute('data-create-object', + portal_type_list[i]); + li_element.setAttribute('name', + translated_portal_type_list[i]); + li_element.textContent = + result_list[1][0] + ' ' + + translated_portal_type_list[i] + + ': ' + value_text; + fragment_element.appendChild(li_element); + } + } + + // Explore // - li_element = document.createElement('li'); - li_element.setAttribute('class', - 'ui-icon-search ui-btn-icon-right'); - li_element.setAttribute('data-explore', - true); - li_element.textContent = result_list[1][1]; - fragment_element.appendChild(li_element); - - while (ul.firstChild) { - ul.removeChild(ul.firstChild); - } - ul.appendChild(fragment_element); - }); + li_element = document.createElement('li'); + li_element.setAttribute('class', + 'ui-icon-search ui-btn-icon-right'); + li_element.setAttribute('data-explore', + true); + li_element.textContent = result_list[1][1]; + fragment_element.appendChild(li_element); + + while (ul.firstChild) { + ul.removeChild(ul.firstChild); + } + ul.appendChild(fragment_element); + }); }, function (error) { if (error instanceof Error && error.hash && @@ -415,7 +418,7 @@ } throw error; }); - }); + }); }); }) -- 2.30.9