From 7c6c2f93cde212c2dd303d22920d320829eb19fa Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Tue, 20 Nov 2018 11:35:37 +0100 Subject: [PATCH 01/34] [ADD] web_widget_url_advanced --- web_widget_url_advanced/README.rst | 109 +++++ web_widget_url_advanced/__init__.py | 0 web_widget_url_advanced/__manifest__.py | 17 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 6 + web_widget_url_advanced/readme/USAGE.rst | 27 ++ .../static/description/after.png | Bin 0 -> 6912 bytes .../static/description/before.png | Bin 0 -> 7637 bytes .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 445 ++++++++++++++++++ .../static/src/js/url_widget.js | 29 ++ web_widget_url_advanced/templates/assets.xml | 12 + 12 files changed, 646 insertions(+) create mode 100644 web_widget_url_advanced/README.rst create mode 100644 web_widget_url_advanced/__init__.py create mode 100644 web_widget_url_advanced/__manifest__.py create mode 100644 web_widget_url_advanced/readme/CONTRIBUTORS.rst create mode 100644 web_widget_url_advanced/readme/DESCRIPTION.rst create mode 100644 web_widget_url_advanced/readme/USAGE.rst create mode 100644 web_widget_url_advanced/static/description/after.png create mode 100644 web_widget_url_advanced/static/description/before.png create mode 100644 web_widget_url_advanced/static/description/icon.png create mode 100644 web_widget_url_advanced/static/description/index.html create mode 100644 web_widget_url_advanced/static/src/js/url_widget.js create mode 100644 web_widget_url_advanced/templates/assets.xml diff --git a/web_widget_url_advanced/README.rst b/web_widget_url_advanced/README.rst new file mode 100644 index 000000000000..8bee5c8f0d2f --- /dev/null +++ b/web_widget_url_advanced/README.rst @@ -0,0 +1,109 @@ +======================= +Web URL widget advanced +======================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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_widget_url_advanced + :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_widget_url_advanced + :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| + +Extend URL widget features to ease customization of anchor's text. + +By default the URL widget will show the plain URL. +You can specify an attribute `text` to provide a static label too. + +With this module you can use a field for link's inner text. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +Use `url` widget as you do usually, then add an extra parameter `text_field` +to indicate which field (present in the view already) must be used for the anchor text. + + +.. code-block:: xml + + + +M2O fields are supported: `display_name` is used automatically. + + +For example, in the partner form, +if you want to display the website link with partner's name as anchor you can do: + + +.. code-block:: xml + + + +This is going to change the rendering from + +.. figure:: https://raw.githubusercontent.com/OCA/web/11.0/web_widget_url_advanced/static/description/before.png + + +to + +.. figure:: https://raw.githubusercontent.com/OCA/web/11.0/web_widget_url_advanced/static/description/after.png + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Simone Orsi + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/web `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/web_widget_url_advanced/__init__.py b/web_widget_url_advanced/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/web_widget_url_advanced/__manifest__.py b/web_widget_url_advanced/__manifest__.py new file mode 100644 index 000000000000..61cf228601f7 --- /dev/null +++ b/web_widget_url_advanced/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2018 Simone Orsi - Camptocamp SA +# License LGPLv3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). +{ + "name": "Web URL widget advanced", + "summary": "This module extends URL widget " + "for displaying anchors with custom labels.", + "category": "Web", + "version": "11.0.1.0.0", + "license": "LGPL-3", + "author": "Camptocamp, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/web/", + "depends": ["web"], + "data": [ + "templates/assets.xml", + ], + "installable": True, +} diff --git a/web_widget_url_advanced/readme/CONTRIBUTORS.rst b/web_widget_url_advanced/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..e8b01820bfa0 --- /dev/null +++ b/web_widget_url_advanced/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Simone Orsi \ No newline at end of file diff --git a/web_widget_url_advanced/readme/DESCRIPTION.rst b/web_widget_url_advanced/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..1dd8b1a54af3 --- /dev/null +++ b/web_widget_url_advanced/readme/DESCRIPTION.rst @@ -0,0 +1,6 @@ +Extend URL widget features to ease customization of anchor's text. + +By default the URL widget will show the plain URL. +You can specify an attribute `text` to provide a static label too. + +With this module you can use a field for link's inner text. diff --git a/web_widget_url_advanced/readme/USAGE.rst b/web_widget_url_advanced/readme/USAGE.rst new file mode 100644 index 000000000000..88f6474aec9e --- /dev/null +++ b/web_widget_url_advanced/readme/USAGE.rst @@ -0,0 +1,27 @@ +Use `url` widget as you do usually, then add an extra parameter `text_field` +to indicate which field (present in the view already) must be used for the anchor text. + + +.. code-block:: xml + + + +M2O fields are supported: `display_name` is used automatically. + + +For example, in the partner form, +if you want to display the website link with partner's name as anchor you can do: + + +.. code-block:: xml + + + +This is going to change the rendering from + +.. figure:: ../static/description/before.png + + +to + +.. figure:: ../static/description/after.png diff --git a/web_widget_url_advanced/static/description/after.png b/web_widget_url_advanced/static/description/after.png new file mode 100644 index 0000000000000000000000000000000000000000..fff2176e77f8fe22962321b0e8cd9b82c80b3458 GIT binary patch literal 6912 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/web_widget_url_advanced/static/description/index.html b/web_widget_url_advanced/static/description/index.html new file mode 100644 index 000000000000..e37d03905f20 --- /dev/null +++ b/web_widget_url_advanced/static/description/index.html @@ -0,0 +1,445 @@ + + + + + + +Web URL widget advanced + + + +
+

Web URL widget advanced

+ + +

Beta License: LGPL-3 OCA/web Translate me on Weblate Try me on Runbot

+

Extend URL widget features to ease customization of anchor’s text.

+

By default the URL widget will show the plain URL. +You can specify an attribute text to provide a static label too.

+

With this module you can use a field for link’s inner text.

+

Table of contents

+ +
+

Usage

+

Use url widget as you do usually, then add an extra parameter text_field +to indicate which field (present in the view already) must be used for the anchor text.

+
+<field name="some_url" widget="url" text_field="another_field" />
+
+

M2O fields are supported: display_name is used automatically.

+

For example, in the partner form, +if you want to display the website link with partner’s name as anchor you can do:

+
+<field name="website" widget="url" text_field="name" placeholder="e.g. www.odoo.com"/>
+
+

This is going to change the rendering from

+
+https://raw.githubusercontent.com/OCA/web/11.0/web_widget_url_advanced/static/description/before.png +
+

to

+
+https://raw.githubusercontent.com/OCA/web/11.0/web_widget_url_advanced/static/description/after.png +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/web project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/web_widget_url_advanced/static/src/js/url_widget.js b/web_widget_url_advanced/static/src/js/url_widget.js new file mode 100644 index 000000000000..51e38e44ac10 --- /dev/null +++ b/web_widget_url_advanced/static/src/js/url_widget.js @@ -0,0 +1,29 @@ +/* Copyright 2018 Simone Orsi - Camptocamp SA +License LGPLv3.0 or later (https://www.gnu.org/licenses/lgpl-3.0.en.html). */ + +odoo.define('web_widget_url_advanced', function (require) { + "use strict"; + + var basic_fields = require('web.basic_fields'); + + basic_fields.UrlWidget.include({ + /** + * @override + */ + init: function () { + this._super.apply(this, arguments); + // retrieve customized `` text from a field + // via `text_field` attribute or `options.text_field` + // NOTE: ` + + +