From 8efe13ebec13391d5aca58785a652ab615936b58 Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Wed, 11 Sep 2019 14:04:03 +0200
Subject: [PATCH 01/18] [ADD] web_widget_dropdown_dynamic
[UPD] Update web_widget_dropdown_dynamic.pot
[UPD] Update web_widget_dropdown_dynamic_example.pot
[UPD] README.rst
[ADD] icon.png
[UPD] README.rst
---
web_widget_dropdown_dynamic/README.rst | 114 +++++
web_widget_dropdown_dynamic/__init__.py | 1 +
web_widget_dropdown_dynamic/__manifest__.py | 20 +
.../i18n/web_widget_dropdown_dynamic.pot | 22 +
.../readme/CONTRIBUTORS.rst | 1 +
.../readme/DESCRIPTION.rst | 9 +
.../readme/ROADMAP.rst | 1 +
web_widget_dropdown_dynamic/readme/USAGE.rst | 24 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 465 ++++++++++++++++++
.../static/src/js/basic_model.js | 47 ++
.../static/src/js/field_dynamic_dropdown.js | 140 ++++++
.../web_widget_dropdown_dynamic_tests.js | 177 +++++++
.../templates/assets.xml | 19 +
14 files changed, 1040 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/README.rst
create mode 100644 web_widget_dropdown_dynamic/__init__.py
create mode 100644 web_widget_dropdown_dynamic/__manifest__.py
create mode 100644 web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
create mode 100644 web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
create mode 100644 web_widget_dropdown_dynamic/readme/DESCRIPTION.rst
create mode 100644 web_widget_dropdown_dynamic/readme/ROADMAP.rst
create mode 100644 web_widget_dropdown_dynamic/readme/USAGE.rst
create mode 100644 web_widget_dropdown_dynamic/static/description/icon.png
create mode 100644 web_widget_dropdown_dynamic/static/description/index.html
create mode 100644 web_widget_dropdown_dynamic/static/src/js/basic_model.js
create mode 100644 web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
create mode 100644 web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
create mode 100644 web_widget_dropdown_dynamic/templates/assets.xml
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
new file mode 100644
index 000000000000..21d26639284f
--- /dev/null
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -0,0 +1,114 @@
+=======================
+Dynamic Dropdown Widget
+=======================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! 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-OCA%2Fweb-lightgray.png?logo=github
+ :target: https://github.com/OCA/web/tree/12.0/web_widget_dropdown_dynamic
+ :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_dropdown_dynamic
+ :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|
+
+Dynamic dropdown widget that supports resolving options from backend of:
+
+ * ``fields.Char``
+ * ``fields.Integer``
+ * ``fields.Selection``
+
+**NOTE:** This widget is not intended to *extend* ``fields.Selection``, but to
+filter selection values. For fully-dynamic set of options, use ``fields.Char``
+instead.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+.. code-block:: python
+
+ @api.model
+ def method_name(self):
+ values = [
+ ('value_a', 'Title A'),
+ ]
+ if self.env.context.get('depending_on') == True:
+ values += [
+ ('value_b', 'Title B'),
+ ]
+ return values
+
+.. code-block:: xml
+
+
+
+
+Known issues / Roadmap
+======================
+
+ * In v13, ``$.when`` is going to become `Promise.resolve`
+
+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
+~~~~~~~
+
+* Brainbean Apps OU
+
+Contributors
+~~~~~~~~~~~~
+
+* Alexey Pelykh
+
+Maintainers
+~~~~~~~~~~~
+
+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. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/web_widget_dropdown_dynamic/__init__.py b/web_widget_dropdown_dynamic/__init__.py
new file mode 100644
index 000000000000..c71289ab17c7
--- /dev/null
+++ b/web_widget_dropdown_dynamic/__init__.py
@@ -0,0 +1 @@
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
new file mode 100644
index 000000000000..8ede2ec51c88
--- /dev/null
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -0,0 +1,20 @@
+# Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+{
+ 'name': 'Dynamic Dropdown Widget',
+ 'summary': 'This module adds support for dynamic dropdown widget',
+ 'category': 'Web',
+ 'version': '12.0.1.0.0',
+ 'license': 'AGPL-3',
+ 'author':
+ 'Brainbean Apps OU, '
+ 'Odoo Community Association (OCA)',
+ 'website': 'https://github.com/OCA/web/',
+ 'depends': [
+ 'web',
+ ],
+ 'data': [
+ 'templates/assets.xml',
+ ],
+ 'installable': True,
+}
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
new file mode 100644
index 000000000000..673c92c9958b
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -0,0 +1,22 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+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_dropdown_dynamic
+#. openerp-web
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:15
+#, python-format
+msgid "Dynamic Dropdown"
+msgstr ""
+
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000000..1c6a35a1e355
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -0,0 +1 @@
+* Alexey Pelykh
diff --git a/web_widget_dropdown_dynamic/readme/DESCRIPTION.rst b/web_widget_dropdown_dynamic/readme/DESCRIPTION.rst
new file mode 100644
index 000000000000..1ce39c5f7435
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/DESCRIPTION.rst
@@ -0,0 +1,9 @@
+Dynamic dropdown widget that supports resolving options from backend of:
+
+ * ``fields.Char``
+ * ``fields.Integer``
+ * ``fields.Selection``
+
+**NOTE:** This widget is not intended to *extend* ``fields.Selection``, but to
+filter selection values. For fully-dynamic set of options, use ``fields.Char``
+instead.
diff --git a/web_widget_dropdown_dynamic/readme/ROADMAP.rst b/web_widget_dropdown_dynamic/readme/ROADMAP.rst
new file mode 100644
index 000000000000..7186b62cfda4
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/ROADMAP.rst
@@ -0,0 +1 @@
+ * In v13, ``$.when`` is going to become `Promise.resolve`
diff --git a/web_widget_dropdown_dynamic/readme/USAGE.rst b/web_widget_dropdown_dynamic/readme/USAGE.rst
new file mode 100644
index 000000000000..f30491bc4d49
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/USAGE.rst
@@ -0,0 +1,24 @@
+.. code-block:: python
+
+ @api.model
+ def method_name(self):
+ values = [
+ ('value_a', 'Title A'),
+ ]
+ if self.env.context.get('depending_on') == True:
+ values += [
+ ('value_b', 'Title B'),
+ ]
+ return values
+
+.. code-block:: xml
+
+
+
diff --git a/web_widget_dropdown_dynamic/static/description/icon.png b/web_widget_dropdown_dynamic/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
new file mode 100644
index 000000000000..d17e254a23d0
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -0,0 +1,465 @@
+
+
+
+
+
+
+Dynamic Dropdown Widget
+
+
+
+
+
+
diff --git a/web_widget_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
new file mode 100644
index 000000000000..a059366baa2e
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+ */
+odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
+ "use strict";
+
+ var BasicModel = require('web.BasicModel');
+
+ BasicModel.include({
+ /**
+ * Fetches all the values associated to the given fieldName.
+ *
+ * @param {Object} record - an element from the localData
+ * @param {Object} fieldName - the name of the field
+ * @param {Object} fieldInfo
+ * @returns {Promise}
+ * The promise is resolved with the fetched special values.
+ * If this data is the same as the previously fetched one
+ * (for the given parameters), no RPC is done and the promise
+ * is resolved with the undefined value.
+ */
+ _fetchDynamicDropdownValues: function (record, fieldName, fieldInfo) {
+ var model = fieldInfo.options.model || record.model;
+ var method = fieldInfo.values || fieldInfo.options.values;
+ if (!method) {
+ return $.when();
+ }
+
+ var context = record.getContext({fieldName: fieldName});
+
+ // avoid rpc if not necessary
+ var hasChanged = this._saveSpecialDataCache(record, fieldName, {
+ context: context,
+ });
+ if (!hasChanged) {
+ return $.when();
+ }
+
+ return this._rpc({
+ model: model,
+ method: method,
+ context: context,
+ });
+ },
+ });
+});
diff --git a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
new file mode 100644
index 000000000000..0a9443127186
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+ */
+odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (require) {
+ "use strict";
+
+ var core = require('web.core');
+ var AbstractField = require('web.AbstractField');
+ var field_registry = require('web.field_registry');
+
+ var _lt = core._lt;
+
+ var FieldDynamicDropdown = AbstractField.extend({
+ description: _lt('Dynamic Dropdown'),
+ template: 'FieldSelection',
+ specialData: '_fetchDynamicDropdownValues',
+ supportedFieldTypes: ['selection', 'char', 'integer'],
+ events: _.extend({}, AbstractField.prototype.events, {
+ 'change': '_onChange',
+ }),
+ /**
+ * @override
+ */
+ init: function () {
+ this._super.apply(this, arguments);
+ this._setValues();
+ },
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ * @returns {jQuery}
+ */
+ getFocusableElement: function () {
+ return this.$el.is('select') ? this.$el : $();
+ },
+ /**
+ * @override
+ */
+ isSet: function () {
+ return this.value !== false;
+ },
+ /**
+ * Listen to modifiers updates to hide/show the falsy value in the dropdown
+ * according to the required modifier.
+ *
+ * @override
+ */
+ updateModifiersValue: function () {
+ this._super.apply(this, arguments);
+ if (!this.attrs.modifiersValue.invisible && this.mode !== 'readonly') {
+ this._setValues();
+ this._renderEdit();
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * @override
+ * @private
+ */
+ _formatValue: function (value) {
+ var options = _.extend({}, this.nodeOptions, { data: this.recordData }, this.formatOptions);
+ var formattedValue = _.find(this.values, function (option) {
+ return option[0] === value;
+ });
+ if (!formattedValue) {
+ return value;
+ }
+ formattedValue = formattedValue[1];
+ if (options && options.escape) {
+ formattedValue = _.escape(formattedValue);
+ }
+ return formattedValue;
+ },
+ /**
+ * @override
+ * @private
+ */
+ _renderEdit: function () {
+ this.$el.empty();
+ for (var i = 0 ; i < this.values.length ; i++) {
+ this.$el.append($(' ', {
+ value: JSON.stringify(this.values[i][0]),
+ text: this.values[i][1]
+ }));
+ }
+ this.$el.val(JSON.stringify(this.value));
+ },
+ /**
+ * @override
+ * @private
+ */
+ _renderReadonly: function () {
+ this.$el.empty().text(this._formatValue(this.value));
+ },
+ /**
+ * @override
+ */
+ _reset: function () {
+ this._super.apply(this, arguments);
+ this._setValues();
+ },
+ /**
+ * Sets the possible field values.
+ *
+ * @private
+ */
+ _setValues: function () {
+ this.values = _.reject(this.record.specialData[this.name], function (v) {
+ return v[0] === false && v[1] === '';
+ });
+ if (!this.attrs.modifiersValue || !this.attrs.modifiersValue.required) {
+ this.values = [[false, this.attrs.placeholder || '']].concat(this.values);
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ _onChange: function () {
+ var value = JSON.parse(this.$el.val());
+ this._setValue(value.toString());
+ },
+ });
+ field_registry.add('dynamic_dropdown', FieldDynamicDropdown);
+
+ return FieldDynamicDropdown;
+});
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
new file mode 100644
index 000000000000..f25ac6581e8f
--- /dev/null
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -0,0 +1,177 @@
+odoo.define('web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests', function (require) {
+ "use strict";
+
+ var FormView = require('web.FormView');
+ var testUtils = require('web.test_utils');
+
+ QUnit.module('web_widget_dropdown_dynamic', {}, function () {
+
+ QUnit.test('values are fetched w/o context (char)', async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: 'Test Field', type: 'char'},
+ },
+ records: [{id: 1, test_field: ''}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ return $.when([
+ ['value', 'Title'],
+ ]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+
+ form.destroy();
+ });
+
+ QUnit.test('values are fetched w/o context (integer)', async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: 'Test Field', type: 'integer'},
+ },
+ records: [{id: 1, test_field: 0}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ return $.when([
+ [0, 'Title'],
+ ]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'0\']');
+
+ form.destroy();
+ });
+
+ QUnit.test('values are fetched w/o context (selection)', async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: 'Test Field', type: 'selection'},
+ },
+ records: [{id: 1, test_field: ''}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ return $.when([
+ ['value', 'Title'],
+ ]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+
+ form.destroy();
+ });
+
+ QUnit.test('values are fetched with changing context', async function (assert) {
+ assert.expect(6);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: 'demo_entry',
+ data: {
+ demo_entry: {
+ fields: {
+ other_field: {string: 'Other Field', type: 'char'},
+ test_field: {string: 'Test Field', type: 'char'},
+ },
+ records: [{id: 1, other_field: '', test_field: ''}],
+ },
+ },
+ arch:
+ '',
+ mockRPC: function (route, args) {
+ if (args.method === '_get_test_field_values') {
+ if (args.kwargs.context.step === 'step-1') {
+ return $.when([
+ ['value', 'Title'],
+ ]);
+ } else if (args.kwargs.context.step === 'step-2') {
+ return $.when([
+ ['value', 'Title'],
+ ['value_2', 'Title 2'],
+ ]);
+ } else {
+ return $.when([]);
+ }
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ 'step-1',
+ ['input']
+ );
+ assert.containsN(form, 'option', 2);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ 'step-2',
+ ['input']
+ );
+ assert.containsN(form, 'option', 3);
+ assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsOnce(form, 'option[value=\'"value_2"\']');
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ 'step-other',
+ ['input']
+ );
+ assert.containsN(form, 'option', 1);
+
+ form.destroy();
+ });
+ });
+});
diff --git a/web_widget_dropdown_dynamic/templates/assets.xml b/web_widget_dropdown_dynamic/templates/assets.xml
new file mode 100644
index 000000000000..70b958e968c8
--- /dev/null
+++ b/web_widget_dropdown_dynamic/templates/assets.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 740a878f42d4f492388ec08eaa5ea1498edf8b9b Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Sun, 12 Apr 2020 08:55:00 +0200
Subject: [PATCH 02/18] [IMP] web_widget_dropdown_dynamic: black, isort,
prettier
---
web_widget_dropdown_dynamic/__manifest__.py | 26 ++-
.../static/src/js/basic_model.js | 10 +-
.../static/src/js/field_dynamic_dropdown.js | 97 ++++++-----
.../web_widget_dropdown_dynamic_tests.js | 152 +++++++++---------
.../templates/assets.xml | 30 +++-
5 files changed, 165 insertions(+), 150 deletions(-)
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 8ede2ec51c88..8a47e74b2528 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -1,20 +1,14 @@
# Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
- 'name': 'Dynamic Dropdown Widget',
- 'summary': 'This module adds support for dynamic dropdown widget',
- 'category': 'Web',
- 'version': '12.0.1.0.0',
- 'license': 'AGPL-3',
- 'author':
- 'Brainbean Apps OU, '
- 'Odoo Community Association (OCA)',
- 'website': 'https://github.com/OCA/web/',
- 'depends': [
- 'web',
- ],
- 'data': [
- 'templates/assets.xml',
- ],
- 'installable': True,
+ "name": "Dynamic Dropdown Widget",
+ "summary": "This module adds support for dynamic dropdown widget",
+ "category": "Web",
+ "version": "12.0.1.0.0",
+ "license": "AGPL-3",
+ "author": "Brainbean Apps OU, Odoo Community Association (OCA)",
+ "website": "https://github.com/OCA/web/",
+ "depends": ["web"],
+ "data": ["templates/assets.xml"],
+ "installable": True,
}
diff --git a/web_widget_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
index a059366baa2e..dbdfb4f23767 100644
--- a/web_widget_dropdown_dynamic/static/src/js/basic_model.js
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -1,11 +1,11 @@
-/*
+/*
* Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
+odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
"use strict";
- var BasicModel = require('web.BasicModel');
+ var BasicModel = require("web.BasicModel");
BasicModel.include({
/**
@@ -20,7 +20,7 @@ odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
* (for the given parameters), no RPC is done and the promise
* is resolved with the undefined value.
*/
- _fetchDynamicDropdownValues: function (record, fieldName, fieldInfo) {
+ _fetchDynamicDropdownValues: function(record, fieldName, fieldInfo) {
var model = fieldInfo.options.model || record.model;
var method = fieldInfo.values || fieldInfo.options.values;
if (!method) {
@@ -29,7 +29,7 @@ odoo.define('web_widget_dropdown_dynamic.basic_model', function (require) {
var context = record.getContext({fieldName: fieldName});
- // avoid rpc if not necessary
+ // Avoid rpc if not necessary
var hasChanged = this._saveSpecialDataCache(record, fieldName, {
context: context,
});
diff --git a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
index 0a9443127186..987793ba54e1 100644
--- a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
+++ b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
@@ -1,47 +1,47 @@
-/*
+/*
* Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (require) {
+odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(require) {
"use strict";
- var core = require('web.core');
- var AbstractField = require('web.AbstractField');
- var field_registry = require('web.field_registry');
+ var core = require("web.core");
+ var AbstractField = require("web.AbstractField");
+ var field_registry = require("web.field_registry");
var _lt = core._lt;
var FieldDynamicDropdown = AbstractField.extend({
- description: _lt('Dynamic Dropdown'),
- template: 'FieldSelection',
- specialData: '_fetchDynamicDropdownValues',
- supportedFieldTypes: ['selection', 'char', 'integer'],
+ description: _lt("Dynamic Dropdown"),
+ template: "FieldSelection",
+ specialData: "_fetchDynamicDropdownValues",
+ supportedFieldTypes: ["selection", "char", "integer"],
events: _.extend({}, AbstractField.prototype.events, {
- 'change': '_onChange',
+ change: "_onChange",
}),
/**
* @override
*/
- init: function () {
+ init: function() {
this._super.apply(this, arguments);
this._setValues();
},
-
- //--------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------
// Public
- //--------------------------------------------------------------------------
-
+ // --------------------------------------------------------------------------
+
/**
* @override
* @returns {jQuery}
*/
- getFocusableElement: function () {
- return this.$el.is('select') ? this.$el : $();
+ getFocusableElement: function() {
+ return this.$el.is("select") ? this.$el : $();
},
/**
* @override
*/
- isSet: function () {
+ isSet: function() {
return this.value !== false;
},
/**
@@ -50,25 +50,30 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
*
* @override
*/
- updateModifiersValue: function () {
+ updateModifiersValue: function() {
this._super.apply(this, arguments);
- if (!this.attrs.modifiersValue.invisible && this.mode !== 'readonly') {
+ if (!this.attrs.modifiersValue.invisible && this.mode !== "readonly") {
this._setValues();
this._renderEdit();
}
},
-
- //--------------------------------------------------------------------------
+
+ // --------------------------------------------------------------------------
// Private
- //--------------------------------------------------------------------------
-
+ // --------------------------------------------------------------------------
+
/**
* @override
* @private
*/
- _formatValue: function (value) {
- var options = _.extend({}, this.nodeOptions, { data: this.recordData }, this.formatOptions);
- var formattedValue = _.find(this.values, function (option) {
+ _formatValue: function(value) {
+ var options = _.extend(
+ {},
+ this.nodeOptions,
+ {data: this.recordData},
+ this.formatOptions
+ );
+ var formattedValue = _.find(this.values, function(option) {
return option[0] === value;
});
if (!formattedValue) {
@@ -84,13 +89,15 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
* @override
* @private
*/
- _renderEdit: function () {
+ _renderEdit: function() {
this.$el.empty();
- for (var i = 0 ; i < this.values.length ; i++) {
- this.$el.append($(' ', {
- value: JSON.stringify(this.values[i][0]),
- text: this.values[i][1]
- }));
+ for (var i = 0; i < this.values.length; i++) {
+ this.$el.append(
+ $(" ", {
+ value: JSON.stringify(this.values[i][0]),
+ text: this.values[i][1],
+ })
+ );
}
this.$el.val(JSON.stringify(this.value));
},
@@ -98,13 +105,13 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
* @override
* @private
*/
- _renderReadonly: function () {
+ _renderReadonly: function() {
this.$el.empty().text(this._formatValue(this.value));
},
/**
* @override
*/
- _reset: function () {
+ _reset: function() {
this._super.apply(this, arguments);
this._setValues();
},
@@ -113,28 +120,30 @@ odoo.define('web_widget_dropdown_dynamic.field_dynamic_dropdown', function (requ
*
* @private
*/
- _setValues: function () {
- this.values = _.reject(this.record.specialData[this.name], function (v) {
- return v[0] === false && v[1] === '';
+ _setValues: function() {
+ this.values = _.reject(this.record.specialData[this.name], function(v) {
+ return v[0] === false && v[1] === "";
});
if (!this.attrs.modifiersValue || !this.attrs.modifiersValue.required) {
- this.values = [[false, this.attrs.placeholder || '']].concat(this.values);
+ this.values = [[false, this.attrs.placeholder || ""]].concat(
+ this.values
+ );
}
},
- //--------------------------------------------------------------------------
+ // --------------------------------------------------------------------------
// Handlers
- //--------------------------------------------------------------------------
-
+ // --------------------------------------------------------------------------
+
/**
* @private
*/
- _onChange: function () {
+ _onChange: function() {
var value = JSON.parse(this.$el.val());
this._setValue(value.toString());
},
});
- field_registry.add('dynamic_dropdown', FieldDynamicDropdown);
+ field_registry.add("dynamic_dropdown", FieldDynamicDropdown);
return FieldDynamicDropdown;
});
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index f25ac6581e8f..615534d79085 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -1,147 +1,143 @@
-odoo.define('web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests', function (require) {
+odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function(
+ require
+) {
"use strict";
-
- var FormView = require('web.FormView');
- var testUtils = require('web.test_utils');
- QUnit.module('web_widget_dropdown_dynamic', {}, function () {
+ /* global QUnit*/
- QUnit.test('values are fetched w/o context (char)', async function (assert) {
+ var FormView = require("web.FormView");
+ var testUtils = require("web.test_utils");
+
+ QUnit.module("web_widget_dropdown_dynamic", {}, function() {
+ QUnit.test("values are fetched w/o context (char)", async function(assert) {
assert.expect(2);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- test_field: {string: 'Test Field', type: 'char'},
+ test_field: {string: "Test Field", type: "char"},
},
- records: [{id: 1, test_field: ''}],
+ records: [{id: 1, test_field: ""}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- return $.when([
- ['value', 'Title'],
- ]);
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ return $.when([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
});
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
form.destroy();
});
- QUnit.test('values are fetched w/o context (integer)', async function (assert) {
+ QUnit.test("values are fetched w/o context (integer)", async function(assert) {
assert.expect(2);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- test_field: {string: 'Test Field', type: 'integer'},
+ test_field: {string: "Test Field", type: "integer"},
},
records: [{id: 1, test_field: 0}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- return $.when([
- [0, 'Title'],
- ]);
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ return $.when([[0, "Title"]]);
}
return this._super.apply(this, arguments);
},
});
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'0\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='0']");
form.destroy();
});
- QUnit.test('values are fetched w/o context (selection)', async function (assert) {
+ QUnit.test("values are fetched w/o context (selection)", async function(
+ assert
+ ) {
assert.expect(2);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- test_field: {string: 'Test Field', type: 'selection'},
+ test_field: {string: "Test Field", type: "selection"},
},
- records: [{id: 1, test_field: ''}],
+ records: [{id: 1, test_field: ""}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- return $.when([
- ['value', 'Title'],
- ]);
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ return $.when([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
});
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
form.destroy();
});
- QUnit.test('values are fetched with changing context', async function (assert) {
+ QUnit.test("values are fetched with changing context", async function(assert) {
assert.expect(6);
var form = await testUtils.createView({
View: FormView,
- model: 'demo_entry',
+ model: "demo_entry",
data: {
demo_entry: {
fields: {
- other_field: {string: 'Other Field', type: 'char'},
- test_field: {string: 'Test Field', type: 'char'},
+ other_field: {string: "Other Field", type: "char"},
+ test_field: {string: "Test Field", type: "char"},
},
- records: [{id: 1, other_field: '', test_field: ''}],
+ records: [{id: 1, other_field: "", test_field: ""}],
},
},
arch:
- '',
- mockRPC: function (route, args) {
- if (args.method === '_get_test_field_values') {
- if (args.kwargs.context.step === 'step-1') {
- return $.when([
- ['value', 'Title'],
- ]);
- } else if (args.kwargs.context.step === 'step-2') {
+ "",
+ mockRPC: function(route, args) {
+ if (args.method === "_get_test_field_values") {
+ if (args.kwargs.context.step === "step-1") {
+ return $.when([["value", "Title"]]);
+ } else if (args.kwargs.context.step === "step-2") {
return $.when([
- ['value', 'Title'],
- ['value_2', 'Title 2'],
+ ["value", "Title"],
+ ["value_2", "Title 2"],
]);
- } else {
- return $.when([]);
}
+ return $.when([]);
}
return this._super.apply(this, arguments);
},
@@ -149,27 +145,27 @@ odoo.define('web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests', fun
await testUtils.fields.editAndTrigger(
form.$('.o_field_widget[name="other_field"]'),
- 'step-1',
- ['input']
+ "step-1",
+ ["input"]
);
- assert.containsN(form, 'option', 2);
- assert.containsOnce(form, 'option[value=\'"value"\']');
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
await testUtils.fields.editAndTrigger(
form.$('.o_field_widget[name="other_field"]'),
- 'step-2',
- ['input']
+ "step-2",
+ ["input"]
);
- assert.containsN(form, 'option', 3);
- assert.containsOnce(form, 'option[value=\'"value"\']');
- assert.containsOnce(form, 'option[value=\'"value_2"\']');
+ assert.containsN(form, "option", 3);
+ assert.containsOnce(form, "option[value='\"value\"']");
+ assert.containsOnce(form, "option[value='\"value_2\"']");
await testUtils.fields.editAndTrigger(
form.$('.o_field_widget[name="other_field"]'),
- 'step-other',
- ['input']
+ "step-other",
+ ["input"]
);
- assert.containsN(form, 'option', 1);
+ assert.containsN(form, "option", 1);
form.destroy();
});
diff --git a/web_widget_dropdown_dynamic/templates/assets.xml b/web_widget_dropdown_dynamic/templates/assets.xml
index 70b958e968c8..e8ed1dcad129 100644
--- a/web_widget_dropdown_dynamic/templates/assets.xml
+++ b/web_widget_dropdown_dynamic/templates/assets.xml
@@ -1,19 +1,35 @@
-
+
-
+
-
-
+
+
-
-
+
-
+
From 612a8b8ae14abbc815f93bd868891544517695b6 Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Sun, 12 Apr 2020 08:59:14 +0200
Subject: [PATCH 03/18] [MIG] web_widget_dropdown_dynamic: Migration to 13.0
---
web_widget_dropdown_dynamic/README.rst | 15 +++-----
web_widget_dropdown_dynamic/__manifest__.py | 4 +--
.../i18n/web_widget_dropdown_dynamic.pot | 9 +++--
.../readme/ROADMAP.rst | 1 -
.../static/description/index.html | 35 +++++++------------
.../static/src/js/basic_model.js | 6 ++--
.../web_widget_dropdown_dynamic_tests.js | 12 +++----
7 files changed, 33 insertions(+), 49 deletions(-)
delete mode 100644 web_widget_dropdown_dynamic/readme/ROADMAP.rst
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index 21d26639284f..dd1a738cab70 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -14,13 +14,13 @@ Dynamic Dropdown Widget
: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/12.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/13.0/web_widget_dropdown_dynamic
: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_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-13-0/web-13-0-web_widget_dropdown_dynamic
: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
+ :target: https://runbot.odoo-community.org/runbot/162/13.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -68,18 +68,13 @@ Usage
context="{'depending_on': other_field}"
/>
-Known issues / Roadmap
-======================
-
- * In v13, ``$.when`` is going to become `Promise.resolve`
-
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 `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -109,6 +104,6 @@ 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.
+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_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 8a47e74b2528..79edb4045c1c 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -1,10 +1,10 @@
-# Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "12.0.1.0.0",
+ "version": "13.0.1.0.0",
"license": "AGPL-3",
"author": "Brainbean Apps OU, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web/",
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index 673c92c9958b..1472b629c707 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -1,12 +1,12 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
-# * web_widget_dropdown_dynamic
+# * web_widget_dropdown_dynamic
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -15,8 +15,7 @@ msgstr ""
#. module: web_widget_dropdown_dynamic
#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:15
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr ""
-
diff --git a/web_widget_dropdown_dynamic/readme/ROADMAP.rst b/web_widget_dropdown_dynamic/readme/ROADMAP.rst
deleted file mode 100644
index 7186b62cfda4..000000000000
--- a/web_widget_dropdown_dynamic/readme/ROADMAP.rst
+++ /dev/null
@@ -1 +0,0 @@
- * In v13, ``$.when`` is going to become `Promise.resolve`
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index d17e254a23d0..88600c24526d 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -367,7 +367,7 @@ Dynamic Dropdown Widget
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Dynamic dropdown widget that supports resolving options from backend of:
@@ -383,12 +383,11 @@ Dynamic Dropdown Widget
-
-
-
-
-In v13, $.when is going to become Promise.resolve
-
-
-
-
+
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.
-
+
-
+
This module is maintained by the OCA.
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.
+
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_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
index dbdfb4f23767..f5b211e2c454 100644
--- a/web_widget_dropdown_dynamic/static/src/js/basic_model.js
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
+ * Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
@@ -24,7 +24,7 @@ odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
var model = fieldInfo.options.model || record.model;
var method = fieldInfo.values || fieldInfo.options.values;
if (!method) {
- return $.when();
+ return Promise.resolve();
}
var context = record.getContext({fieldName: fieldName});
@@ -34,7 +34,7 @@ odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
context: context,
});
if (!hasChanged) {
- return $.when();
+ return Promise.resolve();
}
return this._rpc({
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index 615534d79085..f51b619cdeaa 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -29,7 +29,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
- return $.when([["value", "Title"]]);
+ return Promise.resolve([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
@@ -61,7 +61,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
- return $.when([[0, "Title"]]);
+ return Promise.resolve([[0, "Title"]]);
}
return this._super.apply(this, arguments);
},
@@ -95,7 +95,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
- return $.when([["value", "Title"]]);
+ return Promise.resolve([["value", "Title"]]);
}
return this._super.apply(this, arguments);
},
@@ -130,14 +130,14 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
mockRPC: function(route, args) {
if (args.method === "_get_test_field_values") {
if (args.kwargs.context.step === "step-1") {
- return $.when([["value", "Title"]]);
+ return Promise.resolve([["value", "Title"]]);
} else if (args.kwargs.context.step === "step-2") {
- return $.when([
+ return Promise.resolve([
["value", "Title"],
["value_2", "Title 2"],
]);
}
- return $.when([]);
+ return Promise.resolve([]);
}
return this._super.apply(this, arguments);
},
From 0733015b97474e6ec8ab056809d8867729a331e6 Mon Sep 17 00:00:00 2001
From: Alexey Pelykh
Date: Sun, 8 Nov 2020 08:16:37 +0200
Subject: [PATCH 04/18] [UPD] Brainbean Apps => CorporateHub
---
web_widget_dropdown_dynamic/README.rst | 6 ++++--
web_widget_dropdown_dynamic/__manifest__.py | 3 ++-
web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst | 4 +++-
web_widget_dropdown_dynamic/static/description/index.html | 7 +++++--
4 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index dd1a738cab70..182360991e47 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -84,12 +84,14 @@ Credits
Authors
~~~~~~~
-* Brainbean Apps OU
+* CorporateHub
Contributors
~~~~~~~~~~~~
-* Alexey Pelykh
+* `CorporateHub `__
+
+ * Alexey Pelykh
Maintainers
~~~~~~~~~~~
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 79edb4045c1c..e556da8d1c67 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -1,4 +1,5 @@
# Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
+# Copyright 2020 CorporateHub (https://corporatehub.eu)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Dynamic Dropdown Widget",
@@ -6,7 +7,7 @@
"category": "Web",
"version": "13.0.1.0.0",
"license": "AGPL-3",
- "author": "Brainbean Apps OU, Odoo Community Association (OCA)",
+ "author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web/",
"depends": ["web"],
"data": ["templates/assets.xml"],
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index 1c6a35a1e355..724bc1d03a2b 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -1 +1,3 @@
-* Alexey Pelykh
+* `CorporateHub `__
+
+ * Alexey Pelykh
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index 88600c24526d..8da1257d41ce 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -431,13 +431,16 @@
-Brainbean Apps OU
+CorporateHub
From cf814f68ad9ecf77992c61008ab7206cd3b44bd8 Mon Sep 17 00:00:00 2001
From: claudiagn
Date: Wed, 17 Feb 2021 12:45:40 +0000
Subject: [PATCH 05/18] Added translation using Weblate (Spanish)
---
web_widget_dropdown_dynamic/i18n/es.po | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/i18n/es.po
diff --git a/web_widget_dropdown_dynamic/i18n/es.po b/web_widget_dropdown_dynamic/i18n/es.po
new file mode 100644
index 000000000000..c6d92ff4bd9c
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/es.po
@@ -0,0 +1,22 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: web_widget_dropdown_dynamic
+#. openerp-web
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#, python-format
+msgid "Dynamic Dropdown"
+msgstr ""
From ec5084302ae5ad9a83c8d4748c60f3bf1b7fa222 Mon Sep 17 00:00:00 2001
From: claudiagn
Date: Wed, 17 Feb 2021 12:45:56 +0000
Subject: [PATCH 06/18] Translated using Weblate (Spanish)
Currently translated at 100.0% (1 of 1 strings)
Translation: web-13.0/web-13.0-web_widget_dropdown_dynamic
Translate-URL: https://translation.odoo-community.org/projects/web-13-0/web-13-0-web_widget_dropdown_dynamic/es/
---
web_widget_dropdown_dynamic/i18n/es.po | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/web_widget_dropdown_dynamic/i18n/es.po b/web_widget_dropdown_dynamic/i18n/es.po
index c6d92ff4bd9c..39577a6ef398 100644
--- a/web_widget_dropdown_dynamic/i18n/es.po
+++ b/web_widget_dropdown_dynamic/i18n/es.po
@@ -6,17 +6,19 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2021-02-17 14:45+0000\n"
+"Last-Translator: claudiagn \n"
"Language-Team: none\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
#. module: web_widget_dropdown_dynamic
#. openerp-web
#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
#, python-format
msgid "Dynamic Dropdown"
-msgstr ""
+msgstr "Menú desplegable dinámico"
From db803eb8c87580f9480e1a94a68bb1e416fc297f Mon Sep 17 00:00:00 2001
From: Ronald Portier
Date: Fri, 28 May 2021 16:14:32 +0200
Subject: [PATCH 07/18] [IMP] web_widget_dropdown_dynamic: black, isort,
prettier
---
web_widget_dropdown_dynamic/__manifest__.py | 2 +-
.../static/src/js/basic_model.js | 4 +--
.../static/src/js/field_dynamic_dropdown.js | 26 +++++++++----------
.../web_widget_dropdown_dynamic_tests.js | 20 +++++++-------
4 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index e556da8d1c67..879079b5bc40 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -8,7 +8,7 @@
"version": "13.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
- "website": "https://github.com/OCA/web/",
+ "website": "https://github.com/OCA/web",
"depends": ["web"],
"data": ["templates/assets.xml"],
"installable": True,
diff --git a/web_widget_dropdown_dynamic/static/src/js/basic_model.js b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
index f5b211e2c454..b535a57e7436 100644
--- a/web_widget_dropdown_dynamic/static/src/js/basic_model.js
+++ b/web_widget_dropdown_dynamic/static/src/js/basic_model.js
@@ -2,7 +2,7 @@
* Copyright 2019-2020 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
+odoo.define("web_widget_dropdown_dynamic.basic_model", function (require) {
"use strict";
var BasicModel = require("web.BasicModel");
@@ -20,7 +20,7 @@ odoo.define("web_widget_dropdown_dynamic.basic_model", function(require) {
* (for the given parameters), no RPC is done and the promise
* is resolved with the undefined value.
*/
- _fetchDynamicDropdownValues: function(record, fieldName, fieldInfo) {
+ _fetchDynamicDropdownValues: function (record, fieldName, fieldInfo) {
var model = fieldInfo.options.model || record.model;
var method = fieldInfo.values || fieldInfo.options.values;
if (!method) {
diff --git a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
index 987793ba54e1..18cc876bdae0 100644
--- a/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
+++ b/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
@@ -2,7 +2,7 @@
* Copyright 2019 Brainbean Apps (https://brainbeanapps.com)
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
*/
-odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(require) {
+odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function (require) {
"use strict";
var core = require("web.core");
@@ -22,7 +22,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
/**
* @override
*/
- init: function() {
+ init: function () {
this._super.apply(this, arguments);
this._setValues();
},
@@ -35,13 +35,13 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @returns {jQuery}
*/
- getFocusableElement: function() {
+ getFocusableElement: function () {
return this.$el.is("select") ? this.$el : $();
},
/**
* @override
*/
- isSet: function() {
+ isSet: function () {
return this.value !== false;
},
/**
@@ -50,7 +50,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
*
* @override
*/
- updateModifiersValue: function() {
+ updateModifiersValue: function () {
this._super.apply(this, arguments);
if (!this.attrs.modifiersValue.invisible && this.mode !== "readonly") {
this._setValues();
@@ -66,14 +66,14 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @private
*/
- _formatValue: function(value) {
+ _formatValue: function (value) {
var options = _.extend(
{},
this.nodeOptions,
{data: this.recordData},
this.formatOptions
);
- var formattedValue = _.find(this.values, function(option) {
+ var formattedValue = _.find(this.values, function (option) {
return option[0] === value;
});
if (!formattedValue) {
@@ -89,7 +89,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @private
*/
- _renderEdit: function() {
+ _renderEdit: function () {
this.$el.empty();
for (var i = 0; i < this.values.length; i++) {
this.$el.append(
@@ -105,13 +105,13 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
* @override
* @private
*/
- _renderReadonly: function() {
+ _renderReadonly: function () {
this.$el.empty().text(this._formatValue(this.value));
},
/**
* @override
*/
- _reset: function() {
+ _reset: function () {
this._super.apply(this, arguments);
this._setValues();
},
@@ -120,8 +120,8 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
*
* @private
*/
- _setValues: function() {
- this.values = _.reject(this.record.specialData[this.name], function(v) {
+ _setValues: function () {
+ this.values = _.reject(this.record.specialData[this.name], function (v) {
return v[0] === false && v[1] === "";
});
if (!this.attrs.modifiersValue || !this.attrs.modifiersValue.required) {
@@ -138,7 +138,7 @@ odoo.define("web_widget_dropdown_dynamic.field_dynamic_dropdown", function(requi
/**
* @private
*/
- _onChange: function() {
+ _onChange: function () {
var value = JSON.parse(this.$el.val());
this._setValue(value.toString());
},
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index f51b619cdeaa..494e64e4ed3f 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -1,4 +1,4 @@
-odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function(
+odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function (
require
) {
"use strict";
@@ -8,8 +8,8 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
var FormView = require("web.FormView");
var testUtils = require("web.test_utils");
- QUnit.module("web_widget_dropdown_dynamic", {}, function() {
- QUnit.test("values are fetched w/o context (char)", async function(assert) {
+ QUnit.module("web_widget_dropdown_dynamic", {}, function () {
+ QUnit.test("values are fetched w/o context (char)", async function (assert) {
assert.expect(2);
var form = await testUtils.createView({
@@ -27,7 +27,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
return Promise.resolve([["value", "Title"]]);
}
@@ -41,7 +41,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
form.destroy();
});
- QUnit.test("values are fetched w/o context (integer)", async function(assert) {
+ QUnit.test("values are fetched w/o context (integer)", async function (assert) {
assert.expect(2);
var form = await testUtils.createView({
@@ -59,7 +59,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
return Promise.resolve([[0, "Title"]]);
}
@@ -73,7 +73,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
form.destroy();
});
- QUnit.test("values are fetched w/o context (selection)", async function(
+ QUnit.test("values are fetched w/o context (selection)", async function (
assert
) {
assert.expect(2);
@@ -93,7 +93,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
return Promise.resolve([["value", "Title"]]);
}
@@ -107,7 +107,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
form.destroy();
});
- QUnit.test("values are fetched with changing context", async function(assert) {
+ QUnit.test("values are fetched with changing context", async function (assert) {
assert.expect(6);
var form = await testUtils.createView({
@@ -127,7 +127,7 @@ odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", fun
' ' +
' ' +
"",
- mockRPC: function(route, args) {
+ mockRPC: function (route, args) {
if (args.method === "_get_test_field_values") {
if (args.kwargs.context.step === "step-1") {
return Promise.resolve([["value", "Title"]]);
From d54d877e508971bc6846b029c359792a26fac326 Mon Sep 17 00:00:00 2001
From: Ronald Portier
Date: Fri, 28 May 2021 16:19:56 +0200
Subject: [PATCH 08/18] [MIG] web_widget_dropdown_dynamic: Migration to 14.0
---
web_widget_dropdown_dynamic/README.rst | 14 +++++++++-----
web_widget_dropdown_dynamic/__manifest__.py | 2 +-
.../i18n/web_widget_dropdown_dynamic.pot | 2 +-
.../readme/CONTRIBUTORS.rst | 4 ++++
.../static/description/index.html | 10 +++++++---
5 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index 182360991e47..5a7ee5b31e1e 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -14,13 +14,13 @@ Dynamic Dropdown Widget
: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/13.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/14.0/web_widget_dropdown_dynamic
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-13-0/web-13-0-web_widget_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_widget_dropdown_dynamic
: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/13.0
+ :target: https://runbot.odoo-community.org/runbot/162/14.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -74,7 +74,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -93,6 +93,10 @@ Contributors
* Alexey Pelykh
+* `Therp BV `__
+
+ * Ronald Portier
+
Maintainers
~~~~~~~~~~~
@@ -106,6 +110,6 @@ 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.
+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_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 879079b5bc40..56add7f08564 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -5,7 +5,7 @@
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "13.0.1.0.0",
+ "version": "14.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index 1472b629c707..db119581c6c2 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index 724bc1d03a2b..fc2a1a3c6d31 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -1,3 +1,7 @@
* `CorporateHub `__
* Alexey Pelykh
+
+* `Therp BV `__
+
+ * Ronald Portier
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index 8da1257d41ce..983b6b168e76 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -367,7 +367,7 @@ Dynamic Dropdown Widget
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Dynamic dropdown widget that supports resolving options from backend of:
@@ -423,7 +423,7 @@
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.
@@ -450,7 +454,7 @@
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.
+
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 7829b15045fc40c3cff6723103bf194b97bb2e57 Mon Sep 17 00:00:00 2001
From: Corneliuus
Date: Wed, 13 Oct 2021 20:37:25 +0000
Subject: [PATCH 09/18] Added translation using Weblate (German)
---
web_widget_dropdown_dynamic/i18n/de.po | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
create mode 100644 web_widget_dropdown_dynamic/i18n/de.po
diff --git a/web_widget_dropdown_dynamic/i18n/de.po b/web_widget_dropdown_dynamic/i18n/de.po
new file mode 100644
index 000000000000..ac7f64c0f46f
--- /dev/null
+++ b/web_widget_dropdown_dynamic/i18n/de.po
@@ -0,0 +1,22 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_widget_dropdown_dynamic
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: web_widget_dropdown_dynamic
+#. openerp-web
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#, python-format
+msgid "Dynamic Dropdown"
+msgstr ""
From 86521a7c3f0c18f9f0dd361f358f11fb07e01f2f Mon Sep 17 00:00:00 2001
From: Corneliuus
Date: Wed, 13 Oct 2021 20:37:36 +0000
Subject: [PATCH 10/18] Translated using Weblate (German)
Currently translated at 100.0% (1 of 1 strings)
Translation: web-14.0/web-14.0-web_widget_dropdown_dynamic
Translate-URL: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_widget_dropdown_dynamic/de/
---
web_widget_dropdown_dynamic/i18n/de.po | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/web_widget_dropdown_dynamic/i18n/de.po b/web_widget_dropdown_dynamic/i18n/de.po
index ac7f64c0f46f..e78a6411cc81 100644
--- a/web_widget_dropdown_dynamic/i18n/de.po
+++ b/web_widget_dropdown_dynamic/i18n/de.po
@@ -6,17 +6,19 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2021-10-13 20:46+0000\n"
+"Last-Translator: Corneliuus \n"
"Language-Team: none\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.3.2\n"
#. module: web_widget_dropdown_dynamic
#. openerp-web
#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
#, python-format
msgid "Dynamic Dropdown"
-msgstr ""
+msgstr "Dynamisches Dropdown"
From 41e85d5d090c3b78b2592e528014e71cf3530909 Mon Sep 17 00:00:00 2001
From: Thanakrit Pintana
Date: Tue, 30 Nov 2021 16:13:18 +0700
Subject: [PATCH 11/18] [IMP] web_widget_dropdown_dynamic: black, isort,
prettier
---
.../web_widget_dropdown_dynamic_tests.js | 338 +++++++++---------
1 file changed, 176 insertions(+), 162 deletions(-)
diff --git a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
index 494e64e4ed3f..1529278958f9 100644
--- a/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
+++ b/web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
@@ -1,173 +1,187 @@
-odoo.define("web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests", function (
- require
-) {
- "use strict";
-
- /* global QUnit*/
-
- var FormView = require("web.FormView");
- var testUtils = require("web.test_utils");
-
- QUnit.module("web_widget_dropdown_dynamic", {}, function () {
- QUnit.test("values are fetched w/o context (char)", async function (assert) {
- assert.expect(2);
-
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- test_field: {string: "Test Field", type: "char"},
+odoo.define(
+ "web_widget_dropdown_dynamic.web_widget_dropdown_dynamic_tests",
+ function (require) {
+ "use strict";
+
+ /* global QUnit*/
+
+ var FormView = require("web.FormView");
+ var testUtils = require("web.test_utils");
+
+ QUnit.module("web_widget_dropdown_dynamic", {}, function () {
+ QUnit.test(
+ "values are fetched w/o context (char)",
+ async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: "Test Field", type: "char"},
+ },
+ records: [{id: 1, test_field: ""}],
+ },
},
- records: [{id: 1, test_field: ""}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- return Promise.resolve([["value", "Title"]]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='\"value\"']");
-
- form.destroy();
- });
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ return Promise.resolve([["value", "Title"]]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
- QUnit.test("values are fetched w/o context (integer)", async function (assert) {
- assert.expect(2);
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- test_field: {string: "Test Field", type: "integer"},
- },
- records: [{id: 1, test_field: 0}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- return Promise.resolve([[0, "Title"]]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='0']");
-
- form.destroy();
- });
+ form.destroy();
+ }
+ );
- QUnit.test("values are fetched w/o context (selection)", async function (
- assert
- ) {
- assert.expect(2);
-
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- test_field: {string: "Test Field", type: "selection"},
+ QUnit.test(
+ "values are fetched w/o context (integer)",
+ async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {string: "Test Field", type: "integer"},
+ },
+ records: [{id: 1, test_field: 0}],
+ },
},
- records: [{id: 1, test_field: ""}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- return Promise.resolve([["value", "Title"]]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='\"value\"']");
-
- form.destroy();
- });
-
- QUnit.test("values are fetched with changing context", async function (assert) {
- assert.expect(6);
-
- var form = await testUtils.createView({
- View: FormView,
- model: "demo_entry",
- data: {
- demo_entry: {
- fields: {
- other_field: {string: "Other Field", type: "char"},
- test_field: {string: "Test Field", type: "char"},
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ return Promise.resolve([[0, "Title"]]);
+ }
+ return this._super.apply(this, arguments);
},
- records: [{id: 1, other_field: "", test_field: ""}],
- },
- },
- arch:
- "",
- mockRPC: function (route, args) {
- if (args.method === "_get_test_field_values") {
- if (args.kwargs.context.step === "step-1") {
- return Promise.resolve([["value", "Title"]]);
- } else if (args.kwargs.context.step === "step-2") {
- return Promise.resolve([
- ["value", "Title"],
- ["value_2", "Title 2"],
- ]);
- }
- return Promise.resolve([]);
- }
- return this._super.apply(this, arguments);
- },
- });
-
- await testUtils.fields.editAndTrigger(
- form.$('.o_field_widget[name="other_field"]'),
- "step-1",
- ["input"]
- );
- assert.containsN(form, "option", 2);
- assert.containsOnce(form, "option[value='\"value\"']");
+ });
+
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='0']");
- await testUtils.fields.editAndTrigger(
- form.$('.o_field_widget[name="other_field"]'),
- "step-2",
- ["input"]
+ form.destroy();
+ }
);
- assert.containsN(form, "option", 3);
- assert.containsOnce(form, "option[value='\"value\"']");
- assert.containsOnce(form, "option[value='\"value_2\"']");
-
- await testUtils.fields.editAndTrigger(
- form.$('.o_field_widget[name="other_field"]'),
- "step-other",
- ["input"]
+
+ QUnit.test(
+ "values are fetched w/o context (selection)",
+ async function (assert) {
+ assert.expect(2);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ test_field: {
+ string: "Test Field",
+ type: "selection",
+ },
+ },
+ records: [{id: 1, test_field: ""}],
+ },
+ },
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ return Promise.resolve([["value", "Title"]]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
+
+ form.destroy();
+ }
);
- assert.containsN(form, "option", 1);
- form.destroy();
+ QUnit.test(
+ "values are fetched with changing context",
+ async function (assert) {
+ assert.expect(6);
+
+ var form = await testUtils.createView({
+ View: FormView,
+ model: "demo_entry",
+ data: {
+ demo_entry: {
+ fields: {
+ other_field: {string: "Other Field", type: "char"},
+ test_field: {string: "Test Field", type: "char"},
+ },
+ records: [{id: 1, other_field: "", test_field: ""}],
+ },
+ },
+ arch:
+ "",
+ mockRPC: function (route, args) {
+ if (args.method === "_get_test_field_values") {
+ if (args.kwargs.context.step === "step-1") {
+ return Promise.resolve([["value", "Title"]]);
+ } else if (args.kwargs.context.step === "step-2") {
+ return Promise.resolve([
+ ["value", "Title"],
+ ["value_2", "Title 2"],
+ ]);
+ }
+ return Promise.resolve([]);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ "step-1",
+ ["input"]
+ );
+ assert.containsN(form, "option", 2);
+ assert.containsOnce(form, "option[value='\"value\"']");
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ "step-2",
+ ["input"]
+ );
+ assert.containsN(form, "option", 3);
+ assert.containsOnce(form, "option[value='\"value\"']");
+ assert.containsOnce(form, "option[value='\"value_2\"']");
+
+ await testUtils.fields.editAndTrigger(
+ form.$('.o_field_widget[name="other_field"]'),
+ "step-other",
+ ["input"]
+ );
+ assert.containsN(form, "option", 1);
+
+ form.destroy();
+ }
+ );
});
- });
-});
+ }
+);
From d07df2665a5d8da13530b1648abffd1e5f95b281 Mon Sep 17 00:00:00 2001
From: Thanakrit Pintana
Date: Wed, 1 Dec 2021 10:08:31 +0700
Subject: [PATCH 12/18] [MIG] web_widget_dropdown_dynamic: Migration to 15.0
---
web_widget_dropdown_dynamic/README.rst | 12 ++++---
web_widget_dropdown_dynamic/__manifest__.py | 12 +++++--
.../i18n/web_widget_dropdown_dynamic.pot | 2 +-
.../readme/CONTRIBUTORS.rst | 2 ++
.../static/description/index.html | 7 ++--
.../templates/assets.xml | 35 -------------------
6 files changed, 24 insertions(+), 46 deletions(-)
delete mode 100644 web_widget_dropdown_dynamic/templates/assets.xml
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index 5a7ee5b31e1e..e202749a424c 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -14,13 +14,13 @@ Dynamic Dropdown Widget
: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/14.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/15.0/web_widget_dropdown_dynamic
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_widget_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_widget_dropdown_dynamic
: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/14.0
+ :target: https://runbot.odoo-community.org/runbot/162/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -74,7 +74,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 smashing it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -97,6 +97,8 @@ Contributors
* Ronald Portier
+* Thanakrit Pintana
+
Maintainers
~~~~~~~~~~~
@@ -110,6 +112,6 @@ 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.
+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_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 56add7f08564..6ac2723069a0 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -5,11 +5,19 @@
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "14.0.1.0.0",
+ "version": "15.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
"depends": ["web"],
- "data": ["templates/assets.xml"],
"installable": True,
+ "assets": {
+ "web.assets_backend": [
+ "web_widget_dropdown_dynamic/static/src/js/basic_model.js",
+ "web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js",
+ ],
+ "web.qunit_suite_tests": [
+ "web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js"
+ ],
+ },
}
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index db119581c6c2..decac64824ea 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index fc2a1a3c6d31..104571487607 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -5,3 +5,5 @@
* `Therp BV `__
* Ronald Portier
+
+* Thanakrit Pintana
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index 983b6b168e76..a1ff838ed71a 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -367,7 +367,7 @@ Dynamic Dropdown Widget
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
+
Dynamic dropdown widget that supports resolving options from backend of:
@@ -423,7 +423,7 @@
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.
@@ -454,7 +455,7 @@
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.
+
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_dropdown_dynamic/templates/assets.xml b/web_widget_dropdown_dynamic/templates/assets.xml
deleted file mode 100644
index e8ed1dcad129..000000000000
--- a/web_widget_dropdown_dynamic/templates/assets.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
From ccaa9f55dd0d0717e71ff59f2ef6a17d9b9430d1 Mon Sep 17 00:00:00 2001
From: Goncalo Brito
Date: Tue, 28 Mar 2023 10:51:04 +0200
Subject: [PATCH 13/18] [16.0][MIG] web_widget_dropdown_dynamic
---
web_widget_dropdown_dynamic/__manifest__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web_widget_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index 6ac2723069a0..c918c28ef4ec 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -5,7 +5,7 @@
"name": "Dynamic Dropdown Widget",
"summary": "This module adds support for dynamic dropdown widget",
"category": "Web",
- "version": "15.0.1.0.0",
+ "version": "16.0.1.0.0",
"license": "AGPL-3",
"author": "CorporateHub, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web",
From 237c7af396bc6f2c58f783ec5d86ec7aaef38b97 Mon Sep 17 00:00:00 2001
From: sonhd91
Date: Thu, 6 Jul 2023 10:04:24 +0700
Subject: [PATCH 14/18] [16.0][MIG]web_widget_dropdown_dynamic: Migrate to
version 16.0
---
web_widget_dropdown_dynamic/README.rst | 33 ++--
web_widget_dropdown_dynamic/__manifest__.py | 6 +-
web_widget_dropdown_dynamic/i18n/de.po | 4 +-
web_widget_dropdown_dynamic/i18n/es.po | 4 +-
.../i18n/web_widget_dropdown_dynamic.pot | 6 +-
.../readme/CONTRIBUTORS.rst | 3 +
.../readme/CREDITS.rst | 1 +
web_widget_dropdown_dynamic/readme/USAGE.rst | 2 +-
.../static/description/index.html | 39 ++--
.../static/src/js/basic_model.esm.js | 50 +++++
.../static/src/js/basic_model.js | 47 -----
.../src/js/field_dynamic_dropdown.esm.js | 88 +++++++++
.../static/src/js/field_dynamic_dropdown.js | 149 --------------
.../web_widget_dropdown_dynamic_tests.esm.js | 182 +++++++++++++++++
.../web_widget_dropdown_dynamic_tests.js | 187 ------------------
15 files changed, 383 insertions(+), 418 deletions(-)
create mode 100644 web_widget_dropdown_dynamic/readme/CREDITS.rst
create mode 100644 web_widget_dropdown_dynamic/static/src/js/basic_model.esm.js
delete mode 100644 web_widget_dropdown_dynamic/static/src/js/basic_model.js
create mode 100644 web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js
delete mode 100644 web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js
create mode 100644 web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.esm.js
delete mode 100644 web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js
diff --git a/web_widget_dropdown_dynamic/README.rst b/web_widget_dropdown_dynamic/README.rst
index e202749a424c..6abcf43e0adb 100644
--- a/web_widget_dropdown_dynamic/README.rst
+++ b/web_widget_dropdown_dynamic/README.rst
@@ -2,10 +2,13 @@
Dynamic Dropdown Widget
=======================
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:e2b8eb236b4dc206f3a4ab9b5932f86c2e46c33bdac31c385725384f3fe970e3
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
@@ -14,16 +17,16 @@ Dynamic Dropdown Widget
: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/15.0/web_widget_dropdown_dynamic
+ :target: https://github.com/OCA/web/tree/16.0/web_widget_dropdown_dynamic
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-15-0/web-15-0-web_widget_dropdown_dynamic
+ :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_widget_dropdown_dynamic
: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/15.0
- :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0
+ :alt: Try me on Runboat
-|badge1| |badge2| |badge3| |badge4| |badge5|
+|badge1| |badge2| |badge3| |badge4| |badge5|
Dynamic dropdown widget that supports resolving options from backend of:
@@ -64,7 +67,7 @@ Usage
@@ -73,8 +76,8 @@ 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 `_.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -98,6 +101,14 @@ Contributors
* Ronald Portier
* Thanakrit Pintana
+* `Trobz `_:
+
+ * Son Ho
+
+Other credits
+~~~~~~~~~~~~~
+
+The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp
Maintainers
~~~~~~~~~~~
@@ -112,6 +123,6 @@ 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.
+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_dropdown_dynamic/__manifest__.py b/web_widget_dropdown_dynamic/__manifest__.py
index c918c28ef4ec..ad6fd5d2380d 100644
--- a/web_widget_dropdown_dynamic/__manifest__.py
+++ b/web_widget_dropdown_dynamic/__manifest__.py
@@ -13,11 +13,7 @@
"installable": True,
"assets": {
"web.assets_backend": [
- "web_widget_dropdown_dynamic/static/src/js/basic_model.js",
- "web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js",
- ],
- "web.qunit_suite_tests": [
- "web_widget_dropdown_dynamic/static/tests/web_widget_dropdown_dynamic_tests.js"
+ "web_widget_dropdown_dynamic/**/*",
],
},
}
diff --git a/web_widget_dropdown_dynamic/i18n/de.po b/web_widget_dropdown_dynamic/i18n/de.po
index e78a6411cc81..61dd9d6002eb 100644
--- a/web_widget_dropdown_dynamic/i18n/de.po
+++ b/web_widget_dropdown_dynamic/i18n/de.po
@@ -17,8 +17,8 @@ msgstr ""
"X-Generator: Weblate 4.3.2\n"
#. module: web_widget_dropdown_dynamic
-#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr "Dynamisches Dropdown"
diff --git a/web_widget_dropdown_dynamic/i18n/es.po b/web_widget_dropdown_dynamic/i18n/es.po
index 39577a6ef398..21f65c66a502 100644
--- a/web_widget_dropdown_dynamic/i18n/es.po
+++ b/web_widget_dropdown_dynamic/i18n/es.po
@@ -17,8 +17,8 @@ msgstr ""
"X-Generator: Weblate 4.3.2\n"
#. module: web_widget_dropdown_dynamic
-#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr "Menú desplegable dinámico"
diff --git a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
index decac64824ea..9147b0b4f778 100644
--- a/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
+++ b/web_widget_dropdown_dynamic/i18n/web_widget_dropdown_dynamic.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 15.0\n"
+"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -14,8 +14,8 @@ msgstr ""
"Plural-Forms: \n"
#. module: web_widget_dropdown_dynamic
-#. openerp-web
-#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.js:0
+#. odoo-javascript
+#: code:addons/web_widget_dropdown_dynamic/static/src/js/field_dynamic_dropdown.esm.js:0
#, python-format
msgid "Dynamic Dropdown"
msgstr ""
diff --git a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
index 104571487607..081566b1cdb1 100644
--- a/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
+++ b/web_widget_dropdown_dynamic/readme/CONTRIBUTORS.rst
@@ -7,3 +7,6 @@
* Ronald Portier
* Thanakrit Pintana
+* `Trobz `_:
+
+ * Son Ho
diff --git a/web_widget_dropdown_dynamic/readme/CREDITS.rst b/web_widget_dropdown_dynamic/readme/CREDITS.rst
new file mode 100644
index 000000000000..70bc307ad0b1
--- /dev/null
+++ b/web_widget_dropdown_dynamic/readme/CREDITS.rst
@@ -0,0 +1 @@
+The migration of this module from 15.0 to 16.0 was financially supported by Camptocamp
diff --git a/web_widget_dropdown_dynamic/readme/USAGE.rst b/web_widget_dropdown_dynamic/readme/USAGE.rst
index f30491bc4d49..0d74a1ece5dc 100644
--- a/web_widget_dropdown_dynamic/readme/USAGE.rst
+++ b/web_widget_dropdown_dynamic/readme/USAGE.rst
@@ -19,6 +19,6 @@
diff --git a/web_widget_dropdown_dynamic/static/description/index.html b/web_widget_dropdown_dynamic/static/description/index.html
index a1ff838ed71a..99d63ad65d7e 100644
--- a/web_widget_dropdown_dynamic/static/description/index.html
+++ b/web_widget_dropdown_dynamic/static/description/index.html
@@ -3,7 +3,7 @@
-
+
Dynamic Dropdown Widget