From dfe4e8ae6c97d35c7a9e568e6f0dff3f811993e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexandre=20D=2E=20D=C3=ADaz?= Date: Thu, 11 Mar 2021 15:08:42 +0100 Subject: [PATCH] [IMP] web_pwa_oca: Add support for require system Service workers need to load "Odoo Bootstrap" to be able to use "require". The problem is that "Odoo Bootstrap" does operations on the DOM (by using jQuery) and to avoid errors a minimal compatibility layer "jquery-sw-compat.js" has been created to allow using "require" in the service worker. Moved Service Worker (js) code from the xml to python. --- web_pwa_oca/__manifest__.py | 1 - web_pwa_oca/controllers/__init__.py | 1 + web_pwa_oca/controllers/main.py | 4 +- web_pwa_oca/controllers/service_worker.py | 87 ++++++ web_pwa_oca/i18n/es.po | 270 +----------------- web_pwa_oca/i18n/web_pwa_oca.pot | 41 +-- web_pwa_oca/readme/ROADMAP.rst | 1 - .../static/src/js/worker/jquery-sw-compat.js | 62 ++++ .../static/src/js/worker/libs/class.js | 150 ---------- web_pwa_oca/static/src/js/worker/pwa.js | 49 ++-- web_pwa_oca/templates/service_worker.xml | 39 --- 11 files changed, 187 insertions(+), 518 deletions(-) create mode 100644 web_pwa_oca/controllers/service_worker.py create mode 100644 web_pwa_oca/static/src/js/worker/jquery-sw-compat.js delete mode 100644 web_pwa_oca/static/src/js/worker/libs/class.js delete mode 100644 web_pwa_oca/templates/service_worker.xml diff --git a/web_pwa_oca/__manifest__.py b/web_pwa_oca/__manifest__.py index 57da5493a..61a0e1422 100644 --- a/web_pwa_oca/__manifest__.py +++ b/web_pwa_oca/__manifest__.py @@ -21,7 +21,6 @@ ], "data": [ "templates/assets.xml", - "templates/service_worker.xml", "views/res_config_settings_views.xml", ], 'images': ['static/description/pwa.png'], diff --git a/web_pwa_oca/controllers/__init__.py b/web_pwa_oca/controllers/__init__.py index 1f371126f..1fbcf85db 100644 --- a/web_pwa_oca/controllers/__init__.py +++ b/web_pwa_oca/controllers/__init__.py @@ -1,3 +1,4 @@ # Copyright 2020 Lorenzo Battistini @ TAKOBI # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). from . import main +from . import service_worker diff --git a/web_pwa_oca/controllers/main.py b/web_pwa_oca/controllers/main.py index 3ec650436..40761d2e0 100644 --- a/web_pwa_oca/controllers/main.py +++ b/web_pwa_oca/controllers/main.py @@ -12,7 +12,9 @@ class PWA(Controller): """Scripts to be imported in the service worker (Order is important)""" return [ "/web/static/lib/underscore/underscore.js", - "/web_pwa_oca/static/src/js/worker/libs/class.js", + "/web_pwa_oca/static/src/js/worker/jquery-sw-compat.js", + "/web/static/src/js/boot.js", + "/web/static/src/js/core/class.js", "/web_pwa_oca/static/src/js/worker/pwa.js", ] diff --git a/web_pwa_oca/controllers/service_worker.py b/web_pwa_oca/controllers/service_worker.py new file mode 100644 index 000000000..3fbda6209 --- /dev/null +++ b/web_pwa_oca/controllers/service_worker.py @@ -0,0 +1,87 @@ +# Copyright 2021 Tecnativa - Alexandre D. Díaz +# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). +from odoo.http import request, route +from .main import PWA + + +class ServiceWorker(PWA): + + JS_PWA_CORE_EVENT_INSTALL = """ + self.addEventListener('install', evt => {{ + console.log('[ServiceWorker] Installing...'); + {} + }}); + """ + + JS_PWA_CORE_EVENT_FETCH = """ + self.addEventListener('fetch', evt => {{ + {} + }}); + """ + + JS_PWA_CORE_EVENT_ACTIVATE = """ + self.addEventListener('activate', evt => {{ + {} + }}); + """ + + JS_PWA_MAIN = """ + self.importScripts(...{pwa_scripts}); + + odoo.define("web_pwa_oca.ServiceWorker", function (require) {{ + "use strict"; + + {pwa_requires} + + {pwa_init} + {pwa_core_event_install} + {pwa_core_event_activate} + {pwa_core_event_fetch} + }}); + """ + + def _get_js_pwa_requires(self): + return """ + const PWA = require('web_pwa_oca.PWA'); + """ + + def _get_js_pwa_init(self): + return """ + const oca_pwa = new PWA({}); + """.format(self._get_pwa_params()) + + def _get_js_pwa_core_event_install_impl(self): + return """ + evt.waitUntil(oca_pwa.installWorker()); + self.skipWaiting(); + """ + + def _get_js_pwa_core_event_activate_impl(self): + return """ + console.log('[ServiceWorker] Activating...'); + evt.waitUntil(oca_pwa.activateWorker()); + self.clients.claim(); + """ + + def _get_js_pwa_core_event_fetch_impl(self): + return "" + + @route("/service-worker.js", type="http", auth="public") + def render_service_worker(self): + """Route to register the service worker in the 'main' scope ('/')""" + + sw_code = self.JS_PWA_MAIN.format(**{ + 'pwa_scripts': self._get_pwa_scripts(), + 'pwa_requires': self._get_js_pwa_requires(), + 'pwa_init': self._get_js_pwa_init(), + 'pwa_core_event_install': self.JS_PWA_CORE_EVENT_INSTALL.format( + self._get_js_pwa_core_event_install_impl()), + 'pwa_core_event_activate': self.JS_PWA_CORE_EVENT_ACTIVATE.format( + self._get_js_pwa_core_event_activate_impl()), + 'pwa_core_event_fetch': self.JS_PWA_CORE_EVENT_FETCH.format( + self._get_js_pwa_core_event_fetch_impl()), + }) + return request.make_response( + sw_code, + [('Content-Type', "text/javascript;charset=utf-8"), + ('Content-Length', len(sw_code))]) diff --git a/web_pwa_oca/i18n/es.po b/web_pwa_oca/i18n/es.po index a3e299f2f..2d5adbdac 100644 --- a/web_pwa_oca/i18n/es.po +++ b/web_pwa_oca/i18n/es.po @@ -6,15 +6,16 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2021-02-17 10:45+0000\n" +"POT-Creation-Date: 2021-03-11 16:50+0000\n" +"PO-Revision-Date: 2021-03-11 19:03+0100\n" "Last-Translator: claudiagn \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Poedit 2.4.1\n" #. module: web_pwa_oca #: model:ir.model.fields,field_description:web_pwa_oca.field_res_config_settings__pwa_background_color @@ -123,266 +124,3 @@ msgstr "[ServiceWorker] Registrada:" #, python-format msgid "[ServiceWorker] Registration failed: " msgstr "[ServiceWorker] Error en el registro: " - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "" -"console.log('[ServiceWorker] Activating...');\n" -" evt.waitUntil(oca_pwa.activateWorker());\n" -" self.clients.claim();" -msgstr "" -"console.log('[ServiceWorker] Activating...');\n" -" evt.waitUntil(oca_pwa.activateWorker());\n" -" self.clients.claim();" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_init -msgid "const oca_pwa = new PWA(" -msgstr "const oca_pwa = nuevo PWA(" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "" -"evt.waitUntil(oca_pwa.installWorker());\n" -" self.skipWaiting();" -msgstr "" -"evt.waitUntil(oca_pwa.installWorker());\n" -" self.skipWaiting();" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "self.addEventListener('activate', evt => {" -msgstr "self.addEventListener('activate', evt => {" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "self.addEventListener('fetch', evt => {" -msgstr "self.addEventListener('fetch', evt => {" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "" -"self.addEventListener('install', evt => {\n" -" console.log('[ServiceWorker] Installing...');" -msgstr "" -"self.addEventListener('install', evt => {\n" -" console.log('[ServiceWorker] Installing...');" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.service_worker -msgid "self.importScripts(..." -msgstr "self.importScripts(..." - -#~ msgid "Install PWA" -#~ msgstr "Instalar PWA" - -#~ msgid "" -#~ "\",\n" -#~ " \"sizes\": \"128x128\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"sizes\": \"128x128\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"sizes\": \"144x144\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"sizes\": \"144x144\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"sizes\": \"152x152\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"sizes\": \"152x152\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"sizes\": \"192x192\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"sizes\": \"192x192\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"sizes\": \"256x256\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"sizes\": \"256x256\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }, {\n" -#~ " \"src\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"sizes\": \"512x512\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }],\n" -#~ " \"start_url\": \"/web\",\n" -#~ " \"display\": \"standalone\",\n" -#~ " \"background_color\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"sizes\": \"512x512\",\n" -#~ " \"type\": \"image/png\"\n" -#~ " }],\n" -#~ " \"start_url\": \"/web\",\n" -#~ " \"display\": \"standalone\",\n" -#~ " \"background_color\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"icons\": [{\n" -#~ " \"src\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"icons\": [{\n" -#~ " \"src\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"short_name\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"short_name\": \"" - -#~ msgid "" -#~ "\",\n" -#~ " \"theme_color\": \"" -#~ msgstr "" -#~ "\",\n" -#~ " \"theme_color\": \"" - -#~ msgid "" -#~ "';\n" -#~ "const FILES_TO_CACHE = [" -#~ msgstr "" -#~ "';\n" -#~ "const FILES_TO_CACHE = [" - -#~ msgid "" -#~ "'use strict';\n" -#~ "const CACHE_NAME = '" -#~ msgstr "" -#~ "'use strict';\n" -#~ "const CACHE_NAME = '" - -#~ 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 "" -#~ "];\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" -#~ "});" - -#~ msgid "" -#~ "{\n" -#~ " \"name\": \"" -#~ msgstr "" -#~ "{\n" -#~ " \"name\": \"" diff --git a/web_pwa_oca/i18n/web_pwa_oca.pot b/web_pwa_oca/i18n/web_pwa_oca.pot index b875bc43f..c5d669fda 100644 --- a/web_pwa_oca/i18n/web_pwa_oca.pot +++ b/web_pwa_oca/i18n/web_pwa_oca.pot @@ -6,6 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-03-11 16:50+0000\n" +"PO-Revision-Date: 2021-03-11 16:50+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -117,42 +119,3 @@ msgstr "" msgid "[ServiceWorker] Registration failed: " msgstr "" -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "console.log('[ServiceWorker] Activating...');\n" -" evt.waitUntil(oca_pwa.activateWorker());\n" -" self.clients.claim();" -msgstr "" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_init -msgid "const oca_pwa = new PWA(" -msgstr "" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "evt.waitUntil(oca_pwa.installWorker());\n" -" self.skipWaiting();" -msgstr "" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "self.addEventListener('activate', evt => {" -msgstr "" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "self.addEventListener('fetch', evt => {" -msgstr "" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.pwa_core_events -msgid "self.addEventListener('install', evt => {\n" -" console.log('[ServiceWorker] Installing...');" -msgstr "" - -#. module: web_pwa_oca -#: model_terms:ir.ui.view,arch_db:web_pwa_oca.service_worker -msgid "self.importScripts(..." -msgstr "" - diff --git a/web_pwa_oca/readme/ROADMAP.rst b/web_pwa_oca/readme/ROADMAP.rst index aa58b7b05..2f26e2693 100644 --- a/web_pwa_oca/readme/ROADMAP.rst +++ b/web_pwa_oca/readme/ROADMAP.rst @@ -31,6 +31,5 @@ * Fix issue when trying to run in localhost with several databases. The browser doesn't send the cookie and web manifest returns 404. -* Evaluate to support 'require' system. * Firefox can't detect 'standalone' mode. See https://bugzilla.mozilla.org/show_bug.cgi?id=1285858 * Firefox disable service worker in private mode. See https://bugzilla.mozilla.org/show_bug.cgi?id=1601916 diff --git a/web_pwa_oca/static/src/js/worker/jquery-sw-compat.js b/web_pwa_oca/static/src/js/worker/jquery-sw-compat.js new file mode 100644 index 000000000..266da0e57 --- /dev/null +++ b/web_pwa_oca/static/src/js/worker/jquery-sw-compat.js @@ -0,0 +1,62 @@ +/* Copyright 2020 Tecnativa - Alexandre D. Díaz + * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ + + // Compatibility layer to load some Odoo modules + // This is a very simple implementation!!! + +function JQuery (selector, context) { + return new JQuery.prototype.init(selector, context); +}; + +JQuery.prototype = { + + init: function (selector, context) { + if (typeof selector === "function") { + selector(); + } + }, + + // This is a hack, not a complete implementation! + // only expected to be used by boot.js + deparam: function (data) { + const params = data.split(','); + const res = []; + for (let param of params) { + res.push(param.split('=')); + } + return _.object(res); + }, + + param: { + querystring: function () { + return "debug=1"; + } + }, + + when: function (tasks) { + if (!(tasks instanceof Array)) { + tasks = [tasks]; + } + return Promise.all(tasks).then((results) => { + return results.length === 1 ? results[0] : results; + }); + }, +}; + +class Deferred { + constructor() { + this.promise = new Promise((resolve, reject)=> { + this.reject = reject; + this.resolve = resolve; + }) + } +}; + +JQuery.prototype.Deferred = () => new Deferred(); + +self.$ = JQuery; +self.$.deparam = JQuery.prototype.deparam; +self.$.param = JQuery.prototype.param; +self.$.Deferred = JQuery.prototype.Deferred; +self.$.when = JQuery.prototype.when; +self.window = self; diff --git a/web_pwa_oca/static/src/js/worker/libs/class.js b/web_pwa_oca/static/src/js/worker/libs/class.js deleted file mode 100644 index c44c8e715..000000000 --- a/web_pwa_oca/static/src/js/worker/libs/class.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * Improved John Resig's inheritance, based on: - * - * Simple JavaScript Inheritance - * By John Resig http://ejohn.org/ - * MIT Licensed. - * - * Adds "include()" - * - * Defines The Class object. That object can be used to define and inherit classes using - * the extend() method. - * - * Example:: - * - * var Person = Class.extend({ - * init: function(isDancing){ - * this.dancing = isDancing; - * }, - * dance: function(){ - * return this.dancing; - * } - * }); - * - * The init() method act as a constructor. This class can be instanced this way:: - * - * var person = new Person(true); - * person.dance(); - * - * The Person class can also be extended again: - * - * var Ninja = Person.extend({ - * init: function(){ - * this._super( false ); - * }, - * dance: function(){ - * // Call the inherited version of dance() - * return this._super(); - * }, - * swingSword: function(){ - * return true; - * } - * }); - * - * When extending a class, each re-defined method can use this._super() to call the previous - * implementation of that method. - * - * @class Class - */ -function OdooClass(){} - -var initializing = false; -var fnTest = /xyz/.test(function(){xyz();}) ? /\b_super\b/ : /.*/; - -/** - * Subclass an existing class - * - * @param {Object} prop class-level properties (class attributes and instance methods) to set on the new class - */ -OdooClass.extend = function() { - var _super = this.prototype; - // Support mixins arguments - var args = _.toArray(arguments); - args.unshift({}); - var prop = _.extend.apply(_,args); - - // Instantiate a web class (but only create the instance, - // don't run the init constructor) - initializing = true; - var This = this; - var prototype = new This(); - initializing = false; - - // Copy the properties over onto the new prototype - _.each(prop, function(val, name) { - // Check if we're overwriting an existing function - prototype[name] = typeof prop[name] == "function" && - fnTest.test(prop[name]) ? - (function(name, fn) { - return function() { - var tmp = this._super; - - // Add a new ._super() method that is the same - // method but on the super-class - this._super = _super[name]; - - // The method only need to be bound temporarily, so - // we remove it when we're done executing - var ret = fn.apply(this, arguments); - this._super = tmp; - - return ret; - }; - })(name, prop[name]) : - prop[name]; - }); - - // The dummy class constructor - function Class() { - if(this.constructor !== OdooClass){ - throw new Error("You can only instanciate objects with the 'new' operator"); - } - // All construction is actually done in the init method - this._super = null; - if (!initializing && this.init) { - var ret = this.init.apply(this, arguments); - if (ret) { return ret; } - } - return this; - } - Class.include = function (properties) { - _.each(properties, function(val, name) { - if (typeof properties[name] !== 'function' - || !fnTest.test(properties[name])) { - prototype[name] = properties[name]; - } else if (typeof prototype[name] === 'function' - && prototype.hasOwnProperty(name)) { - prototype[name] = (function (name, fn, previous) { - return function () { - var tmp = this._super; - this._super = previous; - var ret = fn.apply(this, arguments); - this._super = tmp; - return ret; - }; - })(name, properties[name], prototype[name]); - } else if (typeof _super[name] === 'function') { - prototype[name] = (function (name, fn) { - return function () { - var tmp = this._super; - this._super = _super[name]; - var ret = fn.apply(this, arguments); - this._super = tmp; - return ret; - }; - })(name, properties[name]); - } - }); - }; - - // Populate our constructed prototype object - Class.prototype = prototype; - - // Enforce the constructor to be what we expect - Class.constructor = Class; - - // And make this class extendable - Class.extend = this.extend; - - return Class; -}; diff --git a/web_pwa_oca/static/src/js/worker/pwa.js b/web_pwa_oca/static/src/js/worker/pwa.js index d5079d622..6ba68e0aa 100644 --- a/web_pwa_oca/static/src/js/worker/pwa.js +++ b/web_pwa_oca/static/src/js/worker/pwa.js @@ -1,7 +1,3 @@ -"use strict"; -/* eslint strict: ["error", "global"] */ -/* eslint-disable no-undef, no-empty-function, no-implicit-globals, -no-unused-vars */ /* Copyright 2020 Tecnativa - Alexandre D. Díaz * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */ @@ -11,25 +7,36 @@ no-unused-vars */ * When the service worker is called to be installed from the "pwa_manager" * this class is instantiated. */ -var PWA = OdooClass.extend({ - // eslint-disable-next-line - init: function (params) { - // To be overridden - }, - /** - * @returns {Promise} - */ - installWorker: function () { - return Promise.resolve(); - }, +odoo.define("web_pwa_oca.PWA", function (require) { + "use strict"; - /** - * @returns {Promise} - */ - activateWorker: function () { - return Promise.resolve(); - }, + const OdooClass = require("web.Class"); + const PWA = OdooClass.extend({ + + // eslint-disable-next-line + init: function (params) { + // To be overridden + }, + + /** + * @returns {Promise} + */ + installWorker: function () { + // To be overridden + return Promise.resolve(); + }, + + /** + * @returns {Promise} + */ + activateWorker: function () { + // To be overridden + return Promise.resolve(); + }, + }); + + return PWA; }); diff --git a/web_pwa_oca/templates/service_worker.xml b/web_pwa_oca/templates/service_worker.xml deleted file mode 100644 index 888dc20ae..000000000 --- a/web_pwa_oca/templates/service_worker.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - -