From 7d4e65dac610a355637f83b2564dc3435c76a92a Mon Sep 17 00:00:00 2001
From: Taras Shabaranskyi
Date: Fri, 17 Nov 2023 03:43:53 +0200
Subject: [PATCH] [MIG] web_responsive: Migration to 17.0
---
web_responsive/README.rst | 146 +-
web_responsive/__init__.py | 4 +
web_responsive/__manifest__.py | 53 +-
web_responsive/i18n/uk_UA.po | 105 ++
web_responsive/models/__init__.py | 5 +
web_responsive/models/ir_http.py | 19 +
web_responsive/models/res_users.py | 26 +
web_responsive/pyproject.toml | 3 +
web_responsive/readme/CONTRIBUTORS.md | 21 +
web_responsive/readme/CONTRIBUTORS.rst | 11 -
web_responsive/readme/DESCRIPTION.md | 62 +
web_responsive/readme/DESCRIPTION.rst | 73 -
web_responsive/readme/ROADMAP.md | 2 +
web_responsive/readme/ROADMAP.rst | 2 -
web_responsive/readme/USAGE.md | 5 +
web_responsive/readme/USAGE.rst | 5 -
web_responsive/static/description/index.html | 68 +-
web_responsive/static/img/appmenu.gif | Bin 395807 -> 394447 bytes
web_responsive/static/img/appsearch.gif | Bin 191495 -> 300741 bytes
web_responsive/static/img/chatter-colors.gif | Bin 140636 -> 0 bytes
web_responsive/static/img/chatter-colors.png | Bin 0 -> 98152 bytes
web_responsive/static/img/chatter.gif | Bin 408786 -> 0 bytes
web_responsive/static/img/chatter.png | Bin 0 -> 37721 bytes
web_responsive/static/img/form_buttons.gif | Bin 37249 -> 209567 bytes
web_responsive/static/img/listview.gif | Bin 689735 -> 856779 bytes
web_responsive/static/img/viewtype.gif | Bin 62849 -> 0 bytes
.../src/components/apps_menu/apps_menu.esm.js | 270 +---
.../src/components/apps_menu/apps_menu.scss | 250 +--
.../src/components/apps_menu/apps_menu.xml | 110 +-
.../apps_menu/apps_menu_preferences.esm.js | 39 +
.../apps_menu_item/apps_menu_item.esm.js | 53 +
.../apps_menu_item/apps_menu_item.scss | 73 +
.../apps_menu_item/apps_menu_item.xml | 33 +
.../src/components/apps_menu_tools.esm.js | 77 +
.../attachment_viewer.esm.js | 37 -
.../attachment_viewer/attachment_viewer.scss | 61 -
.../attachment_viewer/attachment_viewer.xml | 39 -
.../src/components/chatter/chatter.esm.js | 28 +
.../src/components/chatter/chatter.scss | 42 +
.../static/src/components/chatter/chatter.xml | 69 +
.../chatter_topbar/chatter_topbar.esm.js | 15 -
.../chatter_topbar/chatter_topbar.xml | 223 ---
.../components/command_palette/main.esm.js | 21 +
.../src/components/command_palette/main.scss | 28 +
.../src/components/command_palette/main.xml | 24 +
.../control_panel/control_panel.esm.js | 96 +-
.../control_panel/control_panel.scss | 306 ----
.../control_panel/control_panel.xml | 227 ---
.../components/file_viewer/file_viewer.esm.js | 77 +
.../components/file_viewer/file_viewer.scss | 56 +
.../components/file_viewer/file_viewer.xml | 47 +
.../static/src/components/hotkey/hotkey.xml | 3 +-
.../menu_canonical_searchbar/searchbar.esm.js | 207 +++
.../menu_canonical_searchbar/searchbar.scss | 112 ++
.../menu_canonical_searchbar/searchbar.xml | 99 ++
.../menu_fuse_searchbar/searchbar.esm.js | 32 +
.../menu_fuse_searchbar/searchbar.xml | 36 +
.../menu_odoo_searchbar/searchbar.esm.js | 65 +
.../menu_odoo_searchbar/searchbar.scss | 4 +
.../menu_odoo_searchbar/searchbar.xml | 25 +
.../menu_searchbar/searchbar.esm.js | 26 +
.../components/menu_searchbar/searchbar.scss | 45 +
.../components/menu_searchbar/searchbar.xml | 14 +
.../search_panel/search_panel.esm.js | 55 -
.../components/search_panel/search_panel.scss | 112 --
.../components/search_panel/search_panel.xml | 53 -
.../static/src/components/ui_context.esm.js | 47 -
.../src/legacy/js/web_responsive.esm.js | 27 +
.../static/src/legacy/js/web_responsive.js | 22 -
.../static/src/legacy/scss/big_boxes.scss | 95 ++
.../static/src/legacy/scss/form_variable.scss | 5 +
.../src/legacy/scss/list_sticky_header.scss | 26 +
.../src/legacy/scss/primary_variable.scss | 12 +
.../src/legacy/scss/web_responsive.scss | 338 +----
.../src/legacy/xml/custom_favorite_item.xml | 20 +
.../static/src/legacy/xml/form_buttons.xml | 188 ++-
web_responsive/static/src/lib/fuse/LICENSE | 201 +++
.../static/src/lib/fuse/fuse.basic.js | 1335 +++++++++++++++++
.../static/src/lib/fuse/fuse.basic.min.js | 9 +
.../src/views/form/form_controller.esm.js | 14 -
.../src/views/form/form_controller.scss | 3 +-
.../static/src/views/form/form_statusbar.scss | 21 +
.../src/views/form/status_bar_buttons.xml | 24 +
.../tests/apps_menu_search_tests.esm.js | 54 +
.../static/tests/apps_menu_tests.esm.js | 87 ++
web_responsive/tests/__init__.py | 4 +
web_responsive/tests/test_ir_http.py | 35 +
web_responsive/views/res_users_views.xml | 64 +
web_responsive/views/web.xml | 21 -
89 files changed, 4140 insertions(+), 2311 deletions(-)
create mode 100644 web_responsive/i18n/uk_UA.po
create mode 100644 web_responsive/models/__init__.py
create mode 100644 web_responsive/models/ir_http.py
create mode 100644 web_responsive/models/res_users.py
create mode 100644 web_responsive/pyproject.toml
create mode 100644 web_responsive/readme/CONTRIBUTORS.md
delete mode 100644 web_responsive/readme/CONTRIBUTORS.rst
create mode 100644 web_responsive/readme/DESCRIPTION.md
delete mode 100644 web_responsive/readme/DESCRIPTION.rst
create mode 100644 web_responsive/readme/ROADMAP.md
delete mode 100644 web_responsive/readme/ROADMAP.rst
create mode 100644 web_responsive/readme/USAGE.md
delete mode 100644 web_responsive/readme/USAGE.rst
delete mode 100644 web_responsive/static/img/chatter-colors.gif
create mode 100644 web_responsive/static/img/chatter-colors.png
delete mode 100644 web_responsive/static/img/chatter.gif
create mode 100644 web_responsive/static/img/chatter.png
delete mode 100644 web_responsive/static/img/viewtype.gif
create mode 100644 web_responsive/static/src/components/apps_menu/apps_menu_preferences.esm.js
create mode 100644 web_responsive/static/src/components/apps_menu_item/apps_menu_item.esm.js
create mode 100644 web_responsive/static/src/components/apps_menu_item/apps_menu_item.scss
create mode 100644 web_responsive/static/src/components/apps_menu_item/apps_menu_item.xml
create mode 100644 web_responsive/static/src/components/apps_menu_tools.esm.js
delete mode 100644 web_responsive/static/src/components/attachment_viewer/attachment_viewer.esm.js
delete mode 100644 web_responsive/static/src/components/attachment_viewer/attachment_viewer.scss
delete mode 100644 web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml
create mode 100644 web_responsive/static/src/components/chatter/chatter.esm.js
create mode 100644 web_responsive/static/src/components/chatter/chatter.scss
create mode 100644 web_responsive/static/src/components/chatter/chatter.xml
delete mode 100644 web_responsive/static/src/components/chatter_topbar/chatter_topbar.esm.js
delete mode 100644 web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml
create mode 100644 web_responsive/static/src/components/command_palette/main.esm.js
create mode 100644 web_responsive/static/src/components/command_palette/main.scss
create mode 100644 web_responsive/static/src/components/command_palette/main.xml
delete mode 100644 web_responsive/static/src/components/control_panel/control_panel.scss
delete mode 100644 web_responsive/static/src/components/control_panel/control_panel.xml
create mode 100644 web_responsive/static/src/components/file_viewer/file_viewer.esm.js
create mode 100644 web_responsive/static/src/components/file_viewer/file_viewer.scss
create mode 100644 web_responsive/static/src/components/file_viewer/file_viewer.xml
create mode 100644 web_responsive/static/src/components/menu_canonical_searchbar/searchbar.esm.js
create mode 100644 web_responsive/static/src/components/menu_canonical_searchbar/searchbar.scss
create mode 100644 web_responsive/static/src/components/menu_canonical_searchbar/searchbar.xml
create mode 100644 web_responsive/static/src/components/menu_fuse_searchbar/searchbar.esm.js
create mode 100644 web_responsive/static/src/components/menu_fuse_searchbar/searchbar.xml
create mode 100644 web_responsive/static/src/components/menu_odoo_searchbar/searchbar.esm.js
create mode 100644 web_responsive/static/src/components/menu_odoo_searchbar/searchbar.scss
create mode 100644 web_responsive/static/src/components/menu_odoo_searchbar/searchbar.xml
create mode 100644 web_responsive/static/src/components/menu_searchbar/searchbar.esm.js
create mode 100644 web_responsive/static/src/components/menu_searchbar/searchbar.scss
create mode 100644 web_responsive/static/src/components/menu_searchbar/searchbar.xml
delete mode 100644 web_responsive/static/src/components/search_panel/search_panel.esm.js
delete mode 100644 web_responsive/static/src/components/search_panel/search_panel.scss
delete mode 100644 web_responsive/static/src/components/search_panel/search_panel.xml
delete mode 100644 web_responsive/static/src/components/ui_context.esm.js
create mode 100644 web_responsive/static/src/legacy/js/web_responsive.esm.js
delete mode 100644 web_responsive/static/src/legacy/js/web_responsive.js
create mode 100644 web_responsive/static/src/legacy/scss/big_boxes.scss
create mode 100644 web_responsive/static/src/legacy/scss/form_variable.scss
create mode 100644 web_responsive/static/src/legacy/scss/list_sticky_header.scss
create mode 100644 web_responsive/static/src/legacy/scss/primary_variable.scss
create mode 100644 web_responsive/static/src/legacy/xml/custom_favorite_item.xml
create mode 100644 web_responsive/static/src/lib/fuse/LICENSE
create mode 100644 web_responsive/static/src/lib/fuse/fuse.basic.js
create mode 100644 web_responsive/static/src/lib/fuse/fuse.basic.min.js
delete mode 100644 web_responsive/static/src/views/form/form_controller.esm.js
create mode 100644 web_responsive/static/src/views/form/form_statusbar.scss
create mode 100644 web_responsive/static/src/views/form/status_bar_buttons.xml
create mode 100644 web_responsive/static/tests/apps_menu_search_tests.esm.js
create mode 100644 web_responsive/static/tests/apps_menu_tests.esm.js
create mode 100644 web_responsive/tests/__init__.py
create mode 100644 web_responsive/tests/test_ir_http.py
create mode 100644 web_responsive/views/res_users_views.xml
delete mode 100644 web_responsive/views/web.xml
diff --git a/web_responsive/README.rst b/web_responsive/README.rst
index e0c580845..8ef85d0b9 100644
--- a/web_responsive/README.rst
+++ b/web_responsive/README.rst
@@ -17,13 +17,13 @@ Web Responsive
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github
- :target: https://github.com/OCA/web/tree/16.0/web_responsive
+ :target: https://github.com/OCA/web/tree/17.0/web_responsive
:alt: OCA/web
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/web-16-0/web-16-0-web_responsive
+ :target: https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_responsive
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
- :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=16.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=17.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -32,75 +32,76 @@ This module adds responsiveness to web backend.
**Features for all devices**:
-* New navigation with the fullscreen app menu
+- New navigation with the fullscreen app menu
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/appmenu.gif
+ |image|
-* Quick menu search inside the app menu
+- Quick menu search inside the app menu
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/appsearch.gif
+ |image1|
-* Sticky header & footer in list view
+- Sticky header & footer in list view
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/listview.gif
+ |image2|
-* Sticky statusbar in form view
+- Sticky statusbar in form view
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/formview.gif
+ |image3|
-* Bigger checkboxes in list view
+- Bigger checkboxes in list view
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/listview.gif
+ |image4|
+**Features for mobile**: \* View type picker dropdown displays
+comfortably
-**Features for mobile**:
-* View type picker dropdown displays comfortably
+- Control panel buttons use icons to save space.
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/viewtype.gif
+ |image5|
-* Control panel buttons use icons to save space.
+- Followers and send button is displayed on mobile. Avatar is hidden.
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/form_buttons.gif
+ |image6|
-* Search panel is collapsed to mobile version on small screens.
-
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/search_panel.gif
-
-* Followers and send button is displayed on mobile. Avatar is hidden.
-
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/chatter.gif
-
-* Big inputs on form in edit mode
+- Big inputs on form in edit mode
**Features for desktop computers**:
-* Keyboard shortcuts for easier navigation,
- **using `Alt + Shift + [NUM]`** combination instead of
- just `Alt + [NUM]` to avoid conflict with Firefox Tab switching.
- Standard Odoo keyboard hotkeys changed to be more intuitive or
- accessible by fingers of one hand.
- F.x. `Alt + S` for `Save`
+- Keyboard shortcuts for easier navigation, **using \`Alt + Shift +
+ [NUM]\`** combination instead of just Alt + [NUM] to avoid conflict
+ with Firefox Tab switching. Standard Odoo keyboard hotkeys changed to
+ be more intuitive or accessible by fingers of one hand. F.x. Alt + S
+ for Save
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/shortcuts.gif
+ |image7|
-* Autofocus on search menu box when opening the app menu
+- Autofocus on search menu box when opening the app menu
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/appsearch.gif
+ |image8|
-* Full width form sheets
+- When the chatter is on the side part, the document viewer fills that
+ part for side-by-side reading instead of full screen. You can still
+ put it on full width preview clicking on the new maximize button.
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/formview.gif
+ |image9|
-* When the chatter is on the side part, the document viewer fills that
- part for side-by-side reading instead of full screen. You can still put it on full
- width preview clicking on the new maximize button.
+- When the user chooses to send a public message the color of the
+ composer is different from the one when the message is an internal
+ log.
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/document_viewer.gif
+ |image10|
-* When the user chooses to send a public message the color of the composer is different
- from the one when the message is an internal log.
-
- .. image:: https://raw.githubusercontent.com/OCA/web/16.0/web_responsive/static/img/chatter-colors.gif
+.. |image| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/appmenu.gif
+.. |image1| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/appsearch.gif
+.. |image2| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/listview.gif
+.. |image3| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/formview.gif
+.. |image4| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/listview.gif
+.. |image5| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/form_buttons.gif
+.. |image6| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/chatter.png
+.. |image7| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/shortcuts.gif
+.. |image8| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/appsearch.gif
+.. |image9| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/document_viewer.gif
+.. |image10| image:: https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/chatter-colors.png
**Table of contents**
@@ -112,15 +113,15 @@ Usage
The following keyboard shortcuts are implemented:
-* Navigate app search results - Arrow keys
-* Choose app result - ``Enter``
-* ``Esc`` to close app drawer
+- Navigate app search results - Arrow keys
+- Choose app result - ``Enter``
+- ``Esc`` to close app drawer
Known issues / Roadmap
======================
-* App navigation with keyboard.
-* Handle long titles on forms in a better way
+- App navigation with keyboard.
+- Handle long titles on forms in a better way
Bug Tracker
===========
@@ -128,7 +129,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -136,7 +137,7 @@ Credits
=======
Authors
-~~~~~~~
+-------
* LasLabs
* Tecnativa
@@ -144,22 +145,33 @@ Authors
* Onestein
Contributors
-~~~~~~~~~~~~
+------------
-* Dave Lasley
-* Jairo Llopis
-* `Onestein `_:
- * Dennis Sluijk
- * Anjeel Haria
-* Sergio Teruel
-* Alexandre Díaz
-* Mathias Markl
-* Iván Todorovich
-* Sergey Shebanin
-* David Vidal
+- Dave Lasley
+
+- Jairo Llopis
+
+- `Onestein `__:
+
+ - Dennis Sluijk
+ - Anjeel Haria
+
+- Sergio Teruel
+
+- Alexandre Díaz
+
+- Mathias Markl
+
+- Iván Todorovich
+
+- Sergey Shebanin
+
+- David Vidal
+
+- Taras Shabaranskyi
Maintainers
-~~~~~~~~~~~
+-----------
This module is maintained by the OCA.
@@ -185,6 +197,6 @@ Current `maintainers `__:
|maintainer-Yajo| |maintainer-Tardo| |maintainer-SplashS|
-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_responsive/__init__.py b/web_responsive/__init__.py
index e69de29bb..f115f756a 100644
--- a/web_responsive/__init__.py
+++ b/web_responsive/__init__.py
@@ -0,0 +1,4 @@
+# Copyright 2023 Taras Shabaranskyi
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+from . import models
diff --git a/web_responsive/__manifest__.py b/web_responsive/__manifest__.py
index ee217d38a..1fbbdad44 100644
--- a/web_responsive/__manifest__.py
+++ b/web_responsive/__manifest__.py
@@ -3,12 +3,13 @@
# Copyright 2018-2019 Tecnativa - Alexandre Díaz
# Copyright 2021 ITerra - Sergey Shebanin
# Copyright 2023 Onestein - Anjeel Haria
+# Copyright 2023 Taras Shabaranskyi
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
{
"name": "Web Responsive",
"summary": "Responsive web client, community-supported",
- "version": "16.0.1.2.3",
+ "version": "17.0.1.0.0",
"category": "Website",
"website": "https://github.com/OCA/web",
"author": "LasLabs, Tecnativa, ITerra, Onestein, "
@@ -19,35 +20,45 @@
"development_status": "Production/Stable",
"maintainers": ["Yajo", "Tardo", "SplashS"],
"excludes": ["web_enterprise"],
- "data": ["views/web.xml"],
+ "data": [
+ "views/res_users_views.xml",
+ ],
"assets": {
+ "web._assets_primary_variables": {
+ "/web_responsive/static/src/legacy/scss/form_variable.scss",
+ "/web_responsive/static/src/legacy/scss/primary_variable.scss",
+ },
"web.assets_backend": [
- "/web_responsive/static/src/views/form/form_controller.esm.js",
+ "web_responsive/static/src/lib/fuse/fuse.basic.min.js",
"/web_responsive/static/src/legacy/scss/web_responsive.scss",
- "/web_responsive/static/src/legacy/js/web_responsive.js",
- "/web_responsive/static/src/components/ui_context.esm.js",
- "/web_responsive/static/src/components/apps_menu/apps_menu.scss",
- "/web_responsive/static/src/components/apps_menu/apps_menu.esm.js",
- "/web_responsive/static/src/components/control_panel/control_panel.scss",
- "/web_responsive/static/src/components/control_panel/control_panel.esm.js",
- "/web_responsive/static/src/components/search_panel/search_panel.scss",
- "/web_responsive/static/src/components/search_panel/search_panel.esm.js",
- "/web_responsive/static/src/components/hotkey/hotkey.scss",
+ "/web_responsive/static/src/legacy/scss/big_boxes.scss",
+ "/web_responsive/static/src/legacy/scss/list_sticky_header.scss",
+ "/web_responsive/static/src/legacy/js/web_responsive.esm.js",
"/web_responsive/static/src/legacy/xml/form_buttons.xml",
- "/web_responsive/static/src/components/apps_menu/apps_menu.xml",
- "/web_responsive/static/src/components/control_panel/control_panel.xml",
- "/web_responsive/static/src/components/search_panel/search_panel.xml",
- "/web_responsive/static/src/components/hotkey/hotkey.xml",
- "/web_responsive/static/src/components/chatter_topbar/chatter_topbar.esm.js",
- "/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml",
- "/web_responsive/static/src/components/attachment_viewer/attachment_viewer.scss",
- "/web_responsive/static/src/components/attachment_viewer/attachment_viewer.esm.js",
- "/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml",
+ "/web_responsive/static/src/legacy/xml/custom_favorite_item.xml",
+ "/web_responsive/static/src/components/apps_menu_tools.esm.js",
+ "/web_responsive/static/src/components/apps_menu/*",
+ "/web_responsive/static/src/components/apps_menu_item/*",
+ "/web_responsive/static/src/components/menu_canonical_searchbar/*",
+ "/web_responsive/static/src/components/menu_odoo_searchbar/*",
+ "/web_responsive/static/src/components/menu_fuse_searchbar/*",
+ "/web_responsive/static/src/components/menu_searchbar/*",
+ "/web_responsive/static/src/components/hotkey/*",
+ "/web_responsive/static/src/components/file_viewer/*",
+ "/web_responsive/static/src/components/chatter/*",
+ "/web_responsive/static/src/components/control_panel/*",
+ "/web_responsive/static/src/components/command_palette/*",
"/web_responsive/static/src/views/form/form_controller.scss",
+ "/web_responsive/static/src/views/form/status_bar_buttons.xml",
+ "/web_responsive/static/src/views/form/form_statusbar.scss",
],
"web.assets_tests": [
"/web_responsive/static/tests/test_patch.js",
],
+ "web.qunit_suite_tests": [
+ "/web_responsive/static/tests/apps_menu_tests.esm.js",
+ "/web_responsive/static/tests/apps_menu_search_tests.esm.js",
+ ],
},
"sequence": 1,
}
diff --git a/web_responsive/i18n/uk_UA.po b/web_responsive/i18n/uk_UA.po
new file mode 100644
index 000000000..20b265b55
--- /dev/null
+++ b/web_responsive/i18n/uk_UA.po
@@ -0,0 +1,105 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web_responsive
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0-20231123\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-11-25 15:27+0000\n"
+"PO-Revision-Date: 2023-11-25 15:27+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/views/form/status_bar_buttons.xml:0
+#, python-format
+msgid "Action"
+msgstr ""
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/apps_menu_searchbar/apps_menu_searchbar.xml:0
+#, python-format
+msgid "App Icon"
+msgstr ""
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
+#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
+#, python-format
+msgid "Discard"
+msgstr ""
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
+#, python-format
+msgid "Home Menu"
+msgstr "Головне меню"
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
+#, python-format
+msgid "Log note"
+msgstr ""
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
+#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
+#, python-format
+msgid "Maximize"
+msgstr "Збільшити"
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
+#: code:addons/web_responsive/static/src/components/file_viewer/file_viewer.xml:0
+#, python-format
+msgid "Minimize"
+msgstr "Згорнути"
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
+#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
+#, python-format
+msgid "New"
+msgstr "Новий"
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/apps_menu_searchbar/apps_menu_searchbar.xml:0
+#, python-format
+msgid "Nothing to show"
+msgstr "Нема чого показати"
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
+#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
+#, python-format
+msgid "Save"
+msgstr "Зберегти"
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/apps_menu_searchbar/apps_menu_searchbar.xml:0
+#, python-format
+msgid "Search menus..."
+msgstr "Пошук..."
+
+#. module: web_responsive
+#. odoo-javascript
+#: code:addons/web_responsive/static/src/components/chatter/chatter.xml:0
+#, python-format
+msgid "Send message"
+msgstr "Надіслати повідомлення"
diff --git a/web_responsive/models/__init__.py b/web_responsive/models/__init__.py
new file mode 100644
index 000000000..c6b5178dd
--- /dev/null
+++ b/web_responsive/models/__init__.py
@@ -0,0 +1,5 @@
+# Copyright 2023 Taras Shabaranskyi
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+from . import res_users
+from . import ir_http
diff --git a/web_responsive/models/ir_http.py b/web_responsive/models/ir_http.py
new file mode 100644
index 000000000..98fff28ac
--- /dev/null
+++ b/web_responsive/models/ir_http.py
@@ -0,0 +1,19 @@
+# Copyright 2023 Taras Shabaranskyi
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+from odoo import models
+
+
+class IrHttp(models.AbstractModel):
+ _inherit = "ir.http"
+
+ def session_info(self):
+ session = super().session_info()
+ user = self.env.user
+ return {
+ **session,
+ "apps_menu": {
+ "search_type": user.apps_menu_search_type,
+ "theme": user.apps_menu_theme,
+ },
+ }
diff --git a/web_responsive/models/res_users.py b/web_responsive/models/res_users.py
new file mode 100644
index 000000000..7b67ccaaa
--- /dev/null
+++ b/web_responsive/models/res_users.py
@@ -0,0 +1,26 @@
+# Copyright 2023 Taras Shabaranskyi
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+
+from odoo import fields, models
+
+
+class ResUsers(models.Model):
+ _inherit = "res.users"
+
+ apps_menu_search_type = fields.Selection(
+ [
+ ("canonical", "Canonical"),
+ ("fuse", "Fuse"),
+ ("command_palette", "Command Palette"),
+ ],
+ default="canonical",
+ required=True,
+ )
+ apps_menu_theme = fields.Selection(
+ [
+ ("milk", "Milk"),
+ ("community", "Community"),
+ ],
+ default="milk",
+ required=True,
+ )
diff --git a/web_responsive/pyproject.toml b/web_responsive/pyproject.toml
new file mode 100644
index 000000000..4231d0ccc
--- /dev/null
+++ b/web_responsive/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/web_responsive/readme/CONTRIBUTORS.md b/web_responsive/readme/CONTRIBUTORS.md
new file mode 100644
index 000000000..dc659b2fa
--- /dev/null
+++ b/web_responsive/readme/CONTRIBUTORS.md
@@ -0,0 +1,21 @@
+- Dave Lasley \<\>
+
+- Jairo Llopis \<\>
+
+- [Onestein](https://www.onestein.nl):
+ - Dennis Sluijk \<\>
+ - Anjeel Haria
+
+- Sergio Teruel \<\>
+
+- Alexandre Díaz \<\>
+
+- Mathias Markl \<\>
+
+- Iván Todorovich \<\>
+
+- Sergey Shebanin \<\>
+
+- David Vidal \<\>
+
+- Taras Shabaranskyi \<\>
diff --git a/web_responsive/readme/CONTRIBUTORS.rst b/web_responsive/readme/CONTRIBUTORS.rst
deleted file mode 100644
index ade0547bc..000000000
--- a/web_responsive/readme/CONTRIBUTORS.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-* Dave Lasley
-* Jairo Llopis
-* `Onestein `_:
- * Dennis Sluijk
- * Anjeel Haria
-* Sergio Teruel
-* Alexandre Díaz
-* Mathias Markl
-* Iván Todorovich
-* Sergey Shebanin
-* David Vidal
diff --git a/web_responsive/readme/DESCRIPTION.md b/web_responsive/readme/DESCRIPTION.md
new file mode 100644
index 000000000..d7e22a902
--- /dev/null
+++ b/web_responsive/readme/DESCRIPTION.md
@@ -0,0 +1,62 @@
+This module adds responsiveness to web backend.
+
+**Features for all devices**:
+
+- New navigation with the fullscreen app menu
+
+ 
+
+- Quick menu search inside the app menu
+
+ 
+
+- Sticky header & footer in list view
+
+ 
+
+- Sticky statusbar in form view
+
+ 
+
+- Bigger checkboxes in list view
+
+ 
+
+**Features for mobile**: \* View type picker dropdown displays
+comfortably
+
+- Control panel buttons use icons to save space.
+
+ 
+
+- Followers and send button is displayed on mobile. Avatar is hidden.
+
+ 
+
+- Big inputs on form in edit mode
+
+**Features for desktop computers**:
+
+- Keyboard shortcuts for easier navigation, **using \`Alt + Shift +
+ \[NUM\]\`** combination instead of just Alt + \[NUM\] to avoid
+ conflict with Firefox Tab switching. Standard Odoo keyboard hotkeys
+ changed to be more intuitive or accessible by fingers of one hand.
+ F.x. Alt + S for Save
+
+ 
+
+- Autofocus on search menu box when opening the app menu
+
+ 
+
+- When the chatter is on the side part, the document viewer fills that
+ part for side-by-side reading instead of full screen. You can still
+ put it on full width preview clicking on the new maximize button.
+
+ 
+
+- When the user chooses to send a public message the color of the
+ composer is different from the one when the message is an internal
+ log.
+
+ 
diff --git a/web_responsive/readme/DESCRIPTION.rst b/web_responsive/readme/DESCRIPTION.rst
deleted file mode 100644
index f4f800de4..000000000
--- a/web_responsive/readme/DESCRIPTION.rst
+++ /dev/null
@@ -1,73 +0,0 @@
-This module adds responsiveness to web backend.
-
-**Features for all devices**:
-
-* New navigation with the fullscreen app menu
-
- .. image:: ../static/img/appmenu.gif
-
-* Quick menu search inside the app menu
-
- .. image:: ../static/img/appsearch.gif
-
-* Sticky header & footer in list view
-
- .. image:: ../static/img/listview.gif
-
-* Sticky statusbar in form view
-
- .. image:: ../static/img/formview.gif
-
-* Bigger checkboxes in list view
-
- .. image:: ../static/img/listview.gif
-
-
-**Features for mobile**:
-* View type picker dropdown displays comfortably
-
- .. image:: ../static/img/viewtype.gif
-
-* Control panel buttons use icons to save space.
-
- .. image:: ../static/img/form_buttons.gif
-
-* Search panel is collapsed to mobile version on small screens.
-
- .. image:: ../static/img/search_panel.gif
-
-* Followers and send button is displayed on mobile. Avatar is hidden.
-
- .. image:: ../static/img/chatter.gif
-
-* Big inputs on form in edit mode
-
-**Features for desktop computers**:
-
-* Keyboard shortcuts for easier navigation,
- **using `Alt + Shift + [NUM]`** combination instead of
- just `Alt + [NUM]` to avoid conflict with Firefox Tab switching.
- Standard Odoo keyboard hotkeys changed to be more intuitive or
- accessible by fingers of one hand.
- F.x. `Alt + S` for `Save`
-
- .. image:: ../static/img/shortcuts.gif
-
-* Autofocus on search menu box when opening the app menu
-
- .. image:: ../static/img/appsearch.gif
-
-* Full width form sheets
-
- .. image:: ../static/img/formview.gif
-
-* When the chatter is on the side part, the document viewer fills that
- part for side-by-side reading instead of full screen. You can still put it on full
- width preview clicking on the new maximize button.
-
- .. image:: ../static/img/document_viewer.gif
-
-* When the user chooses to send a public message the color of the composer is different
- from the one when the message is an internal log.
-
- .. image:: ../static/img/chatter-colors.gif
diff --git a/web_responsive/readme/ROADMAP.md b/web_responsive/readme/ROADMAP.md
new file mode 100644
index 000000000..5772fcad3
--- /dev/null
+++ b/web_responsive/readme/ROADMAP.md
@@ -0,0 +1,2 @@
+- App navigation with keyboard.
+- Handle long titles on forms in a better way
diff --git a/web_responsive/readme/ROADMAP.rst b/web_responsive/readme/ROADMAP.rst
deleted file mode 100644
index f27d826e4..000000000
--- a/web_responsive/readme/ROADMAP.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-* App navigation with keyboard.
-* Handle long titles on forms in a better way
diff --git a/web_responsive/readme/USAGE.md b/web_responsive/readme/USAGE.md
new file mode 100644
index 000000000..4b2b6b3cc
--- /dev/null
+++ b/web_responsive/readme/USAGE.md
@@ -0,0 +1,5 @@
+The following keyboard shortcuts are implemented:
+
+- Navigate app search results - Arrow keys
+- Choose app result - `Enter`
+- `Esc` to close app drawer
diff --git a/web_responsive/readme/USAGE.rst b/web_responsive/readme/USAGE.rst
deleted file mode 100644
index ef87cbe59..000000000
--- a/web_responsive/readme/USAGE.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-The following keyboard shortcuts are implemented:
-
-* Navigate app search results - Arrow keys
-* Choose app result - ``Enter``
-* ``Esc`` to close app drawer
diff --git a/web_responsive/static/description/index.html b/web_responsive/static/description/index.html
index 99b5a2334..94d762b35 100644
--- a/web_responsive/static/description/index.html
+++ b/web_responsive/static/description/index.html
@@ -369,68 +369,59 @@ ul.auto-toc {
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:9b3ae1467041b443396d6062ed0af40d96c2fa5e97cbce6b17e7daa93a3ee53f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module adds responsiveness to web backend.
Features for all devices:
New navigation with the fullscreen app menu
-
+
Quick menu search inside the app menu
-
+
Sticky header & footer in list view
-
+
Sticky statusbar in form view
-
+
Bigger checkboxes in list view
-
+
-Features for mobile:
-* View type picker dropdown displays comfortably
-
-
-
+Features for mobile: * View type picker dropdown displays
+comfortably
Control panel buttons use icons to save space.
-
-
-Search panel is collapsed to mobile version on small screens.
-
+
Followers and send button is displayed on mobile. Avatar is hidden.
-
+
Big inputs on form in edit mode
Features for desktop computers:
-Keyboard shortcuts for easier navigation,
-using `Alt + Shift + [NUM]` combination instead of
-just Alt + [NUM] to avoid conflict with Firefox Tab switching.
-Standard Odoo keyboard hotkeys changed to be more intuitive or
-accessible by fingers of one hand.
-F.x. Alt + S for Save
-
+Keyboard shortcuts for easier navigation, using `Alt + Shift +
+[NUM]` combination instead of just Alt + [NUM] to avoid conflict
+with Firefox Tab switching. Standard Odoo keyboard hotkeys changed to
+be more intuitive or accessible by fingers of one hand. F.x. Alt + S
+for Save
+
Autofocus on search menu box when opening the app menu
-
-
-Full width form sheets
-
+
When the chatter is on the side part, the document viewer fills that
-part for side-by-side reading instead of full screen. You can still put it on full
-width preview clicking on the new maximize button.
-
+part for side-by-side reading instead of full screen. You can still
+put it on full width preview clicking on the new maximize button.
+
-When the user chooses to send a public message the color of the composer is different
-from the one when the message is an internal log.
-
+When the user chooses to send a public message the color of the
+composer is different from the one when the message is an internal
+log.
+
Table of contents
@@ -468,7 +459,7 @@ from the one when the message is an internal log.
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -487,14 +478,10 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
@@ -513,7 +501,7 @@ mission is to support the collaborative development of Odoo features and
promote its widespread use.
Current maintainers:

-
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_responsive/static/img/appmenu.gif b/web_responsive/static/img/appmenu.gif
index 6973682420b4f6c790a0897f9b015c9df4d301a2..9cb67bf1ed95274f42d75a09ffc2dbb2a427f350 100644
GIT binary patch
literal 394447
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