|
@ -0,0 +1,202 @@
|
|||
==============
|
||||
Web Responsive
|
||||
==============
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:9b3ae1467041b443396d6062ed0af40d96c2fa5e97cbce6b17e7daa93a3ee53f
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Production/Stable
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
|
||||
: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/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-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=17.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module adds responsiveness to web backend.
|
||||
|
||||
**Features for all devices**:
|
||||
|
||||
- New navigation with the fullscreen app menu
|
||||
|
||||
|image|
|
||||
|
||||
- Quick menu search inside the app menu
|
||||
|
||||
|image1|
|
||||
|
||||
- Sticky header & footer in list view
|
||||
|
||||
|image2|
|
||||
|
||||
- Sticky statusbar in form view
|
||||
|
||||
|image3|
|
||||
|
||||
- Bigger checkboxes in list view
|
||||
|
||||
|image4|
|
||||
|
||||
**Features for mobile**: \* View type picker dropdown displays
|
||||
comfortably
|
||||
|
||||
- Control panel buttons use icons to save space.
|
||||
|
||||
|image5|
|
||||
|
||||
- Followers and send button is displayed on mobile. Avatar is hidden.
|
||||
|
||||
|image6|
|
||||
|
||||
- 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
|
||||
|
||||
|image7|
|
||||
|
||||
- Autofocus on search menu box when opening the app menu
|
||||
|
||||
|image8|
|
||||
|
||||
- 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.
|
||||
|
||||
|image9|
|
||||
|
||||
- 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.
|
||||
|
||||
|image10|
|
||||
|
||||
.. |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**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
The following keyboard shortcuts are implemented:
|
||||
|
||||
- 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
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/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 <https://github.com/OCA/web/issues/new?body=module:%20web_responsive%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* LasLabs
|
||||
* Tecnativa
|
||||
* ITerra
|
||||
* Onestein
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
- Dave Lasley <dave@laslabs.com>
|
||||
|
||||
- Jairo Llopis <jairo.llopis@tecnativa.com>
|
||||
|
||||
- `Onestein <https://www.onestein.nl>`__:
|
||||
|
||||
- Dennis Sluijk <d.sluijk@onestein.nl>
|
||||
- Anjeel Haria
|
||||
|
||||
- Sergio Teruel <sergio.teruel@tecnativa.com>
|
||||
|
||||
- Alexandre Díaz <dev@redneboa.es>
|
||||
|
||||
- Mathias Markl <mathias.markl@mukit.at>
|
||||
|
||||
- Iván Todorovich <ivan.todorovich@gmail.com>
|
||||
|
||||
- Sergey Shebanin <sergey@shebanin.ru>
|
||||
|
||||
- David Vidal <david.vidal@tecnativa.com>
|
||||
|
||||
- Taras Shabaranskyi <shabaranskij@gmail.com>
|
||||
|
||||
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.
|
||||
|
||||
.. |maintainer-Yajo| image:: https://github.com/Yajo.png?size=40px
|
||||
:target: https://github.com/Yajo
|
||||
:alt: Yajo
|
||||
.. |maintainer-Tardo| image:: https://github.com/Tardo.png?size=40px
|
||||
:target: https://github.com/Tardo
|
||||
:alt: Tardo
|
||||
.. |maintainer-SplashS| image:: https://github.com/SplashS.png?size=40px
|
||||
:target: https://github.com/SplashS
|
||||
:alt: SplashS
|
||||
|
||||
Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-Yajo| |maintainer-Tardo| |maintainer-SplashS|
|
||||
|
||||
This module is part of the `OCA/web <https://github.com/OCA/web/tree/17.0/web_responsive>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
|
@ -0,0 +1,4 @@
|
|||
# Copyright 2023 Taras Shabaranskyi
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
||||
|
||||
from . import models
|
|
@ -0,0 +1,64 @@
|
|||
# Copyright 2016-2017 LasLabs Inc.
|
||||
# Copyright 2017-2018 Tecnativa - Jairo Llopis
|
||||
# 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": "17.0.1.0.0",
|
||||
"category": "Website",
|
||||
"website": "https://github.com/OCA/web",
|
||||
"author": "LasLabs, Tecnativa, ITerra, Onestein, "
|
||||
"Odoo Community Association (OCA)",
|
||||
"license": "LGPL-3",
|
||||
"installable": True,
|
||||
"depends": ["web", "mail"],
|
||||
"development_status": "Production/Stable",
|
||||
"maintainers": ["Yajo", "Tardo", "SplashS"],
|
||||
"excludes": ["web_enterprise"],
|
||||
"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/lib/fuse/fuse.basic.min.js",
|
||||
"/web_responsive/static/src/legacy/scss/web_responsive.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/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,
|
||||
}
|
|
@ -0,0 +1,191 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2020-11-07 15:08+0000\n"
|
||||
"Last-Translator: Waleed Mohsen <Mohsen.Waleed@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ar\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 3.10\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "تكبير"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_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
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "بحث في القوائم..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "إنشاء"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "موقع الدردشة"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "تعديل"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "عادي"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "اجراءات سريعة"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "جانبي"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "المستخدمون"
|
||||
|
||||
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "إغلاق"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
|
||||
#~ "none"
|
||||
#~ msgstr ""
|
||||
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
|
||||
#~ "none"
|
||||
|
||||
#~ msgid "false"
|
||||
#~ msgstr "false"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
||||
#~ msgstr ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
|
@ -0,0 +1,175 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2020-02-02 22:13+0000\n"
|
||||
"Last-Translator: eduardgm <eduard.garcia@qubiq.es>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ca\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 3.10\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Descartar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Maximitzar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Minimitzar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Cercar menús..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Crear"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Posició del chatter"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Editar"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Accions ràpides"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Lateral"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Usuaris"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "Tancar"
|
||||
|
||||
#~ msgid "false"
|
||||
#~ msgstr "fals"
|
|
@ -0,0 +1,172 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 11.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2018-09-02 05:11+0000\n"
|
||||
"Last-Translator: Hans Henrik Gabelgaard <hhg@gabelgaard.org>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: da\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 3.1.1\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_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
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Log position"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Side"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Brugere"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">Skift App skuffe</span>"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">Skift navigation</span>"
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Applikationer"
|
||||
|
||||
#~ msgid "More"
|
||||
#~ msgstr "Mere"
|
||||
|
||||
#~ msgid "More <b class=\"caret\"/>"
|
||||
#~ msgstr "Mere <b class=\"caret\"/>"
|
||||
|
||||
#~ msgid "Task"
|
||||
#~ msgstr "Opgave"
|
|
@ -0,0 +1,187 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
# Translators:
|
||||
# Niki Waibel <niki.waibel@gmail.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-02-03 01:37+0000\n"
|
||||
"PO-Revision-Date: 2023-06-20 11:09+0000\n"
|
||||
"Last-Translator: Nils Coenen <nils.coenen@nico-solutions.de>\n"
|
||||
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\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.17\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr "Aktivitäten"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Alles"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr "Anhangszähler wird geladen..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr "Anhänge"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "LÖSCHEN"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Verwerfen"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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 "Home-Menü"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr "Protokollnotiz"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "maximieren"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "minimieren"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr "Neu"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "SIEHE ERGEBNIS"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Such-Menüs..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Suche..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr "Nachricht senden"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Ansichtsumschalter"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Erstellen"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Chatter-Position"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Ändern"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "normal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Schnell-Aktion"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Seitlich"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Benutzer"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "Schließen"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">App Ordner umschalten</span>"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">Navigation umschalten</span>"
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Apps"
|
||||
|
||||
#~ msgid "More <b class=\"caret\"/>"
|
||||
#~ msgstr "Mehr <b class=\"caret\"/>"
|
|
@ -0,0 +1,196 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
# Translators:
|
||||
# Pedro M. Baeza <pedro.baeza@gmail.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-01-10 10:49+0000\n"
|
||||
"PO-Revision-Date: 2023-09-20 17:50+0000\n"
|
||||
"Last-Translator: kikopeiro <francisco.peiro@factorlibre.com>\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.17\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Todos"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr "Carga del contador de archivos adjuntos..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr "Archivos adjuntos"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "LIMPIAR"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Descartar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
msgstr "FILTRAR"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Home Menu"
|
||||
msgstr "Menú de Inicio"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr "Nota de registro"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr "Nuevo"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "VER RESULTADO"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Buscar menús..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Búsqueda..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr "Enviar mensaje"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Vista del conmutador"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Crear"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Posición del chatter"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Editar"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Acciones rápidas"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Lateral"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Usuarios"
|
||||
|
||||
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "Cerrar"
|
||||
|
||||
#~ msgid "Shift"
|
||||
#~ msgstr "Turno"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
|
||||
#~ "none"
|
||||
#~ msgstr ""
|
||||
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
|
||||
#~ "none"
|
||||
|
||||
#~ msgid "false"
|
||||
#~ msgstr "falso"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
||||
#~ msgstr ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
|
@ -0,0 +1,195 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 12.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2023-03-13 14:23+0000\n"
|
||||
"Last-Translator: Rémi <remi@le-filament.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: fr\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.14.1\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr "Activités"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Tout"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr "Chargement du compteur de pièces jointes..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr "Pièces Jointes"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "NETTOYER"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Annuler"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
msgstr "FILTRER"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Home Menu"
|
||||
msgstr "Menu d’accueil"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr "Enregistrer une note"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Maximiser"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Minimiser"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "VOIR RÉSULTAT"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Enregistrer"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Rechercher dans les menus..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Rechercher…"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr "Envoyer un message"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Bascule de vue"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Créer"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Position de la messagerie"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Nettoyer"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Editer"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Actions rapides"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "À coté"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Today"
|
||||
#~ msgstr "Aujourd’hui"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Undefined"
|
||||
#~ msgstr "Non défini"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Utilisateurs"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "props.withAccessKey ? 'x' : false"
|
||||
#~ msgstr "props.withAccessKey ? 'x' : false"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "props.withAccessKey ? 'z' : false"
|
||||
#~ msgstr "props.withAccessKey ? 'z' : false"
|
||||
|
||||
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "Fermer"
|
|
@ -0,0 +1,169 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2021-04-11 18:46+0000\n"
|
||||
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: fr_FR\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_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Annuler"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Maximiser"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Minimiser"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Sauvegarder"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Rechercher dans les menus..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Créer"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Position du Chatter"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Editer"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Actions rapides"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "À coté"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Utilisateurs"
|
|
@ -0,0 +1,161 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
# Translators:
|
||||
# Bole <bole@dajmi5.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-28 18:03+0000\n"
|
||||
"PO-Revision-Date: 2023-04-03 13:22+0000\n"
|
||||
"Last-Translator: Bole <bole@dajmi5.com>\n"
|
||||
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
|
||||
"Language: hr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr "Aktivnosti"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Sve"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr "Učitavam brojač priloga..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr "Prilozi"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "OČISTI"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Odustani"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
msgstr "TRAŽI"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Home Menu"
|
||||
msgstr "Glavni izbornik"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr "Zabilježi napomenu"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Maksimiziraj"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Minimiziraj"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr "Novi"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "VIDI REZULTAT"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Spremi"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Pretraži izbornike..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Pretraži..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr "Pošalji poruku"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Izmjena pogleda"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">Izmjeni izbornik aplikacije</span>"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">Izmjeni navigaciju</span>"
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Apikacije"
|
||||
|
||||
#~ msgid "More <b class=\"caret\"/>"
|
||||
#~ msgstr "Više <b class=\"caret\"/>"
|
|
@ -0,0 +1,183 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 13.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2021-05-17 20:47+0000\n"
|
||||
"Last-Translator: Bosd <c5e2fd43-d292-4c90-9d1f-74ff3436329a@anonaddy.me>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: nl\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_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Negeren"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Maximaliseren"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Minimaliseren"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Opslaan"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Zoek menu's..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Aanmaken"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Chatter Positie"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Bewerken"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normaal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Snelle Acties"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Aan de zijkant"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Gebruikers"
|
||||
|
||||
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "Sluit"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Shift"
|
||||
#~ msgstr "Shift"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "false"
|
||||
#~ msgstr "false"
|
|
@ -0,0 +1,185 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 15.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2022-08-08 23:07+0000\n"
|
||||
"Last-Translator: Jacek Michalski <michalski.jck@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.3.2\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Wszystkie"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "WYCZYŚĆ"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Odrzuć"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
msgstr "FILTRUJ"
|
||||
|
||||
#. 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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Zmaksymalizuj"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Zminimalizuj"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "ZOBACZ WYNIK"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Zapisz"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Przeszukaj menu..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Szukaj..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Przełącznik widoku"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Utwórz"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Pozycja Czatu"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Clear"
|
||||
#~ msgstr "Wyczyść"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Edytuj"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normalna"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Szybkie akcje"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Z boku"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Today"
|
||||
#~ msgstr "Dzisiaj"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Undefined"
|
||||
#~ msgstr "Niezdefiniowane"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Użytkownicy"
|
||||
|
||||
#~ msgid "fade"
|
||||
#~ msgstr "wygasanie"
|
|
@ -0,0 +1,169 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 12.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2019-08-12 11:44+0000\n"
|
||||
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: pt\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 3.7.1\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Descartar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_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
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Gravar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Procurar menus..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Criar"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Posição do Chatter"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Editar"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Ações rápidas"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Lateralizado"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Utilizadores"
|
|
@ -0,0 +1,202 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
# Translators:
|
||||
# Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatic4@gmail.com>, 2017
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-06-22 08:27+0000\n"
|
||||
"PO-Revision-Date: 2023-10-28 16:10+0000\n"
|
||||
"Last-Translator: Adriano Prado <adrianojprado@gmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/"
|
||||
"23907/pt_BR/)\n"
|
||||
"Language: pt_BR\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.17\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr "Atividades"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Tudo"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr "Carregando do contador de anexos..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr "Anexos"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "LIMPAR"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Descartar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
msgstr "FILTRAR"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Home Menu"
|
||||
msgstr "Menu Inicial"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr "Nota de Registro"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Maximizar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Minimizar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr "Novo"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "VER RESULTADO"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Pesquisar menus..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Procurar..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr "Enviar menssagem"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Ver alternador"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Criar"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Posição do Chatter"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Editar"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Normal"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Ações rápidas"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Frente e verso"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Usuários"
|
||||
|
||||
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "Fechar"
|
||||
|
||||
#~ msgid "false"
|
||||
#~ msgstr "falso"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
||||
#~ msgstr ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle App Drawer</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">Aplicativo Desenhador Alternativo</span>"
|
||||
|
||||
#~ msgid "<span class=\"sr-only\">Toggle Navigation</span>"
|
||||
#~ msgstr "<span class=\"sr-only\">Navegação Alternativa</span>"
|
||||
|
||||
#~ msgid "Apps"
|
||||
#~ msgstr "Aplicativos"
|
||||
|
||||
#~ msgid "HTTP routing"
|
||||
#~ msgstr "roteamento HTTP"
|
||||
|
||||
#~ msgid "More <b class=\"caret\"/>"
|
||||
#~ msgstr "Mais <b class=\"caret\"/>"
|
|
@ -0,0 +1,181 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2021-03-31 16:36+0000\n"
|
||||
"Last-Translator: SplashS <sergey@shebanin.ru>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: ru\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.3.2\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Все"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "Очистить"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Увеличить"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_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
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "Применить"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Поиск по меню..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Поиск..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Сменить вид"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Создать"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "Расположение Чата"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "Править"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "Снизу"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "Действия"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "Справа"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Today"
|
||||
#~ msgstr "Сегодня"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Undefined"
|
||||
#~ msgstr "Не определено"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "Пользователи"
|
||||
|
||||
#~ msgid "Display Name"
|
||||
#~ msgstr "Видимое имя"
|
|
@ -0,0 +1,149 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 15.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2023-03-07 08:01+0000\n"
|
||||
"Last-Translator: Ediz Duman <neps1192@gmail.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: tr\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.14.1\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr "Hepsi"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr "TEMİZLEME"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Discard"
|
||||
msgstr "Vazgeç"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
msgstr "FİLTRE"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Home Menu"
|
||||
msgstr "Ana Menü"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "Büyütme"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Minimize"
|
||||
msgstr "Küçültme"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr "SONUCU GÖR"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/legacy/xml/form_buttons.xml:0
|
||||
#, python-format
|
||||
msgid "Save"
|
||||
msgstr "Kaydet"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/apps_menu/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "Arama menüleri..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr "Arama..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr "Görüntü Değiştiriciyi"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Oluşturma"
|
|
@ -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 "Надіслати повідомлення"
|
|
@ -0,0 +1,157 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.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_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
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/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
|
@ -0,0 +1,190 @@
|
|||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * web_responsive
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 12.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2020-07-08 05:19+0000\n"
|
||||
"Last-Translator: 黎伟杰 <674416404@qq.com>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: zh_CN\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 3.10\n"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachment counter loading..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Attachments"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "CLEAR"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "FILTER"
|
||||
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_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Log note"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_viewer.xml:0
|
||||
#, python-format
|
||||
msgid "Maximize"
|
||||
msgstr "最大化"
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/attachment_viewer/attachment_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
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#: code:addons/web_responsive/static/src/components/search_panel/search_panel.xml:0
|
||||
#, python-format
|
||||
msgid "SEE RESULT"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: 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/apps_menu.xml:0
|
||||
#, python-format
|
||||
msgid "Search menus..."
|
||||
msgstr "搜索菜单..."
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/chatter_topbar/chatter_topbar.xml:0
|
||||
#, python-format
|
||||
msgid "Send message"
|
||||
msgstr ""
|
||||
|
||||
#. module: web_responsive
|
||||
#. odoo-javascript
|
||||
#: code:addons/web_responsive/static/src/components/control_panel/control_panel.xml:0
|
||||
#, python-format
|
||||
msgid "View switcher"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "创建"
|
||||
|
||||
#~ msgid "Chatter Position"
|
||||
#~ msgstr "聊天位置"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Edit"
|
||||
#~ msgstr "编辑"
|
||||
|
||||
#~ msgid "Normal"
|
||||
#~ msgstr "正常"
|
||||
|
||||
#, python-format
|
||||
#~ msgid "Quick actions"
|
||||
#~ msgstr "快捷方式"
|
||||
|
||||
#~ msgid "Sided"
|
||||
#~ msgstr "侧面"
|
||||
|
||||
#~ msgid "Users"
|
||||
#~ msgstr "用户"
|
||||
|
||||
#~ msgid "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
#~ msgstr "#menu_id=#{app.menuID}&action_id=#{app.actionID}"
|
||||
|
||||
#~ msgid "Close"
|
||||
#~ msgstr "关闭"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
|
||||
#~ "none"
|
||||
#~ msgstr ""
|
||||
#~ "btn btn-secondary o_mail_discuss_button_multi_user_channel d-md-block d-"
|
||||
#~ "none"
|
||||
|
||||
#~ msgid "false"
|
||||
#~ msgstr "false"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
||||
#~ msgstr ""
|
||||
#~ "modal o_modal_fullscreen o_document_viewer o_responsive_document_viewer"
|
|
@ -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
|
|
@ -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,
|
||||
},
|
||||
}
|
|
@ -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,
|
||||
)
|
|
@ -0,0 +1,3 @@
|
|||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
|
@ -0,0 +1,21 @@
|
|||
- Dave Lasley \<<dave@laslabs.com>\>
|
||||
|
||||
- Jairo Llopis \<<jairo.llopis@tecnativa.com>\>
|
||||
|
||||
- [Onestein](https://www.onestein.nl):
|
||||
- Dennis Sluijk \<<d.sluijk@onestein.nl>\>
|
||||
- Anjeel Haria
|
||||
|
||||
- Sergio Teruel \<<sergio.teruel@tecnativa.com>\>
|
||||
|
||||
- Alexandre Díaz \<<dev@redneboa.es>\>
|
||||
|
||||
- Mathias Markl \<<mathias.markl@mukit.at>\>
|
||||
|
||||
- Iván Todorovich \<<ivan.todorovich@gmail.com>\>
|
||||
|
||||
- Sergey Shebanin \<<sergey@shebanin.ru>\>
|
||||
|
||||
- David Vidal \<<david.vidal@tecnativa.com>\>
|
||||
|
||||
- Taras Shabaranskyi \<<shabaranskij@gmail.com>\>
|
|
@ -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.
|
||||
|
||||

|
|
@ -0,0 +1,2 @@
|
|||
- App navigation with keyboard.
|
||||
- Handle long titles on forms in a better way
|
|
@ -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
|
After Width: | Height: | Size: 9.2 KiB |
|
@ -0,0 +1,510 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Web Responsive</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: grey; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="web-responsive">
|
||||
<h1 class="title">Web Responsive</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:9b3ae1467041b443396d6062ed0af40d96c2fa5e97cbce6b17e7daa93a3ee53f
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/web/tree/17.0/web_responsive"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/web-17-0/web-17-0-web_responsive"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/web&target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module adds responsiveness to web backend.</p>
|
||||
<p><strong>Features for all devices</strong>:</p>
|
||||
<ul>
|
||||
<li><p class="first">New navigation with the fullscreen app menu</p>
|
||||
<p><img alt="image" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/appmenu.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">Quick menu search inside the app menu</p>
|
||||
<p><img alt="image1" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/appsearch.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">Sticky header & footer in list view</p>
|
||||
<p><img alt="image2" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/listview.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">Sticky statusbar in form view</p>
|
||||
<p><img alt="image3" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/formview.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">Bigger checkboxes in list view</p>
|
||||
<p><img alt="image4" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/listview.gif" /></p>
|
||||
</li>
|
||||
</ul>
|
||||
<p><strong>Features for mobile</strong>: * View type picker dropdown displays
|
||||
comfortably</p>
|
||||
<ul>
|
||||
<li><p class="first">Control panel buttons use icons to save space.</p>
|
||||
<p><img alt="image5" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/form_buttons.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">Followers and send button is displayed on mobile. Avatar is hidden.</p>
|
||||
<p><img alt="image6" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/chatter.png" /></p>
|
||||
</li>
|
||||
<li><p class="first">Big inputs on form in edit mode</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p><strong>Features for desktop computers</strong>:</p>
|
||||
<ul>
|
||||
<li><p class="first">Keyboard shortcuts for easier navigation, <strong>using `Alt + Shift +
|
||||
[NUM]`</strong> 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</p>
|
||||
<p><img alt="image7" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/shortcuts.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">Autofocus on search menu box when opening the app menu</p>
|
||||
<p><img alt="image8" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/appsearch.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">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.</p>
|
||||
<p><img alt="image9" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/document_viewer.gif" /></p>
|
||||
</li>
|
||||
<li><p class="first">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.</p>
|
||||
<p><img alt="image10" src="https://raw.githubusercontent.com/OCA/web/17.0/web_responsive/static/img/chatter-colors.png" /></p>
|
||||
</li>
|
||||
</ul>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
|
||||
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-2">Known issues / Roadmap</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
|
||||
<p>The following keyboard shortcuts are implemented:</p>
|
||||
<ul class="simple">
|
||||
<li>Navigate app search results - Arrow keys</li>
|
||||
<li>Choose app result - <tt class="docutils literal">Enter</tt></li>
|
||||
<li><tt class="docutils literal">Esc</tt> to close app drawer</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="known-issues-roadmap">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h1>
|
||||
<ul class="simple">
|
||||
<li>App navigation with keyboard.</li>
|
||||
<li>Handle long titles on forms in a better way</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/web/issues">GitHub Issues</a>.
|
||||
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
|
||||
<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_responsive%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>LasLabs</li>
|
||||
<li>Tecnativa</li>
|
||||
<li>ITerra</li>
|
||||
<li>Onestein</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Dave Lasley <<a class="reference external" href="mailto:dave@laslabs.com">dave@laslabs.com</a>></li>
|
||||
<li>Jairo Llopis <<a class="reference external" href="mailto:jairo.llopis@tecnativa.com">jairo.llopis@tecnativa.com</a>></li>
|
||||
<li><a class="reference external" href="https://www.onestein.nl">Onestein</a>:<ul>
|
||||
<li>Dennis Sluijk <<a class="reference external" href="mailto:d.sluijk@onestein.nl">d.sluijk@onestein.nl</a>></li>
|
||||
<li>Anjeel Haria</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Sergio Teruel <<a class="reference external" href="mailto:sergio.teruel@tecnativa.com">sergio.teruel@tecnativa.com</a>></li>
|
||||
<li>Alexandre Díaz <<a class="reference external" href="mailto:dev@redneboa.es">dev@redneboa.es</a>></li>
|
||||
<li>Mathias Markl <<a class="reference external" href="mailto:mathias.markl@mukit.at">mathias.markl@mukit.at</a>></li>
|
||||
<li>Iván Todorovich <<a class="reference external" href="mailto:ivan.todorovich@gmail.com">ivan.todorovich@gmail.com</a>></li>
|
||||
<li>Sergey Shebanin <<a class="reference external" href="mailto:sergey@shebanin.ru">sergey@shebanin.ru</a>></li>
|
||||
<li>David Vidal <<a class="reference external" href="mailto:david.vidal@tecnativa.com">david.vidal@tecnativa.com</a>></li>
|
||||
<li>Taras Shabaranskyi <<a class="reference external" href="mailto:shabaranskij@gmail.com">shabaranskij@gmail.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
|
||||
<p>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.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainers</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/Yajo"><img alt="Yajo" src="https://github.com/Yajo.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/Tardo"><img alt="Tardo" src="https://github.com/Tardo.png?size=40px" /></a> <a class="reference external image-reference" href="https://github.com/SplashS"><img alt="SplashS" src="https://github.com/SplashS.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/17.0/web_responsive">OCA/web</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
After Width: | Height: | Size: 385 KiB |
After Width: | Height: | Size: 294 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 53 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 452 KiB |
After Width: | Height: | Size: 175 KiB |
After Width: | Height: | Size: 9.6 KiB |
After Width: | Height: | Size: 64 KiB |
After Width: | Height: | Size: 516 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 205 KiB |
After Width: | Height: | Size: 428 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 837 KiB |
After Width: | Height: | Size: 128 KiB |
After Width: | Height: | Size: 424 KiB |
After Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 91 KiB |
|
@ -0,0 +1,123 @@
|
|||
/** @odoo-module **/
|
||||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
import {Component, useState} from "@odoo/owl";
|
||||
import {session} from "@web/session";
|
||||
import {useBus, useService} from "@web/core/utils/hooks";
|
||||
import {AppMenuItem} from "@web_responsive/components/apps_menu_item/apps_menu_item.esm";
|
||||
import {AppsMenuSearchBar} from "@web_responsive/components/menu_searchbar/searchbar.esm";
|
||||
import {NavBar} from "@web/webclient/navbar/navbar";
|
||||
import {WebClient} from "@web/webclient/webclient";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
import {useHotkey} from "@web/core/hotkeys/hotkey_hook";
|
||||
|
||||
// Patch WebClient to show AppsMenu instead of default app
|
||||
patch(WebClient.prototype, {
|
||||
setup() {
|
||||
super.setup();
|
||||
useBus(this.env.bus, "APPS_MENU:STATE_CHANGED", ({detail: state}) => {
|
||||
document.body.classList.toggle("o_apps_menu_opened", state);
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export class AppsMenu extends Component {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.state = useState({open: false});
|
||||
this.theme = session.apps_menu.theme || "milk";
|
||||
this.menuService = useService("menu");
|
||||
useBus(this.env.bus, "ACTION_MANAGER:UI-UPDATED", () => {
|
||||
this.setOpenState(false);
|
||||
});
|
||||
this._setupKeyNavigation();
|
||||
}
|
||||
|
||||
setOpenState(open_state) {
|
||||
this.state.open = open_state;
|
||||
this.env.bus.trigger("APPS_MENU:STATE_CHANGED", open_state);
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup navigation among app menus
|
||||
*/
|
||||
_setupKeyNavigation() {
|
||||
const repeatable = {
|
||||
allowRepeat: true,
|
||||
};
|
||||
useHotkey(
|
||||
"ArrowRight",
|
||||
() => {
|
||||
this._onWindowKeydown("next");
|
||||
},
|
||||
repeatable
|
||||
);
|
||||
useHotkey(
|
||||
"ArrowLeft",
|
||||
() => {
|
||||
this._onWindowKeydown("prev");
|
||||
},
|
||||
repeatable
|
||||
);
|
||||
useHotkey(
|
||||
"ArrowDown",
|
||||
() => {
|
||||
this._onWindowKeydown("next");
|
||||
},
|
||||
repeatable
|
||||
);
|
||||
useHotkey(
|
||||
"ArrowUp",
|
||||
() => {
|
||||
this._onWindowKeydown("prev");
|
||||
},
|
||||
repeatable
|
||||
);
|
||||
useHotkey("Escape", () => {
|
||||
this.env.bus.trigger("ACTION_MANAGER:UI-UPDATED");
|
||||
});
|
||||
}
|
||||
|
||||
_onWindowKeydown(direction) {
|
||||
const focusableInputElements = document.querySelectorAll(".o-app-menu-item");
|
||||
if (focusableInputElements.length) {
|
||||
const focusable = [...focusableInputElements];
|
||||
const index = focusable.indexOf(document.activeElement);
|
||||
let nextIndex = 0;
|
||||
if (direction === "prev" && index >= 0) {
|
||||
if (index > 0) {
|
||||
nextIndex = index - 1;
|
||||
} else {
|
||||
nextIndex = focusable.length - 1;
|
||||
}
|
||||
} else if (direction === "next") {
|
||||
if (index + 1 < focusable.length) {
|
||||
nextIndex = index + 1;
|
||||
} else {
|
||||
nextIndex = 0;
|
||||
}
|
||||
}
|
||||
focusableInputElements[nextIndex].focus();
|
||||
}
|
||||
}
|
||||
|
||||
onMenuClick() {
|
||||
this.setOpenState(!this.state.open);
|
||||
}
|
||||
}
|
||||
|
||||
Object.assign(AppsMenu, {
|
||||
template: "web_responsive.AppsMenu",
|
||||
props: {
|
||||
slots: {
|
||||
type: Object,
|
||||
optional: true,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
Object.assign(NavBar.components, {AppsMenu, AppMenuItem, AppsMenuSearchBar});
|
|
@ -0,0 +1,109 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* Copyright 2021 ITerra - Sergey Shebanin
|
||||
* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
:root {
|
||||
.o_grid_apps_menu[data-theme="milk"] {
|
||||
--app-menu-background: url("../../img/home-menu-bg-overlay.svg"),
|
||||
linear-gradient(
|
||||
to bottom,
|
||||
#{$app-menu-background-color},
|
||||
#{desaturate(lighten($app-menu-background-color, 20%), 15)}
|
||||
);
|
||||
}
|
||||
|
||||
.o_grid_apps_menu[data-theme="community"] {
|
||||
--app-menu-background: url("../../img/home-menu-bg-overlay.svg"),
|
||||
linear-gradient(
|
||||
to bottom,
|
||||
#{$o-brand-primary},
|
||||
#{desaturate(lighten($o-brand-primary, 20%), 15)}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@mixin full-screen-dropdown {
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
height: 100%;
|
||||
max-height: calc(var(--vh100, 100vh) - #{$o-navbar-height});
|
||||
max-height: calc(100dvh - #{$o-navbar-height});
|
||||
position: fixed;
|
||||
margin: 0;
|
||||
width: 100vw;
|
||||
z-index: 1000;
|
||||
left: 0 !important;
|
||||
}
|
||||
|
||||
.o_apps_menu_opened .o_main_navbar {
|
||||
.o_menu_brand,
|
||||
.o_menu_sections {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
// hide and save odoo default QUnit tests
|
||||
.o_navbar_apps_menu.hide .dropdown-toggle {
|
||||
position: absolute !important;
|
||||
z-index: -100 !important;
|
||||
}
|
||||
|
||||
// Iconized full screen apps menu
|
||||
.o_grid_apps_menu {
|
||||
&__button {
|
||||
background: unset;
|
||||
border: unset;
|
||||
outline: unset;
|
||||
margin-right: 0.25rem;
|
||||
min-height: $o-navbar-height;
|
||||
height: $o-navbar-height;
|
||||
width: $o-navbar-height;
|
||||
color: $o-navbar-brand-color;
|
||||
|
||||
&:hover,
|
||||
&:focus {
|
||||
background: $o-navbar-entry-bg--hover;
|
||||
}
|
||||
}
|
||||
|
||||
.o-app-menu-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
|
||||
width: 100%;
|
||||
gap: 0.25rem;
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.app-menu-container {
|
||||
@include full-screen-dropdown();
|
||||
overflow: auto;
|
||||
background-clip: border-box;
|
||||
padding: 1rem 0.5rem;
|
||||
gap: 1rem;
|
||||
background: var(--app-menu-background);
|
||||
background-size: cover;
|
||||
border-radius: 0;
|
||||
// Display apps in a grid
|
||||
align-content: flex-start;
|
||||
display: flex !important;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
|
||||
// Hide app icons when searching
|
||||
.has-results ~ .o-app-menu-list {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
padding: {
|
||||
left: calc((100vw - 850px) / 2);
|
||||
right: calc((100vw - 850px) / 2);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- Copyright 2018 Tecnativa - Jairo Llopis
|
||||
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). -->
|
||||
<templates>
|
||||
<t t-inherit="web.NavBar.AppsMenu" t-inherit-mode="extension">
|
||||
<xpath expr="//Dropdown" position="attributes">
|
||||
<attribute name="class">'o_navbar_apps_menu hide'</attribute>
|
||||
<attribute name="skipTogglerTabbing">true</attribute>
|
||||
<attribute name="hotkey" remove="'h'" add="'shift+h'" separator=" " />
|
||||
</xpath>
|
||||
<xpath expr="//Dropdown" position="after">
|
||||
<AppsMenu>
|
||||
<t t-set-slot="search_bar">
|
||||
<AppsMenuSearchBar />
|
||||
</t>
|
||||
<AppMenuItem
|
||||
t-foreach="apps"
|
||||
t-as="app"
|
||||
t-key="app.id"
|
||||
app="app"
|
||||
currentApp="currentApp"
|
||||
href="getMenuItemHref(app)"
|
||||
onClick="onNavBarDropdownItemSelection.bind(this)"
|
||||
/>
|
||||
</AppsMenu>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<!-- Apps menu -->
|
||||
<t t-name="web_responsive.AppsMenu">
|
||||
<div class="o_grid_apps_menu" t-att-data-theme="theme">
|
||||
<button
|
||||
class="o_grid_apps_menu__button"
|
||||
title="Home Menu"
|
||||
data-hotkey="h"
|
||||
t-on-click.stop="onMenuClick"
|
||||
>
|
||||
<i class="oi oi-apps fs-4" />
|
||||
</button>
|
||||
<div t-if="state.open" class="app-menu-container">
|
||||
<t t-slot="search_bar" />
|
||||
<div class="o-app-menu-list">
|
||||
<t t-slot="default" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,39 @@
|
|||
/** @odoo-module **/
|
||||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
import {Component, xml} from "@odoo/owl";
|
||||
import {registry} from "@web/core/registry";
|
||||
import {useService} from "@web/core/utils/hooks";
|
||||
|
||||
class AppsMenuPreferences extends Component {
|
||||
setup() {
|
||||
this.action = useService("action");
|
||||
this.user = useService("user");
|
||||
}
|
||||
|
||||
async _onClick() {
|
||||
const onClose = () => this.action.doAction("reload_context");
|
||||
const action = await this.action.loadAction(
|
||||
"web_responsive.res_users_view_form_apps_menu_preferences_action"
|
||||
);
|
||||
this.action.doAction({...action, res_id: this.user.userId}, {onClose}).then();
|
||||
}
|
||||
}
|
||||
|
||||
AppsMenuPreferences.template = xml`
|
||||
<div class="o-dropdown dropdown o-dropdown--no-caret">
|
||||
<button
|
||||
role="button"
|
||||
type="button"
|
||||
title="App Menu Preferences"
|
||||
class="dropdown-toggle o-dropdown--narrow"
|
||||
t-on-click="_onClick">
|
||||
<i class="fa fa-tint fa-lg px-1"/>
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
registry
|
||||
.category("systray")
|
||||
.add("AppMenuTheme", {Component: AppsMenuPreferences}, {sequence: 100});
|
|
@ -0,0 +1,53 @@
|
|||
/** @odoo-module **/
|
||||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
import {Component, onWillUpdateProps} from "@odoo/owl";
|
||||
import {getWebIconData} from "@web_responsive/components/apps_menu_tools.esm";
|
||||
|
||||
export class AppMenuItem extends Component {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.webIconData = getWebIconData(this.props.app);
|
||||
onWillUpdateProps(this.onUpdateProps);
|
||||
}
|
||||
|
||||
get isActive() {
|
||||
const {currentApp} = this.props;
|
||||
return currentApp && currentApp.id === this.props.app.id;
|
||||
}
|
||||
|
||||
get className() {
|
||||
const classItems = ["o-app-menu-item"];
|
||||
if (this.isActive) {
|
||||
classItems.push("active");
|
||||
}
|
||||
return classItems.join(" ");
|
||||
}
|
||||
|
||||
onUpdateProps(nextProps) {
|
||||
this.webIconData = getWebIconData(nextProps.app);
|
||||
}
|
||||
|
||||
onClick() {
|
||||
if (typeof this.props.onClick === "function") {
|
||||
this.props.onClick(this.props.app);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Object.assign(AppMenuItem, {
|
||||
template: "web_responsive.AppMenuItem",
|
||||
props: {
|
||||
app: Object,
|
||||
href: String,
|
||||
currentApp: {
|
||||
type: Object,
|
||||
optional: true,
|
||||
},
|
||||
onClick: Function,
|
||||
},
|
||||
});
|
|
@ -0,0 +1,73 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* Copyright 2021 ITerra - Sergey Shebanin
|
||||
* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
:root {
|
||||
.o_grid_apps_menu[data-theme="milk"] {
|
||||
--app-menu-text-color: #{$app-menu-text-color};
|
||||
--app-menu-text-shadow: 1px 1px 1px #{rgba($white, 0.4)};
|
||||
--app-menu-hover-background: #{rgba(white, 0.4)};
|
||||
}
|
||||
|
||||
.o_grid_apps_menu[data-theme="community"] {
|
||||
--app-menu-text-color: white;
|
||||
--app-menu-text-shadow: 1px 1px 1px #{rgba(black, 0.4)};
|
||||
--app-menu-hover-background: #{rgba(white, 0.2)};
|
||||
}
|
||||
}
|
||||
|
||||
.o-app-menu-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 4px;
|
||||
gap: 0.25rem;
|
||||
transition: ease box-shadow, transform, 0.3s;
|
||||
background: unset;
|
||||
outline: unset;
|
||||
border: unset;
|
||||
padding: 0.75rem 0.5rem;
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
white-space: normal;
|
||||
user-select: none;
|
||||
height: -moz-available;
|
||||
height: max-content;
|
||||
|
||||
&__name {
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 3;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
font-size: 1em;
|
||||
text-shadow: var(--app-menu-text-shadow);
|
||||
color: var(--app-menu-text-color);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
&__icon {
|
||||
height: auto;
|
||||
max-width: 64px;
|
||||
width: 64px;
|
||||
aspect-ratio: 1;
|
||||
padding: 10px;
|
||||
background-color: white;
|
||||
box-shadow: $app-menu-box-shadow;
|
||||
}
|
||||
|
||||
&__active {
|
||||
position: absolute;
|
||||
bottom: 2px;
|
||||
right: 2px;
|
||||
text-shadow: 0 0 2px rgba(250, 250, 250, 0.6);
|
||||
color: $app-menu-text-color;
|
||||
}
|
||||
|
||||
&:focus,
|
||||
&:hover {
|
||||
transform: translateY(-4px);
|
||||
box-shadow: 0 6px 12px -8px transparentize($app-menu-text-color, 0.6);
|
||||
background-color: var(--app-menu-hover-background) !important;
|
||||
backdrop-filter: blur(2px);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- Copyright 2018 Tecnativa - Jairo Llopis
|
||||
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). -->
|
||||
<templates>
|
||||
<t t-name="web_responsive.AppMenuItem">
|
||||
<a
|
||||
t-att-class="className"
|
||||
role="button"
|
||||
t-att-data-menu-xmlid="props.app.xmlid"
|
||||
t-att-href="props.href"
|
||||
t-on-click="onClick"
|
||||
draggable="false"
|
||||
>
|
||||
<div
|
||||
class="position-relative o_app"
|
||||
t-att-data-menu-xmlid="props.app.xmlid"
|
||||
>
|
||||
<img
|
||||
class="o-app-menu-item__icon rounded-3"
|
||||
draggable="false"
|
||||
t-att-src="webIconData"
|
||||
/>
|
||||
<i t-if="isActive" class="fa fa-check-circle o-app-menu-item__active" />
|
||||
</div>
|
||||
<span class="o-app-menu-item__name" t-att-title="props.app.name">
|
||||
<t t-out="props.app.name" />
|
||||
</span>
|
||||
</a>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,77 @@
|
|||
/** @odoo-module **/
|
||||
|
||||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
export function getWebIconData(menu) {
|
||||
const result = "/web_responsive/static/img/default_icon_app.png";
|
||||
const iconData = menu.webIconData;
|
||||
if (!iconData) {
|
||||
return result;
|
||||
}
|
||||
const prefix = iconData.startsWith("P")
|
||||
? "data:image/svg+xml;base64,"
|
||||
: "data:image/png;base64,";
|
||||
if (iconData.startsWith("data:image")) {
|
||||
return iconData;
|
||||
}
|
||||
return prefix + iconData.replace(/\s/g, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} menu
|
||||
*/
|
||||
export function updateMenuWebIconData(menu) {
|
||||
menu.webIconData = menu.webIconData ? getWebIconData(menu) : "";
|
||||
}
|
||||
|
||||
export function updateMenuDisplayName(menu) {
|
||||
menu.displayName = menu.name.trim();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object} menu
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
export function isRootMenu(menu) {
|
||||
return menu.actionID && menu.appID === menu.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object[]} memo
|
||||
* @param {Object|null} parentMenu
|
||||
* @param {Object} menu
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
export function collectSubMenuItems(memo, parentMenu, menu) {
|
||||
const menuCopy = Object.assign({}, menu);
|
||||
updateMenuDisplayName(menuCopy);
|
||||
if (parentMenu) {
|
||||
menuCopy.displayName = `${parentMenu.displayName} / ${menuCopy.displayName}`;
|
||||
}
|
||||
if (menuCopy.actionID && !isRootMenu(menuCopy)) {
|
||||
memo.push(menuCopy);
|
||||
}
|
||||
for (const child of menuCopy.childrenTree || []) {
|
||||
collectSubMenuItems(memo, menuCopy, child);
|
||||
}
|
||||
return memo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Object[]} memo
|
||||
* @param {Object} menu
|
||||
* @returns {Object}
|
||||
*/
|
||||
export function collectRootMenuItems(memo, menu) {
|
||||
if (isRootMenu(menu)) {
|
||||
const menuCopy = Object.assign({}, menu);
|
||||
updateMenuWebIconData(menuCopy);
|
||||
updateMenuDisplayName(menuCopy);
|
||||
memo.push(menuCopy);
|
||||
}
|
||||
return memo;
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/** @odoo-module **/
|
||||
/* 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). */
|
||||
|
||||
import {Chatter} from "@mail/core/web/chatter";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
import {useEffect} from "@odoo/owl";
|
||||
|
||||
patch(Chatter.prototype, {
|
||||
setup() {
|
||||
super.setup();
|
||||
useEffect(this._resetScrollToAttachmentsEffect.bind(this), () => [
|
||||
this.state.isAttachmentBoxOpened,
|
||||
]);
|
||||
},
|
||||
/**
|
||||
* Prevent scrollIntoView error
|
||||
* @param {Boolean} isAttachmentBoxOpened
|
||||
* @private
|
||||
*/
|
||||
_resetScrollToAttachmentsEffect(isAttachmentBoxOpened) {
|
||||
if (!isAttachmentBoxOpened) {
|
||||
this.state.scrollToAttachments = 0;
|
||||
}
|
||||
},
|
||||
});
|
|
@ -0,0 +1,42 @@
|
|||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
.o-mail-Composer {
|
||||
grid-template-areas:
|
||||
"sidebar-header core-header"
|
||||
"core-main core-main"
|
||||
"sidebar-footer core-footer";
|
||||
|
||||
.o-mail-Composer-sidebarMain {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
grid-template-areas:
|
||||
"sidebar-header core-header"
|
||||
"sidebar-main core-main"
|
||||
"sidebar-footer core-footer";
|
||||
|
||||
.o-mail-Composer-sidebarMain {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.o-mail-SuggestedRecipient {
|
||||
margin-left: 42px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.o-mail-Form-chatter {
|
||||
.o-mail-SuggestedRecipient,
|
||||
.o-mail-Chatter-recipientList {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
.o-mail-SuggestedRecipient,
|
||||
.o-mail-Chatter-recipientList {
|
||||
margin-left: 42px;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!-- Copyright 2023 Taras Shabaranskyi
|
||||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
|
||||
<templates>
|
||||
<t
|
||||
t-name="web_responsive.Chatter"
|
||||
t-inherit="mail.Chatter"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<xpath expr="//SuggestedRecipientsList" position="attributes">
|
||||
<attribute name="styleString">''</attribute>
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//button[hasclass('o-mail-Chatter-recipientListButton')]/.."
|
||||
position="attributes"
|
||||
>
|
||||
<attribute name="style" />
|
||||
<attribute name="class" add="o-mail-Chatter-recipientList" separator=" " />
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//button[hasclass('o-mail-Chatter-sendMessage')]"
|
||||
position="replace"
|
||||
>
|
||||
<button
|
||||
t-if="props.hasMessageList"
|
||||
class="o-mail-Chatter-sendMessage btn text-nowrap me-1"
|
||||
t-att-class="{
|
||||
'btn-secondary': state.composerType !== 'message',
|
||||
'btn-primary active': state.composerType === 'message',
|
||||
'my-2': !props.compactHeight
|
||||
}"
|
||||
t-att-disabled="!state.thread.hasWriteAccess and !(state.thread.hasReadAccess and state.thread.canPostOnReadonly) and props.threadId"
|
||||
data-hotkey="m"
|
||||
t-on-click="() => this.toggleComposer('message')"
|
||||
>
|
||||
<i class="fa fa-envelope me-sm-1" />
|
||||
<span class="d-none d-sm-inline">Send message</span>
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o-mail-Chatter-logNote')]" position="replace">
|
||||
<button
|
||||
t-if="props.hasMessageList"
|
||||
class="o-mail-Chatter-logNote btn text-nowrap me-2"
|
||||
t-att-class="{
|
||||
'btn-primary active': state.composerType === 'note',
|
||||
'btn-secondary': state.composerType !== 'note',
|
||||
'my-2': !props.compactHeight
|
||||
}"
|
||||
data-hotkey="shift+m"
|
||||
t-on-click="() => this.toggleComposer('note')"
|
||||
>
|
||||
<i class="fa fa-sticky-note me-sm-1" />
|
||||
<span class="d-none d-sm-inline">Log note</span>
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//button[hasclass('o-mail-Chatter-activity')]/span"
|
||||
position="before"
|
||||
>
|
||||
<i class="fa fa-clock-o me-sm-1" />
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//button[hasclass('o-mail-Chatter-activity')]/span"
|
||||
position="attributes"
|
||||
>
|
||||
<attribute name="class" add="d-none d-sm-inline" separator=" " />
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,21 @@
|
|||
/** @odoo-module **/
|
||||
|
||||
import {useState} from "@odoo/owl";
|
||||
import {useService} from "@web/core/utils/hooks";
|
||||
import {CommandPalette} from "@web/core/commands/command_palette";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
|
||||
export const unpatchCommandPalette = patch(CommandPalette.prototype, {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.ui = useState(useService("ui"));
|
||||
},
|
||||
|
||||
get small() {
|
||||
return this.ui.size < 2;
|
||||
},
|
||||
|
||||
get contentClass() {
|
||||
return `o_command_palette ${this.small ? "" : "mt-5"}`;
|
||||
},
|
||||
});
|
|
@ -0,0 +1,28 @@
|
|||
.o_command_palette {
|
||||
.o_command_palette_exit {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.o_command_palette_root {
|
||||
display: flex;
|
||||
max-height: 100vh;
|
||||
max-height: 100dvh;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.o_command_palette_exit {
|
||||
display: block;
|
||||
}
|
||||
.o_command_palette_search {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.o_command_palette_listbox {
|
||||
max-height: unset;
|
||||
}
|
||||
.o_command_palette_footer {
|
||||
flex-shrink: 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<templates>
|
||||
<t
|
||||
t-name="web_responsive.CommandPalette"
|
||||
t-inherit="web.CommandPalette"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<xpath expr="//Dialog" position="attributes">
|
||||
<attribute name="contentClass">contentClass</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[@t-ref='root']" position="attributes">
|
||||
<attribute name="class">o_command_palette_root</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('o_command_palette_search')]" position="before">
|
||||
<div class="o_command_palette_exit">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary w-100"
|
||||
t-on-click="props.close"
|
||||
>Exit</button>
|
||||
</div>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,73 @@
|
|||
/** @odoo-module **/
|
||||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
import {ControlPanel} from "@web/search/control_panel/control_panel";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
import {browser} from "@web/core/browser/browser";
|
||||
|
||||
export const STICKY_CLASS = "o_mobile_sticky";
|
||||
|
||||
/**
|
||||
* @param {Number} delay
|
||||
* @returns {{collect: function(Number, (function(Number, Number): void)): void}}
|
||||
*/
|
||||
export function minMaxCollector(delay = 100) {
|
||||
const state = {
|
||||
id: null,
|
||||
items: [],
|
||||
};
|
||||
|
||||
function min() {
|
||||
return Math.min.apply(null, state.items);
|
||||
}
|
||||
|
||||
function max() {
|
||||
return Math.max.apply(null, state.items);
|
||||
}
|
||||
|
||||
return {
|
||||
collect(value, callback) {
|
||||
clearTimeout(state.id);
|
||||
state.items.push(value);
|
||||
state.id = setTimeout(() => {
|
||||
callback(min(), max());
|
||||
state.items = [];
|
||||
state.id = null;
|
||||
}, delay);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
export const unpatchControlPanel = patch(ControlPanel.prototype, {
|
||||
scrollValueCollector: undefined,
|
||||
/** @type {Number}*/
|
||||
scrollHeaderGap: undefined,
|
||||
setup() {
|
||||
super.setup();
|
||||
this.scrollValueCollector = minMaxCollector(100);
|
||||
this.scrollHeaderGap = 2;
|
||||
},
|
||||
onScrollThrottled() {
|
||||
if (this.isScrolling) {
|
||||
return;
|
||||
}
|
||||
this.isScrolling = true;
|
||||
browser.requestAnimationFrame(() => (this.isScrolling = false));
|
||||
|
||||
/** @type {HTMLElement}*/
|
||||
const rootEl = this.root.el;
|
||||
const scrollTop = this.getScrollingElement().scrollTop;
|
||||
const activeAnimation = scrollTop > this.initialScrollTop;
|
||||
|
||||
rootEl.classList.toggle(STICKY_CLASS, activeAnimation);
|
||||
this.scrollValueCollector.collect(scrollTop - this.oldScrollTop, (min, max) => {
|
||||
const delta = min + max;
|
||||
if (delta < -this.scrollHeaderGap || delta > this.scrollHeaderGap) {
|
||||
rootEl.style.top = `${delta < 0 ? -rootEl.clientHeight : 0}px`;
|
||||
}
|
||||
});
|
||||
|
||||
this.oldScrollTop = scrollTop;
|
||||
},
|
||||
});
|
|
@ -0,0 +1,77 @@
|
|||
/** @odoo-module **/
|
||||
/* 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). */
|
||||
|
||||
import {onMounted, onWillStart, useExternalListener, useRef} from "@odoo/owl";
|
||||
import {FileViewer} from "@web/core/file_viewer/file_viewer";
|
||||
import {patch} from "@web/core/utils/patch";
|
||||
|
||||
const formChatterClassName = ".o-mail-Form-chatter";
|
||||
const formViewSheetClassName = ".o_form_view_container .o_form_sheet_bg";
|
||||
|
||||
export function useFileViewerContainerSize(ref) {
|
||||
function updateActualFormChatterSize() {
|
||||
/** @type {HTMLDivElement}*/
|
||||
const chatterElement = document.querySelector(formChatterClassName);
|
||||
/** @type {HTMLDivElement}*/
|
||||
const formSheetElement = document.querySelector(formViewSheetClassName);
|
||||
if (chatterElement && formSheetElement && ref.el) {
|
||||
/** @type {CSSStyleDeclaration}*/
|
||||
const elStyle = ref.el.style;
|
||||
const width = `${chatterElement.clientWidth}px`;
|
||||
const height = `${chatterElement.clientHeight}px`;
|
||||
const left = `${formSheetElement.clientWidth}px`;
|
||||
elStyle.setProperty("--o-FileViewerContainer-width", width);
|
||||
elStyle.setProperty("--o-FileViewerContainer-height", height);
|
||||
elStyle.setProperty("--o-FileViewerContainer-left", left);
|
||||
}
|
||||
}
|
||||
|
||||
useExternalListener(window, "resize", () => {
|
||||
requestAnimationFrame(updateActualFormChatterSize);
|
||||
});
|
||||
onMounted(() => {
|
||||
requestAnimationFrame(updateActualFormChatterSize);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Patch attachment viewer to add min/max buttons capability
|
||||
* @property {Function} resizeUpdateActualFormChatterWidth
|
||||
*/
|
||||
patch(FileViewer.prototype, {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.root = useRef("root");
|
||||
Object.assign(this.state, {
|
||||
allowMinimize: false,
|
||||
maximized: true,
|
||||
});
|
||||
useFileViewerContainerSize(this.root);
|
||||
onWillStart(this.setDefaultMaximizeState);
|
||||
},
|
||||
|
||||
get rootClass() {
|
||||
return {
|
||||
modal: this.props.modal,
|
||||
"o-FileViewerContainer__maximized": this.state.maximized,
|
||||
"o-FileViewerContainer__minimized": !this.state.maximized,
|
||||
};
|
||||
},
|
||||
|
||||
setDefaultMaximizeState() {
|
||||
this.state.allowMinimize = Boolean(
|
||||
document.querySelector(`${formChatterClassName}.o-aside`)
|
||||
);
|
||||
this.state.maximized = !this.state.allowMinimize;
|
||||
},
|
||||
|
||||
/**
|
||||
* @param {Boolean} value
|
||||
*/
|
||||
setMaximized(value) {
|
||||
this.state.maximized = value;
|
||||
},
|
||||
});
|
|
@ -0,0 +1,56 @@
|
|||
/* Copyright 2019 Tecnativa - Alexandre Díaz
|
||||
* Copyright 2021 ITerra - Sergey Shebanin
|
||||
* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
.o-FileViewerContainer {
|
||||
--o-FileViewerContainer-width: #{$o-mail-Chatter-minWidth};
|
||||
--o-FileViewerContainer-height: var(--100vh, calc(100vh - #{$o-navbar-height}));
|
||||
--o-FileViewerContainer-left: unset;
|
||||
--o-FileViewerContainer-right: 0;
|
||||
|
||||
position: fixed;
|
||||
right: 0;
|
||||
z-index: $zindex-fixed;
|
||||
|
||||
&__maximized {
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
&__minimized {
|
||||
width: 100%;
|
||||
max-width: var(--o-FileViewerContainer-width, #{$o-mail-Chatter-minWidth});
|
||||
height: var(--o-FileViewerContainer-height);
|
||||
top: unset;
|
||||
right: var(--o-FileViewerContainer-right, 0);
|
||||
left: var(--o-FileViewerContainer-left, unset);
|
||||
bottom: 0;
|
||||
|
||||
.o-FileViewer-main {
|
||||
padding: $o-navbar-height 0 0 0;
|
||||
}
|
||||
|
||||
.o-FileViewer-viewPdf {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.o-FileViewer-navigation {
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
text-shadow: 0 0 rgba(30, 30, 30, 0.8);
|
||||
box-shadow: 0 0 1px 0 rgba(30, 30, 30, 0.4);
|
||||
transition: background-color 0.2s, box-shadow 0.2s;
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
text-shadow: 0 0 black;
|
||||
box-shadow: 0 0 2px 0 rgba(30, 30, 30, 0.8);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.o_apps_menu_opened .o-FileViewerContainer {
|
||||
display: none !important;
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- Copyright 2019 Tecnativa - Alexandre Díaz
|
||||
Copyright 2021 Sergey Shebanin
|
||||
Copyright 2023 Taras Shabaranskyi
|
||||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
|
||||
<template>
|
||||
<t
|
||||
t-name="web_responsive.FileViewer"
|
||||
t-inherit="web.FileViewer"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<xpath expr="div[hasclass('justify-content-center')]" position="attributes">
|
||||
<attribute name="class" add="o-FileViewerContainer" separator=" " />
|
||||
<attribute name="t-att-class">rootClass</attribute>
|
||||
<attribute name="t-ref">root</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//iframe[@t-ref='iframeViewerPdf']" position="attributes">
|
||||
<attribute name="class" add="o-FileViewer-viewPdf" separator=" " />
|
||||
</xpath>
|
||||
<xpath expr="//div[@t-on-click.stop='close']" position="before">
|
||||
<t t-if="state.allowMinimize">
|
||||
<div
|
||||
t-if="!state.maximized"
|
||||
t-on-click="setMaximized.bind(this, true)"
|
||||
class="o-FileViewer-headerButton d-flex align-items-center mb-0 px-3 h4 text-reset cursor-pointer"
|
||||
role="button"
|
||||
name="maximize"
|
||||
title="Maximize"
|
||||
aria-label="Maximize"
|
||||
>
|
||||
<i class="fa fa-fw fa-window-maximize" role="img" />
|
||||
</div>
|
||||
<div
|
||||
t-if="state.maximized"
|
||||
class="o-FileViewer-headerButton d-flex align-items-center mb-0 px-3 h4 text-reset cursor-pointer"
|
||||
t-on-click="setMaximized.bind(this, false)"
|
||||
role="button"
|
||||
name="minimize"
|
||||
title="Minimize"
|
||||
aria-label="Minimize"
|
||||
>
|
||||
<i class="fa fa-fw fa-window-minimize" role="img" />
|
||||
</div>
|
||||
</t>
|
||||
</xpath>
|
||||
</t>
|
||||
</template>
|
|
@ -0,0 +1,12 @@
|
|||
/* Copyright 2021 ITerra - Sergey Shebanin
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
// Shortcut table ui improvement
|
||||
.o_shortcut_table {
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
max-width: 400px;
|
||||
td {
|
||||
padding: 0 20px;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!--
|
||||
Copyright 2021 ITerra - Sergey Shebanin
|
||||
Copyright 2023 Taras Shabaranskyi
|
||||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
||||
-->
|
||||
<templates id="template" xml:space="preserve">
|
||||
<t t-inherit="web.NavBar.SectionsMenu" t-inherit-mode="extension" owl="1">
|
||||
<xpath
|
||||
expr="//t[@t-foreach='sections']//t[@t-set='hotkey']"
|
||||
position="attributes"
|
||||
>
|
||||
<attribute
|
||||
name="t-value"
|
||||
>'shift+' + ((section_index + 1) % 10).toString()</attribute>
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//t[@t-if='currentAppSectionsExtra.length']//t[@t-set='hotkey']"
|
||||
position="attributes"
|
||||
>
|
||||
<attribute
|
||||
name="t-value"
|
||||
>'shift+' + (sectionsVisibleCount + 1 % 10).toString()</attribute>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,207 @@
|
|||
/** @odoo-module **/
|
||||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
import {Component, onPatched, onWillPatch, useRef, useState} from "@odoo/owl";
|
||||
import {
|
||||
collectRootMenuItems,
|
||||
collectSubMenuItems,
|
||||
} from "@web_responsive/components/apps_menu_tools.esm";
|
||||
import {useAutofocus, useService} from "@web/core/utils/hooks";
|
||||
import {debounce} from "@web/core/utils/timing";
|
||||
import {escapeRegExp} from "@web/core/utils/strings";
|
||||
import {fuzzyLookup} from "@web/core/utils/search";
|
||||
import {scrollTo} from "@web/core/utils/scrolling";
|
||||
|
||||
/**
|
||||
* @extends Component
|
||||
*/
|
||||
export class AppsMenuCanonicalSearchBar extends Component {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.state = useState({
|
||||
rootItems: [],
|
||||
subItems: [],
|
||||
offset: 0,
|
||||
hasResults: false,
|
||||
});
|
||||
this.searchBarInput = useAutofocus({refName: "SearchBarInput"});
|
||||
this._searchMenus = debounce(this._searchMenus, 200);
|
||||
this.menuService = useService("menu");
|
||||
this.searchItemsRef = useRef("searchItems");
|
||||
this.rootMenuItems = this.getRootMenuItems();
|
||||
this.subMenuItems = this.getSubMenuItems();
|
||||
onWillPatch(this._computeResultOffset);
|
||||
onPatched(this._scrollToHighlight);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {String}
|
||||
*/
|
||||
get inputValue() {
|
||||
const {el} = this.searchBarInput;
|
||||
return el ? el.value : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
get hasItemsToDisplay() {
|
||||
return this.totalItemsCount > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Number}
|
||||
*/
|
||||
get totalItemsCount() {
|
||||
const {rootItems, subItems} = this.state;
|
||||
return rootItems.length + subItems.length;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {Number} index
|
||||
* @param {Boolean} isSubMenu
|
||||
* @returns {String}
|
||||
*/
|
||||
highlighted(index, isSubMenu = false) {
|
||||
const {state} = this;
|
||||
let _index = index;
|
||||
if (isSubMenu) {
|
||||
_index = state.rootItems.length + index;
|
||||
}
|
||||
return _index === state.offset ? "highlight" : "";
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
getRootMenuItems() {
|
||||
return this.menuService.getApps().reduce(collectRootMenuItems, []);
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Object[]}
|
||||
*/
|
||||
getSubMenuItems() {
|
||||
const response = [];
|
||||
for (const menu of this.menuService.getApps()) {
|
||||
const menuTree = this.menuService.getMenuAsTree(menu.id);
|
||||
collectSubMenuItems(response, null, menuTree);
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Search among available menu items, and render that search.
|
||||
*/
|
||||
_searchMenus() {
|
||||
const {state} = this;
|
||||
const query = this.inputValue;
|
||||
state.hasResults = query !== "";
|
||||
if (!state.hasResults) {
|
||||
state.rootItems = [];
|
||||
state.subItems = [];
|
||||
return;
|
||||
}
|
||||
const searchField = (item) => item.displayName;
|
||||
state.rootItems = fuzzyLookup(query, this.rootMenuItems, searchField);
|
||||
state.subItems = fuzzyLookup(query, this.subMenuItems, searchField);
|
||||
}
|
||||
|
||||
_onKeyDown(ev) {
|
||||
const code = ev.code;
|
||||
if (code === "Escape") {
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
if (this.inputValue) {
|
||||
this.searchBarInput.el.value = "";
|
||||
Object.assign(this.state, {rootItems: [], subItems: []});
|
||||
this.state.hasResults = false;
|
||||
} else {
|
||||
this.env.bus.trigger("ACTION_MANAGER:UI-UPDATED");
|
||||
}
|
||||
} else if (code === "Tab") {
|
||||
if (this.searchItemsRef.el) {
|
||||
ev.preventDefault();
|
||||
if (ev.shiftKey) {
|
||||
this.state.offset--;
|
||||
} else {
|
||||
this.state.offset++;
|
||||
}
|
||||
}
|
||||
} else if (code === "ArrowUp") {
|
||||
if (this.searchItemsRef.el) {
|
||||
ev.preventDefault();
|
||||
this.state.offset--;
|
||||
}
|
||||
} else if (code === "ArrowDown") {
|
||||
if (this.searchItemsRef.el) {
|
||||
ev.preventDefault();
|
||||
this.state.offset++;
|
||||
}
|
||||
} else if (code === "Enter") {
|
||||
const element = this.searchItemsRef.el;
|
||||
if (this.hasItemsToDisplay && element) {
|
||||
ev.preventDefault();
|
||||
this._selectHighlightedSearchItem(element);
|
||||
}
|
||||
} else if (code === "Home") {
|
||||
this.state.offset = 0;
|
||||
} else if (code === "End") {
|
||||
this.state.offset = this.totalItemsCount - 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {HTMLElement} element
|
||||
* @private
|
||||
*/
|
||||
_selectHighlightedSearchItem(element) {
|
||||
const highlightedElement = element.querySelector(
|
||||
".highlight > .search-item__link"
|
||||
);
|
||||
if (highlightedElement) {
|
||||
highlightedElement.click();
|
||||
} else {
|
||||
console.warn("Highlighted search item is not found");
|
||||
}
|
||||
}
|
||||
|
||||
_splitName(name) {
|
||||
if (!name) {
|
||||
return [];
|
||||
}
|
||||
const value = this.inputValue;
|
||||
const splitName = name.split(new RegExp(`(${escapeRegExp(value)})`, "ig"));
|
||||
return value.length && splitName.length > 1 ? splitName : [name];
|
||||
}
|
||||
|
||||
_scrollToHighlight() {
|
||||
// Scroll to selected element on keyboard navigation
|
||||
const element = this.searchItemsRef.el;
|
||||
if (!(this.totalItemsCount && element)) {
|
||||
return;
|
||||
}
|
||||
const activeElement = element.querySelector(".highlight");
|
||||
if (activeElement) {
|
||||
scrollTo(activeElement, element);
|
||||
}
|
||||
}
|
||||
|
||||
_computeResultOffset() {
|
||||
// Allow looping on results
|
||||
const {state} = this;
|
||||
const total = this.totalItemsCount;
|
||||
if (state.offset < 0) {
|
||||
state.offset = total + state.offset;
|
||||
} else if (state.offset >= total) {
|
||||
state.offset -= total;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AppsMenuCanonicalSearchBar.props = {};
|
||||
AppsMenuCanonicalSearchBar.template = "web_responsive.AppsMenuCanonicalSearchBar";
|
|
@ -0,0 +1,112 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* Copyright 2021 ITerra - Sergey Shebanin
|
||||
* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
:root {
|
||||
.o_grid_apps_menu[data-theme="milk"] {
|
||||
--apps-menu-scrollbar-background: #{$o-brand-odoo};
|
||||
--apps-menu-empty-search-color: $app-menu-text-color;
|
||||
}
|
||||
|
||||
.o_grid_apps_menu[data-theme="community"] {
|
||||
--apps-menu-scrollbar-background: white;
|
||||
--apps-menu-empty-search-color: white;
|
||||
}
|
||||
}
|
||||
|
||||
.o_grid_apps_menu .search-container {
|
||||
// Allow to scroll only on results, keeping static search box above
|
||||
.search-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: calc(0.25rem + 1px);
|
||||
overflow: auto;
|
||||
padding: 0.25rem 0;
|
||||
margin: 0.25rem 0;
|
||||
max-height: calc(100vh - #{$o-navbar-height} - 5.25rem);
|
||||
max-height: calc(100dvh - #{$o-navbar-height} - 5.25rem);
|
||||
max-width: calc(100vw - 1rem);
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: var(--apps-menu-scrollbar-background);
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
&::-webkit-scrollbar {
|
||||
width: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.search-item-divider {
|
||||
margin: 0 4px;
|
||||
|
||||
hr {
|
||||
margin: 0.5rem 0;
|
||||
background-color: $o-brand-odoo;
|
||||
}
|
||||
}
|
||||
|
||||
.search-item {
|
||||
display: block;
|
||||
align-items: center;
|
||||
background-position: left;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
white-space: normal;
|
||||
font-weight: 100;
|
||||
background-color: white;
|
||||
box-shadow: $app-menu-box-shadow;
|
||||
margin: 0 4px;
|
||||
border-radius: 4px;
|
||||
|
||||
&__link {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
padding: 0.25rem 0.5rem;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&__name {
|
||||
color: $app-menu-text-color;
|
||||
text-shadow: 0 0 $app-menu-text-color;
|
||||
}
|
||||
|
||||
&__image {
|
||||
max-height: 40px;
|
||||
max-width: 40px;
|
||||
width: 40px;
|
||||
object-fit: contain;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
&.highlight,
|
||||
&:hover {
|
||||
background-color: $app-menu-item-highlight;
|
||||
box-shadow: $app-menu-box-shadow-highlight;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
b {
|
||||
font-weight: 700;
|
||||
}
|
||||
}
|
||||
|
||||
.empty-search-item {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding: 0.25rem 0.5rem;
|
||||
color: var(--apps-menu-empty-search-color);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- Copyright 2018 Tecnativa - Jairo Llopis
|
||||
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). -->
|
||||
<templates>
|
||||
<!-- Search bar -->
|
||||
<t t-name="web_responsive.AppsMenuCanonicalSearchBar">
|
||||
<div class="search-container" t-att-class="{'has-results': state.hasResults}">
|
||||
<div class="search-input">
|
||||
<i class="fa fa-search search-icon fs-4 my-auto d-none d-sm-flex" />
|
||||
<input
|
||||
type="search"
|
||||
t-ref="SearchBarInput"
|
||||
t-on-input="_searchMenus"
|
||||
t-on-keydown="_onKeyDown"
|
||||
autocomplete="off"
|
||||
placeholder="Search menus..."
|
||||
class="form-control"
|
||||
/>
|
||||
</div>
|
||||
<ul
|
||||
t-if="hasItemsToDisplay"
|
||||
class="list-unstyled search-list"
|
||||
t-ref="searchItems"
|
||||
>
|
||||
<t t-foreach="state.rootItems" t-as="menu" t-key="menu.xmlid">
|
||||
<li t-attf-class="search-item {{highlighted(menu_index)}}">
|
||||
<a
|
||||
t-attf-class="search-item__link"
|
||||
t-attf-href="#menu_id={{menu.id}}&action={{menu.actionID}}"
|
||||
t-att-data-menu-id="menu.id"
|
||||
t-att-data-action-id="menu.actionID"
|
||||
draggable="false"
|
||||
tabindex="-1"
|
||||
>
|
||||
<img
|
||||
class="search-item__image"
|
||||
t-att-src="menu.webIconData"
|
||||
alt="App Icon"
|
||||
/>
|
||||
<span class="search-item__name" t-att-title="menu.name">
|
||||
<t
|
||||
t-foreach="_splitName(menu.displayName)"
|
||||
t-as="name"
|
||||
t-key="name_index"
|
||||
>
|
||||
<b t-if="name_index % 2" t-out="name" />
|
||||
<t t-else="" t-out="name" />
|
||||
</t>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</t>
|
||||
<li
|
||||
class="search-item-divider"
|
||||
t-if="state.rootItems.length and state.subItems.length"
|
||||
>
|
||||
<hr class="w-100" />
|
||||
</li>
|
||||
<t t-foreach="state.subItems" t-as="menu" t-key="menu.xmlid">
|
||||
<li t-attf-class="search-item {{highlighted(menu_index, true)}}">
|
||||
<a
|
||||
t-attf-class="search-item__link"
|
||||
t-attf-href="#menu_id={{menu.id}}&action={{menu.actionID}}"
|
||||
t-att-data-menu-id="menu.id"
|
||||
t-att-data-action-id="menu.actionID"
|
||||
draggable="false"
|
||||
tabindex="-1"
|
||||
>
|
||||
<span
|
||||
class="search-item__name px-2 py-1"
|
||||
t-att-title="menu.name"
|
||||
>
|
||||
<t
|
||||
t-foreach="_splitName(menu.displayName)"
|
||||
t-as="name"
|
||||
t-key="name_index"
|
||||
>
|
||||
<b t-if="name_index % 2" t-out="name" />
|
||||
<t t-else="" t-out="name" />
|
||||
</t>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</t>
|
||||
</ul>
|
||||
<ul
|
||||
t-if="!hasItemsToDisplay and inputValue"
|
||||
class="list-unstyled search-list"
|
||||
>
|
||||
<li class="empty-search-item">
|
||||
<strong>Nothing to show</strong>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,32 @@
|
|||
/** @odoo-module **/
|
||||
/* global Fuse */
|
||||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
import {AppsMenuCanonicalSearchBar} from "@web_responsive/components/menu_canonical_searchbar/searchbar.esm";
|
||||
|
||||
/**
|
||||
* @extends AppsMenuCanonicalSearchBar
|
||||
*/
|
||||
export class AppsMenuFuseSearchBar extends AppsMenuCanonicalSearchBar {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.fuseOptions = {
|
||||
keys: ["displayName"],
|
||||
threshold: 0.43,
|
||||
};
|
||||
this.rootMenuItems = new Fuse(this.getRootMenuItems(), this.fuseOptions);
|
||||
this.subMenuItems = new Fuse(this.getSubMenuItems(), this.fuseOptions);
|
||||
}
|
||||
|
||||
_searchMenus() {
|
||||
const {state} = this;
|
||||
const query = this.inputValue;
|
||||
state.hasResults = query !== "";
|
||||
state.rootItems = this.rootMenuItems.search(query);
|
||||
state.subItems = this.subMenuItems.search(query);
|
||||
}
|
||||
}
|
||||
|
||||
AppsMenuFuseSearchBar.props = {};
|
||||
AppsMenuFuseSearchBar.template = "web_responsive.AppsMenuFuseSearchBar";
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- Copyright 2023 Taras Shabaranskyi
|
||||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). -->
|
||||
<templates>
|
||||
<!-- Search bar -->
|
||||
<t
|
||||
t-name="web_responsive.AppsMenuFuseSearchBar"
|
||||
t-inherit="web_responsive.AppsMenuCanonicalSearchBar"
|
||||
t-inherit-mode="primary"
|
||||
>
|
||||
<xpath expr="//t[@t-foreach='state.rootItems']" position="attributes">
|
||||
<attribute name="t-as">result</attribute>
|
||||
<attribute name="t-key">result.item.xmlid</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-foreach='state.rootItems']/li" position="before">
|
||||
<t t-set="menu" t-value="result.item" />
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-foreach='state.rootItems']/li" position="attributes">
|
||||
<attribute
|
||||
name="t-attf-class"
|
||||
>search-item {{highlighted(result_index)}}</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-foreach='state.subItems']" position="attributes">
|
||||
<attribute name="t-as">result</attribute>
|
||||
<attribute name="t-key">result.item.xmlid</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-foreach='state.subItems']/li" position="before">
|
||||
<t t-set="menu" t-value="result.item" />
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-foreach='state.subItems']/li" position="attributes">
|
||||
<attribute
|
||||
name="t-attf-class"
|
||||
>search-item {{highlighted(result_index, true)}}</attribute>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,65 @@
|
|||
/** @odoo-module **/
|
||||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
import {Component, useState} from "@odoo/owl";
|
||||
import {useAutofocus, useService} from "@web/core/utils/hooks";
|
||||
|
||||
/**
|
||||
* @extends Component
|
||||
* @property {{el: HTMLInputElement}} searchBarInput
|
||||
*/
|
||||
export class AppsMenuOdooSearchBar extends Component {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.state = useState({
|
||||
rootItems: [],
|
||||
subItems: [],
|
||||
offset: 0,
|
||||
hasResults: false,
|
||||
});
|
||||
this.searchBarInput = useAutofocus({refName: "SearchBarInput"});
|
||||
this.command = useService("command");
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {String}
|
||||
*/
|
||||
get inputValue() {
|
||||
const {el} = this.searchBarInput;
|
||||
return el ? el.value : "";
|
||||
}
|
||||
|
||||
set inputValue(value) {
|
||||
const {el} = this.searchBarInput;
|
||||
if (el) {
|
||||
el.value = value;
|
||||
}
|
||||
}
|
||||
|
||||
_onSearchInput() {
|
||||
if (this.inputValue) {
|
||||
this._openSearchMenu(this.inputValue);
|
||||
this.inputValue = "";
|
||||
}
|
||||
}
|
||||
|
||||
_onSearchClick() {
|
||||
this._openSearchMenu();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {String} [value]
|
||||
* @private
|
||||
*/
|
||||
_openSearchMenu(value) {
|
||||
const searchValue = value ? `/${value}` : "/";
|
||||
this.command.openMainPalette({searchValue}, null);
|
||||
}
|
||||
}
|
||||
|
||||
AppsMenuOdooSearchBar.props = {};
|
||||
AppsMenuOdooSearchBar.template = "web_responsive.AppsMenuOdooSearchBar";
|
|
@ -0,0 +1,4 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* Copyright 2021 ITerra - Sergey Shebanin
|
||||
* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- Copyright 2018 Tecnativa - Jairo Llopis
|
||||
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). -->
|
||||
<templates>
|
||||
<!-- Search bar -->
|
||||
<t t-name="web_responsive.AppsMenuOdooSearchBar">
|
||||
<div class="search-container">
|
||||
<div class="search-input">
|
||||
<i class="fa fa-search search-icon fs-4 my-auto d-none d-sm-flex" />
|
||||
<input
|
||||
type="search"
|
||||
t-ref="SearchBarInput"
|
||||
t-on-input="_onSearchInput"
|
||||
t-on-click="_onSearchClick"
|
||||
autocomplete="off"
|
||||
placeholder="Search menus..."
|
||||
class="form-control"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,26 @@
|
|||
/** @odoo-module **/
|
||||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
import {AppsMenuCanonicalSearchBar} from "@web_responsive/components/menu_canonical_searchbar/searchbar.esm";
|
||||
import {AppsMenuOdooSearchBar} from "@web_responsive/components/menu_odoo_searchbar/searchbar.esm";
|
||||
import {AppsMenuFuseSearchBar} from "@web_responsive/components/menu_fuse_searchbar/searchbar.esm";
|
||||
import {Component} from "@odoo/owl";
|
||||
import {session} from "@web/session";
|
||||
|
||||
export class AppsMenuSearchBar extends Component {
|
||||
setup() {
|
||||
super.setup();
|
||||
this.searchType = session.apps_menu.search_type || "canonical";
|
||||
}
|
||||
}
|
||||
|
||||
Object.assign(AppsMenuSearchBar, {
|
||||
props: {},
|
||||
template: "web_responsive.AppsMenuSearchBar",
|
||||
components: {
|
||||
AppsMenuOdooSearchBar,
|
||||
AppsMenuCanonicalSearchBar,
|
||||
AppsMenuFuseSearchBar,
|
||||
},
|
||||
});
|
|
@ -0,0 +1,45 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* Copyright 2021 ITerra - Sergey Shebanin
|
||||
* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
.o_grid_apps_menu .search-container {
|
||||
width: 100%;
|
||||
|
||||
.search-input {
|
||||
display: flex;
|
||||
justify-items: center;
|
||||
gap: 0.75rem;
|
||||
box-shadow: $app-menu-box-shadow;
|
||||
border-radius: 4px;
|
||||
padding: 0.5rem 0.75rem;
|
||||
background-color: white;
|
||||
|
||||
.search-icon {
|
||||
color: $app-menu-text-color;
|
||||
font-size: 1.5rem;
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
height: 1.75rem;
|
||||
background: none;
|
||||
border: none;
|
||||
color: $app-menu-text-color;
|
||||
display: block;
|
||||
padding: 0;
|
||||
box-shadow: none;
|
||||
|
||||
&::placeholder {
|
||||
color: $app-menu-text-color;
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.o_command_palette_search .form-control {
|
||||
&:focus {
|
||||
box-shadow: unset;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!-- Copyright 2018 Tecnativa - Jairo Llopis
|
||||
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). -->
|
||||
<templates>
|
||||
<!-- Search bar -->
|
||||
<t t-name="web_responsive.AppsMenuSearchBar">
|
||||
<AppsMenuCanonicalSearchBar t-if="searchType==='canonical'" />
|
||||
<AppsMenuOdooSearchBar t-if="searchType==='command_palette'" />
|
||||
<AppsMenuFuseSearchBar t-if="searchType==='fuse'" />
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,5 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="2000" height="1128" viewBox="0 0 2000 1128">
|
||||
<polygon fill-opacity=".03" points="0 1077.844 392.627 778.443 1504.99 1127.745 0 1127.745"/>
|
||||
<polygon fill-opacity=".02" points="392.216 778.443 283.294 0 0 0 0 666.504"/>
|
||||
<polygon fill-opacity=".03" points="1000 0 2000 1009.98 2000 439.94 1749.817 0"/>
|
||||
</svg>
|
After Width: | Height: | Size: 366 B |
|
@ -0,0 +1,27 @@
|
|||
/** @odoo-module **/
|
||||
|
||||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
import {debounce} from "@web/core/utils/timing";
|
||||
|
||||
// Fix for iOS Safari to set correct viewport height
|
||||
// https://github.com/Faisal-Manzer/postcss-viewport-height-correction
|
||||
export function setViewportProperty(doc) {
|
||||
function handleResize() {
|
||||
requestAnimationFrame(function () {
|
||||
doc.style.setProperty("--vh100", doc.clientHeight + "px");
|
||||
});
|
||||
}
|
||||
|
||||
handleResize();
|
||||
return handleResize;
|
||||
}
|
||||
|
||||
window.addEventListener(
|
||||
"resize",
|
||||
debounce(setViewportProperty(document.documentElement), 25)
|
||||
);
|
|
@ -0,0 +1,95 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
$big-checkbox-size: 1.5em;
|
||||
|
||||
// Big checkboxes
|
||||
.o_list_view,
|
||||
.o_setting_container .o_setting_box {
|
||||
.o_setting_right_pane {
|
||||
margin-left: 34px;
|
||||
}
|
||||
|
||||
.o-checkbox:not(.o_boolean_toggle) {
|
||||
margin-right: 10px;
|
||||
margin-top: -6px;
|
||||
|
||||
&.d-inline-block {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.form-check-input {
|
||||
height: $big-checkbox-size;
|
||||
width: $big-checkbox-size;
|
||||
}
|
||||
}
|
||||
|
||||
.o_optional_columns_dropdown {
|
||||
.o-dropdown--menu {
|
||||
display: flex !important;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.o-checkbox {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.form-check-input {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.o_add_favorite + .o_accordion_values {
|
||||
.o_add_favorite_props {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.o_add_favorite_name {
|
||||
margin-bottom: 0.5rem;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.form-check-input {
|
||||
height: $big-checkbox-size;
|
||||
width: $big-checkbox-size;
|
||||
}
|
||||
|
||||
.form-check-label {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
.o-checkbox {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.o_setting_container .o_setting_box {
|
||||
.o-checkbox:not(.o_boolean_toggle) {
|
||||
.form-check-label {
|
||||
&::after {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
&::before {
|
||||
outline: none !important;
|
||||
border: 1px solid #4c4c4c;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
$o-form-renderer-max-width: 3840px;
|
||||
$o-form-view-sheet-max-width: 2560px;
|
|
@ -0,0 +1,26 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
.o_mobile_sticky {
|
||||
transition: top 0.5s;
|
||||
}
|
||||
|
||||
// Sticky Header & Footer in List View
|
||||
.o_list_view {
|
||||
.o_list_table {
|
||||
thead {
|
||||
box-shadow: 0 1px 0 0 var(--ListRenderer-thead-border-end-color);
|
||||
}
|
||||
|
||||
.o_list_footer {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
z-index: 2;
|
||||
background-color: var(--ListRenderer-thead-bg-color);
|
||||
box-shadow: 0 -1px 0 -1px var(--ListRenderer-thead-border-end-color);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
$app-menu-text-color: #374151 !default;
|
||||
$app-menu-background-color: rgb(233, 230, 249) !default;
|
||||
$app-menu-item-highlight: rgb(243, 240, 259) !default;
|
||||
$app-menu-box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.16),
|
||||
0 2px 2px rgba(0, 0, 0, 0.016), 0 4px 4px rgba(0, 0, 0, 0.016),
|
||||
0 8px 8px rgba(0, 0, 0, 0.016), 0 16px 16px rgba(0, 0, 0, 0.016) !default;
|
||||
$app-menu-box-shadow-highlight: inset 0 0 0 1px rgba(0, 0, 0, 0.26),
|
||||
0 2px 2px rgba(0, 0, 0, 0.026), 0 4px 4px rgba(0, 0, 0, 0.026),
|
||||
0 8px 8px rgba(0, 0, 0, 0.026), 0 16px 16px rgba(0, 0, 0, 0.026) !default;
|
|
@ -0,0 +1,215 @@
|
|||
/* Copyright 2018 Tecnativa - Jairo Llopis
|
||||
* 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). */
|
||||
|
||||
$chatter_zone_width: 35% !important;
|
||||
|
||||
// Allow sticky header
|
||||
.o_action_manager {
|
||||
.o_form_view {
|
||||
overflow: unset;
|
||||
|
||||
.o_form_view_container {
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.ui-menu-item-wrapper {
|
||||
display: inline-flex !important;
|
||||
align-items: center;
|
||||
height: 35px;
|
||||
}
|
||||
.o_calendar_widget {
|
||||
.fc-dayGridMonth-view {
|
||||
.fc-week-number {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.fc-timeGridDay-view {
|
||||
.fc-day-header {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
}
|
||||
.o_kanban_view .o_cp_pager .btn-group {
|
||||
top: -1px;
|
||||
}
|
||||
.o_kanban_renderer {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
// Normal views
|
||||
.o_content,
|
||||
.modal-content {
|
||||
max-width: 100%;
|
||||
|
||||
// Form views
|
||||
.o_form_editable {
|
||||
.o_cell .o_form_label:not(.o_status):not(.o_calendar_invitation) {
|
||||
min-height: 23px;
|
||||
@include media-breakpoint-up(md) {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.o_horizontal_separator {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
// Some UX improvements for form in edit mode
|
||||
@include media-breakpoint-down(sm) {
|
||||
&.o_form_editable .o_field_widget {
|
||||
&:not(.o_stat_info):not(.o_readonly_modifier):not(.oe_form_field_html):not(.o_field_image) {
|
||||
min-height: 35px;
|
||||
}
|
||||
|
||||
.o_x2m_control_panel {
|
||||
margin-bottom: 10px !important;
|
||||
}
|
||||
|
||||
&.o_field_float_percentage,
|
||||
&.o_field_monetary,
|
||||
&.o_field_many2many_selection,
|
||||
.o_field_many2one_selection {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.o_field_many2one_selection .o_input_dropdown,
|
||||
&.o_datepicker,
|
||||
&.o_partner_autocomplete_info {
|
||||
input {
|
||||
min-height: 35px;
|
||||
}
|
||||
}
|
||||
|
||||
.o_external_button {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.o_dropdown_button,
|
||||
.o_datepicker_button {
|
||||
top: 50%;
|
||||
right: 6px;
|
||||
bottom: auto;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
min-width: auto;
|
||||
|
||||
// Avoid overflow on modals
|
||||
.o_form_sheet {
|
||||
min-width: auto;
|
||||
}
|
||||
|
||||
// Render website inputs properly in phones
|
||||
.o_group .o_field_widget.o_text_overflow {
|
||||
// Overrides another !important
|
||||
width: auto !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//No content message improvements on mobile
|
||||
@include media-breakpoint-down(md) {
|
||||
.o_view_nocontent {
|
||||
top: 53px;
|
||||
}
|
||||
.o_nocontent_help {
|
||||
box-shadow: none;
|
||||
}
|
||||
.o_sample_data_disabled {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.o-mail-Form-chatter {
|
||||
&.o-isInFormSheetBg:not(.o-aside) {
|
||||
background-color: $white;
|
||||
|
||||
&:not(.o-aside) {
|
||||
width: auto;
|
||||
border-top: 1px solid $border-color;
|
||||
}
|
||||
}
|
||||
|
||||
&.o-aside {
|
||||
flex: 0 0 $chatter_zone_width;
|
||||
max-width: initial;
|
||||
min-width: initial;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
|
||||
body:not(.o_statusbar_buttons) {
|
||||
.oe-toolbar {
|
||||
z-index: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.o_inner_group > .mb-sm-0 {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.o_searchview_autocomplete {
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
// Color clue to tell the difference between a note and a public message
|
||||
// HACK: has() pseudo class is broadly supported in desktop, even FF will deploy
|
||||
// full support soon (now it's available behind a config flag)
|
||||
// https://caniuse.com/css-has
|
||||
.o-mail-Chatter-top:has(.o-mail-Chatter-sendMessage.active) {
|
||||
.o-mail-Composer {
|
||||
background-color: lighten($o-brand-primary, 35%);
|
||||
padding-top: 0.25rem !important;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
.o-mail-Composer {
|
||||
padding-top: 0.5rem !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.app_settings_block > h2,
|
||||
.app_settings_block > div > h2 {
|
||||
@include o-position-sticky(0);
|
||||
z-index: 10;
|
||||
}
|
||||
}
|
||||
|
||||
.o_list_table {
|
||||
.o_handle_cell,
|
||||
.o_list_record_remove {
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.o_action_manager {
|
||||
.dropdown-menu {
|
||||
max-height: 70vh;
|
||||
max-height: 70dvh;
|
||||
}
|
||||
|
||||
.o_searchview_input {
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
}
|
||||
|
||||
.o_control_panel_main {
|
||||
.btn {
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<templates>
|
||||
|
||||
<t
|
||||
t-name="web_responsive.CustomFavoriteItem"
|
||||
t-inherit="web.CustomFavoriteItem"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<xpath expr="//AccordionItem/div[1]" position="attributes">
|
||||
<attribute name="class" add="o_add_favorite_props" separator=" " />
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//AccordionItem/div[1]/input[hasclass('o_input')]"
|
||||
position="attributes"
|
||||
>
|
||||
<attribute name="class" add="o_add_favorite_name" separator=" " />
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
</templates>
|
|
@ -0,0 +1,206 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2017 LasLabs Inc.
|
||||
Copyright 2018 Alexandre Díaz
|
||||
Copyright 2018 Tecnativa - Jairo Llopis
|
||||
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).
|
||||
-->
|
||||
<templates id="form_view">
|
||||
<!-- Template for buttons that display only the icon in xs -->
|
||||
<t t-name="web_responsive.icon_button_create">
|
||||
<i t-attf-class="fa fa-plus" title="New" />
|
||||
<span class="d-none d-sm-inline ms-1">New</span>
|
||||
</t>
|
||||
<t t-name="web_responsive.icon_button_save">
|
||||
<i t-attf-class="fa fa-check" title="Save" />
|
||||
<span class="d-none d-sm-inline ms-1">Save</span>
|
||||
</t>
|
||||
<t t-name="web_responsive.icon_button_discard">
|
||||
<i t-attf-class="fa fa-undo" title="Discard" />
|
||||
<span class="d-none d-sm-inline ms-1">Discard</span>
|
||||
</t>
|
||||
<t
|
||||
t-name="web_responsive.FormView.Buttons"
|
||||
t-inherit="web.FormView.Buttons"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<!-- Change "Discard" button hotkey to "D" -->
|
||||
<xpath expr="//button[hasclass('o_form_button_cancel')]" position="attributes">
|
||||
<attribute name="data-hotkey">d</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_form_button_save')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary o_form_button_save"
|
||||
data-hotkey="s"
|
||||
t-on-click.stop="() => this.saveButtonClicked({closable: true})"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_save" />
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_form_button_cancel')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary o_form_button_cancel"
|
||||
data-hotkey="j"
|
||||
t-on-click.stop="discard"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_discard" />
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_form_button_create')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary o_form_button_create"
|
||||
data-hotkey="c"
|
||||
t-on-click.stop="create"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_create" />
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t
|
||||
t-name="web_responsive.SettingsFormView.Buttons"
|
||||
t-inherit="web.SettingsFormView.Buttons"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<xpath expr="//button[hasclass('o_form_button_save')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary o_form_button_save"
|
||||
data-hotkey="s"
|
||||
t-on-click.stop="() => this.saveButtonClicked({closable: true})"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_save" />
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_form_button_cancel')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary o_form_button_cancel"
|
||||
data-hotkey="j"
|
||||
t-on-click.stop="discard"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_discard" />
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_form_button_create')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary o_form_button_create"
|
||||
data-hotkey="c"
|
||||
t-on-click.stop="create"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_create" />
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t
|
||||
t-name="web_responsive.FormView"
|
||||
t-inherit="web.FormView"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<xpath
|
||||
expr="//button[hasclass('o_form_button_create')][hasclass('btn-outline-primary')]"
|
||||
position="replace"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-outline-primary o_form_button_create"
|
||||
data-hotkey="c"
|
||||
t-on-click.stop="create"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_create" />
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath
|
||||
expr="//button[hasclass('o_form_button_create')][hasclass('btn-secondary')]"
|
||||
position="replace"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary o_form_button_create"
|
||||
data-hotkey="c"
|
||||
t-on-click.stop="create"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_create" />
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
<t t-name="web_responsive.FormStatusIndicator" t-inherit="web.FormStatusIndicator">
|
||||
<!-- Change "Discard" button hotkey to "D" -->
|
||||
<xpath expr="//button[hasclass('o_form_button_cancel')]" position="attributes">
|
||||
<attribute name="data-hotkey">d</attribute>
|
||||
</xpath>
|
||||
</t>
|
||||
<t
|
||||
t-name="web_responsive.KanbanView"
|
||||
t-inherit="web.KanbanView"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<!-- Add responsive icons to buttons -->
|
||||
<xpath expr="//button[hasclass('o-kanban-button-new')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary o-kanban-button-new"
|
||||
accesskey="c"
|
||||
t-on-click="() => this.createRecord()"
|
||||
data-bounce-button=""
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_create" />
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
<t
|
||||
t-name="web_responsive.ListView"
|
||||
t-inherit="web.ListView"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<!-- Add responsive icons to buttons -->
|
||||
<xpath expr="//button[hasclass('o_list_button_add')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary o_list_button_add"
|
||||
data-hotkey="c"
|
||||
t-on-click="onClickCreate"
|
||||
data-bounce-button=""
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_create" />
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
<t
|
||||
t-name="web_responsive.ListView.Buttons"
|
||||
t-inherit="web.ListView.Buttons"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<!-- Add responsive icons to buttons -->
|
||||
<xpath expr="//button[hasclass('o_list_button_save')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-primary o_list_button_save"
|
||||
data-hotkey="s"
|
||||
t-on-click.stop="onClickSave"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_save" />
|
||||
</button>
|
||||
</xpath>
|
||||
<xpath expr="//button[hasclass('o_list_button_discard')]" position="replace">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary o_list_button_discard"
|
||||
data-hotkey="d"
|
||||
t-on-click.stop="onClickDiscard"
|
||||
t-on-mousedown="onMouseDownDiscard"
|
||||
>
|
||||
<t t-call="web_responsive.icon_button_discard" />
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
|
@ -0,0 +1,201 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2017 Kirollos Risk
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,10 @@
|
|||
/* Copyright 2023 Tecnativa - Carlos Roca
|
||||
* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
// Many2one li items with wrap
|
||||
.o_field_many2one_selection {
|
||||
.o-autocomplete--dropdown-menu .ui-menu-item-wrapper {
|
||||
white-space: initial;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
/* Copyright 2023 Taras Shabaranskyi
|
||||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
||||
|
||||
.o_xxl_form_view {
|
||||
.o_form_sheet_bg {
|
||||
overflow: unset;
|
||||
|
||||
.o_form_sheet {
|
||||
overflow: auto;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 10px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: $o-brand-odoo;
|
||||
border-radius: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2023 Taras Shabaranskyi
|
||||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
|
||||
-->
|
||||
<templates>
|
||||
|
||||
<t
|
||||
t-name="web_responsive.StatusBarButtons"
|
||||
t-inherit="web.StatusBarButtons"
|
||||
t-inherit-mode="extension"
|
||||
>
|
||||
<xpath expr="//Dropdown" position="attributes">
|
||||
<attribute name="hotkey">'shift+a'</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//t[@t-set-slot='toggler']" position="replace">
|
||||
<t t-set-slot="toggler">
|
||||
<i class="fa fa-sliders me-1 me-sm-2" />
|
||||
<span class="d-none d-sm-inline">Action</span>
|
||||
</t>
|
||||
</xpath>
|
||||
</t>
|
||||
|
||||
</templates>
|