From 205d3ded56d15624278b9faeb3367411920c5982 Mon Sep 17 00:00:00 2001 From: Quentin Dupont Date: Wed, 4 Sep 2019 17:51:56 +0200 Subject: [PATCH 01/38] [ADD] Widget Numeric step --- web_widget_numeric_step/README.rst | 90 ++++ web_widget_numeric_step/__init__.py | 0 web_widget_numeric_step/__manifest__.py | 21 + web_widget_numeric_step/i18n/fr.po | 31 ++ .../readme/CONTRIBUTORS.rst | 3 + .../readme/DESCRIPTION.rst | 2 + web_widget_numeric_step/readme/USAGE.rst | 26 ++ .../static/description/add_two_buttons.png | Bin 0 -> 11411 bytes .../static/description/icon.png | Bin 0 -> 961 bytes .../static/description/index.html | 442 ++++++++++++++++++ .../static/description/step0,25andlimits.gif | Bin 0 -> 30940 bytes ...0_limit15_placeholder117_with_onchange.gif | Bin 0 -> 31039 bytes .../static/src/js/numeric_step.js | 95 ++++ .../static/src/scss/numeric_step.scss | 29 ++ .../static/src/xml/numeric_step.xml | 19 + .../view/web_widget_numeric_step.xml | 9 + 16 files changed, 767 insertions(+) create mode 100644 web_widget_numeric_step/README.rst create mode 100644 web_widget_numeric_step/__init__.py create mode 100644 web_widget_numeric_step/__manifest__.py create mode 100644 web_widget_numeric_step/i18n/fr.po create mode 100644 web_widget_numeric_step/readme/CONTRIBUTORS.rst create mode 100644 web_widget_numeric_step/readme/DESCRIPTION.rst create mode 100644 web_widget_numeric_step/readme/USAGE.rst create mode 100644 web_widget_numeric_step/static/description/add_two_buttons.png create mode 100644 web_widget_numeric_step/static/description/icon.png create mode 100644 web_widget_numeric_step/static/description/index.html create mode 100644 web_widget_numeric_step/static/description/step0,25andlimits.gif create mode 100644 web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif create mode 100644 web_widget_numeric_step/static/src/js/numeric_step.js create mode 100644 web_widget_numeric_step/static/src/scss/numeric_step.scss create mode 100644 web_widget_numeric_step/static/src/xml/numeric_step.xml create mode 100644 web_widget_numeric_step/view/web_widget_numeric_step.xml diff --git a/web_widget_numeric_step/README.rst b/web_widget_numeric_step/README.rst new file mode 100644 index 000000000000..4e45fa408474 --- /dev/null +++ b/web_widget_numeric_step/README.rst @@ -0,0 +1,90 @@ +======================= +Web Widget Numeric Step +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-quentinDupont%2Fweb-lightgray.png?logo=github + :target: https://github.com/quentinDupont/web/tree/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step + :alt: quentinDupont/web + +|badge1| |badge2| |badge3| + +This widget changes input number field and make it easier to incremente the number thanks to 2 buttons (+ and -). +Use JS native logic for input number, so you can use the options ``min``, ``max``, ``step``, ``placeholder``. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +In your xml view, add ``widget="numeric_step"`` +This will add the 2 buttons "+" and "-" just next to the input field in edit mode. +Iteration step by default is 1. + +.. figure:: https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/add_two_buttons.png + + +**Optional** + +Add an option to choose the step iteration and limits (min and max values). + +Example for an 0.25 step, min to -1 and max to 10 : + +`` days`` + +**Examples** + +Iteration with 0.25 step, min to -1 and max to 10. + +Start to incremente with button, continue incrementing with scrolling mouse. + +.. figure:: https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/step0,25andlimits.gif + +Iteration with 10 step, max limit 15, placeholder with onchange + +.. figure:: https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* GRAP + +Contributors +~~~~~~~~~~~~ + +* `GRAP `_: + + * Quentin DUPONT + +Maintainers +~~~~~~~~~~~ + +This module is part of the `quentinDupont/web `_ project on GitHub. + +You are welcome to contribute. diff --git a/web_widget_numeric_step/__init__.py b/web_widget_numeric_step/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/web_widget_numeric_step/__manifest__.py b/web_widget_numeric_step/__manifest__.py new file mode 100644 index 000000000000..7830c86884ca --- /dev/null +++ b/web_widget_numeric_step/__manifest__.py @@ -0,0 +1,21 @@ +# Odoo, Open Source Web Widget Numeric Step +# +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).# +{ + 'name': "Web Widget Numeric Step", + 'category': "web", + 'version': "12.0.1.0.0", + 'author': "GRAP, " + "Odoo Community Association (OCA)", + 'license': 'AGPL-3', + 'website': 'https://github.com/OCA/web', + 'depends': ['web'], + 'data': [ + 'view/web_widget_numeric_step.xml' + ], + 'qweb': [ + 'static/src/xml/numeric_step.xml', + ], + 'auto_install': False, + 'installable': True, +} diff --git a/web_widget_numeric_step/i18n/fr.po b/web_widget_numeric_step/i18n/fr.po new file mode 100644 index 000000000000..3be7542a94f6 --- /dev/null +++ b/web_widget_numeric_step/i18n/fr.po @@ -0,0 +1,31 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_number_ux_choice +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-08-30 12:07+0000\n" +"PO-Revision-Date: 2019-08-30 12:07+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: web_widget_number_ux_choice +#. openerp-web +#: code:addons/web_widget_number_ux_choice/static/src/xml/number_ux_choice.xml:12 +#, python-format +msgid "Minus" +msgstr "Moins" + +#. module: web_widget_number_ux_choice +#. openerp-web +#: code:addons/web_widget_number_ux_choice/static/src/xml/number_ux_choice.xml:12 +#, python-format +msgid "Plus" +msgstr "Plus" + diff --git a/web_widget_numeric_step/readme/CONTRIBUTORS.rst b/web_widget_numeric_step/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..65f8f81d134f --- /dev/null +++ b/web_widget_numeric_step/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `GRAP `_: + + * Quentin DUPONT diff --git a/web_widget_numeric_step/readme/DESCRIPTION.rst b/web_widget_numeric_step/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..f4906b4ab985 --- /dev/null +++ b/web_widget_numeric_step/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This widget changes input number field and make it easier to incremente the number thanks to 2 buttons (+ and -). +Use JS native logic for input number, so you can use the options ``min``, ``max``, ``step``, ``placeholder``. \ No newline at end of file diff --git a/web_widget_numeric_step/readme/USAGE.rst b/web_widget_numeric_step/readme/USAGE.rst new file mode 100644 index 000000000000..47aaf790c41a --- /dev/null +++ b/web_widget_numeric_step/readme/USAGE.rst @@ -0,0 +1,26 @@ +In your xml view, add ``widget="numeric_step"`` +This will add the 2 buttons "+" and "-" just next to the input field in edit mode. +Iteration step by default is 1. + +.. figure:: ../static/description/add_two_buttons.png + + +**Optional** + +Add an option to choose the step iteration and limits (min and max values). + +Example for an 0.25 step, min to -1 and max to 10 : + +`` days`` + +**Examples** + +Iteration with 0.25 step, min to -1 and max to 10. + +Start to incremente with button, continue incrementing with scrolling mouse. + +.. figure:: ../static/description/step0,25andlimits.gif + +Iteration with 10 step, max limit 15, placeholder with onchange + +.. figure:: ../static/description/step10_limit15_placeholder117_with_onchange.gif diff --git a/web_widget_numeric_step/static/description/add_two_buttons.png b/web_widget_numeric_step/static/description/add_two_buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..2670f06ec555114f5407c98751b009ca9adfa93f GIT binary patch literal 11411 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 Kmackl67pYJg;Kr% literal 0 HcmV?d00001 diff --git a/web_widget_numeric_step/static/description/icon.png b/web_widget_numeric_step/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a662b992dd695429c20ebcbb123fed8d7fc0765 GIT binary patch literal 961 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkEl47cW>To{{HNFC9!8|lar_yYAgv{KQY?d$m3*gXtCt2M32>x`n@wf zb3cA8^V5H4EWUN+&pK86Q=+VeMk-vQ>%oyJfB3Zn(6vPxkGmi{0J~!o>|80za-UZ$I#T!?lOiSI>uj zu6@(u{pOvzBXhy`e{(M77DTa6GD$1eUOL0GVQTlDFMl%qboGn>-F|a#HS;&w#Vu3g z`tJqon3v-4`2%x@#U@85w`RXNkDj<0oo+Y$c_Dd1b<5ld$3n`4z3X#(kKFrZa?AbM z%Wbd9W8B|JDtNE^_;Kg=okrh2P7b~1CdT#fRO{zGMJwATC)<>N<2|RN_u%dBT|Z}j zkE@&OeVAdr!P3cFwjEx%IsfxBZf}=+jEp^(=l}S0S^vjEX~7@9&#ZNAm|utQfA;8x z;k)Y}rpG@$dbCwjWmf6By82%E%*z_GJ`(*|Hear*RTe&v%stO=abkMq^UwT0b0d~l z{`WZVD{I3^T zUaO9t)Ms>4x9d=+u;9<(RrabPSH{treTLOZD&$%?qe*P<)cUph{f6YRp39A-s zaQ%Gz{_3UQzi+Yje9VjK-`B6+#8L78o=xRE%R9Rd_!izzw)y;J@}2wnpROohd~=mi zNVn+SV*h`WryaPX%n-bi<*eTNt*T|WpMJJyxN%d&NTQ3mqVCepCWQ}{9qy)Ui&=zs zMGF@@T*=!gsVR#ZF0R;YbWjOa(a>b_2s#(rw?zh3Mtz& zcQVhVQ?nPHb(?!9>X)ZiUaslsJD)oarLB}Li)P5}&}d-7g=9|sV4tSTuv2xu=3h`w N^mO%eS?83{1OW9UuonOT literal 0 HcmV?d00001 diff --git a/web_widget_numeric_step/static/description/index.html b/web_widget_numeric_step/static/description/index.html new file mode 100644 index 000000000000..c838ff91fd3b --- /dev/null +++ b/web_widget_numeric_step/static/description/index.html @@ -0,0 +1,442 @@ + + + + + + +Web Widget Numeric Step + + + +
+

