diff --git a/setup/web_pwa_oca/odoo/addons/web_pwa_oca b/setup/web_pwa_oca/odoo/addons/web_pwa_oca new file mode 120000 index 000000000..1b7095260 --- /dev/null +++ b/setup/web_pwa_oca/odoo/addons/web_pwa_oca @@ -0,0 +1 @@ +../../../../web_pwa_oca \ No newline at end of file diff --git a/setup/web_pwa_oca/setup.py b/setup/web_pwa_oca/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/web_pwa_oca/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +) diff --git a/web_pwa_oca/README.rst b/web_pwa_oca/README.rst new file mode 100644 index 000000000..bad281d58 --- /dev/null +++ b/web_pwa_oca/README.rst @@ -0,0 +1,134 @@ +=========================== +Progressive web application +=========================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/12.0/web_pwa_oca + :alt: OCA/web +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/web-12-0/web-12-0-web_pwa_oca + :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/12.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Make Odoo an installable Progressive Web Application. + +Progressive Web Apps provide an installable, app-like experience on desktop and mobile that are built and delivered directly via the web. +They're web apps that are fast and reliable. And most importantly, they're web apps that work in any browser. +If you're building a web app today, you're already on the path towards building a Progressive Web App. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +After having installed this module, browsing your odoo on mobile you will be able to install it as a PWA. + +It is strongly recommended to use this module with a responsive layout, like the one provided by web_responsive. + +This module is intended to be used by Odoo back-end users (employees). + +When a Progressive Web App is installed, it looks and behaves like all of the other installed apps. +It launches from the same place that other apps launch. It runs in an app without an address bar or other browser UI. +And like all other installed apps, it's a top level app in the task switcher. + +In Chrome, a Progressive Web App can either be installed through the three-dot context menu. + +This module also provides a "Install PWA" link in Odoo user menu. + +In case you previously installed `web_pwa`, run the following steps with `odoo shell`, after having installed `openupgradelib`: + + +>>> from openupgradelib import openupgrade +>>> openupgrade.update_module_names(env.cr, [('web_pwa', 'web_pwa_oca')], merge_modules=False) +>>> env.cr.commit() + +Configuration +============= + +The following system parameters con be set to customize the appearance of the application + +* pwa.manifest.name (defaults to "Odoo PWA") +* pwa.manifest.short_name (defaults to "Odoo PWA") +* pwa.manifest.icon128x128 (defaults to "/web_pwa_oca/static/img/icons/icon-128x128.png") +* pwa.manifest.icon144x144 (defaults to "/web_pwa_oca/static/img/icons/icon-144x144.png") +* pwa.manifest.icon152x152 (defaults to "/web_pwa_oca/static/img/icons/icon-152x152.png") +* pwa.manifest.icon192x192 (defaults to "/web_pwa_oca/static/img/icons/icon-192x192.png") +* pwa.manifest.icon256x256 (defaults to "/web_pwa_oca/static/img/icons/icon-256x256.png") +* pwa.manifest.icon512x512 (defaults to "/web_pwa_oca/static/img/icons/icon-512x512.png") + +Known issues / Roadmap +====================== + +* Evaluate to extend ``FILES_TO_CACHE`` +* Evaluate to use a normal JS file for service worker and download data from a normal JSON controller +* Integrate `Notification API `_ +* Integrate `Web Share API `_ +* Create ``portal_pwa`` module, intended to be used by front-end users (customers, suppliers...) + +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 +~~~~~~~ + +* TAKOBI + +Contributors +~~~~~~~~~~~~ + +* `TAKOBI `_: + + * Lorenzo Battistini + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +.. |maintainer-eLBati| image:: https://github.com/eLBati.png?size=40px + :target: https://github.com/eLBati + :alt: eLBati + +Current `maintainer `__: + +|maintainer-eLBati| + +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_pwa_oca/__init__.py b/web_pwa_oca/__init__.py new file mode 100644 index 000000000..e046e49fb --- /dev/null +++ b/web_pwa_oca/__init__.py @@ -0,0 +1 @@ +from . import controllers diff --git a/web_pwa_oca/__manifest__.py b/web_pwa_oca/__manifest__.py new file mode 100644 index 000000000..8f135d2cf --- /dev/null +++ b/web_pwa_oca/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2020 Lorenzo Battistini @ TAKOBI +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). + +{ + "name": "Progressive web application", + "summary": "Make Odoo a PWA", + "version": "13.0.1.0.0", + "development_status": "Beta", + "category": "Website", + "website": "https://github.com/OCA/web", + "author": "TAKOBI, Odoo Community Association (OCA)", + "maintainers": ["eLBati"], + "license": "LGPL-3", + "application": True, + "installable": True, + "depends": ["web", "mail"], + "data": ["views/webclient_templates.xml"], + "qweb": ["static/src/xml/pwa_install.xml"], + "images": ["static/description/pwa.png"], +} diff --git a/web_pwa_oca/controllers/__init__.py b/web_pwa_oca/controllers/__init__.py new file mode 100644 index 000000000..12a7e529b --- /dev/null +++ b/web_pwa_oca/controllers/__init__.py @@ -0,0 +1 @@ +from . import main diff --git a/web_pwa_oca/controllers/main.py b/web_pwa_oca/controllers/main.py new file mode 100644 index 000000000..194d091b6 --- /dev/null +++ b/web_pwa_oca/controllers/main.py @@ -0,0 +1,77 @@ +from odoo.http import Controller, request, route + + +class PWA(Controller): + def get_asset_urls(self, asset_xml_id): + qweb = request.env["ir.qweb"].sudo() + assets = qweb._get_asset_nodes(asset_xml_id, {}, True, True) + urls = [] + for asset in assets: + if asset[0] == "link": + urls.append(asset[1]["href"]) + if asset[0] == "script": + urls.append(asset[1]["src"]) + return urls + + @route("/service-worker.js", type="http", auth="public") + def service_worker(self): + qweb = request.env["ir.qweb"].sudo() + urls = [] + urls.extend(self.get_asset_urls("web.assets_common")) + urls.extend(self.get_asset_urls("web.assets_backend")) + version_list = [] + for url in urls: + version_list.append(url.split("/")[3]) + cache_version = "-".join(version_list) + mimetype = "text/javascript;charset=utf-8" + content = qweb.render( + "web_pwa_oca.service_worker", + {"pwa_cache_name": cache_version, "pwa_files_to_cache": urls}, + ) + return request.make_response(content, [("Content-Type", mimetype)]) + + @route("/web_pwa_oca/manifest.json", type="http", auth="public") + def manifest(self): + qweb = request.env["ir.qweb"].sudo() + config_param = request.env["ir.config_parameter"].sudo() + pwa_name = config_param.get_param("pwa.manifest.name", "Odoo PWA") + pwa_short_name = config_param.get_param("pwa.manifest.short_name", "Odoo PWA") + icon128x128 = config_param.get_param( + "pwa.manifest.icon128x128", "/web_pwa_oca/static/img/icons/icon-128x128.png" + ) + icon144x144 = config_param.get_param( + "pwa.manifest.icon144x144", "/web_pwa_oca/static/img/icons/icon-144x144.png" + ) + icon152x152 = config_param.get_param( + "pwa.manifest.icon152x152", "/web_pwa_oca/static/img/icons/icon-152x152.png" + ) + icon192x192 = config_param.get_param( + "pwa.manifest.icon192x192", "/web_pwa_oca/static/img/icons/icon-192x192.png" + ) + icon256x256 = config_param.get_param( + "pwa.manifest.icon256x256", "/web_pwa_oca/static/img/icons/icon-256x256.png" + ) + icon512x512 = config_param.get_param( + "pwa.manifest.icon512x512", "/web_pwa_oca/static/img/icons/icon-512x512.png" + ) + background_color = config_param.get_param( + "pwa.manifest.background_color", "#2E69B5" + ) + theme_color = config_param.get_param("pwa.manifest.theme_color", "#2E69B5") + mimetype = "application/json;charset=utf-8" + content = qweb.render( + "web_pwa_oca.manifest", + { + "pwa_name": pwa_name, + "pwa_short_name": pwa_short_name, + "icon128x128": icon128x128, + "icon144x144": icon144x144, + "icon152x152": icon152x152, + "icon192x192": icon192x192, + "icon256x256": icon256x256, + "icon512x512": icon512x512, + "background_color": background_color, + "theme_color": theme_color, + }, + ) + return request.make_response(content, [("Content-Type", mimetype)]) diff --git a/web_pwa_oca/i18n/web_pwa_oca.pot b/web_pwa_oca/i18n/web_pwa_oca.pot new file mode 100644 index 000000000..4c51b7b16 --- /dev/null +++ b/web_pwa_oca/i18n/web_pwa_oca.pot @@ -0,0 +1,158 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_pwa_oca +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.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_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"sizes\": \"128x128\",\n" +" \"type\": \"image/png\"\n" +" }, {\n" +" \"src\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"sizes\": \"144x144\",\n" +" \"type\": \"image/png\"\n" +" }, {\n" +" \"src\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"sizes\": \"152x152\",\n" +" \"type\": \"image/png\"\n" +" }, {\n" +" \"src\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"sizes\": \"192x192\",\n" +" \"type\": \"image/png\"\n" +" }, {\n" +" \"src\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"sizes\": \"256x256\",\n" +" \"type\": \"image/png\"\n" +" }, {\n" +" \"src\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"sizes\": \"512x512\",\n" +" \"type\": \"image/png\"\n" +" }],\n" +" \"start_url\": \"/web\",\n" +" \"display\": \"standalone\",\n" +" \"background_color\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"icons\": [{\n" +" \"src\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"short_name\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "\",\n" +" \"theme_color\": \"" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.service_worker +msgid "';\n" +"const FILES_TO_CACHE = [" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.service_worker +msgid "'use strict';\n" +"const CACHE_NAME = '" +msgstr "" + +#. module: web_pwa_oca +#. openerp-web +#: code:addons/web_pwa_oca/static/src/xml/pwa_install.xml:5 +#, python-format +msgid "Install PWA" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.service_worker +msgid "];\n" +"self.addEventListener('install', function (evt) {\n" +" console.log('[ServiceWorker] Install');\n" +" evt.waitUntil(\n" +" caches.open(CACHE_NAME).then(function (cache) {\n" +" console.log('[ServiceWorker] Pre-caching offline page');\n" +" return cache.addAll(FILES_TO_CACHE);\n" +" })\n" +" );\n" +" self.skipWaiting();\n" +"});\n" +"self.addEventListener('activate', function(evt) {\n" +" console.log('[ServiceWorker] Activate');\n" +" evt.waitUntil(\n" +" caches.keys().then(function(keyList) {\n" +" return Promise.all(keyList.map(function(key) {\n" +" if (key !== CACHE_NAME) {\n" +" console.log('[ServiceWorker] Removing old cache', key);\n" +" return caches.delete(key);\n" +" }\n" +" }));\n" +" })\n" +" );\n" +" self.clients.claim();\n" +"});\n" +"self.addEventListener('fetch', function(evt) {\n" +" if (evt.request.cache === 'only-if-cached' && evt.request.mode !== 'same-origin') {\n" +" return;\n" +" }\n" +" console.log('[ServiceWorker] Fetch', evt.request.url);\n" +" evt.respondWith(\n" +" caches.open(CACHE_NAME).then(function(cache) {\n" +" return cache.match(evt.request)\n" +" .then(function(response) {\n" +" return response || fetch(evt.request);\n" +" });\n" +" })\n" +" );\n" +"});" +msgstr "" + +#. module: web_pwa_oca +#: model_terms:ir.ui.view,arch_db:web_pwa_oca.manifest +msgid "{\n" +" \"name\": \"" +msgstr "" + diff --git a/web_pwa_oca/readme/CONFIGURE.rst b/web_pwa_oca/readme/CONFIGURE.rst new file mode 100644 index 000000000..9fd39a840 --- /dev/null +++ b/web_pwa_oca/readme/CONFIGURE.rst @@ -0,0 +1,10 @@ +The following system parameters con be set to customize the appearance of the application + +* pwa.manifest.name (defaults to "Odoo PWA") +* pwa.manifest.short_name (defaults to "Odoo PWA") +* pwa.manifest.icon128x128 (defaults to "/web_pwa_oca/static/img/icons/icon-128x128.png") +* pwa.manifest.icon144x144 (defaults to "/web_pwa_oca/static/img/icons/icon-144x144.png") +* pwa.manifest.icon152x152 (defaults to "/web_pwa_oca/static/img/icons/icon-152x152.png") +* pwa.manifest.icon192x192 (defaults to "/web_pwa_oca/static/img/icons/icon-192x192.png") +* pwa.manifest.icon256x256 (defaults to "/web_pwa_oca/static/img/icons/icon-256x256.png") +* pwa.manifest.icon512x512 (defaults to "/web_pwa_oca/static/img/icons/icon-512x512.png") diff --git a/web_pwa_oca/readme/CONTRIBUTORS.rst b/web_pwa_oca/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000..2b476d752 --- /dev/null +++ b/web_pwa_oca/readme/CONTRIBUTORS.rst @@ -0,0 +1,3 @@ +* `TAKOBI `_: + + * Lorenzo Battistini diff --git a/web_pwa_oca/readme/DESCRIPTION.rst b/web_pwa_oca/readme/DESCRIPTION.rst new file mode 100644 index 000000000..e2eb74425 --- /dev/null +++ b/web_pwa_oca/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +Make Odoo an installable Progressive Web Application. + +Progressive Web Apps provide an installable, app-like experience on desktop and mobile that are built and delivered directly via the web. +They're web apps that are fast and reliable. And most importantly, they're web apps that work in any browser. +If you're building a web app today, you're already on the path towards building a Progressive Web App. diff --git a/web_pwa_oca/readme/INSTALL.rst b/web_pwa_oca/readme/INSTALL.rst new file mode 100644 index 000000000..3d3720a65 --- /dev/null +++ b/web_pwa_oca/readme/INSTALL.rst @@ -0,0 +1,13 @@ +After having installed this module, browsing your odoo on mobile you will be able to install it as a PWA. + +It is strongly recommended to use this module with a responsive layout, like the one provided by web_responsive. + +This module is intended to be used by Odoo back-end users (employees). + +When a Progressive Web App is installed, it looks and behaves like all of the other installed apps. +It launches from the same place that other apps launch. It runs in an app without an address bar or other browser UI. +And like all other installed apps, it's a top level app in the task switcher. + +In Chrome, a Progressive Web App can either be installed through the three-dot context menu. + +This module also provides a "Install PWA" link in Odoo user menu. diff --git a/web_pwa_oca/readme/ROADMAP.rst b/web_pwa_oca/readme/ROADMAP.rst new file mode 100644 index 000000000..9e763ae62 --- /dev/null +++ b/web_pwa_oca/readme/ROADMAP.rst @@ -0,0 +1,5 @@ +* Evaluate to extend ``FILES_TO_CACHE`` +* Evaluate to use a normal JS file for service worker and download data from a normal JSON controller +* Integrate `Notification API `_ +* Integrate `Web Share API `_ +* Create ``portal_pwa`` module, intended to be used by front-end users (customers, suppliers...) diff --git a/web_pwa_oca/static/description/icon.png b/web_pwa_oca/static/description/icon.png new file mode 100644 index 000000000..2927ee1d7 Binary files /dev/null and b/web_pwa_oca/static/description/icon.png differ diff --git a/web_pwa_oca/static/description/index.html b/web_pwa_oca/static/description/index.html new file mode 100644 index 000000000..7659b00f8 --- /dev/null +++ b/web_pwa_oca/static/description/index.html @@ -0,0 +1,471 @@ + + + + + + +Progressive web application + + + +
+

Progressive web application

+ + +

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

+

Make Odoo an installable Progressive Web Application.

+

Progressive Web Apps provide an installable, app-like experience on desktop and mobile that are built and delivered directly via the web. +They’re web apps that are fast and reliable. And most importantly, they’re web apps that work in any browser. +If you’re building a web app today, you’re already on the path towards building a Progressive Web App.

+

Table of contents

+ +
+

Installation

+

After having installed this module, browsing your odoo on mobile you will be able to install it as a PWA.

+

It is strongly recommended to use this module with a responsive layout, like the one provided by web_responsive.

+

This module is intended to be used by Odoo back-end users (employees).

+

When a Progressive Web App is installed, it looks and behaves like all of the other installed apps. +It launches from the same place that other apps launch. It runs in an app without an address bar or other browser UI. +And like all other installed apps, it’s a top level app in the task switcher.

+

In Chrome, a Progressive Web App can either be installed through the three-dot context menu.

+

This module also provides a “Install PWA” link in Odoo user menu.

+

In case you previously installed web_pwa, run the following steps with odoo shell, after having installed openupgradelib:

+
+>>> from openupgradelib import openupgrade
+>>> openupgrade.update_module_names(env.cr, [('web_pwa', 'web_pwa_oca')], merge_modules=False)
+>>> env.cr.commit()
+
+
+
+

Configuration

+

The following system parameters con be set to customize the appearance of the application

+
    +
  • pwa.manifest.name (defaults to “Odoo PWA”)
  • +
  • pwa.manifest.short_name (defaults to “Odoo PWA”)
  • +
  • pwa.manifest.icon128x128 (defaults to “/web_pwa_oca/static/img/icons/icon-128x128.png”)
  • +
  • pwa.manifest.icon144x144 (defaults to “/web_pwa_oca/static/img/icons/icon-144x144.png”)
  • +
  • pwa.manifest.icon152x152 (defaults to “/web_pwa_oca/static/img/icons/icon-152x152.png”)
  • +
  • pwa.manifest.icon192x192 (defaults to “/web_pwa_oca/static/img/icons/icon-192x192.png”)
  • +
  • pwa.manifest.icon256x256 (defaults to “/web_pwa_oca/static/img/icons/icon-256x256.png”)
  • +
  • pwa.manifest.icon512x512 (defaults to “/web_pwa_oca/static/img/icons/icon-512x512.png”)
  • +
+
+
+

Known issues / Roadmap

+
    +
  • Evaluate to extend FILES_TO_CACHE
  • +
  • Evaluate to use a normal JS file for service worker and download data from a normal JSON controller
  • +
  • Integrate Notification API
  • +
  • Integrate Web Share API
  • +
  • Create portal_pwa module, intended to be used by front-end users (customers, suppliers…)
  • +
+
+
+

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

+
    +
  • TAKOBI
  • +
+
+
+

Contributors

+
    +
  • TAKOBI:
      +
    • Lorenzo Battistini
    • +
    +
  • +
+
+
+

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.

+

Current maintainer:

+

eLBati

+

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_pwa_oca/static/description/pwa.png b/web_pwa_oca/static/description/pwa.png new file mode 100644 index 000000000..0591fd870 Binary files /dev/null and b/web_pwa_oca/static/description/pwa.png differ diff --git a/web_pwa_oca/static/img/icons/icon-128x128.png b/web_pwa_oca/static/img/icons/icon-128x128.png new file mode 100644 index 000000000..b111f3697 Binary files /dev/null and b/web_pwa_oca/static/img/icons/icon-128x128.png differ diff --git a/web_pwa_oca/static/img/icons/icon-144x144.png b/web_pwa_oca/static/img/icons/icon-144x144.png new file mode 100644 index 000000000..dd3fd020d Binary files /dev/null and b/web_pwa_oca/static/img/icons/icon-144x144.png differ diff --git a/web_pwa_oca/static/img/icons/icon-152x152.png b/web_pwa_oca/static/img/icons/icon-152x152.png new file mode 100644 index 000000000..38023d8cf Binary files /dev/null and b/web_pwa_oca/static/img/icons/icon-152x152.png differ diff --git a/web_pwa_oca/static/img/icons/icon-192x192.png b/web_pwa_oca/static/img/icons/icon-192x192.png new file mode 100644 index 000000000..4d46abbfb Binary files /dev/null and b/web_pwa_oca/static/img/icons/icon-192x192.png differ diff --git a/web_pwa_oca/static/img/icons/icon-256x256.png b/web_pwa_oca/static/img/icons/icon-256x256.png new file mode 100644 index 000000000..a54e9d6fd Binary files /dev/null and b/web_pwa_oca/static/img/icons/icon-256x256.png differ diff --git a/web_pwa_oca/static/img/icons/icon-512x512.png b/web_pwa_oca/static/img/icons/icon-512x512.png new file mode 100644 index 000000000..3be61eacb Binary files /dev/null and b/web_pwa_oca/static/img/icons/icon-512x512.png differ diff --git a/web_pwa_oca/static/src/js/pwa_install.js b/web_pwa_oca/static/src/js/pwa_install.js new file mode 100644 index 000000000..7b7d1f656 --- /dev/null +++ b/web_pwa_oca/static/src/js/pwa_install.js @@ -0,0 +1,43 @@ +odoo.define("web_pwa_oca.systray.install", function(require) { + "use strict"; + + var UserMenu = require("web.UserMenu"); + + if ("serviceWorker" in navigator) { + window.addEventListener("load", function() { + navigator.serviceWorker.register("/service-worker.js").then(function(reg) { + console.log("Service worker registered.", reg); + }); + }); + } + + var deferredInstallPrompt = null; + + UserMenu.include({ + start: function() { + window.addEventListener( + "beforeinstallprompt", + this.saveBeforeInstallPromptEvent + ); + return this._super.apply(this, arguments); + }, + saveBeforeInstallPromptEvent: function(evt) { + deferredInstallPrompt = evt; + this.$.find("#pwa_install_button")[0].removeAttribute("hidden"); + }, + _onMenuInstallpwa: function() { + deferredInstallPrompt.prompt(); + // Hide the install button, it can't be called twice. + this.el.setAttribute("hidden", true); + // Log user response to prompt. + deferredInstallPrompt.userChoice.then(function(choice) { + if (choice.outcome === "accepted") { + console.log("User accepted the A2HS prompt", choice); + } else { + console.log("User dismissed the A2HS prompt", choice); + } + deferredInstallPrompt = null; + }); + }, + }); +}); diff --git a/web_pwa_oca/static/src/xml/pwa_install.xml b/web_pwa_oca/static/src/xml/pwa_install.xml new file mode 100644 index 000000000..6f371785e --- /dev/null +++ b/web_pwa_oca/static/src/xml/pwa_install.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/web_pwa_oca/views/webclient_templates.xml b/web_pwa_oca/views/webclient_templates.xml new file mode 100644 index 000000000..cc4f9ac79 --- /dev/null +++ b/web_pwa_oca/views/webclient_templates.xml @@ -0,0 +1,109 @@ + + + +