Browse Source
Merge branch '11.0' of https://github.com/OCA/web into 11.0-mig-web_domain_field
pull/1019/head
Merge branch '11.0' of https://github.com/OCA/web into 11.0-mig-web_domain_field
pull/1019/head
Martin Nicolas Cuesta
5 years ago
225 changed files with 11448 additions and 1632 deletions
-
2setup/_metapackage/VERSION.txt
-
7setup/_metapackage/setup.py
-
1setup/web_advanced_search/odoo/addons/web_advanced_search
-
2setup/web_advanced_search/setup.cfg
-
6setup/web_advanced_search/setup.py
-
1setup/web_editor_background_color/odoo/addons/web_editor_background_color
-
2setup/web_editor_background_color/setup.cfg
-
6setup/web_editor_background_color/setup.py
-
1setup/web_export_view/odoo/addons/web_export_view
-
2setup/web_export_view/setup.cfg
-
6setup/web_export_view/setup.py
-
1setup/web_send_message_popup/odoo/addons/web_send_message_popup
-
2setup/web_send_message_popup/setup.cfg
-
6setup/web_send_message_popup/setup.py
-
1setup/web_tree_image/odoo/addons/web_tree_image
-
2setup/web_tree_image/setup.cfg
-
6setup/web_tree_image/setup.py
-
1setup/web_tree_resize_column/odoo/addons/web_tree_resize_column
-
2setup/web_tree_resize_column/setup.cfg
-
6setup/web_tree_resize_column/setup.py
-
1setup/web_widget_url_advanced/odoo/addons/web_widget_url_advanced
-
2setup/web_widget_url_advanced/setup.cfg
-
6setup/web_widget_url_advanced/setup.py
-
166web_advanced_search/README.rst
-
0web_advanced_search/__init__.py
-
27web_advanced_search/__manifest__.py
-
24web_advanced_search/i18n/da.po
-
29web_advanced_search/i18n/de.po
-
29web_advanced_search/i18n/es.po
-
29web_advanced_search/i18n/fr.po
-
30web_advanced_search/i18n/hr.po
-
29web_advanced_search/i18n/nl.po
-
30web_advanced_search/i18n/nl_NL.po
-
31web_advanced_search/i18n/pt_BR.po
-
22web_advanced_search/i18n/web_advanced_search.pot
-
6web_advanced_search/readme/CONTRIBUTORS.rst
-
1web_advanced_search/readme/DESCRIPTION.rst
-
40web_advanced_search/readme/HISTORY.rst
-
14web_advanced_search/readme/ROADMAP.rst
-
21web_advanced_search/readme/USAGE.rst
-
BINweb_advanced_search/static/description/icon.png
-
516web_advanced_search/static/description/index.html
-
13web_advanced_search/static/src/css/web_advanced_search.less
-
86web_advanced_search/static/src/js/human_domain.js
-
348web_advanced_search/static/src/js/web_advanced_search.js
-
13web_advanced_search/static/src/xml/web_advanced_search.xml
-
14web_advanced_search/views/templates.xml
-
2web_decimal_numpad_dot/__manifest__.py
-
28web_decimal_numpad_dot/static/src/js/numpad_dot.js
-
4web_dialog_size/static/src/js/web_dialog_size.js
-
98web_editor_background_color/README.rst
-
0web_editor_background_color/__init__.py
-
22web_editor_background_color/__manifest__.py
-
22web_editor_background_color/i18n/ca.po
-
21web_editor_background_color/i18n/es.po
-
23web_editor_background_color/i18n/fr.po
-
24web_editor_background_color/i18n/sl.po
-
14web_editor_background_color/i18n/web_editor_background_color.pot
-
1web_editor_background_color/readme/CONTRIBUTORS.rst
-
3web_editor_background_color/readme/CREDITS.rst
-
5web_editor_background_color/readme/DESCRIPTION.rst
-
10web_editor_background_color/readme/USAGE.rst
-
BINweb_editor_background_color/static/description/icon.png
-
445web_editor_background_color/static/description/index.html
-
21web_editor_background_color/static/src/css/background_color.less
-
103web_editor_background_color/static/src/js/background_color.js
-
230web_editor_background_color/static/src/lib/bootstrap-colorpicker/bootstrap-colorpicker.css
-
1327web_editor_background_color/static/src/lib/bootstrap-colorpicker/bootstrap-colorpicker.js
-
18web_editor_background_color/static/src/xml/colorpicker.xml
-
18web_editor_background_color/templates/assets.xml
-
81web_export_view/README.rst
-
3web_export_view/__init__.py
-
30web_export_view/__manifest__.py
-
1web_export_view/controllers/__init__.py
-
34web_export_view/controllers/controllers.py
-
41web_export_view/i18n/da.po
-
45web_export_view/i18n/de.po
-
45web_export_view/i18n/es.po
-
46web_export_view/i18n/hr.po
-
46web_export_view/i18n/nl_NL.po
-
47web_export_view/i18n/pt_BR.po
-
41web_export_view/i18n/web_export_view.pot
-
46web_export_view/i18n/zh_CN.po
-
9web_export_view/security/groups.xml
-
BINweb_export_view/static/description/icon.png
-
118web_export_view/static/src/js/web_export_view.js
-
11web_export_view/static/src/xml/web_export_view_template.xml
-
9web_export_view/views/web_export_view_view.xml
-
62web_favicon/i18n/ca.po
-
62web_favicon/i18n/da.po
-
11web_favicon/i18n/es.po
-
2web_listview_range_select/__manifest__.py
-
10web_listview_range_select/static/src/js/web_listview_range_select.js
-
20web_m2x_options/i18n/ar.po
-
20web_m2x_options/i18n/de.po
-
20web_m2x_options/i18n/es.po
-
20web_m2x_options/i18n/fi.po
-
20web_m2x_options/i18n/fr.po
-
20web_m2x_options/i18n/hr.po
-
20web_m2x_options/i18n/it.po
@ -1 +1 @@ |
|||
11.0.20180721.0 |
|||
11.0.20190214.0 |
@ -0,0 +1 @@ |
|||
../../../../web_advanced_search |
@ -0,0 +1,2 @@ |
|||
[bdist_wheel] |
|||
universal=1 |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
@ -0,0 +1 @@ |
|||
../../../../web_editor_background_color |
@ -0,0 +1,2 @@ |
|||
[bdist_wheel] |
|||
universal=1 |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
@ -0,0 +1 @@ |
|||
../../../../web_export_view |
@ -0,0 +1,2 @@ |
|||
[bdist_wheel] |
|||
universal=1 |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
@ -0,0 +1 @@ |
|||
../../../../web_send_message_popup |
@ -0,0 +1,2 @@ |
|||
[bdist_wheel] |
|||
universal=1 |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
@ -0,0 +1 @@ |
|||
../../../../web_tree_image |
@ -0,0 +1,2 @@ |
|||
[bdist_wheel] |
|||
universal=1 |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
@ -0,0 +1 @@ |
|||
../../../../web_tree_resize_column |
@ -0,0 +1,2 @@ |
|||
[bdist_wheel] |
|||
universal=1 |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
@ -0,0 +1 @@ |
|||
../../../../web_widget_url_advanced |
@ -0,0 +1,2 @@ |
|||
[bdist_wheel] |
|||
universal=1 |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
@ -0,0 +1,166 @@ |
|||
=============== |
|||
Advanced search |
|||
=============== |
|||
|
|||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
!! This file is generated by oca-gen-addon-readme !! |
|||
!! changes will be overwritten. !! |
|||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
|
|||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png |
|||
:target: https://odoo-community.org/page/development-status |
|||
:alt: Beta |
|||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png |
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github |
|||
:target: https://github.com/OCA/web/tree/11.0/web_advanced_search |
|||
:alt: OCA/web |
|||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png |
|||
:target: https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_advanced_search |
|||
:alt: Translate me on Weblate |
|||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png |
|||
:target: https://runbot.odoo-community.org/runbot/162/11.0 |
|||
:alt: Try me on Runbot |
|||
|
|||
|badge1| |badge2| |badge3| |badge4| |badge5| |
|||
|
|||
More powerful and easy to use search, especially for related fields. |
|||
|
|||
**Table of contents** |
|||
|
|||
.. contents:: |
|||
:local: |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
To use this module, you need to: |
|||
|
|||
* Open *Filters* in a search view |
|||
* Select any relational field |
|||
* Select operator `is equal to` or `is not equal to` |
|||
* The text field changes to a relational selection field where you |
|||
can search for the record in question |
|||
* Click *Apply* |
|||
|
|||
To search for properties of linked records (ie invoices for customers |
|||
with a credit limit higher than X): |
|||
|
|||
* Open *Filters* in a search view |
|||
* Select *Add Advanced Filter* |
|||
* Edit the advanced filter |
|||
* Click *Save* |
|||
|
|||
Note that you can stack searching for properties: Simply add another |
|||
advanced search in the selection search window. You can do |
|||
this indefinetely, so it is possible to search for moves belonging |
|||
to a journal which has a user who is member of a certain group etc. |
|||
|
|||
Known issues / Roadmap |
|||
====================== |
|||
|
|||
Improvements to the ``domain`` widget, not exclusively related to this addon: |
|||
|
|||
* Use relational widgets when filtering a relational field |
|||
* Allow to filter field names |
|||
|
|||
Improvements to the search view in this addon: |
|||
|
|||
* Use widgets ``one2many_tags`` when searching ``one2many`` fields |
|||
* Use widgets ``many2many_tags`` when searching ``many2many`` fields |
|||
* Allow to edit current full search using the advanced domain editor |
|||
* Allow to edit individually any facet from current search using the |
|||
advanced domain editor |
|||
* Beautiful, human-readable, domain representation when adding an |
|||
advanced filter |
|||
|
|||
Changelog |
|||
========= |
|||
|
|||
11.0.1.0.2 (2018-10-31) |
|||
~~~~~~~~~~~~~~~~~~~~~~~ |
|||
|
|||
* Fix initialization of 1st domain node |
|||
|
|||
Sometime the dialog is not ready yet, like on EE version. |
|||
Hence when you inject the 1st domain node |
|||
the dialog must be already opened. |
|||
|
|||
[simahawk] |
|||
|
|||
|
|||
11.0.1.0.1 (2018-09-18) |
|||
~~~~~~~~~~~~~~~~~~~~~~~ |
|||
|
|||
* Fix `undefined` in x2m fields |
|||
|
|||
Before this patch, when searching with the "equals to" operator in any |
|||
x2many field, the searched parameter was always `undefined`. |
|||
|
|||
The problem was that the underlying field manager implementation was |
|||
treating those fields as x2many, while the widget used was the `one2many` |
|||
one. |
|||
|
|||
This patch simply mocks the underlying fake record to make think that |
|||
any relational field is always a `one2many`. This sets all pieces in |
|||
place and makes the field manager work as expected, and thus you can |
|||
search as expected too. |
|||
|
|||
* Make linter happy |
|||
|
|||
[Yajo] |
|||
|
|||
|
|||
11.0.1.0.0 (2018-07-20) |
|||
~~~~~~~~~~~~~~~~~~~~~~~ |
|||
|
|||
* Rename, refactor, migrate to v11 |
|||
|
|||
[Yajo] |
|||
|
|||
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 smashing it by providing a detailed and welcomed |
|||
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_advanced_search%0Aversion:%2011.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 |
|||
~~~~~~~ |
|||
|
|||
* Therp BV |
|||
* Tecnativa |
|||
|
|||
Contributors |
|||
~~~~~~~~~~~~ |
|||
|
|||
* Holger Brunn <hbrunn@therp.nl> |
|||
* Vicent Cubells <vicent.cubells@tecnativa.com> |
|||
* Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
* Rami Alwafaie <rami.alwafaie@initos.com> |
|||
* Jose Mª Bernet <josemaria.bernet@guadaltech.es> |
|||
* Simone Orsi <simone.orsi@camptocamp.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. |
|||
|
|||
This module is part of the `OCA/web <https://github.com/OCA/web/tree/11.0/web_advanced_search>`_ project on GitHub. |
|||
|
|||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
@ -0,0 +1,27 @@ |
|||
# Copyright 2015 Therp BV <http://therp.nl> |
|||
# Copyright 2017 Tecnativa - Vicent Cubells |
|||
# Copyright 2018 Tecnativa - Jairo Llopis |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
{ |
|||
"name": "Advanced search", |
|||
"version": "11.0.1.0.2", |
|||
"author": "Therp BV, " |
|||
"Tecnativa, " |
|||
"Odoo Community Association (OCA)", |
|||
"license": "AGPL-3", |
|||
"category": "Usability", |
|||
"summary": "Easier and more powerful searching tools", |
|||
"website": "https://github.com/OCA/web", |
|||
"depends": [ |
|||
'web', |
|||
], |
|||
"data": [ |
|||
'views/templates.xml', |
|||
], |
|||
"qweb": [ |
|||
'static/src/xml/web_advanced_search.xml', |
|||
], |
|||
"installable": True, |
|||
"application": False, |
|||
} |
@ -0,0 +1,24 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 11.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"PO-Revision-Date: 2018-09-01 05:03+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_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "Tilføj avanceret filter" |
@ -0,0 +1,29 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search_x2x |
|||
# |
|||
# Translators: |
|||
# Rudolf Schnapka <rs@techno-flex.de>, 2018 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2018-01-03 03:49+0000\n" |
|||
"PO-Revision-Date: 2018-01-03 03:49+0000\n" |
|||
"Last-Translator: Rudolf Schnapka <rs@techno-flex.de>, 2018\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" |
|||
|
|||
#. module: web_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
|||
#~ msgid "is in selection" |
|||
#~ msgstr "Ist in Auswahl" |
@ -0,0 +1,29 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search_x2x |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2017 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2018-01-03 03:49+0000\n" |
|||
"PO-Revision-Date: 2018-01-03 03:49+0000\n" |
|||
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\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: \n" |
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
|||
|
|||
#. module: web_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
|||
#~ msgid "is in selection" |
|||
#~ msgstr "está en la selección" |
@ -0,0 +1,29 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search_x2x |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2017 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2018-01-03 03:49+0000\n" |
|||
"PO-Revision-Date: 2018-01-03 03:49+0000\n" |
|||
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n" |
|||
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\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" |
|||
|
|||
#. module: web_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
|||
#~ msgid "is in selection" |
|||
#~ msgstr "parmi la sélection" |
@ -0,0 +1,30 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search_x2x |
|||
# |
|||
# Translators: |
|||
# Bole <bole@dajmi5.com>, 2017 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2018-01-03 03:49+0000\n" |
|||
"PO-Revision-Date: 2018-01-03 03:49+0000\n" |
|||
"Last-Translator: Bole <bole@dajmi5.com>, 2017\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" |
|||
|
|||
#. module: web_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
|||
#~ msgid "is in selection" |
|||
#~ msgstr "je u odabiru" |
@ -0,0 +1,29 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search_x2x |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2017 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2018-01-03 03:49+0000\n" |
|||
"PO-Revision-Date: 2018-01-03 03:49+0000\n" |
|||
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n" |
|||
"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\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" |
|||
|
|||
#. module: web_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
|||
#~ msgid "is in selection" |
|||
#~ msgstr "is in selectie" |
@ -0,0 +1,30 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search_x2x |
|||
# |
|||
# Translators: |
|||
# Peter Hageman <hageman.p@gmail.com>, 2017 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2018-01-03 03:49+0000\n" |
|||
"PO-Revision-Date: 2018-01-03 03:49+0000\n" |
|||
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n" |
|||
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" |
|||
"teams/23907/nl_NL/)\n" |
|||
"Language: nl_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" |
|||
|
|||
#. module: web_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
|||
#~ msgid "is in selection" |
|||
#~ msgstr "Is in selectie" |
@ -0,0 +1,31 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search_x2x |
|||
# |
|||
# 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: 2018-01-03 03:49+0000\n" |
|||
"PO-Revision-Date: 2018-01-03 03:49+0000\n" |
|||
"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " |
|||
"<rmsolucoeseminformatic4@gmail.com>, 2017\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" |
|||
|
|||
#. module: web_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
|||
#~ msgid "is in selection" |
|||
#~ msgstr "Está em seleção" |
@ -0,0 +1,22 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_advanced_search |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 11.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_advanced_search |
|||
#. openerp-web |
|||
#: code:addons/web_advanced_search/static/src/xml/web_advanced_search.xml:9 |
|||
#, python-format |
|||
msgid "Add Advanced Filter" |
|||
msgstr "" |
|||
|
@ -0,0 +1,6 @@ |
|||
* Holger Brunn <hbrunn@therp.nl> |
|||
* Vicent Cubells <vicent.cubells@tecnativa.com> |
|||
* Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
* Rami Alwafaie <rami.alwafaie@initos.com> |
|||
* Jose Mª Bernet <josemaria.bernet@guadaltech.es> |
|||
* Simone Orsi <simone.orsi@camptocamp.com> |
@ -0,0 +1 @@ |
|||
More powerful and easy to use search, especially for related fields. |
@ -0,0 +1,40 @@ |
|||
11.0.1.0.2 (2018-10-31) |
|||
~~~~~~~~~~~~~~~~~~~~~~~ |
|||
|
|||
* Fix initialization of 1st domain node |
|||
|
|||
Sometime the dialog is not ready yet, like on EE version. |
|||
Hence when you inject the 1st domain node |
|||
the dialog must be already opened. |
|||
|
|||
[simahawk] |
|||
|
|||
|
|||
11.0.1.0.1 (2018-09-18) |
|||
~~~~~~~~~~~~~~~~~~~~~~~ |
|||
|
|||
* Fix `undefined` in x2m fields |
|||
|
|||
Before this patch, when searching with the "equals to" operator in any |
|||
x2many field, the searched parameter was always `undefined`. |
|||
|
|||
The problem was that the underlying field manager implementation was |
|||
treating those fields as x2many, while the widget used was the `one2many` |
|||
one. |
|||
|
|||
This patch simply mocks the underlying fake record to make think that |
|||
any relational field is always a `one2many`. This sets all pieces in |
|||
place and makes the field manager work as expected, and thus you can |
|||
search as expected too. |
|||
|
|||
* Make linter happy |
|||
|
|||
[Yajo] |
|||
|
|||
|
|||
11.0.1.0.0 (2018-07-20) |
|||
~~~~~~~~~~~~~~~~~~~~~~~ |
|||
|
|||
* Rename, refactor, migrate to v11 |
|||
|
|||
[Yajo] |
@ -0,0 +1,14 @@ |
|||
Improvements to the ``domain`` widget, not exclusively related to this addon: |
|||
|
|||
* Use relational widgets when filtering a relational field |
|||
* Allow to filter field names |
|||
|
|||
Improvements to the search view in this addon: |
|||
|
|||
* Use widgets ``one2many_tags`` when searching ``one2many`` fields |
|||
* Use widgets ``many2many_tags`` when searching ``many2many`` fields |
|||
* Allow to edit current full search using the advanced domain editor |
|||
* Allow to edit individually any facet from current search using the |
|||
advanced domain editor |
|||
* Beautiful, human-readable, domain representation when adding an |
|||
advanced filter |
@ -0,0 +1,21 @@ |
|||
To use this module, you need to: |
|||
|
|||
* Open *Filters* in a search view |
|||
* Select any relational field |
|||
* Select operator `is equal to` or `is not equal to` |
|||
* The text field changes to a relational selection field where you |
|||
can search for the record in question |
|||
* Click *Apply* |
|||
|
|||
To search for properties of linked records (ie invoices for customers |
|||
with a credit limit higher than X): |
|||
|
|||
* Open *Filters* in a search view |
|||
* Select *Add Advanced Filter* |
|||
* Edit the advanced filter |
|||
* Click *Save* |
|||
|
|||
Note that you can stack searching for properties: Simply add another |
|||
advanced search in the selection search window. You can do |
|||
this indefinetely, so it is possible to search for moves belonging |
|||
to a journal which has a user who is member of a certain group etc. |
After Width: 100 | Height: 100 | Size: 2.0 KiB |
@ -0,0 +1,516 @@ |
|||
<?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 0.14: http://docutils.sourceforge.net/" /> |
|||
<title>Advanced search</title> |
|||
<style type="text/css"> |
|||
|
|||
/* |
|||
:Author: David Goodger (goodger@python.org) |
|||
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $ |
|||
:Copyright: This stylesheet has been placed in the public domain. |
|||
|
|||
Default cascading style sheet for the HTML output of Docutils. |
|||
|
|||
See http://docutils.sf.net/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="advanced-search"> |
|||
<h1 class="title">Advanced search</h1> |
|||
|
|||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
!! This file is generated by oca-gen-addon-readme !! |
|||
!! changes will be overwritten. !! |
|||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> |
|||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/web/tree/11.0/web_advanced_search"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_advanced_search"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/162/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> |
|||
<p>More powerful and easy to use search, especially for related fields.</p> |
|||
<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="id4">Usage</a></li> |
|||
<li><a class="reference internal" href="#known-issues-roadmap" id="id5">Known issues / Roadmap</a></li> |
|||
<li><a class="reference internal" href="#changelog" id="id6">Changelog</a><ul> |
|||
<li><a class="reference internal" href="#id1" id="id7">11.0.1.0.2 (2018-10-31)</a></li> |
|||
<li><a class="reference internal" href="#id2" id="id8">11.0.1.0.1 (2018-09-18)</a></li> |
|||
<li><a class="reference internal" href="#id3" id="id9">11.0.1.0.0 (2018-07-20)</a></li> |
|||
</ul> |
|||
</li> |
|||
<li><a class="reference internal" href="#bug-tracker" id="id10">Bug Tracker</a></li> |
|||
<li><a class="reference internal" href="#credits" id="id11">Credits</a><ul> |
|||
<li><a class="reference internal" href="#authors" id="id12">Authors</a></li> |
|||
<li><a class="reference internal" href="#contributors" id="id13">Contributors</a></li> |
|||
<li><a class="reference internal" href="#maintainers" id="id14">Maintainers</a></li> |
|||
</ul> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="usage"> |
|||
<h1><a class="toc-backref" href="#id4">Usage</a></h1> |
|||
<p>To use this module, you need to:</p> |
|||
<ul class="simple"> |
|||
<li>Open <em>Filters</em> in a search view</li> |
|||
<li>Select any relational field</li> |
|||
<li>Select operator <cite>is equal to</cite> or <cite>is not equal to</cite></li> |
|||
<li>The text field changes to a relational selection field where you |
|||
can search for the record in question</li> |
|||
<li>Click <em>Apply</em></li> |
|||
</ul> |
|||
<p>To search for properties of linked records (ie invoices for customers |
|||
with a credit limit higher than X):</p> |
|||
<ul class="simple"> |
|||
<li>Open <em>Filters</em> in a search view</li> |
|||
<li>Select <em>Add Advanced Filter</em></li> |
|||
<li>Edit the advanced filter</li> |
|||
<li>Click <em>Save</em></li> |
|||
</ul> |
|||
<p>Note that you can stack searching for properties: Simply add another |
|||
advanced search in the selection search window. You can do |
|||
this indefinetely, so it is possible to search for moves belonging |
|||
to a journal which has a user who is member of a certain group etc.</p> |
|||
</div> |
|||
<div class="section" id="known-issues-roadmap"> |
|||
<h1><a class="toc-backref" href="#id5">Known issues / Roadmap</a></h1> |
|||
<p>Improvements to the <tt class="docutils literal">domain</tt> widget, not exclusively related to this addon:</p> |
|||
<ul class="simple"> |
|||
<li>Use relational widgets when filtering a relational field</li> |
|||
<li>Allow to filter field names</li> |
|||
</ul> |
|||
<p>Improvements to the search view in this addon:</p> |
|||
<ul class="simple"> |
|||
<li>Use widgets <tt class="docutils literal">one2many_tags</tt> when searching <tt class="docutils literal">one2many</tt> fields</li> |
|||
<li>Use widgets <tt class="docutils literal">many2many_tags</tt> when searching <tt class="docutils literal">many2many</tt> fields</li> |
|||
<li>Allow to edit current full search using the advanced domain editor</li> |
|||
<li>Allow to edit individually any facet from current search using the |
|||
advanced domain editor</li> |
|||
<li>Beautiful, human-readable, domain representation when adding an |
|||
advanced filter</li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="changelog"> |
|||
<h1><a class="toc-backref" href="#id6">Changelog</a></h1> |
|||
<div class="section" id="id1"> |
|||
<h2><a class="toc-backref" href="#id7">11.0.1.0.2 (2018-10-31)</a></h2> |
|||
<ul> |
|||
<li><p class="first">Fix initialization of 1st domain node</p> |
|||
<p>Sometime the dialog is not ready yet, like on EE version. |
|||
Hence when you inject the 1st domain node |
|||
the dialog must be already opened.</p> |
|||
<p>[simahawk]</p> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="id2"> |
|||
<h2><a class="toc-backref" href="#id8">11.0.1.0.1 (2018-09-18)</a></h2> |
|||
<ul> |
|||
<li><p class="first">Fix <cite>undefined</cite> in x2m fields</p> |
|||
<p>Before this patch, when searching with the “equals to” operator in any |
|||
x2many field, the searched parameter was always <cite>undefined</cite>.</p> |
|||
<p>The problem was that the underlying field manager implementation was |
|||
treating those fields as x2many, while the widget used was the <cite>one2many</cite> |
|||
one.</p> |
|||
<p>This patch simply mocks the underlying fake record to make think that |
|||
any relational field is always a <cite>one2many</cite>. This sets all pieces in |
|||
place and makes the field manager work as expected, and thus you can |
|||
search as expected too.</p> |
|||
</li> |
|||
<li><p class="first">Make linter happy</p> |
|||
<p>[Yajo]</p> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="id3"> |
|||
<h2><a class="toc-backref" href="#id9">11.0.1.0.0 (2018-07-20)</a></h2> |
|||
<ul> |
|||
<li><p class="first">Rename, refactor, migrate to v11</p> |
|||
<p>[Yajo]</p> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
</div> |
|||
<div class="section" id="bug-tracker"> |
|||
<h1><a class="toc-backref" href="#id10">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 smashing it by providing a detailed and welcomed |
|||
<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_advanced_search%0Aversion:%2011.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="#id11">Credits</a></h1> |
|||
<div class="section" id="authors"> |
|||
<h2><a class="toc-backref" href="#id12">Authors</a></h2> |
|||
<ul class="simple"> |
|||
<li>Therp BV</li> |
|||
<li>Tecnativa</li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="contributors"> |
|||
<h2><a class="toc-backref" href="#id13">Contributors</a></h2> |
|||
<ul class="simple"> |
|||
<li>Holger Brunn <<a class="reference external" href="mailto:hbrunn@therp.nl">hbrunn@therp.nl</a>></li> |
|||
<li>Vicent Cubells <<a class="reference external" href="mailto:vicent.cubells@tecnativa.com">vicent.cubells@tecnativa.com</a>></li> |
|||
<li>Jairo Llopis <<a class="reference external" href="mailto:jairo.llopis@tecnativa.com">jairo.llopis@tecnativa.com</a>></li> |
|||
<li>Rami Alwafaie <<a class="reference external" href="mailto:rami.alwafaie@initos.com">rami.alwafaie@initos.com</a>></li> |
|||
<li>Jose Mª Bernet <<a class="reference external" href="mailto:josemaria.bernet@guadaltech.es">josemaria.bernet@guadaltech.es</a>></li> |
|||
<li>Simone Orsi <<a class="reference external" href="mailto:simone.orsi@camptocamp.com">simone.orsi@camptocamp.com</a>></li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="maintainers"> |
|||
<h2><a class="toc-backref" href="#id14">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>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/11.0/web_advanced_search">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> |
@ -0,0 +1,13 @@ |
|||
.o_search_options { |
|||
.o_filters_menu { |
|||
.o_filter_condition { |
|||
max-width: inherit; |
|||
|
|||
.o_searchview_extended_prop_value { |
|||
.o_field_domain { |
|||
min-width: 30vw; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,86 @@ |
|||
/* Copyright 2018 Tecnativa - Jairo Llopis |
|||
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
|
|||
|
|||
odoo.define("web_advanced_search.human_domain", function (require) { |
|||
"use strict"; |
|||
|
|||
var DomainSelector = require("web.DomainSelector"); |
|||
|
|||
var join_mapping = { |
|||
"&": _(" and "), |
|||
"|": _(" or "), |
|||
"!": _(" is not "), |
|||
}; |
|||
|
|||
// HACK I should extend classes, but they are not exposed
|
|||
// TODO Remove file when merged https://github.com/odoo/odoo/pull/25922
|
|||
var human_domain_methods = { |
|||
DomainTree: function () { |
|||
var human_domains = []; |
|||
_.each(this.children, function (child) { |
|||
human_domains.push( |
|||
human_domain_methods[child.template].apply(child) |
|||
); |
|||
}); |
|||
return _.str.sprintf( |
|||
"(%s)", |
|||
human_domains.join(join_mapping[this.operator]) |
|||
); |
|||
}, |
|||
|
|||
DomainSelector: function () { |
|||
var result = human_domain_methods.DomainTree.apply(this, arguments); |
|||
// Remove surrounding parenthesis
|
|||
return result.slice(1, -1); |
|||
}, |
|||
|
|||
DomainLeaf: function () { |
|||
var chain = [], |
|||
operator = this.operator_mapping[this.operator], |
|||
value = _.str.sprintf('"%s"', this.value); |
|||
// Humanize chain
|
|||
this.chain.split(".").forEach(function (element, index) { |
|||
chain.push( |
|||
_.findWhere( |
|||
this.fieldSelector.pages[index], |
|||
{name: element} |
|||
).string || element |
|||
); |
|||
}, this); |
|||
// Special beautiness for some values
|
|||
if (this.operator === "=" && _.isBoolean(this.value)) { |
|||
operator = this.operator_mapping[this.value ? "set" : "not set"]; |
|||
value = ""; |
|||
} else if (_.isArray(this.value)) { |
|||
value = _.str.sprintf('["%s"]', this.value.join('", "')); |
|||
} |
|||
return _.str.sprintf( |
|||
"%s %s %s", |
|||
chain.join("→"), |
|||
operator || this.operator, |
|||
value |
|||
).trim(); |
|||
}, |
|||
}; |
|||
|
|||
function getHumanDomain (parent, model, domain, options) { |
|||
var domain_selector = new DomainSelector( |
|||
parent, |
|||
model, |
|||
domain, |
|||
options |
|||
); |
|||
var dummy_parent = $("<div>"); |
|||
domain_selector.appendTo(dummy_parent); |
|||
var result = human_domain_methods.DomainSelector.apply( |
|||
domain_selector |
|||
); |
|||
domain_selector.destroy(); |
|||
dummy_parent.destroy(); |
|||
return result; |
|||
} |
|||
|
|||
return { |
|||
getHumanDomain: getHumanDomain, |
|||
}; |
|||
}); |
@ -0,0 +1,348 @@ |
|||
/* Copyright 2015 Therp BV <http://therp.nl> |
|||
* Copyright 2017-2018 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
|
|||
|
|||
odoo.define("web_advanced_search", function (require) { |
|||
"use strict"; |
|||
|
|||
var core = require("web.core"); |
|||
var Domain = require("web.Domain"); |
|||
var DomainSelectorDialog = require("web.DomainSelectorDialog"); |
|||
var field_registry = require("web.field_registry"); |
|||
var FieldManagerMixin = require("web.FieldManagerMixin"); |
|||
var FilterMenu = require("web.FilterMenu"); |
|||
var human_domain = require("web_advanced_search.human_domain"); |
|||
var SearchView = require("web.SearchView"); |
|||
var Widget = require("web.Widget"); |
|||
var Char = core.search_filters_registry.get("char"); |
|||
|
|||
SearchView.include({ |
|||
custom_events: _.extend({}, SearchView.prototype.custom_events, { |
|||
"get_dataset": "_on_get_dataset", |
|||
}), |
|||
|
|||
/** |
|||
* Add or update a `dataset` attribute in event target |
|||
* |
|||
* The search view dataset includes things such as the model, which |
|||
* is required to make some parts of search views smarter. |
|||
* |
|||
* @param {OdooEvent} event The target will get the dataset. |
|||
*/ |
|||
_on_get_dataset: function (event) { |
|||
event.target.dataset = this.dataset; |
|||
event.stopPropagation(); |
|||
}, |
|||
}); |
|||
|
|||
/** |
|||
* An almost dummy search proposition, to use with domain widget |
|||
*/ |
|||
var AdvancedSearchProposition = Widget.extend({ |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
init: function (parent, model, domain) { |
|||
this._super(parent); |
|||
this.model = model; |
|||
this.domain = new Domain(domain); |
|||
}, |
|||
|
|||
/** |
|||
* Produce a filter descriptor for advanced searches. |
|||
* |
|||
* @returns {Object} In the format expected by `web.FilterMenu`. |
|||
*/ |
|||
get_filter: function () { |
|||
var domain_array = this.domain.toArray(); |
|||
return { |
|||
attrs: { |
|||
domain: domain_array, |
|||
// TODO Remove when merged
|
|||
// https://github.com/odoo/odoo/pull/25922
|
|||
string: human_domain.getHumanDomain( |
|||
this, |
|||
this.model, |
|||
domain_array |
|||
), |
|||
}, |
|||
children: [], |
|||
tag: "filter", |
|||
}; |
|||
}, |
|||
}); |
|||
|
|||
// Add advanced search features
|
|||
FilterMenu.include({ |
|||
custom_events: _.extend({}, FilterMenu.prototype.custom_events, { |
|||
"domain_selected": "advanced_search_commit", |
|||
}), |
|||
|
|||
events: _.extend({}, FilterMenu.prototype.events, { |
|||
"click .o_add_advanced_search": "advanced_search_open", |
|||
}), |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
init: function () { |
|||
this._super.apply(this, arguments); |
|||
this.trigger_up("get_dataset"); |
|||
}, |
|||
|
|||
/** |
|||
* Open advanced search dialog |
|||
* |
|||
* @returns {$.Deferred} The opening dialog itself. |
|||
*/ |
|||
advanced_search_open: function () { |
|||
var domain_selector_dialog = new DomainSelectorDialog( |
|||
this, |
|||
this.dataset.model, |
|||
"[]", |
|||
{ |
|||
debugMode: core.debug, |
|||
readonly: false, |
|||
} |
|||
); |
|||
domain_selector_dialog.opened(function () { |
|||
// Add 1st domain node by default
|
|||
domain_selector_dialog.domainSelector._onAddFirstButtonClick(); |
|||
}); |
|||
return domain_selector_dialog.open(); |
|||
}, |
|||
|
|||
/** |
|||
* Apply advanced search on dialog save |
|||
* |
|||
* @param {OdooEvent} event A `domain_selected` event from the dialog. |
|||
*/ |
|||
advanced_search_commit: function (event) { |
|||
_.invoke(this.propositions, "destroy"); |
|||
var proposition = new AdvancedSearchProposition( |
|||
this, |
|||
this.dataset.model, |
|||
event.data.domain |
|||
); |
|||
this.propositions = [proposition]; |
|||
this.commit_search(); |
|||
}, |
|||
}); |
|||
|
|||
/** |
|||
* A search field for relational fields. |
|||
* |
|||
* It implements and extends the `FieldManagerMixin`, and acts as if it |
|||
* were a reduced dummy controller. Some actions "mock" the underlying |
|||
* model, since sometimes we use a char widget to fill related fields |
|||
* (which is not supported by that widget), and fields need an underlying |
|||
* model implementation, which can only hold fake data, given a search view |
|||
* has no data on it by definition. |
|||
*/ |
|||
var Relational = Char.extend(FieldManagerMixin, { |
|||
tagName: "div", |
|||
className: "x2x_container", |
|||
attributes: {}, |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
init: function () { |
|||
this._super.apply(this, arguments); |
|||
// To make widgets work, we need a model and an empty record
|
|||
FieldManagerMixin.init.call(this); |
|||
this.trigger_up("get_dataset"); |
|||
// Make equal and not equal appear 1st and 2nd
|
|||
this.operators = _.sortBy( |
|||
this.operators, |
|||
function (op) { |
|||
switch (op.value) { |
|||
case "=": |
|||
return -2; |
|||
case "!=": |
|||
return -1; |
|||
default: |
|||
return 0; |
|||
} |
|||
}); |
|||
// Create dummy record with only the field the user is searching
|
|||
var params = { |
|||
fieldNames: [this.field.name], |
|||
modelName: this.dataset.model, |
|||
context: this.dataset.context, |
|||
fields: {}, |
|||
type: "record", |
|||
viewType: "default", |
|||
fieldsInfo: { |
|||
default: {}, |
|||
}, |
|||
}; |
|||
// See https://stackoverflow.com/a/11508530/1468388
|
|||
// to know how to include this in the previous step in ES6
|
|||
params.fields[this.field.name] = _.omit( |
|||
this.field, |
|||
// User needs all records, to actually produce a new domain
|
|||
"domain", |
|||
// Onchanges make no sense in this context, there's no record
|
|||
"onChange" |
|||
); |
|||
if (this.field.type.endsWith("2many")) { |
|||
// X2many fields behave like m2o in the search context
|
|||
params.fields[this.field.name].type = "many2one"; |
|||
} |
|||
params.fieldsInfo.default[this.field.name] = {}; |
|||
// Emulate `model.load()`, without RPC-calling `default_get()`
|
|||
this.datapoint_id = this.model._makeDataPoint(params).id; |
|||
this.model.applyDefaultValues( |
|||
this.datapoint_id, |
|||
{}, |
|||
params.fieldNames |
|||
); |
|||
// To generate a new fake ID
|
|||
this._fake_id = -1; |
|||
}, |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
start: function () { |
|||
var result = this._super.apply(this, arguments); |
|||
// Render the initial widget
|
|||
result.done($.proxy(this, "show_inputs", $("<input value='='/>"))); |
|||
return result; |
|||
}, |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
destroy: function () { |
|||
if (this._field_widget) { |
|||
this._field_widget.destroy(); |
|||
} |
|||
this.model.destroy(); |
|||
delete this.record; |
|||
return this._super.apply(this, arguments); |
|||
}, |
|||
|
|||
/** |
|||
* Get record object for current datapoint. |
|||
* |
|||
* @returns {Object} |
|||
*/ |
|||
_get_record: function () { |
|||
return this.model.get(this.datapoint_id); |
|||
}, |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
show_inputs: function ($operator) { |
|||
// Get widget class to be used
|
|||
switch ($operator.val()) { |
|||
case "=": |
|||
case "!=": |
|||
this._field_widget_name = "many2one"; |
|||
break; |
|||
default: |
|||
this._field_widget_name = "char"; |
|||
} |
|||
var _Widget = field_registry.get(this._field_widget_name); |
|||
// Destroy previous widget, if any
|
|||
if (this._field_widget) { |
|||
this._field_widget.destroy(); |
|||
delete this._field_widget; |
|||
} |
|||
// Create new widget
|
|||
var options = { |
|||
mode: "edit", |
|||
attrs: { |
|||
options: { |
|||
no_create_edit: true, |
|||
no_create: true, |
|||
no_open: true, |
|||
no_quick_create: true, |
|||
}, |
|||
}, |
|||
}; |
|||
this._field_widget = new _Widget( |
|||
this, |
|||
this.field.name, |
|||
this._get_record(), |
|||
options |
|||
); |
|||
this._field_widget.appendTo(this.$el); |
|||
return this._super.apply(this, arguments); |
|||
}, |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
_applyChanges: function (dataPointID, changes, event) { |
|||
// Make char updates look like valid x2one updates
|
|||
if (_.isNaN(changes[this.field.name].id)) { |
|||
changes[this.field.name] = { |
|||
id: this._fake_id--, |
|||
display_name: event.target.lastSetValue, |
|||
}; |
|||
} |
|||
return FieldManagerMixin._applyChanges.apply(this, arguments); |
|||
}, |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
_confirmChange: function (id, fields, event) { |
|||
this.datapoint_id = id; |
|||
return this._field_widget.reset(this._get_record(), event); |
|||
}, |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
get_value: function () { |
|||
try { |
|||
switch (this._field_widget_name) { |
|||
case "many2one": |
|||
return this._field_widget.value.res_id; |
|||
default: |
|||
return this._field_widget.value.data.display_name; |
|||
} |
|||
} catch (error) { |
|||
if (error.name === "TypeError") { |
|||
return false; |
|||
} |
|||
} |
|||
}, |
|||
|
|||
/** |
|||
* Extract the field's value in a human-readable format. |
|||
* |
|||
* @override |
|||
*/ |
|||
toString: function () { |
|||
try { |
|||
switch (this._field_widget_name) { |
|||
case "many2one": |
|||
return this._field_widget.value.data.display_name; |
|||
} |
|||
return this._super.apply(this, arguments); |
|||
} catch (error) { |
|||
if (error.name === "TypeError") { |
|||
return ""; |
|||
} |
|||
} |
|||
}, |
|||
}); |
|||
|
|||
// Register search filter widgets
|
|||
core.search_filters_registry |
|||
.add("many2many", Relational) |
|||
.add("many2one", Relational) |
|||
.add("one2many", Relational); |
|||
|
|||
return { |
|||
AdvancedSearchProposition: AdvancedSearchProposition, |
|||
Relational: Relational, |
|||
}; |
|||
}); |
@ -0,0 +1,13 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!-- Copyright 2017-2018 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<templates> |
|||
<t t-extend="SearchView.FilterMenu"> |
|||
<t t-jquery=".o_filters_menu" t-operation="append"> |
|||
<li class="divider"/> |
|||
<li> |
|||
<a class="o_add_advanced_search">Add Advanced Filter</a> |
|||
</li> |
|||
</t> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,14 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!-- Copyright 2017-2018 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> |
|||
<odoo> |
|||
|
|||
<template id="assets_backend" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<link rel="stylesheet" href="/web_advanced_search/static/src/css/web_advanced_search.less"/> |
|||
<script type="text/javascript" src="/web_advanced_search/static/src/js/human_domain.js"/> |
|||
<script type="text/javascript" src="/web_advanced_search/static/src/js/web_advanced_search.js"/> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</odoo> |
@ -0,0 +1,98 @@ |
|||
================================== |
|||
Web Editor Background Color Picker |
|||
================================== |
|||
|
|||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
!! This file is generated by oca-gen-addon-readme !! |
|||
!! changes will be overwritten. !! |
|||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
|
|||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png |
|||
:target: https://odoo-community.org/page/development-status |
|||
:alt: Beta |
|||
.. |badge2| image:: https://img.shields.io/badge/licence-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/11.0/web_editor_background_color |
|||
:alt: OCA/web |
|||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png |
|||
:target: https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_editor_background_color |
|||
:alt: Translate me on Weblate |
|||
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png |
|||
:target: https://runbot.odoo-community.org/runbot/162/11.0 |
|||
:alt: Try me on Runbot |
|||
|
|||
|badge1| |badge2| |badge3| |badge4| |badge5| |
|||
|
|||
This module extends the functionality of the web editor to support |
|||
setting a custom background color to any snippet allowing you to customize it. |
|||
|
|||
.. figure:: https://user-images.githubusercontent.com/973709/46802401-1c915180-cd55-11e8-9397-f198548a690c.gif |
|||
:alt: Screenshot of color picker in mass mailing editor |
|||
|
|||
**Table of contents** |
|||
|
|||
.. contents:: |
|||
:local: |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
To use this module, you need to: |
|||
|
|||
#. Install any module that makes use of the web editor, such as |
|||
``mass_mailing`` or ``website``. |
|||
#. Use that module's facilities to edit some web content. |
|||
#. Drag & drop any snippet into the web editor body. |
|||
#. Click on *Customize > Text-Image > Background Color > </> icon*. |
|||
#. Choose a custom color by either: |
|||
* Writing any valid HTML color code in the text input. |
|||
* Selecting a color from the color picker. |
|||
|
|||
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 smashing it by providing a detailed and welcomed |
|||
`feedback <https://github.com/OCA/web/issues/new?body=module:%20web_editor_background_color%0Aversion:%2011.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 |
|||
~~~~~~~ |
|||
|
|||
* Tecnativa |
|||
|
|||
Contributors |
|||
~~~~~~~~~~~~ |
|||
|
|||
* Jairo Llopis <jairo.llopis@tecnativa.com> - https://www.tecnativa.com |
|||
|
|||
Other credits |
|||
~~~~~~~~~~~~~ |
|||
|
|||
* This addon includes code copied from bootstrap-colorpicker_ |
|||
|
|||
.. _bootstrap-colorpicker: https://github.com/itsjavi/bootstrap-colorpicker/tree/2.5.3 |
|||
|
|||
Maintainers |
|||
~~~~~~~~~~~ |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
This module is part of the `OCA/web <https://github.com/OCA/web/tree/11.0/web_editor_background_color>`_ project on GitHub. |
|||
|
|||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
@ -0,0 +1,22 @@ |
|||
# Copyright 2017 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). |
|||
{ |
|||
"name": "Web Editor Background Color Picker", |
|||
"summary": "Set any background color for web editor snippets", |
|||
"version": "11.0.1.0.0", |
|||
"category": "Website", |
|||
"website": "https://www.tecnativa.com", |
|||
"author": "Tecnativa, Odoo Community Association (OCA)", |
|||
"license": "LGPL-3", |
|||
"application": False, |
|||
"installable": True, |
|||
"images": [ |
|||
"static/description/mass_mailing_editor.png", |
|||
], |
|||
"depends": [ |
|||
"web_editor", |
|||
], |
|||
"data": [ |
|||
"templates/assets.xml", |
|||
], |
|||
} |
@ -0,0 +1,22 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_editor_background_color |
|||
# |
|||
# Translators: |
|||
# Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2017 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 9.0c\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2017-03-30 08:28+0000\n" |
|||
"PO-Revision-Date: 2017-03-30 08:28+0000\n" |
|||
"Last-Translator: Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2017\n" |
|||
"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\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" |
|||
|
|||
#~ msgid "Color" |
|||
#~ msgstr "Color" |
@ -0,0 +1,21 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * website_mail_snippet_bg_color |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 8.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2016-02-09 16:32+0000\n" |
|||
"PO-Revision-Date: 2016-02-09 17:33+0100\n" |
|||
"Last-Translator: <>\n" |
|||
"Language-Team: \n" |
|||
"Language: es\n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: 8bit\n" |
|||
"Plural-Forms: \n" |
|||
"X-Generator: Poedit 1.8.6\n" |
|||
|
|||
#~ msgid "Pick Background Color" |
|||
#~ msgstr "Escoger el color de fondo" |
@ -0,0 +1,23 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * website_mail_snippet_bg_color |
|||
# |
|||
# Translators: |
|||
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2016 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: social (8.0)\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2016-06-30 01:07+0000\n" |
|||
"PO-Revision-Date: 2016-06-17 14:52+0000\n" |
|||
"Last-Translator: Christophe CHAUVET <christophe.chauvet@gmail.com>\n" |
|||
"Language-Team: French (http://www.transifex.com/oca/OCA-social-8-0/language/" |
|||
"fr/)\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" |
|||
|
|||
#~ msgid "Pick Background Color" |
|||
#~ msgstr "Mettre la couleur de fond" |
@ -0,0 +1,24 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * website_mail_snippet_bg_color |
|||
# |
|||
# Translators: |
|||
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2016 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: social (8.0)\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2016-02-27 01:40+0000\n" |
|||
"PO-Revision-Date: 2016-02-27 16:56+0000\n" |
|||
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>\n" |
|||
"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-social-8-0/" |
|||
"language/sl/)\n" |
|||
"Language: sl\n" |
|||
"MIME-Version: 1.0\n" |
|||
"Content-Type: text/plain; charset=UTF-8\n" |
|||
"Content-Transfer-Encoding: \n" |
|||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n" |
|||
"%100==4 ? 2 : 3);\n" |
|||
|
|||
#~ msgid "Pick Background Color" |
|||
#~ msgstr "Izbira barve ozadja" |
@ -0,0 +1,14 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 11.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" |
|||
|
@ -0,0 +1 @@ |
|||
* Jairo Llopis <jairo.llopis@tecnativa.com> - https://www.tecnativa.com |
@ -0,0 +1,3 @@ |
|||
* This addon includes code copied from bootstrap-colorpicker_ |
|||
|
|||
.. _bootstrap-colorpicker: https://github.com/itsjavi/bootstrap-colorpicker/tree/2.5.3 |
@ -0,0 +1,5 @@ |
|||
This module extends the functionality of the web editor to support |
|||
setting a custom background color to any snippet allowing you to customize it. |
|||
|
|||
.. figure:: https://user-images.githubusercontent.com/973709/46802401-1c915180-cd55-11e8-9397-f198548a690c.gif |
|||
:alt: Screenshot of color picker in mass mailing editor |
@ -0,0 +1,10 @@ |
|||
To use this module, you need to: |
|||
|
|||
#. Install any module that makes use of the web editor, such as |
|||
``mass_mailing`` or ``website``. |
|||
#. Use that module's facilities to edit some web content. |
|||
#. Drag & drop any snippet into the web editor body. |
|||
#. Click on *Customize > Text-Image > Background Color > </> icon*. |
|||
#. Choose a custom color by either: |
|||
* Writing any valid HTML color code in the text input. |
|||
* Selecting a color from the color picker. |
After Width: 145 | Height: 122 | Size: 8.1 KiB |
@ -0,0 +1,445 @@ |
|||
<?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 0.14: http://docutils.sourceforge.net/" /> |
|||
<title>Web Editor Background Color Picker</title> |
|||
<style type="text/css"> |
|||
|
|||
/* |
|||
:Author: David Goodger (goodger@python.org) |
|||
:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $ |
|||
:Copyright: This stylesheet has been placed in the public domain. |
|||
|
|||
Default cascading style sheet for the HTML output of Docutils. |
|||
|
|||
See http://docutils.sf.net/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-editor-background-color-picker"> |
|||
<h1 class="title">Web Editor Background Color Picker</h1> |
|||
|
|||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
|||
!! This file is generated by oca-gen-addon-readme !! |
|||
!! changes will be overwritten. !! |
|||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> |
|||
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" 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" href="https://github.com/OCA/web/tree/11.0/web_editor_background_color"><img alt="OCA/web" src="https://img.shields.io/badge/github-OCA%2Fweb-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_editor_background_color"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/162/11.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p> |
|||
<p>This module extends the functionality of the web editor to support |
|||
setting a custom background color to any snippet allowing you to customize it.</p> |
|||
<div class="figure"> |
|||
<img alt="Screenshot of color picker in mass mailing editor" src="https://user-images.githubusercontent.com/973709/46802401-1c915180-cd55-11e8-9397-f198548a690c.gif" /> |
|||
</div> |
|||
<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="id1">Usage</a></li> |
|||
<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li> |
|||
<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul> |
|||
<li><a class="reference internal" href="#authors" id="id4">Authors</a></li> |
|||
<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li> |
|||
<li><a class="reference internal" href="#other-credits" id="id6">Other credits</a></li> |
|||
<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li> |
|||
</ul> |
|||
</li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="usage"> |
|||
<h1><a class="toc-backref" href="#id1">Usage</a></h1> |
|||
<p>To use this module, you need to:</p> |
|||
<ol class="arabic simple"> |
|||
<li>Install any module that makes use of the web editor, such as |
|||
<tt class="docutils literal">mass_mailing</tt> or <tt class="docutils literal">website</tt>.</li> |
|||
<li>Use that module’s facilities to edit some web content.</li> |
|||
<li>Drag & drop any snippet into the web editor body.</li> |
|||
<li>Click on <em>Customize > Text-Image > Background Color > </> icon</em>.</li> |
|||
<li>Choose a custom color by either: |
|||
* Writing any valid HTML color code in the text input. |
|||
* Selecting a color from the color picker.</li> |
|||
</ol> |
|||
</div> |
|||
<div class="section" id="bug-tracker"> |
|||
<h1><a class="toc-backref" href="#id2">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 smashing it by providing a detailed and welcomed |
|||
<a class="reference external" href="https://github.com/OCA/web/issues/new?body=module:%20web_editor_background_color%0Aversion:%2011.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="#id3">Credits</a></h1> |
|||
<div class="section" id="authors"> |
|||
<h2><a class="toc-backref" href="#id4">Authors</a></h2> |
|||
<ul class="simple"> |
|||
<li>Tecnativa</li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="contributors"> |
|||
<h2><a class="toc-backref" href="#id5">Contributors</a></h2> |
|||
<ul class="simple"> |
|||
<li>Jairo Llopis <<a class="reference external" href="mailto:jairo.llopis@tecnativa.com">jairo.llopis@tecnativa.com</a>> - <a class="reference external" href="https://www.tecnativa.com">https://www.tecnativa.com</a></li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="other-credits"> |
|||
<h2><a class="toc-backref" href="#id6">Other credits</a></h2> |
|||
<ul class="simple"> |
|||
<li>This addon includes code copied from <a class="reference external" href="https://github.com/itsjavi/bootstrap-colorpicker/tree/2.5.3">bootstrap-colorpicker</a></li> |
|||
</ul> |
|||
</div> |
|||
<div class="section" id="maintainers"> |
|||
<h2><a class="toc-backref" href="#id7">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>This module is part of the <a class="reference external" href="https://github.com/OCA/web/tree/11.0/web_editor_background_color">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> |
@ -0,0 +1,21 @@ |
|||
/* Copyright 2017 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */ |
|||
|
|||
.colorpicker-element { |
|||
@colorpicker-width: 170px; |
|||
@colorpicker-height: 118px; |
|||
|
|||
.colorpicker-inline { |
|||
min-width: initial; |
|||
display: block; |
|||
margin-top: 3px !important; |
|||
} |
|||
.colorpicker-saturation { |
|||
width: @colorpicker-height; |
|||
height: @colorpicker-height; |
|||
} |
|||
.colorpicker-hue, .colorpicker-alpha { |
|||
width: (@colorpicker-width - @colorpicker-height) / 2; |
|||
height: @colorpicker-height; |
|||
} |
|||
} |
@ -0,0 +1,103 @@ |
|||
/* Copyright 2016-2017 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
* License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). */
|
|||
|
|||
odoo.define("web_editor_background_color.colorpicker", function (require) { |
|||
"use strict"; |
|||
var options = require("web_editor.snippets.options"); |
|||
var colorpicker = options.registry.colorpicker; |
|||
|
|||
colorpicker.include({ |
|||
events: _.extend({}, colorpicker.prototype.events, { |
|||
"changeColor [data-name=custom_color]": |
|||
"set_inline_background_color", |
|||
// Remove inline background-color for normal class-based buttons
|
|||
"click .o_colorpicker_section button[data-color]": |
|||
"remove_inline_background_color", |
|||
"click [data-name=custom_color] input": "input_select", |
|||
"click [data-name=custom_color]": "custom_abort_event", |
|||
"keydown [data-name=custom_color]": "custom_abort_event", |
|||
"keypress [data-name=custom_color]": "custom_abort_event", |
|||
"keyup [data-name=custom_color]": "custom_abort_event", |
|||
}), |
|||
xmlDependencies: colorpicker.prototype.xmlDependencies.concat([ |
|||
"/web_editor_background_color/static/src/xml/colorpicker.xml", |
|||
]), |
|||
|
|||
/** |
|||
* @override |
|||
*/ |
|||
start: function () { |
|||
this._super(); |
|||
// Enable custom color picker
|
|||
this.$custom = this.$el.find('[data-name="custom_color"]'); |
|||
this.$custom.colorpicker({ |
|||
color: this.$target.css("background-color"), |
|||
container: true, |
|||
inline: true, |
|||
sliders: { |
|||
saturation: { |
|||
maxLeft: 118, |
|||
maxTop: 118, |
|||
}, |
|||
hue: { |
|||
maxTop: 118, |
|||
}, |
|||
alpha: { |
|||
maxTop: 118, |
|||
}, |
|||
}, |
|||
}); |
|||
// Activate border color changes if it matches background's
|
|||
var style = this.$target.prop("style"); |
|||
this.change_border = |
|||
style["border-color"] && |
|||
style["background-color"] === style["border-color"]; |
|||
}, |
|||
|
|||
/** |
|||
* A HACK to avoid dropdown disappearing when picking colors |
|||
* |
|||
* @param {Event} event |
|||
*/ |
|||
custom_abort_event: function (event) { |
|||
event.stopPropagation(); |
|||
}, |
|||
|
|||
/** |
|||
* Select the color picker input |
|||
* |
|||
* @param {Event} event |
|||
*/ |
|||
input_select: function (event) { |
|||
$(event.target).focus().select(); |
|||
}, |
|||
|
|||
/** |
|||
* Undo the inline background color, besides upstream color classes |
|||
* |
|||
* @override |
|||
*/ |
|||
_onColorResetButtonClick: function (event) { |
|||
this._super.apply(this, arguments); |
|||
this.$target.css("background-color", ""); |
|||
if (this.change_border) { |
|||
this.$target.css("border-color", ""); |
|||
} |
|||
this.$target.trigger("background-color-event", event.type); |
|||
}, |
|||
|
|||
/** |
|||
* Apply the chosen color as an inline style |
|||
* |
|||
* @param {Event} event |
|||
*/ |
|||
set_inline_background_color: function (event) { |
|||
var color = String(event.color); |
|||
this.$target.css("background-color", color); |
|||
if (this.change_border) { |
|||
this.$target.css("border-color", color); |
|||
} |
|||
this.$target.trigger("background-color-event", event.type); |
|||
}, |
|||
}); |
|||
}); |
230
web_editor_background_color/static/src/lib/bootstrap-colorpicker/bootstrap-colorpicker.css
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1327
web_editor_background_color/static/src/lib/bootstrap-colorpicker/bootstrap-colorpicker.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,18 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2017 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). --> |
|||
|
|||
<templates> |
|||
|
|||
<t t-extend="web_editor.colorpicker"> |
|||
<t t-jquery="colorpicker" t-operation="append"> |
|||
<div |
|||
class="o_colorpicker_section" |
|||
data-name="custom_color" |
|||
data-icon-class="fa fa-code"> |
|||
<input type="text" class="form-control" /> |
|||
</div> |
|||
</t> |
|||
</t> |
|||
|
|||
</templates> |
@ -0,0 +1,18 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<!-- Copyright 2017 Jairo Llopis <jairo.llopis@tecnativa.com> |
|||
License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). --> |
|||
|
|||
<odoo> |
|||
|
|||
<template id="assets_editor" inherit_id="web_editor.assets_editor"> |
|||
<xpath expr="."> |
|||
<!-- External library bootstrap-colorpicker --> |
|||
<link rel="stylesheet" href="/web_editor_background_color/static/src/lib/bootstrap-colorpicker/bootstrap-colorpicker.css"/> |
|||
<script type="text/javascript" src="/web_editor_background_color/static/src/lib/bootstrap-colorpicker/bootstrap-colorpicker.js"/> |
|||
<!-- Internal assets --> |
|||
<link rel="stylesheet" href="/web_editor_background_color/static/src/css/background_color.less"/> |
|||
<script type="text/javascript" src="/web_editor_background_color/static/src/js/background_color.js"/> |
|||
</xpath> |
|||
</template> |
|||
|
|||
</odoo> |
@ -0,0 +1,81 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
|||
:alt: License |
|||
|
|||
Export Current View |
|||
=================== |
|||
|
|||
One of the best Odoo's features is exporting custom data to CSV/XLS. You can |
|||
do it by clicking on the export link in the sidebar. The export action allows |
|||
us to configure what to be exported by selecting fields, etc, and allows you |
|||
to save your export as a template so that you can export it once again without |
|||
having to configure it again. |
|||
|
|||
That feature is as great and advanced as limited for an everyday experience. |
|||
A lot of customers want simply to export the tree view they are looking to. |
|||
|
|||
If you miss this feature as us, probably you'll find an answer into our |
|||
web_export_view module. |
|||
|
|||
Configuration |
|||
============= |
|||
|
|||
If we wanted to disallow users to use the features provided by this module, we |
|||
can add them to the group *Disallow Export View Data to Excel*. |
|||
|
|||
Usage |
|||
===== |
|||
|
|||
After you installed it, you'll find an additional link 'Export current view' |
|||
right on the sidebar. By clicking on it you'll get a XLS file contains |
|||
the same data of the tree view you are looking at, headers included. |
|||
|
|||
|
|||
Known Issues |
|||
============ |
|||
|
|||
Pedro M. Baeza (pedro.baeza@gmail.com): |
|||
When you have groups, they are not exported to Excel. It would be desirable to have this option. |
|||
One of the problems with this module is that you can't export data from a view with mode="tree". |
|||
Changing the approach to have the button always visible (we should relocate it also to another place, |
|||
as the current location is not visible for these views), and digging correctly in the DOM elements |
|||
for this view (very similar to the normal tree view one) will do the trick. This will also help users |
|||
to locate the feature, as it's hidden now by default and users don't think about selecting records. |
|||
The behavior will be: nothing selected > you export all (including groups). |
|||
Something or all selected: export the selection. |
|||
|
|||
|
|||
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 smashing it by providing a detailed and welcomed feedback. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Contributors |
|||
------------ |
|||
|
|||
* Henry Zhou (MAXodoo) <zhouhenry@live.com> |
|||
* Rodney <https://github.com/rv-clearcorp> |
|||
* Simone Orsi <simahawk@gmail.com> |
|||
* Lorenzo Battistini <lorenzo.battistini@agilebg.com> |
|||
* Stefan Rijnhart <stefan@therp.nl> |
|||
* Leonardo Pistone <leonardo.pistone@camptocamp.com> |
|||
* Jose Maria Bernet <josemaria.bernet@guadaltech.es> |
|||
* David Vidal <david.vidal@tecnativa.com> |
|||
|
|||
Maintainer |
|||
---------- |
|||
|
|||
.. image:: http://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: http://odoo-community.org |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. |
|||
|
|||
To contribute to this module, please visit http://odoo-community.org. |
@ -0,0 +1,3 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
from . import controllers |
@ -0,0 +1,30 @@ |
|||
# Copyright 2012 Agile Business Group |
|||
# Copyright 2012 Domsense srl (<http://www.domsense.com>) |
|||
# Copyright 2012 Therp BV |
|||
# Copyright 2016 Henry Zhou (http://www.maxodoo.com) |
|||
# Copyright 2016 Rodney (http://clearcorp.cr/) |
|||
# Copyright 2019 Tecnativa |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
{ |
|||
'name': 'Web Export Current View', |
|||
'version': '11.0.2.0.0', |
|||
'category': 'Web', |
|||
'author': 'Henry Zhou, Agile Business Group, \ |
|||
Odoo Community Association (OCA)', |
|||
'website': 'https://github.com/OCA/web', |
|||
'license': 'AGPL-3', |
|||
'depends': [ |
|||
'web', |
|||
], |
|||
"data": [ |
|||
'security/groups.xml', |
|||
'views/web_export_view_view.xml', |
|||
], |
|||
'qweb': [ |
|||
"static/src/xml/web_export_view_template.xml", |
|||
], |
|||
|
|||
'installable': True, |
|||
'auto_install': False, |
|||
} |
@ -0,0 +1 @@ |
|||
from . import controllers |
@ -0,0 +1,34 @@ |
|||
# Copyright 2016 Henry Zhou (http://www.maxodoo.com) |
|||
# Copyright 2016 Rodney (http://clearcorp.cr/) |
|||
# Copyright 2012 Agile Business Group |
|||
# Copyright 2012 Therp BV |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). |
|||
|
|||
import json |
|||
import odoo.http as http |
|||
from odoo.http import request |
|||
from odoo.addons.web.controllers.main import ExcelExport |
|||
|
|||
|
|||
class ExcelExportView(ExcelExport): |
|||
def __getattribute__(self, name): |
|||
if name == 'fmt': |
|||
raise AttributeError() |
|||
return super(ExcelExportView, self).__getattribute__(name) |
|||
|
|||
@http.route('/web/export/xls_view', type='http', auth='user') |
|||
def export_xls_view(self, data, token): |
|||
data = json.loads(data) |
|||
model = data.get('model', []) |
|||
columns_headers = data.get('headers', []) |
|||
rows = data.get('rows', []) |
|||
|
|||
return request.make_response( |
|||
self.from_data(columns_headers, rows), |
|||
headers=[ |
|||
('Content-Disposition', 'attachment; filename="%s"' |
|||
% self.filename(model)), |
|||
('Content-Type', self.content_type) |
|||
], |
|||
cookies={'fileToken': token} |
|||
) |
@ -0,0 +1,41 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 11.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"Last-Translator: Automatically generated\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" |
|||
|
|||
#. module: web_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "" |
@ -0,0 +1,45 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
# 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-04-28 18:03+0000\n" |
|||
"PO-Revision-Date: 2017-04-28 18:03+0000\n" |
|||
"Last-Translator: Niki Waibel <niki.waibel@gmail.com>, 2017\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" |
|||
|
|||
#. module: web_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "Exportiere xls" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "Falsch" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "Richtig" |
@ -0,0 +1,45 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2016 |
|||
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: 2017-04-28 18:03+0000\n" |
|||
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\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: \n" |
|||
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
|||
|
|||
#. module: web_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "Exportar XLS" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "Falso" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "Verdadero" |
@ -0,0 +1,46 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
# 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: 2017-04-28 18:03+0000\n" |
|||
"Last-Translator: Bole <bole@dajmi5.com>, 2017\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" |
|||
|
|||
#. module: web_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "Izvoz u XLS" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "NE" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "DA" |
@ -0,0 +1,46 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
# Translators: |
|||
# Peter Hageman <hageman.p@gmail.com>, 2017 |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 10.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"POT-Creation-Date: 2017-07-01 03:34+0000\n" |
|||
"PO-Revision-Date: 2017-07-01 03:34+0000\n" |
|||
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n" |
|||
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/" |
|||
"teams/23907/nl_NL/)\n" |
|||
"Language: nl_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" |
|||
|
|||
#. module: web_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "Exporteer xls" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "Fout" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "Waar" |
@ -0,0 +1,47 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
# 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:26+0000\n" |
|||
"PO-Revision-Date: 2017-06-22 08:26+0000\n" |
|||
"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " |
|||
"<rmsolucoeseminformatic4@gmail.com>, 2017\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" |
|||
|
|||
#. module: web_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "Exportar xls" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "Falso" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "Verdadeiro" |
@ -0,0 +1,41 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 11.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_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "" |
|||
|
@ -0,0 +1,46 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_export_view |
|||
# |
|||
# Translators: |
|||
# OCA Transbot <transbot@odoo-community.org>, 2016 |
|||
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: 2017-04-28 18:03+0000\n" |
|||
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2016\n" |
|||
"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/" |
|||
"zh_CN/)\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" |
|||
|
|||
#. module: web_export_view |
|||
#: model:res.groups,name:web_export_view.group_disallow_export_view_data_excel |
|||
msgid "Disallow Export View Data to Excel" |
|||
msgstr "" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/xml/web_export_view_template.xml:6 |
|||
#, python-format |
|||
msgid "Export xls" |
|||
msgstr "导出 xls" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "False" |
|||
msgstr "否" |
|||
|
|||
#. module: web_export_view |
|||
#. openerp-web |
|||
#: code:addons/web_export_view/static/src/js/web_export_view.js:76 |
|||
#, python-format |
|||
msgid "True" |
|||
msgstr "是" |
@ -0,0 +1,9 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<odoo> |
|||
|
|||
<record id="group_disallow_export_view_data_excel" model="res.groups"> |
|||
<field name="name">Disallow Export View Data to Excel</field> |
|||
<field name="category_id" ref="base.module_category_hidden"/> |
|||
</record> |
|||
|
|||
</odoo> |
After Width: 128 | Height: 126 | Size: 3.5 KiB |
@ -0,0 +1,118 @@ |
|||
odoo.define('web_export_view', function (require) { |
|||
"use strict"; |
|||
|
|||
var core = require('web.core'); |
|||
var Sidebar = require('web.Sidebar'); |
|||
var session = require('web.session'); |
|||
var crash_manager = require('web.crash_manager'); |
|||
|
|||
var QWeb = core.qweb; |
|||
|
|||
var _t = core._t; |
|||
|
|||
Sidebar.include({ |
|||
|
|||
_redraw: function () { |
|||
var self = this; |
|||
this._super.apply(this, arguments); |
|||
if (self.getParent().renderer.viewType == 'list') { |
|||
session.user_has_group('web_export_view.group_disallow_export_view_data_excel').then(function (has_group) { |
|||
if (!has_group) { |
|||
self.$el.find('.o_dropdown').last().append(QWeb.render('WebExportTreeViewXls', { widget: self })); |
|||
self.$el.find('.export_treeview_xls').on('click', self.on_sidebar_export_treeview_xls); |
|||
} |
|||
}); |
|||
} |
|||
}, |
|||
|
|||
on_sidebar_export_treeview_xls: function () { |
|||
// Select the first list of the current (form) view
|
|||
// or assume the main view is a list view and use that
|
|||
var self = this, |
|||
view = this.getParent(), |
|||
children = view.getChildren(); |
|||
var c = crash_manager; |
|||
|
|||
if (children) { |
|||
children.every(function (child) { |
|||
if (child.field && child.field.type == 'one2many') { |
|||
view = child.viewmanager.views.list.controller; |
|||
return false; // break out of the loop
|
|||
} |
|||
if (child.field && child.field.type == 'many2many') { |
|||
view = child.list_view; |
|||
return false; // break out of the loop
|
|||
} |
|||
return true; |
|||
}); |
|||
} |
|||
var export_columns_keys = []; |
|||
var export_columns_names = []; |
|||
var column_index = 0; |
|||
var column_header_selector; |
|||
$.each(view.renderer.columns, function () { |
|||
if (this.tag == 'field' && (this.attrs.widget === undefined || this.attrs.widget != 'handle')) { |
|||
// non-fields like `_group` or buttons
|
|||
export_columns_keys.push(column_index); |
|||
column_header_selector = '.o_list_view > thead > tr> th:not([class*="o_list_record_selector"]):eq('+column_index+')'; |
|||
export_columns_names.push(view.$el.find(column_header_selector)[0].textContent); |
|||
} |
|||
column_index ++; |
|||
}); |
|||
var export_rows = []; |
|||
$.blockUI(); |
|||
if (children) { |
|||
// find only rows with data
|
|||
view.$el.find('.o_list_view > tbody > tr.o_data_row:has(.o_list_record_selector input:checkbox:checked)') |
|||
.each(function () { |
|||
var $row = $(this); |
|||
var export_row = []; |
|||
$.each(export_columns_keys, function () { |
|||
var $cell = $row.find('td.o_data_cell:eq('+this+')') |
|||
var $cellcheckbox = $cell.find('.o_checkbox input:checkbox'); |
|||
if ($cellcheckbox.length) { |
|||
export_row.push( |
|||
$cellcheckbox.is(":checked") |
|||
? _t("True") : _t("False") |
|||
); |
|||
} |
|||
else { |
|||
var text = $cell.text().trim(); |
|||
var is_number = ( |
|||
$cell.hasClass('o_list_number') && |
|||
!$cell.hasClass('o_float_time_cell') |
|||
); |
|||
if (is_number) { |
|||
export_row.push(parseFloat( |
|||
text |
|||
// Remove thousands separator
|
|||
.split(_t.database.parameters.thousands_sep) |
|||
.join("") |
|||
// Always use a `.` as decimal separator
|
|||
.replace(_t.database.parameters.decimal_point, ".") |
|||
// Remove non-numeric characters
|
|||
.replace(/[^\d\.-]/g, "") |
|||
)); |
|||
} else { |
|||
export_row.push(text); |
|||
} |
|||
} |
|||
}); |
|||
export_rows.push(export_row); |
|||
}); |
|||
} |
|||
|
|||
session.get_file({ |
|||
url: '/web/export/xls_view', |
|||
data: {data: JSON.stringify({ |
|||
model: view.modelName, |
|||
headers: export_columns_names, |
|||
rows: export_rows |
|||
})}, |
|||
complete: $.unblockUI, |
|||
error: c.rpc_error.bind(c) |
|||
}); |
|||
} |
|||
|
|||
}); |
|||
}); |
@ -0,0 +1,11 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
|
|||
<templates id="template" xml:space="preserve"> |
|||
<t t-name="WebExportTreeViewXls"> |
|||
<div class="o_cp_sidebar btn-group btn-group-sm"> |
|||
<button class="btn btn-default export_treeview_xls" type="button" title="Export xls"> |
|||
<i t-translation="off" class="fa fa-file-excel-o"></i> |
|||
</button> |
|||
</div> |
|||
</t> |
|||
</templates> |
@ -0,0 +1,9 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
|
|||
<odoo> |
|||
<template id="assets_backend" name="web_export_view assets" inherit_id="web.assets_backend"> |
|||
<xpath expr="." position="inside"> |
|||
<script type="text/javascript" src="/web_export_view/static/src/js/web_export_view.js"></script> |
|||
</xpath> |
|||
</template> |
|||
</odoo> |
@ -0,0 +1,62 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_favicon |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 11.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"PO-Revision-Date: 2018-10-10 21:51+0000\n" |
|||
"Last-Translator: Harald Panten <harald.panten@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.1.1\n" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.model,name:web_favicon.model_res_company |
|||
msgid "Companies" |
|||
msgstr "Companyies" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.ui.view,arch_db:web_favicon.view_company_form |
|||
msgid "Favicon" |
|||
msgstr "Favicon" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend |
|||
msgid "Favicon Backend" |
|||
msgstr "Favicon del backend" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype |
|||
msgid "Favicon Backend Mimetype" |
|||
msgstr "Tipus MIME del favicon de backend" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype |
|||
msgid "Set the mimetype of your file." |
|||
msgstr "Estableixi el tipus MIME del seu arxiu." |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.ui.view,arch_db:web_favicon.view_company_form |
|||
msgid "Web Favicon" |
|||
msgstr "Favicon web" |
|||
|
|||
#. module: web_favicon |
|||
#: selection:res.company,favicon_backend_mimetype:0 |
|||
msgid "image/gif" |
|||
msgstr "image/gif" |
|||
|
|||
#. module: web_favicon |
|||
#: selection:res.company,favicon_backend_mimetype:0 |
|||
msgid "image/png" |
|||
msgstr "image/png" |
|||
|
|||
#. module: web_favicon |
|||
#: selection:res.company,favicon_backend_mimetype:0 |
|||
msgid "image/x-icon" |
|||
msgstr "image/x-icon" |
@ -0,0 +1,62 @@ |
|||
# Translation of Odoo Server. |
|||
# This file contains the translation of the following modules: |
|||
# * web_favicon |
|||
# |
|||
msgid "" |
|||
msgstr "" |
|||
"Project-Id-Version: Odoo Server 11.0\n" |
|||
"Report-Msgid-Bugs-To: \n" |
|||
"PO-Revision-Date: 2018-09-02 06: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_favicon |
|||
#: model:ir.model,name:web_favicon.model_res_company |
|||
msgid "Companies" |
|||
msgstr "Virksomheder" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.ui.view,arch_db:web_favicon.view_company_form |
|||
msgid "Favicon" |
|||
msgstr "" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend |
|||
msgid "Favicon Backend" |
|||
msgstr "" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype |
|||
msgid "Favicon Backend Mimetype" |
|||
msgstr "" |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype |
|||
msgid "Set the mimetype of your file." |
|||
msgstr "Sæt mimetypen af din fil." |
|||
|
|||
#. module: web_favicon |
|||
#: model:ir.ui.view,arch_db:web_favicon.view_company_form |
|||
msgid "Web Favicon" |
|||
msgstr "" |
|||
|
|||
#. module: web_favicon |
|||
#: selection:res.company,favicon_backend_mimetype:0 |
|||
msgid "image/gif" |
|||
msgstr "" |
|||
|
|||
#. module: web_favicon |
|||
#: selection:res.company,favicon_backend_mimetype:0 |
|||
msgid "image/png" |
|||
msgstr "" |
|||
|
|||
#. module: web_favicon |
|||
#: selection:res.company,favicon_backend_mimetype:0 |
|||
msgid "image/x-icon" |
|||
msgstr "" |
Some files were not shown because too many files changed in this diff
Write
Preview
Loading…
Cancel
Save
Reference in new issue