From 157c669d9fcf3c8555442fe53e5639a9b43bd2be Mon Sep 17 00:00:00 2001 From: Romain Courteaud <romain@nexedi.com> Date: Mon, 17 Oct 2016 09:48:27 +0000 Subject: [PATCH] [erp5_web_renderjs_ui] Rewrite integer field --- .../rjs_gadget_erp5_integerfield_html.html | 5 +- .../rjs_gadget_erp5_integerfield_html.xml | 6 +- .../rjs_gadget_erp5_integerfield_js.js | 141 ++++++++---------- .../rjs_gadget_erp5_integerfield_js.xml | 4 +- .../rjs_gadget_html5_input_js.js | 6 +- .../rjs_gadget_html5_input_js.xml | 4 +- 6 files changed, 76 insertions(+), 90 deletions(-) diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.html b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.html index fa9c0a1a03..12aa0d4681 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.html +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.html @@ -3,18 +3,15 @@ <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>ERP5 Floatfield</title> + <title>ERP5 Integerfield</title> <!-- renderjs --> <script src="rsvp.js" type="text/javascript"></script> <script src="renderjs.js" type="text/javascript"></script> - <!-- custom script --> - <script src="gadget_global.js" type="text/javascript"></script> <script src="gadget_erp5_field_integer.js" type="text/javascript"></script> </head> <body> - <input type="number" step="1"/> </body> </html> \ No newline at end of file diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.xml index 19173ed999..659e4dce51 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_html.xml @@ -220,7 +220,7 @@ </item> <item> <key> <string>actor</string> </key> - <value> <string>xiaowu</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>940.60742.34496.36488</string> </value> + <value> <string>954.42877.47511.36096</string> </value> </item> <item> <key> <string>state</string> </key> @@ -252,7 +252,7 @@ </tuple> <state> <tuple> - <float>1423754455.46</float> + <float>1476697183.42</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.js index 6b00c64493..4c5b4ec6e9 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.js +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.js @@ -1,97 +1,82 @@ -/*global window, rJS, RSVP, loopEventListener */ +/*global window, rJS */ /*jslint indent: 2, maxerr: 3 */ -(function (window, rJS, RSVP, loopEventListener) { +(function (window, rJS) { "use strict"; rJS(window) - .ready(function (gadget) { - return gadget.getElement() - .push(function (element) { - gadget.element = element; - }); - }) - .declareAcquiredMethod("notifyValid", "notifyValid") - .declareAcquiredMethod("notifyInvalid", "notifyInvalid") - .declareAcquiredMethod("notifyChange", "notifyChange") - .declareMethod('getTextContent', function () { - return this.element.querySelector('input').getAttribute('value'); + .setState({ + tag: 'p', + step: 1, + type: "number" }) + .declareMethod('render', function (options) { - var input = this.element.querySelector('input'), - field_json = options.field_json || {}; - input.setAttribute( - 'value', - field_json.value || field_json.default || "" - ); - input.setAttribute('name', field_json.key); - input.setAttribute('title', field_json.title); - if (field_json.required === 1) { - input.setAttribute('required', 'required'); - } - if (field_json.editable !== 1) { - input.setAttribute('readonly', 'readonly'); - input.setAttribute('data-wrapper-class', 'ui-state-disabled ui-state-readonly'); - input.setAttribute('disabled', 'disabled'); + var field_json = options.field_json || {}, + state_dict = { + value: field_json.value || field_json.default || "", + editable: field_json.editable, + required: field_json.required, + name: field_json.key, + title: field_json.title + }; + state_dict.text_content = state_dict.value; + return this.changeState(state_dict); + }) + .onStateChange(function (modification_dict) { + var element = this.element, + gadget = this, + url, + result; + if (modification_dict.hasOwnProperty('editable')) { + if (gadget.state.editable) { + url = 'gadget_html5_input.html'; + } else { + url = 'gadget_html5_element.html'; + } + result = this.declareGadget(url, {scope: 'sub'}) + .push(function (input) { + // Clear first to DOM, append after to reduce flickering/manip + while (element.firstChild) { + element.removeChild(element.firstChild); + } + element.appendChild(input.element); + return input; + }); + } else { + result = this.getDeclaredGadget('sub'); } + return result + .push(function (input) { + return input.render(gadget.state); + }); }) + .declareMethod('getContent', function () { - var input = this.element.querySelector('input'), - result = {}; - result[input.getAttribute('name')] = input.value; - return result; - }) - .declareMethod('checkValidity', function () { - var result; - result = this.element.querySelector('input').checkValidity(); - if (result) { - return this.notifyValid() - .push(function () { - return result; + if (this.state.editable) { + return this.getDeclaredGadget('sub') + .push(function (gadget) { + return gadget.getContent(); }); } - return result; + return {}; }) - .declareService(function () { - //////////////////////////////////// - // Check field validity when the value changes - //////////////////////////////////// - var field_gadget = this; - - function notifyChange() { - return RSVP.all([ - field_gadget.checkValidity(), - field_gadget.notifyChange() - ]); - } - - // Listen to input change - return loopEventListener( - field_gadget.element.querySelector('input'), - 'change', - false, - notifyChange - ); + .declareMethod('getTextContent', function () { + return this.getDeclaredGadget('sub') + .push(function (gadget) { + return gadget.getTextContent(); + }); }) - .declareService(function () { - //////////////////////////////////// - // Inform when the field input is invalid - //////////////////////////////////// - var field_gadget = this; - - function notifyInvalid(evt) { - return field_gadget.notifyInvalid(evt.target.validationMessage); + .declareMethod('checkValidity', function () { + if (this.state.editable) { + return this.getDeclaredGadget('sub') + .push(function (gadget) { + return gadget.checkValidity(); + }); } - - // Listen to input change - return loopEventListener( - field_gadget.element.querySelector('input'), - 'invalid', - false, - notifyInvalid - ); + return true; }); -}(window, rJS, RSVP, loopEventListener)); \ No newline at end of file +}(window, rJS)); \ No newline at end of file diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.xml index edd56c1754..bcb39c1a85 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_erp5_integerfield_js.xml @@ -230,7 +230,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>949.15479.42024.21538</string> </value> + <value> <string>954.42915.19295.27187</string> </value> </item> <item> <key> <string>state</string> </key> @@ -248,7 +248,7 @@ </tuple> <state> <tuple> - <float>1455899193.71</float> + <float>1476697168.98</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.js b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.js index ab299dae17..4e32dc9590 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.js +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.js @@ -22,7 +22,8 @@ name: options.name, type: options.type || 'text', title: options.title, - focus: options.focus + focus: options.focus, + step: options.step }; return this.changeState(state_dict); }) @@ -40,6 +41,9 @@ if (this.state.title) { textarea.setAttribute('title', this.state.title); } + if (this.state.step) { + textarea.setAttribute('step', this.state.step); + } if (this.state.required) { textarea.required = true; diff --git a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.xml b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.xml index 83ba72ea85..1136b974eb 100644 --- a/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.xml +++ b/bt5/erp5_web_renderjs_ui/PathTemplateItem/web_page_module/rjs_gadget_html5_input_js.xml @@ -230,7 +230,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>954.35751.60338.24780</string> </value> + <value> <string>954.35863.52273.29354</string> </value> </item> <item> <key> <string>state</string> </key> @@ -248,7 +248,7 @@ </tuple> <state> <tuple> - <float>1476274067.85</float> + <float>1476697276.8</float> <string>UTC</string> </tuple> </state> -- 2.30.9