From 6d13271aac9fae6fb7fa122c49aacebb49a82889 Mon Sep 17 00:00:00 2001 From: Mathieu Duckerts-Antoine Date: Wed, 2 Feb 2022 10:38:28 +0000 Subject: [PATCH] [REF] web: adapt code to owl 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Owl 2 changelog: https://github.com/odoo/owl/blob/a9f29c4caad4f32d06be1ec4780572825781cd9b/CHANGELOG.md Part-of: odoo/odoo#80156 Co-authored-by: Aaron Bohy Co-authored-by: Bruno Boi Co-authored-by: Géry Debongnie Co-authored-by: Samuel Degueldre Co-authored-by: Mathieu Duckerts-Antoine Co-authored-by: Simon Genin (ges) Co-authored-by: Francois (fge) Co-authored-by: Michael Mattiello (mcm) Co-authored-by: Julien Mougenot Co-authored-by: luvi Co-authored-by: Lucas Perais (lpe) Co-authored-by: Jorge Pinna Puissant --- addons/web/__manifest__.py | 8 +- addons/web/static/src/core/assets.js | 2 +- addons/web/static/src/core/browser/browser.js | 11 +- .../web/static/src/core/checkbox/checkbox.js | 9 +- .../web/static/src/core/checkbox/checkbox.xml | 1 + .../static/src/core/commands/command_hook.js | 4 +- .../src/core/commands/command_items.xml | 2 +- .../src/core/commands/command_palette.xml | 13 +- .../src/core/commands/command_service.js | 2 +- .../confirmation_dialog.js | 3 +- .../static/src/core/datepicker/datepicker.js | 31 +- .../static/src/core/datepicker/datepicker.xml | 1 - .../static/src/core/debug/debug_context.js | 3 +- .../web/static/src/core/debug/debug_menu.js | 3 + .../web/static/src/core/debug/debug_menu.xml | 10 +- .../static/src/core/debug/debug_menu_basic.js | 6 + .../src/core/debug/debug_menu_items.xml | 2 +- .../core/debug/profiling/profiling_item.js | 2 +- .../core/debug/profiling/profiling_item.xml | 12 +- .../core/debug/profiling/profiling_service.js | 12 +- addons/web/static/src/core/dialog/dialog.js | 9 +- addons/web/static/src/core/dialog/dialog.xml | 2 +- .../src/core/dialog/dialog_container.js | 24 +- .../web/static/src/core/dropdown/dropdown.js | 22 +- .../web/static/src/core/dropdown/dropdown.xml | 20 +- .../static/src/core/dropdown/dropdown_item.js | 25 +- .../src/core/dropdown/dropdown_item.xml | 1 + .../core/dropdown/dropdown_navigation_hook.js | 4 +- .../src/core/effects/effect_container.js | 9 +- .../static/src/core/effects/effect_service.js | 5 +- .../static/src/core/effects/rainbow_man.js | 4 +- .../static/src/core/effects/rainbow_man.xml | 5 +- .../static/src/core/errors/error_dialogs.xml | 2 +- .../static/src/core/file_input/file_input.js | 7 +- .../static/src/core/file_input/file_input.xml | 2 +- .../static/src/core/hotkeys/hotkey_hook.js | 4 +- .../src/core/l10n/localization_service.js | 6 - .../src/core/notifications/notification.js | 17 +- .../src/core/notifications/notification.xml | 9 +- .../notifications/notification_container.js | 19 +- .../notifications/notification_service.js | 27 +- addons/web/static/src/core/pager/pager.js | 6 +- addons/web/static/src/core/pager/pager.xml | 6 +- addons/web/static/src/core/popover/popover.js | 9 + .../web/static/src/core/popover/popover.xml | 1 + .../src/core/popover/popover_container.js | 20 +- .../static/src/core/popover/popover_hook.js | 4 +- .../static/src/core/position/position_hook.js | 3 +- addons/web/static/src/core/registry.js | 2 +- addons/web/static/src/core/transition.js | 138 +++ addons/web/static/src/core/ui/block_ui.js | 4 +- addons/web/static/src/core/ui/ui_service.js | 16 +- .../web/static/src/core/utils/components.js | 15 +- addons/web/static/src/core/utils/hooks.js | 109 +-- addons/web/static/src/core/utils/render.js | 23 + addons/web/static/src/core/utils/strings.js | 20 + .../static/src/core/utils/transitions.scss | 7 +- addons/web/static/src/env.js | 7 +- addons/web/static/src/fields/fields.js | 8 +- .../web/static/src/legacy/action_adapters.js | 72 +- addons/web/static/src/legacy/debug_manager.js | 5 +- .../src/legacy/js/_deprecated/basic_fields.js | 1 + addons/web/static/src/legacy/js/common_env.js | 2 - .../src/legacy/js/component_extension.js | 10 +- .../src/legacy/js/components/action_menus.js | 40 +- .../legacy/js/components/custom_checkbox.js | 17 +- .../legacy/js/components/custom_file_input.js | 17 +- .../src/legacy/js/components/datepicker.js | 93 +- .../src/legacy/js/components/dropdown_menu.js | 4 +- .../js/components/dropdown_menu_item.js | 6 +- .../static/src/legacy/js/components/pager.js | 21 +- .../js/control_panel/comparison_menu.js | 6 +- .../legacy/js/control_panel/control_panel.js | 74 +- .../js/control_panel/custom_favorite_item.js | 21 +- .../js/control_panel/custom_filter_item.js | 8 +- .../js/control_panel/custom_group_by_item.js | 38 - .../legacy/js/control_panel/favorite_menu.js | 7 +- .../legacy/js/control_panel/filter_menu.js | 14 +- .../legacy/js/control_panel/groupby_menu.js | 13 +- .../src/legacy/js/control_panel/search_bar.js | 32 +- .../static/src/legacy/js/core/custom_hooks.js | 116 --- .../static/src/legacy/js/core/error_utils.js | 2 +- addons/web/static/src/legacy/js/core/misc.js | 3 +- .../static/src/legacy/js/core/owl_dialog.js | 111 ++- .../web/static/src/legacy/js/core/popover.js | 67 +- .../src/legacy/js/core/service_mixins.js | 1 - .../static/src/legacy/js/core/translation.js | 15 +- addons/web/static/src/legacy/js/core/utils.js | 10 +- .../legacy/js/fields/abstract_field_owl.js | 44 +- .../src/legacy/js/fields/basic_fields_owl.js | 13 +- .../legacy/js/fields/field_registry_owl.js | 7 +- .../src/legacy/js/fields/field_wrapper.js | 32 +- .../src/legacy/js/fields/relational_fields.js | 9 +- addons/web/static/src/legacy/js/model.js | 68 +- .../static/src/legacy/js/owl_compatibility.js | 670 ++++++++------ .../src/legacy/js/public/public_root.js | 29 +- .../legacy/js/views/abstract_controller.js | 8 +- .../src/legacy/js/views/abstract_renderer.js | 11 +- .../legacy/js/views/abstract_renderer_owl.js | 18 +- .../src/legacy/js/views/abstract_view.js | 7 +- .../legacy/js/views/basic/basic_controller.js | 6 +- .../legacy/js/views/basic/basic_renderer.js | 23 +- .../src/legacy/js/views/form/form_renderer.js | 29 +- .../legacy/js/views/graph/graph_renderer.js | 46 +- .../src/legacy/js/views/list/list_renderer.js | 13 +- .../legacy/js/views/pivot/pivot_renderer.js | 55 +- .../src/legacy/js/views/pivot/pivot_view.js | 2 +- .../src/legacy/js/views/search_panel.js | 37 +- .../src/legacy/js/views/view_dialogs.js | 4 +- .../static/src/legacy/js/widgets/week_days.js | 17 +- .../src/legacy/legacy_client_actions.js | 21 +- addons/web/static/src/legacy/legacy_dialog.js | 3 +- addons/web/static/src/legacy/legacy_setup.js | 5 +- addons/web/static/src/legacy/legacy_views.js | 25 +- addons/web/static/src/legacy/root_widget.js | 19 +- addons/web/static/src/legacy/utils.js | 31 +- addons/web/static/src/legacy/xml/base.xml | 128 ++- .../static/src/legacy/xml/control_panel.xml | 6 +- addons/web/static/src/legacy/xml/fields.xml | 2 +- addons/web/static/src/legacy/xml/pivot.xml | 20 +- .../static/src/legacy/xml/search_panel.xml | 8 +- .../web/static/src/legacy/xml/week_days.xml | 4 +- .../web/static/src/owl2_compatibility/app.js | 36 + .../src/owl2_compatibility/component.js | 43 + .../src/owl2_compatibility/event_target.js | 33 + addons/web/static/src/owl_next_adapter.js | 34 - .../search/comparison_menu/comparison_menu.js | 3 + .../comparison_menu/comparison_menu.xml | 8 +- .../src/search/control_panel/control_panel.js | 38 - .../search/control_panel/control_panel.xml | 8 +- .../favorite_menu/custom_favorite_item.js | 15 +- .../favorite_menu/custom_favorite_item.xml | 7 +- .../src/search/favorite_menu/favorite_menu.js | 3 + .../search/favorite_menu/favorite_menu.xml | 9 +- .../search/filter_menu/custom_filter_item.js | 3 +- .../search/filter_menu/custom_filter_item.xml | 16 +- .../src/search/filter_menu/filter_menu.js | 4 +- .../src/search/filter_menu/filter_menu.xml | 10 +- .../group_by_menu/custom_group_by_item.js | 7 +- .../group_by_menu/custom_group_by_item.xml | 6 +- .../src/search/group_by_menu/group_by_menu.js | 10 +- .../search/group_by_menu/group_by_menu.xml | 10 +- addons/web/static/src/search/pager_hook.js | 4 +- .../src/search/search_bar/search_bar.js | 7 +- .../src/search/search_bar/search_bar.xml | 11 +- .../src/search/search_panel/search_panel.js | 32 +- .../src/search/search_panel/search_panel.xml | 6 +- .../src/search/with_search/with_search.js | 50 +- addons/web/static/src/start.js | 23 +- addons/web/static/src/views/debug_items.js | 6 +- .../static/src/views/graph/graph_renderer.js | 21 +- .../static/src/views/graph/graph_renderer.xml | 4 +- .../web/static/src/views/graph/graph_view.js | 4 +- .../web/static/src/views/graph/graph_view.xml | 17 +- .../src/views/helpers/no_content_helpers.xml | 2 +- .../src/views/helpers/standard_view_props.js | 1 + addons/web/static/src/views/layout.js | 18 + addons/web/static/src/views/layout.xml | 4 +- .../web/static/src/views/onboarding_banner.js | 10 +- .../src/views/pivot/pivot_group_by_menu.js | 9 +- .../static/src/views/pivot/pivot_renderer.js | 18 +- .../static/src/views/pivot/pivot_renderer.xml | 11 +- .../web/static/src/views/pivot/pivot_view.js | 4 +- .../web/static/src/views/pivot/pivot_view.xml | 2 +- addons/web/static/src/views/view.js | 19 +- addons/web/static/src/views/view.xml | 14 +- addons/web/static/src/views/view_service.js | 2 +- .../src/webclient/actions/action_container.js | 13 +- .../src/webclient/actions/action_dialog.js | 16 +- .../src/webclient/actions/action_hook.js | 3 +- .../src/webclient/actions/action_service.js | 38 +- .../src/webclient/actions/client_actions.js | 10 +- .../src/webclient/burger_menu/burger_menu.js | 17 +- .../webclient/burger_menu/burger_menu.scss | 6 +- .../src/webclient/burger_menu/burger_menu.xml | 70 +- .../mobile_switch_company_menu.xml | 6 +- .../burger_menu/user_menu/user_menu.xml | 2 +- .../static/src/webclient/clickbot/clickbot.js | 25 +- .../src/webclient/clickbot/clickbot_loader.js | 5 +- .../web/static/src/webclient/debug_items.js | 4 +- .../loading_indicator/loading_indicator.js | 16 +- .../loading_indicator/loading_indicator.scss | 17 +- .../loading_indicator/loading_indicator.xml | 8 +- .../web/static/src/webclient/navbar/navbar.js | 8 +- .../static/src/webclient/navbar/navbar.scss | 2 +- .../static/src/webclient/navbar/navbar.xml | 19 +- .../switch_company_menu.js | 3 + .../switch_company_menu.xml | 10 +- .../src/webclient/user_menu/user_menu.js | 5 +- .../src/webclient/user_menu/user_menu.xml | 4 +- addons/web/static/src/webclient/webclient.js | 41 +- addons/web/static/src/webclient/webclient.xml | 16 +- .../static/src/webclient/webclient_extra.scss | 10 - .../src/webclient/webclient_layout.scss | 13 - .../web/static/tests/core/checkbox_tests.js | 40 +- .../core/commands/command_palette_tests.js | 52 +- .../core/commands/command_service_tests.js | 61 +- .../core/commands/menu_provider_tests.js | 51 +- .../web/static/tests/core/datepicker_tests.js | 43 +- .../tests/core/debug/debug_manager_tests.js | 76 +- .../static/tests/core/dialog_service_tests.js | 37 +- addons/web/static/tests/core/dialog_tests.js | 79 +- .../web/static/tests/core/dropdown_tests.js | 216 +++-- .../core/effects/effect_service_tests.js | 22 +- .../tests/core/errors/error_dialogs_tests.js | 137 ++- .../web/static/tests/core/file_input_tests.js | 11 +- .../core/hotkeys/hotkey_service_tests.js | 63 +- .../tests/core/l10n/translation_tests.js | 10 +- .../core/main_components_container_tests.js | 18 +- .../tests/core/network/rpc_service_tests.js | 27 +- .../core/notifications/notifications_tests.js | 39 +- .../static/tests/core/orm_service_tests.js | 6 +- addons/web/static/tests/core/pager_tests.js | 16 +- .../tests/core/popover/popover_hook_tests.js | 46 +- .../core/popover/popover_service_tests.js | 14 +- .../tests/core/popover/popover_tests.js | 28 +- .../static/tests/core/position_hook_tests.js | 45 +- .../tests/core/scroller_service_tests.js | 19 +- .../core/tooltip/tooltip_service_tests.js | 412 ++++----- .../web/static/tests/core/transition_test.js | 79 ++ .../web/static/tests/core/ui_service_tests.js | 23 +- .../tests/core/utils/component_tests.js | 22 +- .../static/tests/core/utils/hooks_tests.js | 279 +----- addons/web/static/tests/helpers/mock_env.js | 30 +- .../web/static/tests/helpers/mock_services.js | 29 +- addons/web/static/tests/helpers/utils.js | 72 ++ .../tests/legacy/component_extension_tests.js | 89 +- .../legacy/components/action_menus_tests.js | 14 - .../components/custom_checkbox_tests.js | 4 - .../components/custom_file_input_tests.js | 4 - .../legacy/components/datepicker_tests.js | 18 - .../components/dropdown_menu_mobile_tests.js | 1 - .../legacy/components/dropdown_menu_tests.js | 56 +- .../tests/legacy/components/pager_tests.js | 62 +- .../control_panel/comparison_menu_tests.js | 4 - .../control_panel/control_panel_tests.js | 14 - .../control_panel/custom_filter_item_tests.js | 25 - .../custom_group_by_item_tests.js | 75 -- .../control_panel/favorite_menu_tests.js | 17 - .../legacy/control_panel/filter_menu_tests.js | 22 - .../control_panel/groupby_menu_tests.js | 24 - .../legacy/control_panel/search_bar_tests.js | 134 +-- .../control_panel/search_utils_tests.js | 15 +- .../static/tests/legacy/core/mixins_tests.js | 7 +- .../tests/legacy/core/owl_dialog_tests.js | 169 ++-- .../static/tests/legacy/core/popover_tests.js | 164 ++-- .../tests/legacy/fields/basic_fields_tests.js | 33 +- .../field_many2many_tests.js | 1 - .../relational_fields/field_many2one_tests.js | 1 - .../legacy/fields/relational_fields_tests.js | 13 +- .../static/tests/legacy/helpers/test_env.js | 17 +- .../tests/legacy/helpers/test_utils_create.js | 83 +- .../tests/legacy/helpers/test_utils_mock.js | 3 +- .../tests/legacy/owl_compatibility_tests.js | 696 ++++++++++----- .../legacy/views/abstract_controller_tests.js | 22 +- .../tests/legacy/views/calendar_tests.js | 5 +- .../static/tests/legacy/views/form_tests.js | 131 +-- .../static/tests/legacy/views/graph_tests.js | 24 +- .../static/tests/legacy/views/kanban_tests.js | 12 +- .../static/tests/legacy/views/list_tests.js | 209 ++--- .../static/tests/legacy/views/pivot_tests.js | 58 +- .../static/tests/legacy/views/qweb_tests.js | 6 +- .../tests/legacy/views/search_panel_tests.js | 130 +-- .../tests/legacy/views/state_mapping_tests.js | 92 +- .../static/tests/owl2_compatibility_app.js | 83 ++ .../tests/search/favorite_menu_tests.js | 29 +- addons/web/static/tests/search/helpers.js | 16 +- .../static/tests/search/search_bar_tests.js | 18 +- .../static/tests/search/search_panel_tests.js | 212 ++--- .../static/tests/search/with_search_tests.js | 32 +- addons/web/static/tests/setup.js | 41 +- .../static/tests/views/graph_view_tests.js | 177 ++-- addons/web/static/tests/views/helpers.js | 18 +- addons/web/static/tests/views/layout_tests.js | 10 +- .../static/tests/views/pivot_view_tests.js | 362 ++++---- addons/web/static/tests/views/view_tests.js | 45 +- .../webclient/actions/client_action_tests.js | 70 +- .../webclient/actions/close_action_tests.js | 65 +- .../webclient/actions/concurrency_tests.js | 226 ++--- .../tests/webclient/actions/effects_tests.js | 42 +- .../webclient/actions/error_handling_tests.js | 16 +- .../tests/webclient/actions/legacy_tests.js | 69 +- .../webclient/actions/load_state_tests.js | 248 ++--- .../tests/webclient/actions/misc_tests.js | 86 +- .../webclient/actions/push_state_tests.js | 57 +- .../webclient/actions/report_action_tests.js | 26 +- .../webclient/actions/server_action_tests.js | 7 +- .../tests/webclient/actions/target_tests.js | 152 ++-- .../webclient/actions/window_action_tests.js | 845 +++++++++--------- addons/web/static/tests/webclient/helpers.js | 29 +- .../webclient/loading_indicator_tests.js | 49 +- .../mobile_switch_company_menu_tests.js | 13 +- .../static/tests/webclient/navbar_tests.js | 45 +- .../webclient/switch_company_menu_tests.js | 7 +- .../static/tests/webclient/user_menu_tests.js | 26 +- .../static/tests/webclient/webclient_tests.js | 51 +- addons/web/views/webclient_templates.xml | 5 +- 297 files changed, 6038 insertions(+), 5688 deletions(-) create mode 100644 addons/web/static/src/core/transition.js create mode 100644 addons/web/static/src/core/utils/render.js delete mode 100644 addons/web/static/src/legacy/js/control_panel/custom_group_by_item.js delete mode 100644 addons/web/static/src/legacy/js/core/custom_hooks.js create mode 100644 addons/web/static/src/owl2_compatibility/app.js create mode 100644 addons/web/static/src/owl2_compatibility/component.js create mode 100644 addons/web/static/src/owl2_compatibility/event_target.js delete mode 100644 addons/web/static/src/owl_next_adapter.js create mode 100644 addons/web/static/tests/core/transition_test.js delete mode 100644 addons/web/static/tests/legacy/control_panel/custom_group_by_item_tests.js create mode 100644 addons/web/static/tests/owl2_compatibility_app.js diff --git a/addons/web/__manifest__.py b/addons/web/__manifest__.py index 5836ab6da8d..63f21936d24 100644 --- a/addons/web/__manifest__.py +++ b/addons/web/__manifest__.py @@ -359,7 +359,7 @@ This module provides the core of the Odoo Web Client. 'web/static/lib/underscore.string/lib/underscore.string.js', 'web/static/lib/moment/moment.js', 'web/static/lib/owl/owl.js', - 'web/static/src/owl_next_adapter.js', + 'web/static/src/owl2_compatibility/*.js', 'web/static/src/legacy/js/component_extension.js', 'web/static/lib/jquery/jquery.js', 'web/static/lib/jquery.ui/jquery-ui.js', @@ -405,7 +405,6 @@ This module provides the core of the Odoo Web Client. 'web/static/src/legacy/js/core/ajax.js', 'web/static/src/legacy/js/core/browser_detection.js', 'web/static/src/legacy/js/core/bus.js', - 'web/static/src/legacy/js/core/custom_hooks.js', 'web/static/src/legacy/js/core/class.js', 'web/static/src/legacy/js/core/collections.js', 'web/static/src/legacy/js/core/concurrency.js', @@ -453,6 +452,11 @@ This module provides the core of the Odoo Web Client. # first called in web. 'web/static/tests/legacy/helpers/test_utils_file.js' ], + # remove this bundle alongside the owl2 compatibility layer + 'web.tests_assets_common': [ + ('include', 'web.assets_common'), + ('after', 'web/static/src/owl2_compatibility/app.js', 'web/static/tests/owl2_compatibility_app.js'), + ], 'web.tests_assets': [ 'web/static/lib/qunit/qunit-2.9.1.css', 'web/static/lib/qunit/qunit-2.9.1.js', diff --git a/addons/web/static/src/core/assets.js b/addons/web/static/src/core/assets.js index 78cddf884bb..f872aa0327b 100644 --- a/addons/web/static/src/core/assets.js +++ b/addons/web/static/src/core/assets.js @@ -55,7 +55,7 @@ class AssetsLoadingError extends Error {} * @param {string} url the url of the script * @returns {Promise} resolved when the script has been loaded */ -const loadJS = memoize(function loadJS(url) { +export const loadJS = memoize(function loadJS(url) { if (document.querySelector(`script[src="${url}"]`)) { // Already in the DOM and wasn't loaded through this function // Unfortunately there is no way to check whether a script has loaded diff --git a/addons/web/static/src/core/browser/browser.js b/addons/web/static/src/core/browser/browser.js index b67c32ff560..560f8ed41cd 100644 --- a/addons/web/static/src/core/browser/browser.js +++ b/addons/web/static/src/core/browser/browser.js @@ -10,7 +10,7 @@ */ let sessionStorage = window.sessionStorage; -let localStorage = owl.browser.localStorage; +let localStorage = window.localStorage; try { // Safari crashes in Private Browsing localStorage.setItem("__localStorage__", "true"); @@ -20,9 +20,13 @@ try { sessionStorage = makeRAMLocalStorage(); } -export const browser = Object.assign({}, owl.browser, { +export const browser = { addEventListener: window.addEventListener.bind(window), removeEventListener: window.removeEventListener.bind(window), + setTimeout: window.setTimeout.bind(window), + clearTimeout: window.clearTimeout.bind(window), + setInterval: window.setInterval.bind(window), + clearInterval: window.clearInterval.bind(window), requestAnimationFrame: window.requestAnimationFrame.bind(window), cancelAnimationFrame: window.cancelAnimationFrame.bind(window), console: window.console, @@ -32,7 +36,8 @@ export const browser = Object.assign({}, owl.browser, { XMLHttpRequest: window.XMLHttpRequest, localStorage, sessionStorage, -}); + fetch: window.fetch.bind(window), +}; Object.defineProperty(browser, "location", { set(val) { diff --git a/addons/web/static/src/core/checkbox/checkbox.js b/addons/web/static/src/core/checkbox/checkbox.js index 87e4a082ca7..58120cda060 100644 --- a/addons/web/static/src/core/checkbox/checkbox.js +++ b/addons/web/static/src/core/checkbox/checkbox.js @@ -1,6 +1,6 @@ /** @odoo-module **/ -const { Component, QWeb } = owl; +const { Component } = owl; /** * Custom checkbox @@ -8,7 +8,7 @@ const { Component, QWeb } = owl; * * Change the label text * @@ -24,5 +24,6 @@ export class CheckBox extends Component { CheckBox.template = "web.CheckBox"; CheckBox.nextId = 1; - -QWeb.registerComponent("CheckBox", CheckBox); +CheckBox.defaultProps = { + onChange: () => {}, +}; diff --git a/addons/web/static/src/core/checkbox/checkbox.xml b/addons/web/static/src/core/checkbox/checkbox.xml index ba826343c57..c5d4833f71a 100644 --- a/addons/web/static/src/core/checkbox/checkbox.xml +++ b/addons/web/static/src/core/checkbox/checkbox.xml @@ -9,6 +9,7 @@ class="custom-control-input" t-att-disabled="props.disabled" t-att-checked="props.value" + t-on-change="(ev) => props.onChange(ev.target.checked)" />