From c9edbda4a974320144c4d02a4766f04e63cbc0bd Mon Sep 17 00:00:00 2001 From: Romain Courteaud <romain@nexedi.com> Date: Mon, 3 Oct 2016 14:50:00 +0000 Subject: [PATCH] [erp5_web_renderjs_ui] Do not fetch ERP5 data after formulator validation error --- .../rjs_gadget_erp5_pt_formpage_html.html | 1 - .../rjs_gadget_erp5_pt_formpage_html.xml | 8 +- .../rjs_gadget_erp5_pt_formpage_js.js | 146 +++++++++--------- .../rjs_gadget_erp5_pt_formpage_js.xml | 6 +- 4 files changed, 78 insertions(+), 83 deletions(-) diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.html b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.html index 9b8b473277..569978356b 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.html +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.html @@ -10,7 +10,6 @@ <script src="renderjs.js" type="text/javascript"></script> <!-- custom script --> - <script src="gadget_global.js" type="text/javascript"></script> <script src="gadget_erp5_page_form.js" type="text/javascript"></script> </head> diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.xml index c25bd52b5b..3f735125e9 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_html.xml @@ -220,7 +220,7 @@ </item> <item> <key> <string>actor</string> </key> - <value> <string>romain</string> </value> + <value> <string>zope</string> </value> </item> <item> <key> <string>comment</string> </key> @@ -234,7 +234,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>937.49661.35517.47837</string> </value> + <value> <string>952.64761.25287.18397</string> </value> </item> <item> <key> <string>state</string> </key> @@ -252,8 +252,8 @@ </tuple> <state> <tuple> - <float>1411465614.17</float> - <string>GMT</string> + <float>1475148161.21</float> + <string>UTC</string> </tuple> </state> </object> diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.js index 6197e64d64..12b1952d6f 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.js +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.js @@ -3,16 +3,13 @@ (function (window, rJS, URI) { "use strict"; - var gadget_klass = rJS(window); - // DEFAULT_VIEW_REFERENCE = "view"; - function loadFormContent(gadget, result) { var key; - if (gadget.props.options.form_content) { + if (gadget.state.options.form_content) { for (key in result) { if (result.hasOwnProperty(key)) { - if (gadget.props.options.form_content[result[key].key]) { - result[key].default = gadget.props.options.form_content[result[key].key]; + if (gadget.state.options.form_content[result[key].key]) { + result[key].default = gadget.state.options.form_content[result[key].key]; } } } @@ -20,22 +17,7 @@ } - gadget_klass - ///////////////////////////////////////////////////////////////// - // ready - ///////////////////////////////////////////////////////////////// - // Init local properties - .ready(function (g) { - g.props = {}; - }) - - // Assign the element to a variable - .ready(function (g) { - return g.getElement() - .push(function (element) { - g.props.element = element; - }); - }) + rJS(window) ///////////////////////////////////////////////////////////////// // Acquired methods @@ -60,6 +42,9 @@ return result; }); }) + .allowPublicAcquisition('notifySubmit', function () { + return this.triggerSubmit(); + }) .declareMethod('triggerSubmit', function () { return this.getDeclaredGadget('fg') .push(function (g) { @@ -67,42 +52,24 @@ }); }) .declareMethod("render", function (options) { - var gadget = this, - element = gadget.props.element, - erp5_document, - erp5_form, - queue, - form_gadget; - - gadget.props.jio_key = options.jio_key; - gadget.props.options = options; - - queue = gadget.jio_getAttachment(options.jio_key, options.view); - queue + var gadget = this; + return gadget.jio_getAttachment(options.jio_key, options.view) .push(function (result) { var uri; if (!result._embedded) { return gadget.jio_getAttachment(options.jio_key, "links") - .push(function (result) { + .push(function (result2) { return gadget.redirect({command: 'change', options: { - view: result._links.view[0].href, + view: result2._links.view[0].href, editable: undefined, page: undefined }}); }); } - if (options.hasOwnProperty("form_validation_error")) { - result._embedded._view = options.form_validation_error; - } + uri = new URI(result._embedded._view._links.form_definition.href); - erp5_document = result; - queue - .push(function () { - return gadget.jio_getAttachment(uri.segment(2), "view"); - }) - .push(function (result) { - erp5_form = result; - loadFormContent(gadget, erp5_document._embedded._view); + return gadget.jio_getAttachment(uri.segment(2), "view") + .push(function (erp5_form) { var url = "gadget_erp5_pt_" + erp5_form.pt; // XXX Hardcoded specific behaviour for form_view if ((options.editable !== undefined) && (erp5_form.pt === "form_view")) { @@ -110,40 +77,69 @@ } url += ".html"; - return gadget.declareGadget(url, { - scope: "fg" + return gadget.changeState({ + jio_key: options.jio_key, + options: options, + view: options.view, + url: url, + erp5_document: result, + erp5_form: erp5_form }); - }) - .push(function (result) { - var sub_options = options.fg || {}; - sub_options.erp5_document = erp5_document; - sub_options.form_definition = erp5_form; - sub_options.view = options.view; - sub_options.action_view = options.action_view; - sub_options.jio_key = options.jio_key; - sub_options.editable = options.editable; - - form_gadget = result; - return form_gadget.render(sub_options); - }) - .push(function () { - return form_gadget.getElement(); - }) - .push(function (fragment) { - // Clear first to DOM, append after to reduce flickering/manip - while (element.firstChild) { - element.removeChild(element.firstChild); - } - element.appendChild(fragment); }); }); - return queue; }) + .declareMethod('updateDOM', function (modification_dict) { + var queue, + gadget = this, + options = this.state.options, + page_template_gadget, + clean_dom = modification_dict.hasOwnProperty('url'); + if (clean_dom) { + queue = gadget.declareGadget(gadget.state.url, {scope: "fg"}); + } else { + queue = gadget.getDeclaredGadget("fg"); + } + return queue + .push(function (result) { + page_template_gadget = result; + + var sub_options = options.fg || {}, + erp5_document = gadget.state.erp5_document, + erp5_form = gadget.state.erp5_form; + + // Render the page template form + if (options.hasOwnProperty("form_validation_error")) { + erp5_document._embedded._view = options.form_validation_error; + } + loadFormContent(gadget, erp5_document._embedded._view); + + sub_options.erp5_document = erp5_document; + sub_options.form_definition = erp5_form; + sub_options.view = options.view; + sub_options.action_view = options.action_view; + sub_options.jio_key = options.jio_key; + sub_options.editable = options.editable; + + return page_template_gadget.render(sub_options); + + }) + .push(function () { + if (clean_dom) { + return page_template_gadget.getElement() + .push(function (fragment) { + var element = gadget.element; + // Clear first to DOM, append after to reduce flickering/manip + while (element.firstChild) { + element.removeChild(element.firstChild); + } + element.appendChild(fragment); + }); + } + }); + }) .allowPublicAcquisition("displayFormulatorValidationError", function (param_list) { - var options = this.props.options; - options.form_validation_error = param_list[0]; - return this.render(options); + return this.changeState({form_validation_error: param_list[0]}); }); }(window, rJS, URI)); \ No newline at end of file diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.xml index 6cd1b41d99..7ebe27701d 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_pt_formpage_js.xml @@ -99,7 +99,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Gadget ERP5 Doc JS</string> </value> + <value> <string>Gadget ERP5 Page Form JS</string> </value> </item> <item> <key> <string>version</string> </key> @@ -230,7 +230,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>952.10025.24641.8430</string> </value> + <value> <string>954.15904.46164.40277</string> </value> </item> <item> <key> <string>state</string> </key> @@ -248,7 +248,7 @@ </tuple> <state> <tuple> - <float>1467032278.85</float> + <float>1475503870.23</float> <string>UTC</string> </tuple> </state> -- 2.30.9