Web Widget Numeric Step

+ + +

Beta License: AGPL-3 quentinDupont/web

+

This widget changes input number field and make it easier to incremente the number thanks to 2 buttons (+ and -). +Use JS native logic for input number, so you can use the options min, max, step, placeholder.

+

Table of contents

+ +
+

Usage

+

In your xml view, add widget="numeric_step" +This will add the 2 buttons “+” and “-” just next to the input field in edit mode. +Iteration step by default is 1.

+
+https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/add_two_buttons.png +
+

Optional

+

Add an option to choose the step iteration and limits (min and max values).

+

Example for an 0.25 step, min to -1 and max to 10 :

+

<field name="sale_delay" widget="numeric_step" options="{'step': 0.25, 'min': -1, 'max': 10}" /> days

+

Examples

+

Iteration with 0.25 step, min to -1 and max to 10.

+

Start to incremente with button, continue incrementing with scrolling mouse.

+
+https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/step0,25andlimits.gif +
+

Iteration with 10 step, max limit 15, placeholder with onchange

+
+https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • GRAP
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is part of the quentinDupont/web project on GitHub.

+

You are welcome to contribute.

+
+
+
+ + diff --git a/web_widget_numeric_step/static/description/step0,25andlimits.gif b/web_widget_numeric_step/static/description/step0,25andlimits.gif new file mode 100644 index 0000000000000000000000000000000000000000..1e5827236826f9cd082b23f6236090d4d7ac0015 GIT binary patch literal 30940 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 literal 0 HcmV?d00001 diff --git a/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif b/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb0b6e815607f11536077fcd14b753ee1d260f19 GIT binary patch literal 31039 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 literal 0 HcmV?d00001 diff --git a/web_widget_numeric_step/static/src/js/numeric_step.js b/web_widget_numeric_step/static/src/js/numeric_step.js new file mode 100644 index 000000000000..ca54e891b504 --- /dev/null +++ b/web_widget_numeric_step/static/src/js/numeric_step.js @@ -0,0 +1,95 @@ +/** +* Copyright (C) 2019 - Today: GRAP (http://www.grap.coop) +* @author: Quentin DUPONT +* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) **/ + +odoo.define('web.web_widget_numeric_step', function(require) { + "use strict"; + + var Registry = require('web.field_registry'); + var NumericStep = require('web.basic_fields').FieldFloat; + + /** + * Get decimal precision for the input field + * + * @param {object} input Input field + * @return {int} Precision + */ + function getPrecision(input) { + if (!isFinite(input)) return 0; + var ten_multiple = 1, precision = 0; + while (Math.round(input * ten_multiple) / ten_multiple !== input) { + ten_multiple *= 10; + precision++; + } + return precision; + } + + /** + * Increase input number with chosen step iteration + * + * @param {object} self Input field + * @param {Float} step Step iteration + * @param {String} minusOrPlus Choose "minus" to decrease. Default is "plus" + */ + function addStep(self, step, minusOrPlus) { + var oldVal= parseFloat(self._getValue()); + var precision = Math.max(getPrecision(oldVal), getPrecision(step)) + if (minusOrPlus == "minus") { + step = -step + } + var newVal = oldVal + step; + // Check input limits + if (newVal > self.attrs.options.max) { + newVal = self.attrs.options.max; + } else if (newVal < self.attrs.options.min) { + newVal = self.attrs.options.min; + } + var newVal_s = newVal.toFixed(precision).toString(); + self._setValue(newVal_s); + self.$input[0].value = newVal_s; + } + + + NumericStep.include({ + template: 'web_widget_numeric_step', + + _render: function () { + var self = this; + // Use native options for input number + this.nodeOptions['type'] = "number"; + this._super(); + + // Add native options for input number + var input_number_options = ['max', 'min', 'placeholder', 'step']; + for (var options of input_number_options) { + if (typeof this.nodeOptions[options] !== 'undefined') { + this.$el[0][options] = this.nodeOptions[options]; + } + } + + this.$("button").parents().removeClass("o_field_integer o_field_number o_input o_required_modifier"); + this.$("button").click(function() { + var node = $(this).parent()[0]; + + // Get step option or default is 1 + if (typeof node.attributes['step'] !== 'undefined') { + var step = parseFloat(node.attributes['step'].value); + } else { + var step = 1; + } + // PLUS button + if ($(this).hasClass("btn_numeric_step_plus")) { + addStep(self, step, "plus") + // MINUS button + } else if ($(this).hasClass("btn_numeric_step_minus")){ + addStep(self, step, "minus") + + }; + }); + }, + }); + + Registry.add('numeric_step', NumericStep); + +}); diff --git a/web_widget_numeric_step/static/src/scss/numeric_step.scss b/web_widget_numeric_step/static/src/scss/numeric_step.scss new file mode 100644 index 000000000000..df61457fc13f --- /dev/null +++ b/web_widget_numeric_step/static/src/scss/numeric_step.scss @@ -0,0 +1,29 @@ + +.input_numeric_step { + width: 71% !important; +} + +.btns_numeric_step { + width: 27% !important; + button { + height: 25px; + } +} + +/* Turn Off Number Input Spinners */ +input{ + /* Firefox */ + -moz-appearance: textfield; + + /* Chrome */ + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin:0; + } + + /* Opéra*/ + &::-o-inner-spin-button { + -o-appearance: none; + margin: 0; + } +} diff --git a/web_widget_numeric_step/static/src/xml/numeric_step.xml b/web_widget_numeric_step/static/src/xml/numeric_step.xml new file mode 100644 index 000000000000..904e4c14c893 --- /dev/null +++ b/web_widget_numeric_step/static/src/xml/numeric_step.xml @@ -0,0 +1,19 @@ + + + + + + +

+
+ + + + + + diff --git a/web_widget_numeric_step/view/web_widget_numeric_step.xml b/web_widget_numeric_step/view/web_widget_numeric_step.xml new file mode 100644 index 000000000000..bfeb67b5a9c6 --- /dev/null +++ b/web_widget_numeric_step/view/web_widget_numeric_step.xml @@ -0,0 +1,9 @@ + + + + From 817056bc23e04de9977c6fcaecd07f04895ba29d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20D=C3=ADaz?= Date: Fri, 7 Feb 2020 02:43:49 +0100 Subject: [PATCH 02/38] [IMP] web_widget_numeric_step: Better CSS and supports mobile layouts --- web_widget_numeric_step/README.rst | 57 +++- web_widget_numeric_step/__manifest__.py | 14 +- .../demo/res_users_view.xml | 17 + web_widget_numeric_step/i18n/fr.po | 12 +- .../i18n/web_widget_numeric_step.pot | 29 ++ .../readme/CONTRIBUTORS.rst | 4 + .../readme/DESCRIPTION.rst | 6 +- web_widget_numeric_step/readme/USAGE.rst | 6 +- .../static/description/index.html | 37 ++- .../static/src/css/numeric_step.scss | 3 + .../static/src/js/numeric_step.js | 310 +++++++++++++----- .../static/src/scss/numeric_step.scss | 29 -- .../static/src/xml/numeric_step.xml | 21 +- ...web_widget_numeric_step.xml => assets.xml} | 4 +- 14 files changed, 390 insertions(+), 159 deletions(-) create mode 100644 web_widget_numeric_step/demo/res_users_view.xml create mode 100644 web_widget_numeric_step/i18n/web_widget_numeric_step.pot create mode 100644 web_widget_numeric_step/static/src/css/numeric_step.scss delete mode 100644 web_widget_numeric_step/static/src/scss/numeric_step.scss rename web_widget_numeric_step/view/{web_widget_numeric_step.xml => assets.xml} (90%) diff --git a/web_widget_numeric_step/README.rst b/web_widget_numeric_step/README.rst index 4e45fa408474..f61c24b4fe96 100644 --- a/web_widget_numeric_step/README.rst +++ b/web_widget_numeric_step/README.rst @@ -13,15 +13,23 @@ Web Widget Numeric Step .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 -.. |badge3| image:: https://img.shields.io/badge/github-quentinDupont%2Fweb-lightgray.png?logo=github - :target: https://github.com/quentinDupont/web/tree/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step - :alt: quentinDupont/web - -|badge1| |badge2| |badge3| - -This widget changes input number field and make it easier to incremente the number thanks to 2 buttons (+ and -). +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github + :target: https://github.com/OCA/web/tree/12.0/web_widget_numeric_step + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_widget_numeric_step + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/162/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This widget changes input number field and make it easier to increment the number thanks to 2 buttons (+ and -). Use JS native logic for input number, so you can use the options ``min``, ``max``, ``step``, ``placeholder``. +Demo available at `Settings > Users & Companies > Users > *Select One* > See 'Credit Limit' field` + **Table of contents** .. contents:: @@ -34,7 +42,7 @@ In your xml view, add ``widget="numeric_step"`` This will add the 2 buttons "+" and "-" just next to the input field in edit mode. Iteration step by default is 1. -.. figure:: https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/add_two_buttons.png +.. figure:: https://raw.githubusercontent.com/OCA/web/12.0/web_widget_numeric_step/static/description/add_two_buttons.png **Optional** @@ -43,27 +51,29 @@ Add an option to choose the step iteration and limits (min and max values). Example for an 0.25 step, min to -1 and max to 10 : -`` days`` +.. code:: xml + + days **Examples** Iteration with 0.25 step, min to -1 and max to 10. -Start to incremente with button, continue incrementing with scrolling mouse. +Start to increment with button, continue incrementing with scrolling mouse. -.. figure:: https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/step0,25andlimits.gif +.. figure:: https://raw.githubusercontent.com/OCA/web/12.0/web_widget_numeric_step/static/description/step0,25andlimits.gif Iteration with 10 step, max limit 15, placeholder with onchange -.. figure:: https://raw.githubusercontent.com/quentinDupont/web/12.0_ADD_web_widget_ux_choice/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif +.. figure:: https://raw.githubusercontent.com/OCA/web/12.0/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. +Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -74,6 +84,7 @@ Authors ~~~~~~~ * GRAP +* Tecnativa Contributors ~~~~~~~~~~~~ @@ -82,9 +93,23 @@ Contributors * Quentin DUPONT +* `Tecnativa `_: + + * Alexandre Díaz + Maintainers ~~~~~~~~~~~ -This module is part of the `quentinDupont/web `_ project on GitHub. +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/web `_ project on GitHub. -You are welcome to contribute. +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_widget_numeric_step/__manifest__.py b/web_widget_numeric_step/__manifest__.py index 7830c86884ca..092fc003fbba 100644 --- a/web_widget_numeric_step/__manifest__.py +++ b/web_widget_numeric_step/__manifest__.py @@ -1,21 +1,25 @@ -# Odoo, Open Source Web Widget Numeric Step -# -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).# +# Copyright 2019 GRAP - Quentin DUPONT +# Copyright 2020 Tecnativa - Alexandre Díaz +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + { 'name': "Web Widget Numeric Step", 'category': "web", 'version': "12.0.1.0.0", - 'author': "GRAP, " + 'author': "GRAP, Tecnativa, " "Odoo Community Association (OCA)", 'license': 'AGPL-3', 'website': 'https://github.com/OCA/web', 'depends': ['web'], 'data': [ - 'view/web_widget_numeric_step.xml' + 'view/assets.xml' ], 'qweb': [ 'static/src/xml/numeric_step.xml', ], + 'demo': [ + 'demo/res_users_view.xml' + ], 'auto_install': False, 'installable': True, } diff --git a/web_widget_numeric_step/demo/res_users_view.xml b/web_widget_numeric_step/demo/res_users_view.xml new file mode 100644 index 000000000000..521affed0263 --- /dev/null +++ b/web_widget_numeric_step/demo/res_users_view.xml @@ -0,0 +1,17 @@ + + + + + + res.users + + + + + + + + + + diff --git a/web_widget_numeric_step/i18n/fr.po b/web_widget_numeric_step/i18n/fr.po index 3be7542a94f6..86941b67d4e5 100644 --- a/web_widget_numeric_step/i18n/fr.po +++ b/web_widget_numeric_step/i18n/fr.po @@ -1,6 +1,6 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * web_widget_number_ux_choice +# * web_widget_number_ux_choice # msgid "" msgstr "" @@ -10,22 +10,22 @@ msgstr "" "PO-Revision-Date: 2019-08-30 12:07+0000\n" "Last-Translator: <>\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: web_widget_number_ux_choice +#. module: web_widget_numeric_step #. openerp-web -#: code:addons/web_widget_number_ux_choice/static/src/xml/number_ux_choice.xml:12 +#: code:addons/web_widget_numeric_step/static/src/xml/numeric_step.xml:14 #, python-format msgid "Minus" msgstr "Moins" -#. module: web_widget_number_ux_choice +#. module: web_widget_numeric_step #. openerp-web -#: code:addons/web_widget_number_ux_choice/static/src/xml/number_ux_choice.xml:12 +#: code:addons/web_widget_numeric_step/static/src/xml/numeric_step.xml:19 #, python-format msgid "Plus" msgstr "Plus" - diff --git a/web_widget_numeric_step/i18n/web_widget_numeric_step.pot b/web_widget_numeric_step/i18n/web_widget_numeric_step.pot new file mode 100644 index 000000000000..dd11a5bc9547 --- /dev/null +++ b/web_widget_numeric_step/i18n/web_widget_numeric_step.pot @@ -0,0 +1,29 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_widget_numeric_step +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: web_widget_numeric_step +#. openerp-web +#: code:addons/web_widget_numeric_step/static/src/xml/numeric_step.xml:14 +#, python-format +msgid "Minus" +msgstr "" + +#. module: web_widget_numeric_step +#. openerp-web +#: code:addons/web_widget_numeric_step/static/src/xml/numeric_step.xml:19 +#, python-format +msgid "Plus" +msgstr "" + diff --git a/web_widget_numeric_step/readme/CONTRIBUTORS.rst b/web_widget_numeric_step/readme/CONTRIBUTORS.rst index 65f8f81d134f..de2b473bd9c2 100644 --- a/web_widget_numeric_step/readme/CONTRIBUTORS.rst +++ b/web_widget_numeric_step/readme/CONTRIBUTORS.rst @@ -1,3 +1,7 @@ * `GRAP `_: * Quentin DUPONT + +* `Tecnativa `_: + + * Alexandre Díaz diff --git a/web_widget_numeric_step/readme/DESCRIPTION.rst b/web_widget_numeric_step/readme/DESCRIPTION.rst index f4906b4ab985..4f251db1068d 100644 --- a/web_widget_numeric_step/readme/DESCRIPTION.rst +++ b/web_widget_numeric_step/readme/DESCRIPTION.rst @@ -1,2 +1,4 @@ -This widget changes input number field and make it easier to incremente the number thanks to 2 buttons (+ and -). -Use JS native logic for input number, so you can use the options ``min``, ``max``, ``step``, ``placeholder``. \ No newline at end of file +This widget changes input number field and make it easier to increment the number thanks to 2 buttons (+ and -). +Use JS native logic for input number, so you can use the options ``min``, ``max``, ``step``, ``placeholder``. + +Demo available at `Settings > Users & Companies > Users > *Select One* > See 'Credit Limit' field` diff --git a/web_widget_numeric_step/readme/USAGE.rst b/web_widget_numeric_step/readme/USAGE.rst index 47aaf790c41a..e272b802233f 100644 --- a/web_widget_numeric_step/readme/USAGE.rst +++ b/web_widget_numeric_step/readme/USAGE.rst @@ -11,13 +11,15 @@ Add an option to choose the step iteration and limits (min and max values). Example for an 0.25 step, min to -1 and max to 10 : -`` days`` +.. code:: xml + + days **Examples** Iteration with 0.25 step, min to -1 and max to 10. -Start to incremente with button, continue incrementing with scrolling mouse. +Start to increment with button, continue incrementing with scrolling mouse. .. figure:: ../static/description/step0,25andlimits.gif diff --git a/web_widget_numeric_step/static/description/index.html b/web_widget_numeric_step/static/description/index.html index c838ff91fd3b..ea4b4c5ed3d4 100644 --- a/web_widget_numeric_step/static/description/index.html +++ b/web_widget_numeric_step/static/description/index.html @@ -3,7 +3,7 @@ - + Web Widget Numeric Step -
-

Web Widget Numeric Step

+
+ + +Odoo Community Association + +
+

Web Widget Numeric Step

-

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/web Translate me on Weblate Try me on Runboat

This widget changes input number field and make it easier to increment the number thanks to 2 buttons (+ and -). Use JS native logic for input number, so you can use the options min, max, step, @@ -391,11 +396,11 @@

Web Widget Numeric Step

-

Usage

+

Usage

In your xml view, add widget="numeric_step" This will add the 2 buttons “+” and “-” just next to the input field in edit mode. Iteration step by default is 1.

-

image1

+

image1

Optional

Add an option to choose the step iteration and limits (min and max values).

@@ -417,38 +422,38 @@

Usage

Iteration with 0.25 step, min to -1 and max to 10.

Start to increment with button, continue incrementing with scrolling mouse.

-

image2

+

image2

Iteration with 10 step, max limit 15, placeholder with onchange

-

image3

+

image3

Demo

You can test the feature by going to Settings > Technical > Scheduled Actions. The field “Execute Every” is configured to use the widget with 2 step, min to 0 and max to 40.

-

Known issues / Roadmap

+

Known issues / Roadmap

When the value is entered using the keyboard, the limits set in the widget can be exceeded

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -feedback.

+feedback.

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • GRAP
  • Tecnativa
-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -475,10 +480,11 @@

Maintainers

promote its widespread use.

Current maintainers:

rafaelbn yajo

-

This module is part of the OCA/web project on GitHub.

+

This module is part of the OCA/web project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
From 6b280f48291ce4d531cf48169549f94ffcda18ea Mon Sep 17 00:00:00 2001 From: Carlos Dauden Date: Sat, 17 Oct 2026 17:09:25 +0200 Subject: [PATCH 37/38] [IMP] web_widget_numeric_step: pre-commit auto fixes --- web_widget_numeric_step/demo/ir_cron.xml | 2 +- web_widget_numeric_step/static/src/numeric_step.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/web_widget_numeric_step/demo/ir_cron.xml b/web_widget_numeric_step/demo/ir_cron.xml index 1a4f7bdc47ee..6b5e4a66a9a3 100644 --- a/web_widget_numeric_step/demo/ir_cron.xml +++ b/web_widget_numeric_step/demo/ir_cron.xml @@ -1,4 +1,4 @@ - + ir.cron diff --git a/web_widget_numeric_step/static/src/numeric_step.xml b/web_widget_numeric_step/static/src/numeric_step.xml index f6aa28637b99..4b92310ef800 100644 --- a/web_widget_numeric_step/static/src/numeric_step.xml +++ b/web_widget_numeric_step/static/src/numeric_step.xml @@ -21,10 +21,10 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). Date: Sat, 17 Oct 2026 17:10:57 +0200 Subject: [PATCH 38/38] [MIG] web_widget_numeric_step: Migration to 20.0 --- web_widget_numeric_step/README.rst | 34 ++-- web_widget_numeric_step/__manifest__.py | 7 +- web_widget_numeric_step/demo/ir_cron.xml | 13 -- .../demo/report_paperformat.xml | 33 ++++ web_widget_numeric_step/readme/DESCRIPTION.md | 3 - web_widget_numeric_step/readme/USAGE.md | 10 +- .../static/description/index.html | 31 ++-- .../static/src/numeric_step.esm.js | 82 ++++++--- .../static/src/numeric_step.scss | 8 - .../static/src/numeric_step.xml | 43 +++-- .../static/tests/numeric_step.test.js | 165 ++++++++++++++++++ web_widget_numeric_step/tests/__init__.py | 1 + web_widget_numeric_step/tests/test_js.py | 21 +++ 13 files changed, 345 insertions(+), 106 deletions(-) delete mode 100644 web_widget_numeric_step/demo/ir_cron.xml create mode 100644 web_widget_numeric_step/demo/report_paperformat.xml create mode 100644 web_widget_numeric_step/static/tests/numeric_step.test.js create mode 100644 web_widget_numeric_step/tests/__init__.py create mode 100644 web_widget_numeric_step/tests/test_js.py diff --git a/web_widget_numeric_step/README.rst b/web_widget_numeric_step/README.rst index a4b871d0ba7e..dc5f9ab426b0 100644 --- a/web_widget_numeric_step/README.rst +++ b/web_widget_numeric_step/README.rst @@ -21,13 +21,13 @@ Web Widget Numeric Step :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github - :target: https://github.com/OCA/web/tree/19.0/web_widget_numeric_step + :target: https://github.com/OCA/web/tree/20.0/web_widget_numeric_step :alt: OCA/web .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/web-19-0/web-19-0-web_widget_numeric_step + :target: https://translation.odoo-community.org/projects/web-20-0/web-20-0-web_widget_numeric_step :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png - :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=19.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=20.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -37,9 +37,6 @@ the number thanks to 2 buttons (+ and -). Use JS native logic for input number, so you can use the options ``min``, ``max``, ``step``, ``placeholder``. -Demo available at Settings > Users & Companies > Users > \*Select One\* -> See 'Credit Limit' field - **Table of contents** .. contents:: @@ -48,9 +45,9 @@ Demo available at Settings > Users & Companies > Users > \*Select One\* Usage ===== -In your xml view, add ``widget="numeric_step"`` This will add the 2 -buttons "+" and "-" just next to the input field in edit mode. Iteration -step by default is 1. +In your xml view, add ``widget="numeric_step"`` to a float or integer +field. This will add the 2 buttons "+" and "-" just next to the input +field in edit mode. Iteration step by default is 1. |image1| @@ -90,13 +87,16 @@ Iteration with 10 step, max limit 15, placeholder with onchange **Demo** -You can test the feature by going to Settings > Technical > Scheduled -Actions. The field "Execute Every" is configured to use the widget with -2 step, min to 0 and max to 40. +You can test the feature by going to Settings > Technical > Reporting > +Paper Format. The fields "Top Margin (mm)" and "Bottom Margin (mm)" are +configured to use the widget with 0.5 step, min to 0 and max to 100, and +the fields "Left Margin (mm)" and "Right Margin (mm)" with 1 step, min +to 0 and max to 50. The integer field "Header spacing" is configured +with 5 step, min to 0 and max to 100. -.. |image1| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_widget_numeric_step/static/description/add_two_buttons.png -.. |image2| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_widget_numeric_step/static/description/step0,25andlimits.gif -.. |image3| image:: https://raw.githubusercontent.com/OCA/web/19.0/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif +.. |image1| image:: https://raw.githubusercontent.com/OCA/web/20.0/web_widget_numeric_step/static/description/add_two_buttons.png +.. |image2| image:: https://raw.githubusercontent.com/OCA/web/20.0/web_widget_numeric_step/static/description/step0,25andlimits.gif +.. |image3| image:: https://raw.githubusercontent.com/OCA/web/20.0/web_widget_numeric_step/static/description/step10_limit15_placeholder117_with_onchange.gif Known issues / Roadmap ====================== @@ -110,7 +110,7 @@ Bug Tracker Bugs are tracked on `GitHub Issues `_. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -163,6 +163,6 @@ Current `maintainers `__: |maintainer-rafaelbn| |maintainer-yajo| -This module is part of the `OCA/web `_ project on GitHub. +This module is part of the `OCA/web `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_widget_numeric_step/__manifest__.py b/web_widget_numeric_step/__manifest__.py index 73cf7400e3e6..10bb35c53899 100644 --- a/web_widget_numeric_step/__manifest__.py +++ b/web_widget_numeric_step/__manifest__.py @@ -5,16 +5,19 @@ { "name": "Web Widget Numeric Step", "category": "web", - "version": "19.0.1.0.0", + "version": "20.0.1.0.0", "author": "GRAP, Tecnativa, Odoo Community Association (OCA)", "license": "AGPL-3", "website": "https://github.com/OCA/web", "depends": ["web"], - "demo": ["demo/ir_cron.xml"], + "demo": ["demo/report_paperformat.xml"], "assets": { "web.assets_backend": [ "web_widget_numeric_step/static/src/*", ], + "web.assets_unit_tests": [ + "web_widget_numeric_step/static/tests/**/*", + ], }, "maintainers": ["rafaelbn", "yajo"], "auto_install": False, diff --git a/web_widget_numeric_step/demo/ir_cron.xml b/web_widget_numeric_step/demo/ir_cron.xml deleted file mode 100644 index 6b5e4a66a9a3..000000000000 --- a/web_widget_numeric_step/demo/ir_cron.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - ir.cron - - - - numeric_step - {'step': 2, 'min': 0, 'max': 40} - - - - diff --git a/web_widget_numeric_step/demo/report_paperformat.xml b/web_widget_numeric_step/demo/report_paperformat.xml new file mode 100644 index 000000000000..f2122ae67af3 --- /dev/null +++ b/web_widget_numeric_step/demo/report_paperformat.xml @@ -0,0 +1,33 @@ + + + + report.paperformat + + + + numeric_step + {'step': 0.5, 'min': 0, 'max': 100} + + + numeric_step + {'step': 0.5, 'min': 0, 'max': 100} + + + numeric_step + {'step': 1, 'min': 0, 'max': 50} + + + numeric_step + {'step': 1, 'min': 0, 'max': 50} + + + numeric_step + {'step': 5, 'min': 0, 'max': 100} + + + + diff --git a/web_widget_numeric_step/readme/DESCRIPTION.md b/web_widget_numeric_step/readme/DESCRIPTION.md index c679491a0098..76c1f390145f 100644 --- a/web_widget_numeric_step/readme/DESCRIPTION.md +++ b/web_widget_numeric_step/readme/DESCRIPTION.md @@ -1,6 +1,3 @@ This widget changes input number field and make it easier to increment the number thanks to 2 buttons (+ and -). Use JS native logic for input number, so you can use the options `min`, `max`, `step`, `placeholder`. - -Demo available at Settings \> Users & Companies \> Users \> \*Select -One\* \> See 'Credit Limit' field diff --git a/web_widget_numeric_step/readme/USAGE.md b/web_widget_numeric_step/readme/USAGE.md index 5d5e2d88b4ae..a0b2f361ab03 100644 --- a/web_widget_numeric_step/readme/USAGE.md +++ b/web_widget_numeric_step/readme/USAGE.md @@ -1,4 +1,4 @@ -In your xml view, add `widget="numeric_step"` This will add the 2 +In your xml view, add `widget="numeric_step"` to a float or integer field. This will add the 2 buttons "+" and "-" just next to the input field in edit mode. Iteration step by default is 1. @@ -40,6 +40,8 @@ Iteration with 10 step, max limit 15, placeholder with onchange **Demo** -You can test the feature by going to Settings > Technical > Scheduled Actions. The -field "Execute Every" is configured to use the widget with 2 step, min to 0 and max -to 40. \ No newline at end of file +You can test the feature by going to Settings > Technical > Reporting > Paper Format. +The fields "Top Margin (mm)" and "Bottom Margin (mm)" are configured to use the +widget with 0.5 step, min to 0 and max to 100, and the fields "Left Margin (mm)" +and "Right Margin (mm)" with 1 step, min to 0 and max to 50. The integer field +"Header spacing" is configured with 5 step, min to 0 and max to 100. diff --git a/web_widget_numeric_step/static/description/index.html b/web_widget_numeric_step/static/description/index.html index 254fdf7cf8f8..817c862e2c58 100644 --- a/web_widget_numeric_step/static/description/index.html +++ b/web_widget_numeric_step/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +Web Widget Numeric Step