From 05ec5b7182f3097a6e65d0ae5cb071cb6c259d9c Mon Sep 17 00:00:00 2001 From: Quentin Dupont Date: Wed, 4 Sep 2019 17:51:56 +0200 Subject: [PATCH 01/33] [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 15390ea18f7313fa7308964f46b30a99a5d02fb3 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/33] [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