From 03e8507aa1176b6d256e5e2b6d0cbc1e58862c52 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Thu, 5 Nov 2015 08:41:52 +0100 Subject: [PATCH 01/12] [ADD] web_favicon closes #199 --- web_favicon/README.rst | 68 ++++++++++++++++++++++++ web_favicon/__init__.py | 21 ++++++++ web_favicon/__openerp__.py | 44 +++++++++++++++ web_favicon/controllers/__init__.py | 20 +++++++ web_favicon/controllers/web_favicon.py | 44 +++++++++++++++ web_favicon/models/__init__.py | 20 +++++++ web_favicon/models/res_company.py | 29 ++++++++++ web_favicon/static/description/icon.png | Bin 0 -> 9455 bytes web_favicon/tests/__init__.py | 20 +++++++ web_favicon/tests/test_web_favicon.py | 63 ++++++++++++++++++++++ web_favicon/views/res_company.xml | 17 ++++++ web_favicon/views/templates.xml | 10 ++++ 12 files changed, 356 insertions(+) create mode 100644 web_favicon/README.rst create mode 100644 web_favicon/__init__.py create mode 100644 web_favicon/__openerp__.py create mode 100644 web_favicon/controllers/__init__.py create mode 100644 web_favicon/controllers/web_favicon.py create mode 100644 web_favicon/models/__init__.py create mode 100644 web_favicon/models/res_company.py create mode 100644 web_favicon/static/description/icon.png create mode 100644 web_favicon/tests/__init__.py create mode 100644 web_favicon/tests/test_web_favicon.py create mode 100644 web_favicon/views/res_company.xml create mode 100644 web_favicon/views/templates.xml diff --git a/web_favicon/README.rst b/web_favicon/README.rst new file mode 100644 index 00000000..c9bb1ddb --- /dev/null +++ b/web_favicon/README.rst @@ -0,0 +1,68 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License: AGPL-3 + +==================== +Custom shortcut icon +==================== + +This module was written to allow you to customize your Odoo instance's shortcut +icon (aka favicon). This is useful for branding purposes, but also for +integrators who have many different Odoo instances running and need to see at a +glance which browser tab does what. + +Configuration +============= + +Upload your favicon (16x16, 32x32 or 64x64 pixels, 16 colors) on the company +form. The file format whould be ico, gif or png with 16x16, 32x32 or 64x64 +pixels and 16 colors. + +Note that most browsers cache favicons basically forever, so if you want your +icon to show up, you'll most probably have to delete you browser cache. + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/162/8.0 + +For further information, please visit: + +* https://www.odoo.com/forum/help-1 + +Known issues / Roadmap +====================== + +* allow to upload some big icon (preferrably SVG or the like) and generate icons suitable for mobile devices + +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 +`here `_. + +Credits +======= + +Contributors +------------ + +* Holger Brunn + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://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. diff --git a/web_favicon/__init__.py b/web_favicon/__init__.py new file mode 100644 index 00000000..d8724ec7 --- /dev/null +++ b/web_favicon/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import models +from . import controllers diff --git a/web_favicon/__openerp__.py b/web_favicon/__openerp__.py new file mode 100644 index 00000000..10d18800 --- /dev/null +++ b/web_favicon/__openerp__.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +{ + "name": "Custom shortcut icon", + "version": "8.0.1.0.0", + "author": "Therp BV,Odoo Community Association (OCA)", + "license": "AGPL-3", + "category": "Website", + "summary": "Allows to set a custom shortcut icon", + "depends": [ + 'web', + ], + "data": [ + "views/res_company.xml", + 'views/templates.xml', + ], + "qweb": [ + ], + "test": [ + ], + "auto_install": False, + "installable": True, + "application": False, + "external_dependencies": { + 'python': [], + }, +} diff --git a/web_favicon/controllers/__init__.py b/web_favicon/controllers/__init__.py new file mode 100644 index 00000000..5c319aec --- /dev/null +++ b/web_favicon/controllers/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import web_favicon diff --git a/web_favicon/controllers/web_favicon.py b/web_favicon/controllers/web_favicon.py new file mode 100644 index 00000000..f9212ce4 --- /dev/null +++ b/web_favicon/controllers/web_favicon.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import StringIO +import base64 +from openerp import http +from openerp.tools.misc import file_open + + +class WebFavicon(http.Controller): + + @http.route('/web_favicon/favicon', type='http', auth="none") + def icon(self): + request = http.request + if 'uid' in request.env.context: + user = request.env['res.users'].browse(request.env.context['uid']) + company = user.sudo(user.id).company_id + else: + company = request.env['res.company'].search([], limit=1) + favicon = company.favicon_backend + favicon_mimetype = company.favicon_backend_mimetype + if not favicon: + favicon = file_open('web/static/src/img/favicon.ico') + favicon_mimetype = 'image/x-icon' + else: + favicon = StringIO.StringIO(base64.b64decode(favicon)) + return request.make_response( + favicon.read(), [('Content-Type', favicon_mimetype)]) diff --git a/web_favicon/models/__init__.py b/web_favicon/models/__init__.py new file mode 100644 index 00000000..6c860e44 --- /dev/null +++ b/web_favicon/models/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import res_company diff --git a/web_favicon/models/res_company.py b/web_favicon/models/res_company.py new file mode 100644 index 00000000..6f54bb46 --- /dev/null +++ b/web_favicon/models/res_company.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from openerp import models, fields + + +class ResCompany(models.Model): + _inherit = 'res.company' + + favicon_backend = fields.Binary() + favicon_backend_mimetype = fields.Char( + help='Set the mimetype of your file. Usually, that\'s one of\n' + 'image/x-icon, image/gif, image/png') diff --git a/web_favicon/static/description/icon.png b/web_favicon/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/web_favicon/tests/__init__.py b/web_favicon/tests/__init__.py new file mode 100644 index 00000000..15f22fca --- /dev/null +++ b/web_favicon/tests/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import test_web_favicon diff --git a/web_favicon/tests/test_web_favicon.py b/web_favicon/tests/test_web_favicon.py new file mode 100644 index 00000000..0301639c --- /dev/null +++ b/web_favicon/tests/test_web_favicon.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module copyright (C) 2015 Therp BV . +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import base64 +from openerp.tests.common import TransactionCase +from openerp.tools.misc import file_open +from openerp import http + + +class FakeRequest(object): + def __init__(self, env): + self.env = env + + def make_response(self, data, headers): + return FakeResponse(data, headers) + + +class FakeResponse(object): + def __init__(self, data, headers): + self.data = data + self.headers = dict(headers) + + +class TestWebFavicon(TransactionCase): + def test_web_favicon(self): + original_request = http.request + http.request = FakeRequest(self.env) + from openerp.addons.web_favicon.controllers.web_favicon import\ + WebFavicon + company = self.env['res.company'].search([], limit=1) + # default icon + company.write({ + 'favicon_backend': False, + 'favicon_backend_mimetype': False, + }) + data = WebFavicon().icon() + self.assertEqual(data.headers['Content-Type'], 'image/x-icon') + # our own icon + company.write({ + 'favicon_backend': base64.b64encode(file_open( + 'web_favicon/static/description/icon.png').read()), + 'favicon_backend_mimetype': 'image/png', + }) + data = WebFavicon().icon() + self.assertEqual(data.headers['Content-Type'], + company.favicon_backend_mimetype) + http.request = original_request diff --git a/web_favicon/views/res_company.xml b/web_favicon/views/res_company.xml new file mode 100644 index 00000000..fa06e47d --- /dev/null +++ b/web_favicon/views/res_company.xml @@ -0,0 +1,17 @@ + + + + + res.company + + + + + + + + + + + + diff --git a/web_favicon/views/templates.xml b/web_favicon/views/templates.xml new file mode 100644 index 00000000..ed80510a --- /dev/null +++ b/web_favicon/views/templates.xml @@ -0,0 +1,10 @@ + + + + + + From f72e81b5be0cbcc269cd062ed53a05107fb1f79b Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 7 Apr 2016 14:30:57 +0200 Subject: [PATCH 02/12] [IMP] web_favicon: Nicer icon + README imp + support files --- web_favicon/README.rst | 40 ++++++++----- web_favicon/__init__.py | 20 +------ web_favicon/__openerp__.py | 37 +++--------- web_favicon/controllers/__init__.py | 20 +------ web_favicon/controllers/web_favicon.py | 21 +------ web_favicon/models/__init__.py | 20 +------ web_favicon/models/res_company.py | 30 +++------- web_favicon/static/description/icon.png | Bin 9455 -> 3398 bytes .../static/src/img/android-chrome-144x144.png | Bin 0 -> 1674 bytes .../static/src/img/android-chrome-192x192.png | Bin 0 -> 2304 bytes .../static/src/img/android-chrome-36x36.png | Bin 0 -> 582 bytes .../static/src/img/android-chrome-48x48.png | Bin 0 -> 693 bytes .../static/src/img/android-chrome-72x72.png | Bin 0 -> 949 bytes .../static/src/img/android-chrome-96x96.png | Bin 0 -> 1213 bytes .../src/img/apple-touch-icon-114x114.png | Bin 0 -> 1275 bytes .../src/img/apple-touch-icon-120x120.png | Bin 0 -> 1267 bytes .../src/img/apple-touch-icon-144x144.png | Bin 0 -> 1508 bytes .../src/img/apple-touch-icon-152x152.png | Bin 0 -> 1570 bytes .../src/img/apple-touch-icon-180x180.png | Bin 0 -> 1875 bytes .../static/src/img/apple-touch-icon-57x57.png | Bin 0 -> 677 bytes .../static/src/img/apple-touch-icon-60x60.png | Bin 0 -> 736 bytes .../static/src/img/apple-touch-icon-72x72.png | Bin 0 -> 869 bytes .../static/src/img/apple-touch-icon-76x76.png | Bin 0 -> 855 bytes .../src/img/apple-touch-icon-precomposed.png | Bin 0 -> 2363 bytes .../static/src/img/apple-touch-icon.png | Bin 0 -> 1875 bytes web_favicon/static/src/img/browserconfig.xml | 12 ++++ web_favicon/static/src/img/favicon-16x16.png | Bin 0 -> 390 bytes web_favicon/static/src/img/favicon-32x32.png | Bin 0 -> 533 bytes web_favicon/static/src/img/favicon-96x96.png | Bin 0 -> 1213 bytes web_favicon/static/src/img/favicon.ico | Bin 0 -> 15086 bytes web_favicon/static/src/img/manifest.json | 41 +++++++++++++ .../src/img/master_original_favicon.png | Bin 0 -> 7242 bytes .../src/img/master_original_favicon.svg | 56 ++++++++++++++++++ web_favicon/static/src/img/mstile-144x144.png | Bin 0 -> 1820 bytes web_favicon/static/src/img/mstile-150x150.png | Bin 0 -> 1632 bytes web_favicon/static/src/img/mstile-310x150.png | Bin 0 -> 1514 bytes web_favicon/static/src/img/mstile-310x310.png | Bin 0 -> 3294 bytes web_favicon/static/src/img/mstile-70x70.png | Bin 0 -> 1232 bytes .../src/img/website_favicon_sample.html | 24 ++++++++ web_favicon/tests/__init__.py | 20 +------ web_favicon/tests/test_web_favicon.py | 21 +------ 41 files changed, 190 insertions(+), 172 deletions(-) create mode 100644 web_favicon/static/src/img/android-chrome-144x144.png create mode 100644 web_favicon/static/src/img/android-chrome-192x192.png create mode 100644 web_favicon/static/src/img/android-chrome-36x36.png create mode 100644 web_favicon/static/src/img/android-chrome-48x48.png create mode 100644 web_favicon/static/src/img/android-chrome-72x72.png create mode 100644 web_favicon/static/src/img/android-chrome-96x96.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-114x114.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-120x120.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-144x144.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-152x152.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-180x180.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-57x57.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-60x60.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-72x72.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-76x76.png create mode 100644 web_favicon/static/src/img/apple-touch-icon-precomposed.png create mode 100644 web_favicon/static/src/img/apple-touch-icon.png create mode 100644 web_favicon/static/src/img/browserconfig.xml create mode 100644 web_favicon/static/src/img/favicon-16x16.png create mode 100644 web_favicon/static/src/img/favicon-32x32.png create mode 100644 web_favicon/static/src/img/favicon-96x96.png create mode 100644 web_favicon/static/src/img/favicon.ico create mode 100644 web_favicon/static/src/img/manifest.json create mode 100644 web_favicon/static/src/img/master_original_favicon.png create mode 100644 web_favicon/static/src/img/master_original_favicon.svg create mode 100644 web_favicon/static/src/img/mstile-144x144.png create mode 100644 web_favicon/static/src/img/mstile-150x150.png create mode 100644 web_favicon/static/src/img/mstile-310x150.png create mode 100644 web_favicon/static/src/img/mstile-310x310.png create mode 100644 web_favicon/static/src/img/mstile-70x70.png create mode 100644 web_favicon/static/src/img/website_favicon_sample.html diff --git a/web_favicon/README.rst b/web_favicon/README.rst index c9bb1ddb..be9fd7a5 100644 --- a/web_favicon/README.rst +++ b/web_favicon/README.rst @@ -1,25 +1,33 @@ .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License: AGPL-3 + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 -==================== -Custom shortcut icon -==================== +============================== +Custom shortcut icon (favicon) +============================== This module was written to allow you to customize your Odoo instance's shortcut icon (aka favicon). This is useful for branding purposes, but also for integrators who have many different Odoo instances running and need to see at a glance which browser tab does what. +More info about favicon: https://en.wikipedia.org/wiki/Favicon + Configuration ============= -Upload your favicon (16x16, 32x32 or 64x64 pixels, 16 colors) on the company -form. The file format whould be ico, gif or png with 16x16, 32x32 or 64x64 -pixels and 16 colors. +Upload your favicon (16x16, 32x32, 64x64 or "as big as possible") on the +company form. The file format would be ico, gif or png with 16x16, 32x32 or +64x64 pixels and 16 colors. Highers resolutions or colors support depends on +the used browser, but most modern browsers do. Note that most browsers cache favicons basically forever, so if you want your icon to show up, you'll most probably have to delete you browser cache. +You have a sample SVG that can be used as template for generating your icon +in /static/src/img/master_original_favicon.svg. You can also search for some +favicon generators across the web. + Usage ===== @@ -27,14 +35,15 @@ Usage :alt: Try me on Runbot :target: https://runbot.odoo-community.org/runbot/162/8.0 -For further information, please visit: - -* https://www.odoo.com/forum/help-1 - Known issues / Roadmap ====================== -* allow to upload some big icon (preferrably SVG or the like) and generate icons suitable for mobile devices +* Allow to upload some big icon (preferrably SVG or the like) and generate + all the icons from it +* Generate icons suitable for mobile devices and web apps (see /static/src/img/ + folder inside the module for a sample of the possible current formats. +* Put the icon definition at system level, not at company level. It doesn't + make sense (as the icon is cached) to have a different icon per company. Bug Tracker =========== @@ -42,7 +51,9 @@ 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 -`here `_. +`here `_. Credits ======= @@ -51,6 +62,7 @@ Contributors ------------ * Holger Brunn +* Pedro M. Baeza Maintainer ---------- @@ -65,4 +77,4 @@ 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. +To contribute to this module, please visit https://odoo-community.org. diff --git a/web_favicon/__init__.py b/web_favicon/__init__.py index d8724ec7..a2666d4d 100644 --- a/web_favicon/__init__.py +++ b/web_favicon/__init__.py @@ -1,21 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from . import models from . import controllers diff --git a/web_favicon/__openerp__.py b/web_favicon/__openerp__.py index 10d18800..b6d6491f 100644 --- a/web_favicon/__openerp__.py +++ b/web_favicon/__openerp__.py @@ -1,29 +1,17 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2015 Therp BV +# © 2016 Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + { "name": "Custom shortcut icon", "version": "8.0.1.0.0", - "author": "Therp BV,Odoo Community Association (OCA)", + "author": "Therp BV, " + "Tecnativa, " + "Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Website", - "summary": "Allows to set a custom shortcut icon", + "summary": "Allows to set a custom shortcut icon (aka favicon)", "depends": [ 'web', ], @@ -31,14 +19,5 @@ "views/res_company.xml", 'views/templates.xml', ], - "qweb": [ - ], - "test": [ - ], - "auto_install": False, "installable": True, - "application": False, - "external_dependencies": { - 'python': [], - }, } diff --git a/web_favicon/controllers/__init__.py b/web_favicon/controllers/__init__.py index 5c319aec..7c3fa3f8 100644 --- a/web_favicon/controllers/__init__.py +++ b/web_favicon/controllers/__init__.py @@ -1,20 +1,4 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from . import web_favicon diff --git a/web_favicon/controllers/web_favicon.py b/web_favicon/controllers/web_favicon.py index f9212ce4..f0b92aa0 100644 --- a/web_favicon/controllers/web_favicon.py +++ b/web_favicon/controllers/web_favicon.py @@ -1,22 +1,7 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2015 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + import StringIO import base64 from openerp import http diff --git a/web_favicon/models/__init__.py b/web_favicon/models/__init__.py index 6c860e44..54d77ccf 100644 --- a/web_favicon/models/__init__.py +++ b/web_favicon/models/__init__.py @@ -1,20 +1,4 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from . import res_company diff --git a/web_favicon/models/res_company.py b/web_favicon/models/res_company.py index 6f54bb46..e30c1b2a 100644 --- a/web_favicon/models/res_company.py +++ b/web_favicon/models/res_company.py @@ -1,22 +1,8 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2015 Therp BV +# © 2016 Pedro M. Baeza +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from openerp import models, fields @@ -24,6 +10,8 @@ class ResCompany(models.Model): _inherit = 'res.company' favicon_backend = fields.Binary() - favicon_backend_mimetype = fields.Char( - help='Set the mimetype of your file. Usually, that\'s one of\n' - 'image/x-icon, image/gif, image/png') + favicon_backend_mimetype = fields.Selection( + selection=[('image/x-icon', 'image/x-icon'), + ('image/gif', 'image/gif'), + ('image/png', 'image/png')], + help='Set the mimetype of your file.') diff --git a/web_favicon/static/description/icon.png b/web_favicon/static/description/icon.png index 3a0328b516c4980e8e44cdb63fd945757ddd132d..bc0090b3d2d9321a3f225477887f7f7d3e1c68dd 100644 GIT binary patch literal 3398 zcma)9^;Z)P*Pk>vN)QK1cS?6k3={-WVBkhfkQiM9>4AWBONVrKN+Td3BLybiCHmGTtp?gCBe+5WFDDgL09H;}~OKwHwobC@K*}E_KymBibfqkmGHdg*G zChEE#`|Fw^cUz(=5JA*I31pzrH=xlUZzV#FuXjLVxN2Hvf?FWqvSpeA#nILyP#ii@=25lRASa>RS=5KsaMw)b}m8Y-d&OD6teYQbLTZLqrf z%pUVmL0VT)t#AmD(Lk9sr8FZ>3kyhBGfO;h{d}?T__*(bAV`3gBuI&WSwK>X8d!rJ zRm$`;t8MVZZYD?2eGF7%qYG6Byi`K!n2Gk+9A!xq#idMiueM9xBG?J?sb`Vx{Vkl> zH>_*@a0Un-E{P)dA)#Ab26rpu40Y@={^Q8Rg*jc)Db9jiw#W_HK=nZws)rXG(08M# zZWd9kd)9rz!#~WA#-`>bz$c5KzGri_FKOXKL6dqu;!CprCew!JGaq>5_(`dqfw8Q9 z-V6xei>l+@D@Fr+E_|4hs{I+rzB!)_jvsuZlp1w?NMBS?-$E=$!NSZ>Je>zrTgx|# zii{m{je+P$XJui%9~Nr+ed%>w_s%wXu+{Qfar)vr;aA?=F%`A|?A*YoJIh_;oiqLM z`9GM=xi5`p@zPT9t?X|dBb>-HAHUcrSOJ_wTWYHnpyI=(K3nIzUw7>VU&swx+s1Lqy+TBX?3hEqbF;S69Uq7=n$Dm zvDIe>9Nhh%Nw(8vwsW^V=#sRYfg7!73=+zX09#4?2LCCdV@$$sj(SY zz<_bW8^Q3|q&cN+53hGH%rvSe_SYKfOY5mU|Hi}keq1mBmh)6oGecL_bdB8gO6uy9 zYV=7tH!-z>Xmnh?-{6|pD=w&b2xgbY=_KrZs8$2c=sse7YuAg|9lwIb-}Jz7a%DZA zv1|oXp2+rfZdkcg|MBhZ;@nI92{Q3Y*g!3IUfmHSeQDLJ+LK7U`n>+hWweAsZc7Hq`%g|| zdy6piO81&^pvw3L!CUW+{v$ zy+*nMk|r?cU}fwvi=u}Urxf#Y1h1G|CwiAWlX-NRurp<|PeiP6v4OU>Zwa(V^7X6T z{DlC~W{K;w{F_{T+gfbu?5A`;p`jx|q&4>d>~ZU|om#QD{NfGXNSjO4jf}zZ#h*lP zOJ~`DSE^;wQdfgiwjT9ie;q2}^Hil_G?oT67Cq9wPOZGh;(?vHh^Zy#=Fsr))huz_ z|Brayo>NXPqo2V?bj4S9-u}_5UC_Ik4g-1|>ahDYbJ8S~HeB?8Vb5(?u2O4Iqlo^adT#<)+Y!z&%-`$S@af!*i5hApY*hr8rP1JIV>j@#N4 zO@Z{m8}`MIVYe%O1*0Pe7DKc0vdD^MukZqwiM(yTs|E7Q*GBvf_DAF2SP&v0@=YSn zp`>|jIGn}F$!TWKT~}AvV=3S<+YA-UKIZ~WG%KcEwx~4I;`$Chn->+f?)d?%D!Pue z{zyBp5;$i5_r#d84IC7SBJD5I(^y-N-jdL~_6aE_;dmn`g@4k^Ic(3NRYg@Ki+WCB znAX*8E)0{500IAe&YEtIw*1>PmKM0NL!{%pZ)D1BlMna{nTHkGv8}>-4PrME^J>t2MAgES)*cj%GZp#wmi>fKsd9XHq|% zWps*Ev5Ym7wzNZaFevsGSt5bz!dzqiXdiVUI=|yYwb75E)xNi%>}F?YHNqwYo^<$f+4P&8-EQtPQ2qzD ztx424ALc-uK~f5ynl~KGpsyma-zcqmY=PmOuG_y4$h(rCkyCMMuBDE11*%Q8dc(nN zj<&nTbkS3=Bw*?aTsI-FpedzJ# z;G?I=;S2-;DbkDsU0poMD68C)LnpoS{<-XBz?5!VP2ao9A;}H2kd@622W76MBWA z61$-8r}9eu-K?bsB~1z|J5Pdjs2wFeFLDU=)O*+53A?slpNwuyL(aE�pi~x#&pE z^9nyi)_eO+_dnK7X{kEQEo3w}>5u}8d#h2tI%p3M`k|6fuW0Dq2{u8&`h4xbWB* zP79f(Z!ZPIVDvJ`{U5uhE6&YqkARqGOQnlh*Cd2w&j8tVb#?uh0Q<(Y@$qqayCAb< zJaJJ`(^`yrTlX*vRN#qtT4ZoALG{`wJx+z60OX8{Y?UY`F7Czq_fO@s4r*NPL#(T> zUv_T(5!a&!z{kf2{GF-JjVAJzXPj+xAY_v0PSYS#uKJh2x2h_N%ITp7yV)v?ZO{v5 zX&JAB>1xXnhB)AM~<>~1eO++IA<%%_JQuQxgc9euPIp(OKa(DpwP5TGI z-g^S^ch2_Ga6e>6%R`J(y_ zxaW-s$B~@X8L7?%Z|(0tDpkn^;0-*$qx7e6I|0fc1k1qQ?ptR0Jo$G7M-oG~h4b|5w6)#Lt{|DRJhqM3y literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I diff --git a/web_favicon/static/src/img/android-chrome-144x144.png b/web_favicon/static/src/img/android-chrome-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..47cbf21afcea0e9dd6da61a2bb377010bcab50bc GIT binary patch literal 1674 zcmbW1`#TegAIG;gw{kx?8g^#!#n=fM(Z;YHq%m#?rk z)#_`Tm=0$SxfG!|nsUUn!@+XfwBa~A|H65m&-?R!UZ3arynlQb2L^a)9E2PM000_3 z-Z+B7%m0xoNU_JLx+Mw&C%XH)0|2dMhjwF>6b#HDczFPxzA;`>fLf||c!uJ6>K_3; zENjS$qg$X~Fy1dItqFhoUk_@*pRI_}%OnI40jfR&AQ9xfe7(bh;iwgUHz})d!pABV z08rxk;M{}B(<70BEFnVuxuAyxlJ2-I7r(2`O{#*$fQeDVliWSlwS@Z+@8J@KoR@CY#&_E|;u#n>ho#2% zE=9|E^DC71xJoalN=b=BVs@q(4N*K&Q z6RWmM>QF9}HE!IbZC)T5-LXYm=9#fE%9Zij4gOHiVo(}#G0s-jxNaSm{36l(J7N83 z{f%nLhGTfS6}RHzEF~h*RLm;BiZRlTgxI5|5w2s49mwV7DYcwctw-aOFxWET!L0q! zp^%)K{k0lVk%+D0`visKc1^GDeIX5&v2`ZLw8`F)sMDwMKm=vrT9aTlJmLqd#;1Qm zo)`rn6FQjV{Wo95lY8i)&%{9_hiS3I|1RpaZ zpqzA>XBkaK-tPN}|89(XI@0_$NqLCXQcC$Wu4Rx=xzdgtXP<%x8fVf+R^65Fr`4_p z4eK~u`ewmYLV14G#Ihd{$V=1>r6-rf!^U7Q2Z`TIICxb&x?Z5Gq zeac3Ecx=xTm7g^=N1RZpI=7BZ+ch9f&F_~VvV-wAX4IL7+xjlPX|+7Y%10+K`ay#$ zXFZ4Doa2x34XzKnlx>z!amZ8nBSLFTL%I*d;tKulL^CeI`u22N z)-uRvfnfYQ4=YP(-{%t!kCB`*MRL5C18pw91US2k!Aetr>;$?P#5B{BX$|LE|44(b z8k%zcXgY6S8@C|5alyIxN&*)1wk$nWLIe{&_AGhX_;L%6Aa-7YGb=Vob=_$VwLw|w z=7@GkN{Cl@^Hz8+PxEK1fp>Y94Y4&HCZLhex*uUfpyZY1 zO*?;9&I(y{A`IBDP>$Iy7kco?t4Zzxo9ABhVP89!Km-GostgB2li zQrR^X?_fT9n-3n$w~rFX&=VDlsE*YQ6McR$yk}6q^^{c4sfYI1yr}h)tALo*Ng+z4 zE!Jp@vICd_mr3ThbZ+L>cQMAT^0^v4qgI{0BjfHXxl{vOQR#Ygw^C1|GLEVtji$jU z_$m4=0V&U_!`3LY@J0LuAm^{`N<`D;G0m=!?7_or%T+pWaQk(;XYiGPK676dc`0Y^ou|H9dl_-2;=Kc}BVxy;Su_``N}!LY*&5uU+u4P$rB{l?L>*7XRf+y2WYo#D#8)g_HWE)i#)gnGBhes4ejKcLHp zS&mkHRwl{8}yLG`dw_FnNX%^=`Xb3x{p>KI}n> Qihc+9-~(_^JxG+l0npneIsgCw literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/android-chrome-192x192.png b/web_favicon/static/src/img/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..95dd0dfc4ec9765d3bb9d89b8a63056631659ad9 GIT binary patch literal 2304 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 DhW7Pu literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/android-chrome-48x48.png b/web_favicon/static/src/img/android-chrome-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..5a31a338d060f6a17028d9d2575e672cbd56e83d GIT binary patch literal 693 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=fts&_Fr$;k>jEvTJ}?;m`m2 zYxml=HZH}>~3rzcIB#}u(Y4SPByoKv%Ry|FFae#S@5aKFjC>$^}pNs1+GRNRbHZ2wa!vO zvpBE&uGJgu=W`xjp4RtRf4BOQ`1w1xoZjWwQFy+=M?*4xLwoyQoxGp@i~476;`np< zRO7;4x5pcc3ZK2d@NTBeREu}aHL{O3XBRyyV~W53VcS!kr(71Qd)QB8-fKTLscD&R zWw6W2)x7We7oARAFy+vhUk#>jCwc5$UJ$%8I5V*58GDzJ>bs-=89l>Ka7ZoSP?1&v#wwvD|`(gNm}c_UW@om=#x(r{sP@XhIK z=UhBpnmV^z6BH7!(Enkt?y`m^~sl4f6e2- z1(_wfLU*!eZ7mNx-TQSO(>BJ5jNjv>h3|13;c$JiYtNo^gTH&~-aYT%CSt$r1NU0L WEWW$<`gMTO&*16m=d#Wzp$PykVK_Vh literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/android-chrome-72x72.png b/web_favicon/static/src/img/android-chrome-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..1e22c5202db42c05305214335f65ab51d1fba717 GIT binary patch literal 949 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%A+0*}aIpyul!%;=;sy8XTWx*tMG~$ktZ;G0<3vk|4ieh9@&` znAa_lV@Sl|wGlTbEm07d;+*GbGvWXL zOQqIkX|tHNm~6YZ%w1SZ`*o4TuVvRP12+rnZcS)hRvCJ@__K|!&*?weLGMpz%um#` zmYOK7#yQtUu1((O*}Tl=)<;vGcv~+N;9K{R?HRM{+qvPv6C{&!_UxI`t)%QLzpg*o zeC9>9?dz&-p16xuNT=WX?0kE+hwE53 zv^Selpa0?`dy0nSDQUeQHBM`ib;jy)bX-LBja zh~pA^q2ci9qNb6jL*7(l59?Fkm301EZ|Z3T+{PB{>d^Z*w&CIvrh^hX!k+J%U zyk6H=Jt}sg%j@NdH1%hr~&;^JdImoXFs_S+~gE#w>sN4i>d7e`@Sv f9+iAO`JVs8<_`}ZiMQzklRtx}tDnm{r-UW|BNMV+ literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/android-chrome-96x96.png b/web_favicon/static/src/img/android-chrome-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..63ba2618c2cfd688f316b15c446e70b325f416fe GIT binary patch literal 1213 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy#B(j9#r85lP9bN@+X1@ak-gWR1M z)}51i3FL4VctjQhHD3o|MkkHg6+l6c0G|+7pUlF=uHBTQeeESHfo6)A1o;IsgqmeM z=eflE=i6j4?S=Q`HokY>SAL>JCZ6L30|WDIPZ!6KjC)(7-Zm{(;1OZ`876Syd;R6? z?|I*E#Wgj={4+OEnd!;4eC4SfGfzHzyh%&)#x57%^3%&5)y~ZObLh&?te~|Y6=v^v zU%NQ3^84TGS6+4Od^+!a)x`9ZSBlQuO_Y#2T$y|Dt88M%wDh@OWe&c+Yu_sy9i5fF z{+wB~hx5%@&2!H#o3r+-y?f=ihy$zzA>cG*KPIY+f(+v*?so(=QhvsKwq_{AYep^VL&dEl-6sS@p$Tt&iCJ{oK(# zab;Y$|9{=T*=W7RuKYG`#T_@xRu#|G+?4C}VY1{=b$@wpO@Z$d*$PGO$cwQUIxE$+ zD9OvV#RXgtJL=(A5Oym6?tzV5Q#bM)yxsWhQN>@yz`ZXtPBevH`Xj_J>7j%62ic?U zy6cz{mUJyNs~2UO)aa0r$lVKmMEt4Ro|S2!|&3!P^MiRU!Sxl zdoXx#a5i>c+05(MXEXmz)$W#kmg0|uxZR%ZHVb*NzD@Q`(>&>>%YRmg^*-5mScs)U zxZusMud)n{%jPr8I5k&^ktM4#Y9iZvPbLQO*GCpqzn&ud?`ZAGWetZab~CaHtC_Cy zO1u&{S*C&^V7XA&0|^O7iJ2)H>^Uhjoh~2dGL3qZW5Tgvx@Lbf*NVxHpE&fqJ*>1~ zxy*?fnK4t}%`a+q|GmxT zaL`$E9r>%1c)Fa{tO!?dIvQllbp8Y1kITMJ*SqX|qaJyyCPjI#>tej@6#szX-jw|& zzrABzuTIz==Ja$?fol2ZmY0_K2@TwFr>3(gZ(JPoon1F?$FtJ`C%q$jwL9l~v1n@4 zte)4{{b;kEjfu{-RoCkueZBH&`hJxiOZTbdFa=#`HPDN^)_G?0*3UkZ&aL@#hQZVH z_t(P{LK-(NSU2Cm!AkJuvD>HIFFjy;8rAo)|Im^`=Re|G_9^OfEL`$6_uv0t_4h8F zwb`J(cGBzUty|&_>-(>{U%zHy~gxew2uEKC2s_T$N@ zv`afIyCSd4D^9<%(Y#A(;hw+Mw{}kBn!V0`O~Sl;KP_6`yYmU9FP!o0_WcVpX6`y; z7wNW&{piKO_!k_X7kG+KpUV34_h@~ literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon-114x114.png b/web_favicon/static/src/img/apple-touch-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaacd34759dbe8b2807d5cec34d86486ba85902 GIT binary patch literal 1275 zcmVPx#MNmvsMWaQFxpJqaNsiN}$oKE{`}g{?VVwW}|EW%q ztW=fn-RkDb-r2Ix;KA7b{Qm0Gu;hL7JpUztGu_BE6GjNHh~;NS+lL zlxdG6$Uw;np`jl+OL9u&+==u~lasQ#E~K}oiFYS*9Y}8#A#Y=XNT zR$2~7d7bybz9iiG@UJs|a!$Os%jACOZ$$#uFc;2G1ufK=~Bs`uKGON=c6 zgRk*Q_mP-;slq5SC`>4T!lD~RIw(gRkmgcS6Pj685!1hrFi;^BOowGi+2RJGcqb%OPKpaEIb+ zvV(|1-mR#PEV*Hh*%%N0_kWAs(bq%%K$fg|Pj{_>uSpZKqfgK?l4{$Tv+@^zc2x)> zyFR-41t_<)Ji9n#27-A2e?u2`TnG_{Ewy1u_N_U|TpxJpjfE)w{E8Pbu&w@uV@K{d zfMTt=l9DuKc9)!}Y)u`3Mkhh$yFr0+A28XA^fKa4Efy!%oO`p8Nzbbb9UalJz>uIttwAf$~z)4P2O-F~ZZzb3B;Mh(VsnzsnC6~Ft l`x*+LUFQ$-gZ%f9zW_-L^cyqs0oVWl002ovPDHLkV1innXb%7Y literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon-120x120.png b/web_favicon/static/src/img/apple-touch-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..3909ec7f00c5abfa485b3122c3e7d180ee73a1ae GIT binary patch literal 1267 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 KMNUMnLSTXlDCzD1 literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon-152x152.png b/web_favicon/static/src/img/apple-touch-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..93fd730ba9c06dac2a7124e89fd315e57da044ef GIT binary patch literal 1570 zcmV+-2Hp9IP)0{{R3FC5Sl00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#MNmvsMgRZ*tyY$^WS*o(jHXJC`}O(3gR!GUi~jum zs!)>Nyw$sQsqfwD_wV)c=I_m#z|y70uw9wRkh$vAvCii6Z>InN1$#+E zK~#9!?OfTiQ>!F7pdg!5t{wLIT z!+MO12~ub+X1ND59_x_$PlD=(ZCb+YwEY*U6X3oa>u13AX`RfhmCccIayepmGpytn z>GGidCN0b{+{d?W9d~V!q~)@uTVM@`5z11?1>YXpFiCC6r1!Sa`V*G2Rn!z(J*+Qi zVQXUsoxcL>OV^g6ffQGx?Nw6p;Pz{26qbXuiM;Fz$}*Ake45rB!t#+Dxy*A|wB;l& zac;Y^%p^Ak_42djr}?r=>si(77m14|&`r*^A$RnbyqC7E$W8Ugx`w!}@T{9!;yRJ} zO1*E4>$HHa&K{j@O>+%0FKl~~^gAF*dj}cny_pOt&eHBj3Lf?|8>ii0n&>q85&ip0 zoJse#4k@KB4RQ6O*_~=-njWe6YBoNm?>YKmX4OK?kP7C)5&K*|bp+(c8GN+eFDO`M z>k9cg%CI$Fn481ET8nDi#{~mTVsoby%DT0ClmKwK)rhprsi?Pvu)RAZ*VPn@A*&?C zpV1UQG$fP@D~XYsOQg|p=zob}dP)580D@&DhUuEDurEaf2$mHXrpKz{LlIe-WfQDl zOKnl4aLE-}Hb~wm1R4OS{#|G$$g-jsKprdfNz3(0;0kHV3|Q6yo#UvsO?9&DO|{ivi<7eIAChd$ zFqma|9}B4%3&Y^6Sj39YDL7`9JSVGUkctJajs}$I1` z^jisVe>-2Vam&XqVkL(>3uDt$k_#+(CM(Ye3@|Y@y+4w-WWDkMgOn^Im{4`Uaw=JP ze`3Ew_rYK^158$hN_0<_|DXN+iM$&#tWE#C%E0o^+0 z`APZei2lQX{bxmalU2U*%0GY9j{#OGsh&S@dVZiNzEkf?$$3`-aZjKEbDYrykc%0r zwQ$B`FR!T94>TUed)(MTt`Y^lc{Jb-cN;kw5qw!vr2h+GE{ZL$d>x9MzCm3#Hd#Wo z!CXrfsw)UChXK{@#tJU8*(J~s(pya#iplvymAiZ{1{FMV$tX3cR5e|Duu0FtGO*M+ zRhcpm%OHlit+w2K-N}MIN2oOdHX!VB)t7Zkbu$T)W%Yy{u4My`3#EMcD5%%_;f?y&g)N{2~m2TP1>-{2Jph3^A^L zGJ&v4OO5epWAk5w^J12>aKy2Bdbo1WqJbLe0iJg^0IL}-yknUqR3*{v*MIiPo+!Wa=+j(EG$gJ?lX~?7OrcWm|DCNl8%cHaX4JcS0m3WPnVQ- z_^!#b?hTsOuzm`3Cqq-BIjk>e+d^WS3)5XMMD=GjJL9lvIo|XD(=Tje5HL7BhiMz` zf9k96;t5U)_Z{AuWbS6%hVJz#>bn%TV>DqulU=R;d9iJa>2shSdg!5t9{MBcFY;~+ UAH#I9{r~^~07*qoM6N<$g3rbVO8@`> literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon-180x180.png b/web_favicon/static/src/img/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..2899fa5da80dccdf5e8cf0a43bc8d87d02102773 GIT binary patch literal 1875 zcmV-Z2dwysP)Px#LQqUpMgRZ*wrisM_xjMF#QyyKvSFO9SC*qii=;=4 zsZNmd=(%AJfUob~>)W@|)~w6BcdE*jyy3#x=F8uWc*1G`00yr~L_t(| z+U;H0mg6W4ZH&Qe#u)7X|J6yVt9$CqR7CDd%YWp7J_mVh(|ZA)+$ppAKisckbd--J zf0rd*_W%I?gWIZ*w(B)zTBXn!z<+_OaQI7)ol8+K)nbKQuTqogEXpoTVstpCOCYx_ z@|Wd~!(sa)+ND$M*wvCvzCT%k8=}z0if=jS*{>F1yM>!VcWJxyv| z7WY>kbfRSSEF&p35Wyyp~Bo7c8915H)coW&jWo2H#!@yH0FVyT_L zsdER{iA|RAOO0A+E4#?IdDo;%jaukV%xE$tAWuy~EVL=zBquIqMlQ7%m@`Pg-Q(i* zf?DbW@l%Pc_DS&4`dx5z(7IA~qEhq9VdOo5)yigcr-6;uxAjcRzwi=`5Ts zPVkNi!h42U!fIW>Us?4yNy9~q-3#5O+G!eNUm>tU3g5X| ziv0E+PDd@Uxn=l5BbFNQFJNv+t7E$(&rEe}#6R2sm-eSM>)Oy%**qUSg#`lo|jXe*QG~r7T!}{RCC30P&^$`Ac&hXuwdLw_Irev~AUC z!>Q8%J*MCCAj)Rzp)Rx2ko8c_&LuE{4$aO5aO07$BL(t^xf!(Ji}Ik@BQ}SonlGM) zqP)<28W=MdD4v$>>DGRgZ!xJov5i~-^$aQI*-jy_7ja=7)ZzfnAAh6^CaZp2EV>30*PW4-W0sne;q%-MT8tN zHKdf#{(|2#m};;J(4@X2!Qslm8yDyv5WZ$6UuwAA5;C;#g}xznFo=o|@OlbVYU)c{ zM1jfC{~NSf7p9U2bi=TI&|cdjDhd%+7E%AG=oDmCBA{4Fa@$Cov^s(FyyA9YQ6~$iX^(04wTm(8U_K zK88-zILvrb3)wN!)hmtc-mR#Lk+?P#)!a=#B^>6OI0xGzXJwn0!M3?nl^@N>rCv;I z$r;fNMRggeL$|7`RJ+(dVOzIMr3*XIZG$#eHE_)ik&YP_04sK{YnD@HDj_`oQX_ZwC%`G=P=;qH)*gC#yX#SWMS=EEx7LuK{ z4f;lfefEXfGYX+%w=Agqz1O3L_*X=lZ2-D{w?BqDdj=TD-IOyhO8%;=u z2!b0DAI74l;oMvtiJEF;o*TH>U80~l@>wj1*Jr$&70(QTv4ddXunzIsIBUscZg zb?@iQ?x-f|KAxbt^y!?Z;ZDd0ihgT_D96Q!KP|UAWrSydKFP_n`Zs!jYkJbTPr}iB zyS_@ql2-SQFNV#2dosK60scAg_R9-rn}5?6&ThHomRoMQ<(6AO`3I66ZCQXo7SaF! N002ovPDHLkV1mYJt!e-O literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon-57x57.png b/web_favicon/static/src/img/apple-touch-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..1f06b9f29d29d5c90410023fa2a4992d4fd919b1 GIT binary patch literal 677 zcmV;W0$TlvP)Px#QBX`&MgRZ*^5*aU{Qjv6DC zvt*vTcdE>ozUIr{zkaTyMvU*?>-X>V_3QH8xzpmr+qP|^$B($#vd`+&Y4ax;Y^(`WujZrM5XPq1`^!1m)%v%nYqF?Dsv23 zQJaQbe(G!I8=WJTfz!P_JU~Kmy$S?G#9ZML)HPxC?%%gs8 zSuaSB8yW&HF-v|_4|MBNHPnxb*-C?{ z;SC4XfL9#dJ8)O2u{?r%Gdfz%AP0AqIca-=8${SZ;rfU3|I)Xv+?{-$NJlB{$Taif z#L`Cbe$o-qcoWat%na=@UIpH>k=+t23!vCLxW}rhC*9)prZL}wuYYUU-2DG_i|%oU zaiVwMw+-Q{xC{^ejPG&hFlhCW#S`Aouj2Ur-u9pWt+5B8uYZg$g77SP%Gq^V00000 LNkvXXu0mjfA@x*5 literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon-60x60.png b/web_favicon/static/src/img/apple-touch-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..715f3339829524b03b2c62ccaf958a34e074a9d3 GIT binary patch literal 736 zcmV<60w4W}P)Px#T2M?>MgRZ*{rmm<_WJno_O4l%s7#NxY@?$^i>gqP zq(+SI-|MAGjk02#>(=GFcB$yk;m@7I{{8;MiM6z6px(RG)27Gb#M{AxvA=(>^XKr$ zkh$5h&i3u|%$UBl;OH6v00JaQL_t(Y$L&|yc7q@gjRXZ00TGD{{{L?_Ij5CD0coE* zj{_HmJ1dXJzkJK!?DQIO-BH}=sek?g>a6B9BR|4uGqqJ2beYDEoQ3MX0PYlLBqnri zZ=jWJ;?R%q4P~$0Ym$+Ab!luX7|DxBn%+0$R+dTB_Jh{(I2uhXUuH?!7) z(=!k2)!|dP2d{QP)nlk!zX=+0zFo+|K|t*7;Mb6x0}t}kvk^3!2|1jW4bB*D!O={+ z8#mHEIC%z3I+}oOle)U6c~_iS!SK}z==)Rv8t}9U_!yX^l93Nd6)0vkU($IaY0N$l zAbT#^J*~_KiuTbXbLnpUCHheMCv%qrx1R9kPBH&W9A8W+yQo?|vJz>7`jagSYu<=mNg+U^HYP@1erONnXQ>>2U5@X?> zFB#LqOuZCX65|F$PFN&TksSn+1>Jm3%n(md=P2YAmJ+r{yD-{8SD1q>8(8U71dS9h zuC^)nztQ?a`J&;NGM`R2!3;AR6gG^Y`%;-HjUU5=S-!)(T8s#X4K-XG!NW$%@T@jt zHZ@~*-=HnMHgXo3QFyE?3|n0?7+@RE)~NuEO)A$ndWYpUT^%jYLYe5ZW&M>go$fAQ z;*d!VpPi8RbFbT)$nEc_DVx}zb`7R4M#o*EU;Gl}=a)dc&o|*UN%#M8`jIaj12vs; S26k-#0000Px#R8UM*MWaQF@#OBZVVtg7m;U_yt5cKs@%I1!|D{Qd zs7;W@jknL9!ri*mz=5y5d#wET`nPSP%a^|Y{{OUSq1m&~>(%AdsL1Ed;O^Y%;=|gy zb*T00@tXtxj~P8^m_Y>Tk-dmDfbEosV@NK?K* z22RIdpFmf0Ps9u4B0=X2eXjus7Qfw}K?jVW2Ov0&vv>xfoX!Bm?p4T|g>_>91Y1lM zNDq#30YEThS0Z8*9L%qPTmmF3Lqi_PM2oKQW zZfb-EI<$-Fd#VC4c8a^uT0+6r_~7Ked?ZUnsqb&#X^k)lE)B0x`NrM7Erj zH^*VTnj>=byyEiM$U1r4tO=dXeHE!alFHw@u7YDScMqNKY@F2`bdaOymG;dPzr3~F9P`2#}g{eZ}GxhkJD#OB5pWvgSSUhNx? vEFW{axS?rf*U7dS+_Jy-$nx`|_3fbFQPF9c0n|D100000NkvXXu0mjf!bzjj literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon-76x76.png b/web_favicon/static/src/img/apple-touch-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..490ff715a5383f679b0d08e2051e91c048e778ee GIT binary patch literal 855 zcmV-d1E~CoP)Px#PEbr#MgRZ*{`~#(=4ozQ0VzaVZ3jSLJB`Zc>fkMkp`BQ}U^Qd}A5y1;W*CDu|bP?(;r|&j) za#t1VZ7jik%7sXITci&iSjR4SkBI$fVr_)?3Yi;N&hUQG+uy_biB{8X(|k-wnKxA8 zONf$F_L5K8nhODKm0~6{pP;Ren+|eIaisz$Xb;sU$e2{sx{_Go zQzoD*S5~jXr0UQGXs%n;1(G5lClgRysAe&StgKLP-HgMeBmmV&D61Vi`UEhAg2EQ> zl+n4Px?@q~1yFFYp2lj5q+PYJ$=kVu_wPsGnWd{EMo?ewC+D32*9EqKjJluPD~8;< zz}(#f@_r(UelADaT>gm`O_x==A1N^d=dOvzG_Sc|Wnk8NfiC+u}3l z(E)ax#nP~V)}%VXRJjww229#RVE`;^RAxZ5{RzvwW#zPOm)fMGs9G83zCKG&p4U7E z?X33TcbSDx+o?WJnOcHwrZH6^-91Xr$sn||df>d>UCMW-+vDD2pgprQ6;mf~Dwbx! z#}2Zk%ud^5e>t=4vi-RXT6a%|;Ot|l6)_)0b7rHE#N!!-5YUW0kpr_kmf0nM8cnpJ z*;T+4ojye|xS>=B%ykS+E>m^D96^(+p2A^3H>z5zHH)$n%XF;i6YknM#nsoVkG-uN z?f#5l3lWWF-wk||)IMCeyl{9830kh~_l7v_DAcb{s<<1#o{(l&$5(&7*ny)ZhRTos hGaE5tuW$Kxk^P)Px#Z%|BBMNDaN|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0 z|NsC0|No;!i~jumsZWvo_xhwpjHXJCvt*vFR+aeh_VeiRwrr!=ug%e;#lC&6uw9z) z;Oy+!=jhPl&6~i*inZm*-Me79aY4CcPC_kYHnc6Mjl6p-YDgw_8hUmaPp z4$GeRL*8FrFHge12N92#*Ozw>lDF4q|K8;J^=%jV!M{&=*u;Lj`1dQ9b?g`azU5_Q z`(6Bdm&^5*e1G!qUmm|xzd!qDkms+|?~ndD;UnMMyyibIcrG7PE;wBqc)_0AYM`Ko*YRaqU8Tvv|=V^=q{-Y~p*DEu>=)D_l zyJQ;UfGjf2YZEmwaV(-~BN=E(7>~U^w!TV>UT2a23fITh^(<;Gcwi{n*xuue+Ql;etJxGYLV#woZEgN$Ml#_5TD3fIDRN1yL)S$ZxRr3IEJHVG;9k<&CN!JN z;0TF&d(do(gJYzenI&kE@!%+lCuRj&$1?xY>)sgpus!(2 zhSY}8^YP5T>~&=X-IT#CWJnC4t2DTcEJ7PvjW=Qrc%}=@a;@WYDEUW*w-}2wilyc; zt86r(H8!Cvhb8OlBvDETp_1R(-&lh@O|+n^h`7Q$ZP#+pOx0Nzk*$3vG@ywJEu*$q zY&(BFFT}V4@p||g5-<>jopQ1rjvD@vHPX03D61dQ^TRr zt5j9kRMq-kT!+q4YA3tI*A#5#CvMQtxP_LBL1hgaEUzy0Ds+ZfXr3DtUs)DwFZCL9 zf;mOY+^}GbOr~@U2aPcuaxpG)vx#di^$N5?EOgi@-&kwb$E&2>i!rm3M-%)(xcWB@gz-wpFP=09Hh8}NXr9boGKwLg< zLl@K#^Ds+YY(o$96xBgd*RTzpQv8x#_X7OL={9sk42zFDo<`fy@r}$hY`EfWXb#kE z96|$G0KN?^bql{13^nlG|1;?LhUyXO>U4QC>jA|~MiLT2RP&L1F;S|AdO%tO+k(1yStP*#-g(A2l=O9H5 z_D{(Dk{n$8bP#ia6_@Ke;5Bpt)_kpdMYszPDl@|c{m^o;2+{EY74#9U6S3U`Y6CZz zTpu1h`e)d!+6uV$>W3TFX$P{}T7&2){IT^tav>o=Tw}va4Y!N^>>pmpnh9-L5KOO_#55D4+BPkzHKs*&#V=?!$X*3)y73C88M#F@$l`7>MCR7I!8F9L z9VKx2kV$kWd$x9ay;0i}{=%Da@)=L+lvM|;p>(VD&x zN*;esa43c}in-nhhutuAcT`3)1UHiXJox@lk{bX`>|_654_=s^{nTTnx{ z9iiz!sC$lK}%)rpmciwC!HOUsyt z{Lc$#eWfhFaCXYK002ovPDHLkV1hOOky!u$ literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/apple-touch-icon.png b/web_favicon/static/src/img/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2899fa5da80dccdf5e8cf0a43bc8d87d02102773 GIT binary patch literal 1875 zcmV-Z2dwysP)Px#LQqUpMgRZ*wrisM_xjMF#QyyKvSFO9SC*qii=;=4 zsZNmd=(%AJfUob~>)W@|)~w6BcdE*jyy3#x=F8uWc*1G`00yr~L_t(| z+U;H0mg6W4ZH&Qe#u)7X|J6yVt9$CqR7CDd%YWp7J_mVh(|ZA)+$ppAKisckbd--J zf0rd*_W%I?gWIZ*w(B)zTBXn!z<+_OaQI7)ol8+K)nbKQuTqogEXpoTVstpCOCYx_ z@|Wd~!(sa)+ND$M*wvCvzCT%k8=}z0if=jS*{>F1yM>!VcWJxyv| z7WY>kbfRSSEF&p35Wyyp~Bo7c8915H)coW&jWo2H#!@yH0FVyT_L zsdER{iA|RAOO0A+E4#?IdDo;%jaukV%xE$tAWuy~EVL=zBquIqMlQ7%m@`Pg-Q(i* zf?DbW@l%Pc_DS&4`dx5z(7IA~qEhq9VdOo5)yigcr-6;uxAjcRzwi=`5Ts zPVkNi!h42U!fIW>Us?4yNy9~q-3#5O+G!eNUm>tU3g5X| ziv0E+PDd@Uxn=l5BbFNQFJNv+t7E$(&rEe}#6R2sm-eSM>)Oy%**qUSg#`lo|jXe*QG~r7T!}{RCC30P&^$`Ac&hXuwdLw_Irev~AUC z!>Q8%J*MCCAj)Rzp)Rx2ko8c_&LuE{4$aO5aO07$BL(t^xf!(Ji}Ik@BQ}SonlGM) zqP)<28W=MdD4v$>>DGRgZ!xJov5i~-^$aQI*-jy_7ja=7)ZzfnAAh6^CaZp2EV>30*PW4-W0sne;q%-MT8tN zHKdf#{(|2#m};;J(4@X2!Qslm8yDyv5WZ$6UuwAA5;C;#g}xznFo=o|@OlbVYU)c{ zM1jfC{~NSf7p9U2bi=TI&|cdjDhd%+7E%AG=oDmCBA{4Fa@$Cov^s(FyyA9YQ6~$iX^(04wTm(8U_K zK88-zILvrb3)wN!)hmtc-mR#Lk+?P#)!a=#B^>6OI0xGzXJwn0!M3?nl^@N>rCv;I z$r;fNMRggeL$|7`RJ+(dVOzIMr3*XIZG$#eHE_)ik&YP_04sK{YnD@HDj_`oQX_ZwC%`G=P=;qH)*gC#yX#SWMS=EEx7LuK{ z4f;lfefEXfGYX+%w=Agqz1O3L_*X=lZ2-D{w?BqDdj=TD-IOyhO8%;=u z2!b0DAI74l;oMvtiJEF;o*TH>U80~l@>wj1*Jr$&70(QTv4ddXunzIsIBUscZg zb?@iQ?x-f|KAxbt^y!?Z;ZDd0ihgT_D96Q!KP|UAWrSydKFP_n`Zs!jYkJbTPr}iB zyS_@ql2-SQFNV#2dosK60scAg_R9-rn}5?6&ThHomRoMQ<(6AO`3I66ZCQXo7SaF! N002ovPDHLkV1mYJt!e-O literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/browserconfig.xml b/web_favicon/static/src/img/browserconfig.xml new file mode 100644 index 00000000..fe44cae8 --- /dev/null +++ b/web_favicon/static/src/img/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + #da532c + + + diff --git a/web_favicon/static/src/img/favicon-16x16.png b/web_favicon/static/src/img/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..b9f30800c257dee59bb854cd72c7f2b3e1994aed GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM*uE0G|+7pUlF=uH95bM|K7o01cNa3GxeOSl6^b=Hc@{tbXsERD>=~>RkR~ z_YM89;%E!C?0!C=D$W9r$YP-TuY)k7lg8`{px_Ko7sn8Z%c1_BLWdQ2iW?HPwK#0M z_P;)Zb&2s>eyP*bc$Aci-q(c8D=oQ_9T--1Gxy~l1CH_wGj{Oa-59&xW^rI&lEBU2 z$@8pZCUSktl(AlTktN`Z$Q|R28~*d@P5Wj3K_R7HXH}%y#IKgK!X`S&o%dT-*c|)e ziOIjs_YCjd@OG2gyj^CiSgTe~ HDWM4fzJ!|p literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/favicon-32x32.png b/web_favicon/static/src/img/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..8e73a16390f07e3927f45e085cae2e8ed067f4bb GIT binary patch literal 533 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaLr1AIbUeKHFdyLM9%9oZRV05n{xB*-tA;fnh#mOIaXe_VOE)mW2PsZcy@ zORCL;>eJDlIrjZPRh$JLk;OpwUk71ECym(^KsTy;x;TbdoNf({p46hi!&13gL*bRk zcl#H+CO0%iU5@uiT0WVtMdU}`>!m@nW?4+OPWyh5bK#4G*&jqQS1H^H`I{G#wcyOs zb2pZ=e_7h|cZvI#6A!1?EVfU(Ef#o6^1{aF8(#kTc(OLaz;)+(hR$8g`nEf3zUwC+ z{#=!-op7u`L*#(`tAiFRoYI9J9;q<43|OaR=&)hiV*U?{6%8KMWeMA`XfU?lIBU~) z#U*vCE}Otd>xXMu5+j`Ubj&%B=s0bmqR_VsEKZj#4Bxd{*lOpxDM zcVx!w7p;pA?~pm4b^Ln5ey1I>7jk6!b*1&s%013YiS+7k`Ba(dANkPG*`{OFw0&9G zX}kDNpEaNSx<}`|Bj>hHzuS891bbP0l+XkK D+M4Dc literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/favicon-96x96.png b/web_favicon/static/src/img/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..63ba2618c2cfd688f316b15c446e70b325f416fe GIT binary patch literal 1213 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD3?#3*wSy#B(j9#r85lP9bN@+X1@ak-gWR1M z)}51i3FL4VctjQhHD3o|MkkHg6+l6c0G|+7pUlF=uHBTQeeESHfo6)A1o;IsgqmeM z=eflE=i6j4?S=Q`HokY>SAL>JCZ6L30|WDIPZ!6KjC)(7-Zm{(;1OZ`876Syd;R6? z?|I*E#Wgj={4+OEnd!;4eC4SfGfzHzyh%&)#x57%^3%&5)y~ZObLh&?te~|Y6=v^v zU%NQ3^84TGS6+4Od^+!a)x`9ZSBlQuO_Y#2T$y|Dt88M%wDh@OWe&c+Yu_sy9i5fF z{+wB~hx5%@&2!H#o3r+-y?f=ihy$zzA>cG*KPIY+f(+v*?so(=QhvsKwq_{AYep^VL&dEl-6sS@p$Tt&iCJ{oK(# zab;Y$|9{=T*=W7RuKYG`#T_@xRu#|G+?4C}VY1{=b$@wpO@Z$d*$PGO$cwQUIxE$+ zD9OvV#RXgtJL=(A5Oym6?tzV5Q#bM)yxsWhQN>@yz`ZXtPBevH`Xj_J>7j%62ic?U zy6cz{mUJyNs~2UO)aa0r$lVKmMEt4Ro|S2!|&3!P^MiRU!Sxl zdoXx#a5i>c+05(MXEXmz)$W#kmg0|uxZR%ZHVb*NzD@Q`(>&>>%YRmg^*-5mScs)U zxZusMud)n{%jPr8I5k&^ktM4#Y9iZvPbLQO*GCpqzn&ud?`ZAGWetZab~CaHtC_Cy zO1u&{S*C&^V7XA&0|^O7iJ2)H>^Uhjoh~2dGL3qZW5Tgvx@Lbf*NVxHpE&fqJ*>1~ zxy*?fnK4t}%`a+q|GmxT zaL`$E9r>%1c)Fa{tO!?dIvQllbp8Y1kITMJ*SqX|qaJyyCPjI#>tej@6#szX-jw|& zzrABzuTIz==Ja$?fol2ZmY0_K2@TwFr>3(gZ(JPoon1F?$FtJ`C%q$jwL9l~v1n@4 zte)4{{b;kEjfu{-RoCkueZBH&`hJxiOZTbdFa=#`HPDN^)_G?0*3UkZ&aL@#hQZVH z_t(P{LK-(NSU2Cm!AkJuvD>HIFFjy;8rAo)|Im^`=Re|G_9^OfEL`$6_uv0t_4h8F zwb`J(cGBzUty|&_>-(>{U%zHy~gxew2uEKC2s_T$N@ zv`afIyCSd4D^9<%(Y#A(;hw+Mw{}kBn!V0`O~Sl;KP_6`yYmU9FP!o0_WcVpX6`y; z7wNW&{piKO_!k_X7kG+KpUV34_h@~ literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/favicon.ico b/web_favicon/static/src/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cdf7926f95255e6b02c27a8f1b2d93781b24b47d GIT binary patch literal 15086 zcmdU$J&0UY6vyvo61I{J0SSb_E+IlvB@hq-fwjq|O_f**L9pGmOpy%|1wph;3JW2q zl})ge38WIlLczvjM8rai(JE-j^Z$GM&gAafd*3^E=1md@&fbrA?m7SSanHRoybWO` zjKa~QLG4C(=WqzGhY&V4_Qqdm{!`7JKi`aB3t{Wk5YC84kF;WMUQGz%>-v0n<+CHA ztD>(&zl#28i2i-iWzmt849%Yu-4p#Ksxmay{Kuk`u?)tdZ$#~NroTN8zFLM_Frzo- z`Cj99Mc{?#GZ*uKgSFTTE_*hUoxsR5WXE$qX?!|f7x#H4g2!asS0CTn_;$>n z>WlYw#BVWTJ-)h{S`*K~)9~6F)>+@P{>|3F_z{}BUXVKRuv zff#6xwQ-KI=91`$D8_^waJ(2{9)-ic z2z{~NQ+;^Ag0J!UTsXAuR3ii1QhGddVE#mOyx-bq9OB33A4MJ=9-c>%b>W$Yd{2DW zMBw(wE#V<1SMr)e;Q5kt8%}(h^n>QfS&z^04f%Le^maq^Ek{jPt|b=x@XI2VzO?FKIzEqZFCcd6t;bPv`yqb+=E+558}HC9HKoqEw*5BNb8;bfUM+$LnfqdHI@>K6Mfl0%&pu4ZKvt*S z2@K>h^?`lbrz7{AoM0~`~C~I;6f*U#%FF{SJSns+FhxhhH&di2%G%0z|Rbm(Rg*dHXV&OpNw{IJzd$Ys+v}6 zZdRnp_*lc*$=Y;v62dAnk&TWjgsK`#f^_pc#d*v&^oY_FYL9Pj%Cl|H}jX$<>#jZcLmH@%^Aa<-Gh=vUX=I&nZ%Mhh97%#3LX)@Vjp?;s$nO0XL;YQZF*Kx zi%cdhHe&~v_&yCjWEo)_zQ#`KMk#L7MZ7z6R?pGx`R-sc+by<$4;jQ7;yl84ZQhb` zHg6Jfz=!kts05Rj7yFCuU*hKu^)lE1hOM@b`^H+sJ|hmEyNK71rF`fv#va?I_3S&( zchOR8ef;EmQO?A;?!i9HJVyt0X0CH3#vS)1kKY8yCt^{0MtE?;L(O8} zb=JrjS7~3esp;t8+#Dhvc6RJY-k?73vQ4_MgLsfv_u1WrXWnPhPn}|a zU<-FZ&R6n)x`$0*rDcqrJh$&n3+G8yO;#&j9MX$Qb<4{{j3;`zh;|&ph*k!!=#SXy zf!;ULn@#$kDB8`YT@PW(e^BXL<|N#DTDQE=B$VTkUQN>fQH`Z-qITC>y(TqX(RjV8 z9;=n|y>_#zY8?Z#U^Mx(wZ2BL;i0YZ2`6|bcth=!*SBQPl>Z7-TiYu;_pmkokRK}i Ypg+~_o}XrZ;{`3|XD?`}&$#jXe|Fz6@Bjb+ literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/manifest.json b/web_favicon/static/src/img/manifest.json new file mode 100644 index 00000000..0f649d7b --- /dev/null +++ b/web_favicon/static/src/img/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "Odoo", + "icons": [ + { + "src": "\/android-chrome-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-chrome-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-chrome-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-chrome-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} diff --git a/web_favicon/static/src/img/master_original_favicon.png b/web_favicon/static/src/img/master_original_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..22a0aa8fb9958087b237c0fb78cdb7a2ecd4ab37 GIT binary patch literal 7242 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%0D-R3HoE;>LB}~FOWKyV9a7TBH`{;&S zpn!~|?^&fJHbACpj%~rM;{P$*p60UYIAUw86l9&G2Nq=#u5eW30_V*!x#>N|==Gvh zwT1+~lO{e&T@_dI*@TRhFt<(9w`jKom6G^@n~|YH>Id9J#-ErAZlT>ipx;J1TLhgw zLfLHXE^BKlKUxM*>~Cu=VCa>sT1nrwz_DJBIafkk6P0~x6$E%=eBEI@W_ + + +image/svg+xml \ No newline at end of file diff --git a/web_favicon/static/src/img/mstile-144x144.png b/web_favicon/static/src/img/mstile-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..e44e2367521d4b7e6c5bf131e770798703baa0fc GIT binary patch literal 1820 zcmb`I=Q|q;1I0tEP$c?_S*lTrqExGt7rlv{Am%l$rbW<(xUs2Go0iBWs<`IWk{H)s zRU_1B5K3dT_NZL7YAe_KKfLF8&iOs(%lUeeEKx@MyyCn70D#}b7>>Rm@qgw4UgXFt zq2vp2U=5H40KngAe5V-Bi_S(s8$AG24oQByC^nYnHVAVszw`gM5SMPzF7_q-(I{&` zv#h`l_YpfwbpEVoGR#bs;*gj*;!~jI_Dhp0&K&^Y(ldb@*aT0}ohQi@MX)d@N2l28 z`T1}T>J1^(xSW@Bq9UQKr@kUYV^GEN*R^L)X1bozuUD=2*F?1D?_qBH#rk*R_Jc2O8`|h9%Z>%`)Oi=rJ=P9XDOY z1=jFohIw^_np`)bHeyCPDO(y;=B=h5W16%IMG%`NkVcQz`IvL>a0kVtphc#}Vpr+F zdlZRS7NS^3W!|HBFvU`wZsDgN#;oY99N&b-1FHztGLX)+O^||7tp|AqZRbY?w`de&G<+@X6eeN+S)u zsFK__N7KCb%fymj+Qrzj__B-@c=(-k|CkR?U!8eu!tng>ah6SwbKWQ`bxX58PeFT- zyntk?LNgy{Of7HMOynatxW+fW$*FQOET9n4SgZ=s`?dviUamC$2~v*rp@?f28s5sx zaAnx9%)$$l*G*L$xu*wUy$!DtHi7<@3}ee>w>J(!pSRt5o+J8?ynuH~^)Zf{mu)M! zL#_+H8H@6a4~=zToFps|l+DaNVJ44CL3iW3XYzj5#?I6Ky8B8%q3;iJ0 zuTiR#q_)<3jiyPyx30F9%f~1(DON0*D2M_}Qv)+ns64zpDd^iPac9lDmbLo#Qtzh= zlc8Iq4rj=#)u;qAQ(29jwdja#HC>LCQqLjYs`q;Y6;UkElCAX_Ew?1&gf8WZiALif zQeY}v1qd{f#-zhz>^@-&#?v6ssE2ypH6Xv-r1~k3tH1=FsE4;-tG{(7SpjebE?C71 ziQ~S#!ns2AKBX;PuB$iZBtYzFD?oIosfSK;Uq?n_jJE6|fIW`gF9=-x^KwG{rUO>e4J7^7ceb8hB-AMd(C9Or;Rs;&x32bQ`nd3?V zJ;may=D)ri03j>jnLn{^`k^o6JQXy$aSlda@F^mNg>PL?kCb_~P9zIXpJs7lYO@qx z5oo=tY5SsgSv$;+fU&kU+hU zzq3Iwu;VOWnWrE6b`v!)^mTir>7=x}ydd0IVlOgR)xCS5+PY!FO2FsfyaZR<-p^Ln zTJ7O&OkB&#_vH;dZrI|Mh2y&x!F#y&amFwNxiNLnxbT;c3$AZCRF5#FgSv64kzVP# zWwQ2ey9L8lRDzcpKI*VJAhfO&-SpiIK7kxf4L#ckQUHAa0}@mo>5y2i%o158|2gRx zl26CqJ8+8mtsecAdoWe=Pbk>+U)ITVPEhfy^V=+%$j_ z*ZIM}G$hvv3$GbEJYH;^m;O0A9@ee5qr9~=JD(JyjALfI(}E8+X7WziJH%J{0OR4I zv=Ue%o%yp1EmSdJCQ}(H?6x`@Mr(eQG4~0&EMJU4 z+PnQ-_UUBC;?>rR8Xx1R6_EEANeab2v({#uHq#&n-1VQ2`z;})&Gv`2i{H`d>HJLK eao4KgIdF5t$er)wrvAm_089`lc;$nK&;JDrs+a2k literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/mstile-150x150.png b/web_favicon/static/src/img/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..96b4e8657477f4e4cd653f4bb1f9e0e67cb455ae GIT binary patch literal 1632 zcmb7^`#Tc~7{}*yp$MU-Frv(@5Jql=xgM4_2PrY-mZBL-yPQ+*%!bqwBbrE>hLtjt zxr{J5E^{eztGPRt>s*fhfzETj&+|U-^ZmZ>^ZD_ca_O003~n(E$nv07N8z zj@Yi9X>l}>Q{{NyD4%P1v z4o1LX2*A6&>H=z;aPZEgyn#3AfK$z3_YDAG&r3(BmD`*|eb;=4_Dg*o>-W>b^VlZ-f81(H{6dx^Ny#;)FVb9G zmp6bue)?>36)wZQxjbbdMP(}~e4t3`f=m_z5qLl$mfSksd?6~Z15(;`;?yhoE5!my zr|~M99>HSX4|pi?#~e$KwWmDCBeiV**!c&JA-27KSAb0qz5>f1Q+w9bd&g}H=0?8s zi!gNaRp5ga;!z?}ixWoNP?Nd6=+#?M(AiR(&>4S?KNSc8Gv}y$ozx=p=kuVyXFXsT{qvxG@?q{>=oCV zqPK)BM|t3k(lJxW2!s*uInj`tLioposF7zJUQiRDJ_;w=WYskLSd1PMgm%N{p0%KM z<1VU@Y>g)qwRFlmjh38@<5r2+pP^dW#Qt z;SQFG5pVQ?i!if>UZD*!ZraN2xr81#F*~rc%0t3Vk??Q~Ux*eY)9*U)s^_XFK6qGQ zx3wDW5=ydqV%&+qis#8S&ZVG!V(~4|wcfK~B`|gB$Woq?Q6WfJc>yBfRNS&Kt7>Dv zo|}Z2>xNA^tED3nR$xGdhaLPg(;(YagIihwaSiS6L$$_&M_CMMRG|&>emS&VM|2wX z!l^hRiFw(cRB|XEq(u)`!eNz0o|tR%I>9nBjzh8e%U)S#(Rk}2SyR$9>APv<)yrlG zW1m_M13VkKyY}#^0;e9C+fB3#zmh!`YxJ}g5qGkFyCF6KtH0%d^7ekBt7|m2sW_6m zn)u8|U$8Fk`&>3bp{$w5>c$nAK&Jc=ry#=vJ|9j6jPcUj|+{1w7>8st}<|?aaA&T zbc;4Ad=LtU*7uJQMa2xO>7O9zx2^I`-{)_hfp$z~Qr^T0_)kG@D;+tMLj1VF$*3CS zHS%nAUEGvn1ezP7f_XiR`QfzukUJ3PqVXf!LbUs8cQEFMW=Ql)Od2-KWHw~Lg%sU$ zCvAJ4NeXUR(dn(_TS7jH1>UTqoe=f0+j?TIRYnN_IiJIG449cJpTc(4w@JOy4lAwS zJebTNXWX57afr1%imeXOtTbeQE?e-Qc(~Mlq_oGQ_wHi4It!9F!WC^%Kp3(_OU=Ui$iJxhmCc*>` z)nfQ`Z&Dwv)AUGkiwdLnUd*dWTe%pzV zf+>}wimn?005|=F4?;Q z07@_bV28Sj^0wo5p`qsC<8DW?P(eadbyGhDHAP z9}usZY;0FlZ@D>L0mz3n3}4R@%{?A+aC##e0KiTZ%HGyJ_QQN$x3fP&H^rI2@|#xI zvi&mpsCUg(=h*KXk#K4qX#Daik6&2eohUDDeGEcJCHqnIwTgWd76+3>MO28q+ND`H zQIiT+1`sUGZIE~2;l!k#7gOQyGjrs4tOSnQUhp%p3&>%seK?0udCHfvgDw+UFYuX_ zB5rYEUNP^G-9r*kRC(w=;Yjz4KBp6Pbx&KT2=qZdJ7<`|a{z2ewK z&}m~4nsAnvm>ni_h9)OpCiZ{yHX<9n?LQAG7i9EPyx+9N1>hQ1z_<4MoMBASLKgq@ zZ=Nd+R%V*&8=iFx5tImQz>SCC?`Y<&^xmlqo0u)!_3}+lz+-rD-U^yrl_VS^M}|cY zcs?3&t!}>CdhMZsIxjJ>J1U$e(drF(fwO@asEr~aI>|Yj!^mW%ixZwPtk`#-mCi=A z7@-SxyJ}0HZBT9wSAh)=Pb2H24viL#5okW-V`OJ}UnV1Mpz}4?#Ks}S* zeP7@*m=e4cw?zErS=)tPc3%gTX4QkQJAEw9R_(eOTSG>^ebv?QzQjW}K|(}T?anSN zQst#LUYI)JFk^lfJ(gjC;P_CyhL(^wVs~LsnfhN8F#0)$2TLc|t18Qt zBGc7sBxxw#X$>$Tb>|=UZoX-b@Xi7c+32bdb7` zAcHu|b?aQk8ZYYF40caS=yM%V^nzhxd<);XXMlRuMJ6dDCIg9)tkJg34jl$u-g`q>_K!GtUmAwzj-jM0;tx$-uf(w=^h*L;|Rf@vmOoEDsEffQhmr`Dp>6A z+`Ov8Nd@_x;hI)4N*_KS+~oZ;2IBUb7$uO5ctv}^Q`iwv<2Qs1tqvg)Re+HC)r>wi zYmth3o}_=DZS_8;pCW7riX{7QsLagAJbvmE&=U6zOHWDxr(g6`V9r>bXgq1DAU8q_ z(i-w-SDUFY=~mN~RA5I^HzrCj4Xvu+#dxwQr3Q%{Gj`#qsm&+*{0FeNawt<)d&b{R za2(aj*IO4{DOk=N0AlkrSj^|}K;t(nd(|iLpb-?EL};WsJ{9IthFB!F%K#LU!n6 Sasz1UzZeSPWM63)Nck6`8t*dz literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/mstile-310x310.png b/web_favicon/static/src/img/mstile-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..b9b4a3e835e6c16a269988457e36f1295ecd5690 GIT binary patch literal 3294 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 literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/mstile-70x70.png b/web_favicon/static/src/img/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..c02805fe1800ef77f751ad840be0a03467219e9b GIT binary patch literal 1232 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&v7|ftIx;Y9?C1WI$O_~$76-XI zF|0c$^AgDM4)6(a^~o&!PbCntW=|c^Sc#G#zhH(ZR@@42zW!nn@`}dnGZz0i@a=#7OSPLz$~FtKu^5L&Kdn1{ zB1qZPssDJdw0Yj09fgnC*cK;MabK*`V^zPWw|Zet&DD2@Q<}ay&8v6*WGOSb>fpPQ zyC=Wz{onBZ^_Lj?4a%QB3#AzP7az8;)IYDY#P-VMZR+WgOKO|MBR+nUS97^Fo%^ui z{L%+~rFZ7L6^0#twej}*$->P0_-Yr)AL(q4scLDwCCqPa`hNZ2n@uy#-sPXT$+mv> zH~Swqxh^F&X5RmQmi>oDM$xweJ*i4x)8!-XWTt$3)5Z|lQxCKmGiYhq?dRf{<0!?jVZxJe&KM?Ef0F{f&#P79PX3vYX1`z6 zknKbtTgUVw1`fva>zRyxG`=-h=y5}zU!h-d!alJjj1FPje})Q%ALUl{JfqJ&_sfad z3J+FfI2C<+anv#LgQ~98RA-L~Q@(U<@LKi4S@o5a$QO=Ko_im=kEoUy&wl-$^?~gE z7w!t7T@zTOe>L$PU3ZUl0rRPSMlKu9hnEYu{pjko+kf?J*jec)m4f~?t8Q|Y-|`Or z#qs^5c9ck`U-ietYYFqi)-5&h*wS(8vgC~Jdrmv1MjEJD{T1D$baB-)SFs-HJ8RaS ze9kF8C+X~E56g=S6X(CW_I&qIovV85vx^U&e4#vZ=IX-+Gj?9y9Qf<#vqwjhmUw?! zn7MvRX@SV|K)Dp!zH#49=|fZ`gQkOmEFcuR+bxN#Z>L! z6m2Nk{Pp)2v5%YQ+Me7St#p5VvH$X?0w+$Z-nM?bKk0bpGQIQHFFkC}d~xSs!v&*j zSM8h>oNq@+Ze9B?Up9O8H?x0R`GZwYN1tRldog)V&W#P5b*9<%GK z=kJ>zUM#;(%U0&^y3alPx1Nj3W8(k9d3og{NDKTu&U U`IIvfSX?l8y85}Sb4q9e0QhWd)&Kwi literal 0 HcmV?d00001 diff --git a/web_favicon/static/src/img/website_favicon_sample.html b/web_favicon/static/src/img/website_favicon_sample.html new file mode 100644 index 00000000..db828882 --- /dev/null +++ b/web_favicon/static/src/img/website_favicon_sample.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web_favicon/tests/__init__.py b/web_favicon/tests/__init__.py index 15f22fca..6a5f7312 100644 --- a/web_favicon/tests/__init__.py +++ b/web_favicon/tests/__init__.py @@ -1,20 +1,4 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + from . import test_web_favicon diff --git a/web_favicon/tests/test_web_favicon.py b/web_favicon/tests/test_web_favicon.py index 0301639c..2af4f83c 100644 --- a/web_favicon/tests/test_web_favicon.py +++ b/web_favicon/tests/test_web_favicon.py @@ -1,22 +1,7 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# This module copyright (C) 2015 Therp BV . -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © 2015 Therp BV +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + import base64 from openerp.tests.common import TransactionCase from openerp.tools.misc import file_open From 3d2071c28a3b7c69d998a6f6868162ae6f24355a Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Thu, 14 Apr 2016 09:49:32 +0200 Subject: [PATCH 03/12] [MIG] web_favicon: Migration to 9.0 --- web_favicon/README.rst | 6 ++++-- web_favicon/__openerp__.py | 2 +- web_favicon/views/res_company.xml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/web_favicon/README.rst b/web_favicon/README.rst index be9fd7a5..ff1ffa99 100644 --- a/web_favicon/README.rst +++ b/web_favicon/README.rst @@ -23,6 +23,8 @@ the used browser, but most modern browsers do. Note that most browsers cache favicons basically forever, so if you want your icon to show up, you'll most probably have to delete you browser cache. +Some browsers can refresh the favicon, accessing the URL +/web_favicon/favicon. You have a sample SVG that can be used as template for generating your icon in /static/src/img/master_original_favicon.svg. You can also search for some @@ -33,7 +35,7 @@ Usage .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/8.0 + :target: https://runbot.odoo-community.org/runbot/162/9.0 Known issues / Roadmap ====================== @@ -53,7 +55,7 @@ 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 `here `_. +9.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. Credits ======= diff --git a/web_favicon/__openerp__.py b/web_favicon/__openerp__.py index b6d6491f..e18e739f 100644 --- a/web_favicon/__openerp__.py +++ b/web_favicon/__openerp__.py @@ -5,7 +5,7 @@ { "name": "Custom shortcut icon", - "version": "8.0.1.0.0", + "version": "9.0.1.0.0", "author": "Therp BV, " "Tecnativa, " "Odoo Community Association (OCA)", diff --git a/web_favicon/views/res_company.xml b/web_favicon/views/res_company.xml index fa06e47d..fa270399 100644 --- a/web_favicon/views/res_company.xml +++ b/web_favicon/views/res_company.xml @@ -5,7 +5,7 @@ res.company - + From 99aa9b69d1dcb95d387ee89b00e89ba13b5d85c9 Mon Sep 17 00:00:00 2001 From: Niki Waibel Date: Sat, 5 Nov 2016 18:46:53 +0100 Subject: [PATCH 04/12] [MIG] web_favicon: Migrated to 10.0 (#459) --- web_favicon/README.rst | 4 ++-- .../{__openerp__.py => __manifest__.py} | 2 +- web_favicon/controllers/web_favicon.py | 4 ++-- web_favicon/models/res_company.py | 2 +- web_favicon/tests/test_web_favicon.py | 8 +++---- web_favicon/views/res_company.xml | 22 +++++++++---------- web_favicon/views/templates.xml | 16 ++++++-------- 7 files changed, 28 insertions(+), 30 deletions(-) rename web_favicon/{__openerp__.py => __manifest__.py} (95%) diff --git a/web_favicon/README.rst b/web_favicon/README.rst index ff1ffa99..a95c5d43 100644 --- a/web_favicon/README.rst +++ b/web_favicon/README.rst @@ -35,7 +35,7 @@ Usage .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/9.0 + :target: https://runbot.odoo-community.org/runbot/162/10.0 Known issues / Roadmap ====================== @@ -55,7 +55,7 @@ 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 `here `_. +10.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. Credits ======= diff --git a/web_favicon/__openerp__.py b/web_favicon/__manifest__.py similarity index 95% rename from web_favicon/__openerp__.py rename to web_favicon/__manifest__.py index e18e739f..ab515f38 100644 --- a/web_favicon/__openerp__.py +++ b/web_favicon/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Custom shortcut icon", - "version": "9.0.1.0.0", + "version": "10.0.1.0.0", "author": "Therp BV, " "Tecnativa, " "Odoo Community Association (OCA)", diff --git a/web_favicon/controllers/web_favicon.py b/web_favicon/controllers/web_favicon.py index f0b92aa0..7585ce15 100644 --- a/web_favicon/controllers/web_favicon.py +++ b/web_favicon/controllers/web_favicon.py @@ -4,8 +4,8 @@ import StringIO import base64 -from openerp import http -from openerp.tools.misc import file_open +from odoo import http +from odoo.tools.misc import file_open class WebFavicon(http.Controller): diff --git a/web_favicon/models/res_company.py b/web_favicon/models/res_company.py index e30c1b2a..9fdd8ace 100644 --- a/web_favicon/models/res_company.py +++ b/web_favicon/models/res_company.py @@ -3,7 +3,7 @@ # © 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import models, fields +from odoo import models, fields class ResCompany(models.Model): diff --git a/web_favicon/tests/test_web_favicon.py b/web_favicon/tests/test_web_favicon.py index 2af4f83c..90414956 100644 --- a/web_favicon/tests/test_web_favicon.py +++ b/web_favicon/tests/test_web_favicon.py @@ -3,9 +3,9 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import base64 -from openerp.tests.common import TransactionCase -from openerp.tools.misc import file_open -from openerp import http +from odoo.tests.common import TransactionCase +from odoo.tools.misc import file_open +from odoo import http class FakeRequest(object): @@ -26,7 +26,7 @@ class TestWebFavicon(TransactionCase): def test_web_favicon(self): original_request = http.request http.request = FakeRequest(self.env) - from openerp.addons.web_favicon.controllers.web_favicon import\ + from odoo.addons.web_favicon.controllers.web_favicon import\ WebFavicon company = self.env['res.company'].search([], limit=1) # default icon diff --git a/web_favicon/views/res_company.xml b/web_favicon/views/res_company.xml index fa270399..b8d138d3 100644 --- a/web_favicon/views/res_company.xml +++ b/web_favicon/views/res_company.xml @@ -1,17 +1,17 @@ - - - - res.company - - - + + + res.company + + + + - - - - + + + + diff --git a/web_favicon/views/templates.xml b/web_favicon/views/templates.xml index ed80510a..32385c84 100644 --- a/web_favicon/views/templates.xml +++ b/web_favicon/views/templates.xml @@ -1,10 +1,8 @@ - - - - - + + + From a0375aecdaa3c15de5c61e7a5157484e745d961d Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Tue, 29 Nov 2016 13:43:32 -0500 Subject: [PATCH 05/12] OCA Transbot updated translations from Transifex --- web_favicon/i18n/de.po | 64 +++++++++++++++++++++++++++++++++++++++++ web_favicon/i18n/es.po | 64 +++++++++++++++++++++++++++++++++++++++++ web_favicon/i18n/hr.po | 65 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 193 insertions(+) create mode 100644 web_favicon/i18n/de.po create mode 100644 web_favicon/i18n/es.po create mode 100644 web_favicon/i18n/hr.po diff --git a/web_favicon/i18n/de.po b/web_favicon/i18n/de.po new file mode 100644 index 00000000..148fa614 --- /dev/null +++ b/web_favicon/i18n/de.po @@ -0,0 +1,64 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_favicon +# +# Translators: +# Niki Waibel , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-11-22 10:37+0000\n" +"PO-Revision-Date: 2016-11-22 10:37+0000\n" +"Last-Translator: Niki Waibel , 2016\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_favicon +#: model:ir.model,name:web_favicon.model_res_company +msgid "Companies" +msgstr "Unternehmen" + +#. 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 "Icon" + +#. module: web_favicon +#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype +msgid "Favicon backend mimetype" +msgstr "MIME-Type" + +#. module: web_favicon +#: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype +msgid "Set the mimetype of your file." +msgstr "Wähle den MIME-Type der Datei." + +#. module: web_favicon +#: model:ir.ui.view,arch_db:web_favicon.view_company_form +msgid "Web Favicon" +msgstr "Web Favicon" + +#. 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" diff --git a/web_favicon/i18n/es.po b/web_favicon/i18n/es.po new file mode 100644 index 00000000..97e5c5a0 --- /dev/null +++ b/web_favicon/i18n/es.po @@ -0,0 +1,64 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_favicon +# +# Translators: +# Pedro M. Baeza , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-12-23 02:13+0000\n" +"PO-Revision-Date: 2016-12-23 02:13+0000\n" +"Last-Translator: Pedro M. Baeza , 2016\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_favicon +#: model:ir.model,name:web_favicon.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. 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 "Tipo 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 "Establece el tipo MIME de su archivo." + +#. 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" diff --git a/web_favicon/i18n/hr.po b/web_favicon/i18n/hr.po new file mode 100644 index 00000000..184674f1 --- /dev/null +++ b/web_favicon/i18n/hr.po @@ -0,0 +1,65 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_favicon +# +# Translators: +# OCA Transbot , 2017 +# Bole , 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 , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\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_favicon +#: model:ir.model,name:web_favicon.model_res_company +msgid "Companies" +msgstr "Tvrtke" + +#. 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 backend" + +#. 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 "" + +#. 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 "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" From d45b103b101df17b5d484d07195b7af202a80256 Mon Sep 17 00:00:00 2001 From: tarteo Date: Mon, 24 Apr 2017 16:00:09 +0200 Subject: [PATCH 06/12] [ADD] Group 'Edit Favicon' --- web_favicon/README.rst | 3 +++ web_favicon/__manifest__.py | 4 ++-- web_favicon/views/res_company.xml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/web_favicon/README.rst b/web_favicon/README.rst index a95c5d43..d3d67e98 100644 --- a/web_favicon/README.rst +++ b/web_favicon/README.rst @@ -30,6 +30,8 @@ You have a sample SVG that can be used as template for generating your icon in /static/src/img/master_original_favicon.svg. You can also search for some favicon generators across the web. +To allow a user to edit the favicon it has to be member of group "Administration / Settings". + Usage ===== @@ -65,6 +67,7 @@ Contributors * Holger Brunn * Pedro M. Baeza +* Dennis Sluijk Maintainer ---------- diff --git a/web_favicon/__manifest__.py b/web_favicon/__manifest__.py index ab515f38..d70733a7 100644 --- a/web_favicon/__manifest__.py +++ b/web_favicon/__manifest__.py @@ -13,11 +13,11 @@ "category": "Website", "summary": "Allows to set a custom shortcut icon (aka favicon)", "depends": [ - 'web', + "web", ], "data": [ "views/res_company.xml", - 'views/templates.xml', + "views/templates.xml", ], "installable": True, } diff --git a/web_favicon/views/res_company.xml b/web_favicon/views/res_company.xml index b8d138d3..b35fe55d 100644 --- a/web_favicon/views/res_company.xml +++ b/web_favicon/views/res_company.xml @@ -5,7 +5,7 @@ - + From a2836f2e407803c5c86a97f087f3da3ea916cabd Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 24 Jun 2017 12:40:00 +0200 Subject: [PATCH 07/12] OCA Transbot updated translations from Transifex --- web_favicon/i18n/nl_NL.po | 64 +++++++++++++++++++++++++++++++++++++++ web_favicon/i18n/pt_BR.po | 64 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 web_favicon/i18n/nl_NL.po create mode 100644 web_favicon/i18n/pt_BR.po diff --git a/web_favicon/i18n/nl_NL.po b/web_favicon/i18n/nl_NL.po new file mode 100644 index 00000000..3a665247 --- /dev/null +++ b/web_favicon/i18n/nl_NL.po @@ -0,0 +1,64 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_favicon +# +# Translators: +# Peter Hageman , 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 , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl_NL\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_favicon +#: model:ir.model,name:web_favicon.model_res_company +msgid "Companies" +msgstr "Bedrijven" + +#. 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 "" + +#. 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 "Stel het afbeeldingstype in voor je bestand." + +#. module: web_favicon +#: model:ir.ui.view,arch_db:web_favicon.view_company_form +msgid "Web Favicon" +msgstr "Web Favicon" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/gif" +msgstr "afbeelding/gif" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/png" +msgstr "afbeelding/png" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/x-icon" +msgstr "afbeelding/x-icon" diff --git a/web_favicon/i18n/pt_BR.po b/web_favicon/i18n/pt_BR.po new file mode 100644 index 00000000..cd2b55ab --- /dev/null +++ b/web_favicon/i18n/pt_BR.po @@ -0,0 +1,64 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_favicon +# +# Translators: +# Rodrigo de Almeida Sottomaior Macedo , 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 , 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_favicon +#: model:ir.model,name:web_favicon.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. 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 backend" + +#. module: web_favicon +#: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype +msgid "Favicon backend mimetype" +msgstr "Favicon backend mimetype" + +#. module: web_favicon +#: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype +msgid "Set the mimetype of your file." +msgstr "Defina o tipo mímico do seu arquivo." + +#. module: web_favicon +#: model:ir.ui.view,arch_db:web_favicon.view_company_form +msgid "Web Favicon" +msgstr "Web Favicon" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/gif" +msgstr "imagem/gif" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/png" +msgstr "imagem/png" + +#. module: web_favicon +#: selection:res.company,favicon_backend_mimetype:0 +msgid "image/x-icon" +msgstr "imagem/x-icon" From 8c651be802a309bd097a67a8a523097246d15ea2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mar=C3=A7al=20Isern?= Date: Tue, 14 Nov 2017 16:51:57 +0100 Subject: [PATCH 08/12] [11.0][MIG] Standard Migration --- web_favicon/README.rst | 1 + web_favicon/__manifest__.py | 6 +++--- web_favicon/controllers/web_favicon.py | 9 +++++---- web_favicon/models/res_company.py | 4 ++-- web_favicon/tests/test_web_favicon.py | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/web_favicon/README.rst b/web_favicon/README.rst index d3d67e98..ae78ca98 100644 --- a/web_favicon/README.rst +++ b/web_favicon/README.rst @@ -68,6 +68,7 @@ Contributors * Holger Brunn * Pedro M. Baeza * Dennis Sluijk +* Marçal Isern Maintainer ---------- diff --git a/web_favicon/__manifest__.py b/web_favicon/__manifest__.py index d70733a7..dfa8f463 100644 --- a/web_favicon/__manifest__.py +++ b/web_favicon/__manifest__.py @@ -1,11 +1,11 @@ # -*- coding: utf-8 -*- -# © 2015 Therp BV -# © 2016 Pedro M. Baeza +# Copyright 2015 Therp BV +# Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Custom shortcut icon", - "version": "10.0.1.0.0", + "version": "11.0.1.0.0", "author": "Therp BV, " "Tecnativa, " "Odoo Community Association (OCA)", diff --git a/web_favicon/controllers/web_favicon.py b/web_favicon/controllers/web_favicon.py index 7585ce15..a72b31c0 100644 --- a/web_favicon/controllers/web_favicon.py +++ b/web_favicon/controllers/web_favicon.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -# © 2015 Therp BV +# Copyright 2015 Therp BV +# Copyright 2017 QubiQ 2010 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -import StringIO +from io import BytesIO import base64 from odoo import http from odoo.tools.misc import file_open @@ -21,9 +22,9 @@ class WebFavicon(http.Controller): favicon = company.favicon_backend favicon_mimetype = company.favicon_backend_mimetype if not favicon: - favicon = file_open('web/static/src/img/favicon.ico') + favicon = file_open('web/static/src/img/favicon.ico', 'rb') favicon_mimetype = 'image/x-icon' else: - favicon = StringIO.StringIO(base64.b64decode(favicon)) + favicon = BytesIO(base64.b64decode(favicon)) return request.make_response( favicon.read(), [('Content-Type', favicon_mimetype)]) diff --git a/web_favicon/models/res_company.py b/web_favicon/models/res_company.py index 9fdd8ace..36a7b032 100644 --- a/web_favicon/models/res_company.py +++ b/web_favicon/models/res_company.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# © 2015 Therp BV -# © 2016 Pedro M. Baeza +# Copyright 2015 Therp BV +# Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import models, fields diff --git a/web_favicon/tests/test_web_favicon.py b/web_favicon/tests/test_web_favicon.py index 90414956..78222d31 100644 --- a/web_favicon/tests/test_web_favicon.py +++ b/web_favicon/tests/test_web_favicon.py @@ -39,7 +39,7 @@ class TestWebFavicon(TransactionCase): # our own icon company.write({ 'favicon_backend': base64.b64encode(file_open( - 'web_favicon/static/description/icon.png').read()), + 'web_favicon/static/description/icon.png', 'rb').read()), 'favicon_backend_mimetype': 'image/png', }) data = WebFavicon().icon() From 061cbb15a5ea8f86cc1e78ec18494120ca4809a7 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Sun, 24 Jun 2018 10:28:11 +0000 Subject: [PATCH 09/12] [UPD] Update web_favicon.pot --- web_favicon/i18n/de.po | 10 +++--- web_favicon/i18n/es.po | 10 +++--- web_favicon/i18n/hr.po | 15 ++++---- web_favicon/i18n/nl_NL.po | 14 ++++---- web_favicon/i18n/pt_BR.po | 16 +++++---- web_favicon/i18n/web_favicon.pot | 60 ++++++++++++++++++++++++++++++++ 6 files changed, 99 insertions(+), 26 deletions(-) create mode 100644 web_favicon/i18n/web_favicon.pot diff --git a/web_favicon/i18n/de.po b/web_favicon/i18n/de.po index 148fa614..51b17b0a 100644 --- a/web_favicon/i18n/de.po +++ b/web_favicon/i18n/de.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Niki Waibel , 2016 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2016-11-22 10:37+0000\n" "Last-Translator: Niki Waibel , 2016\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" -"Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_favicon @@ -30,12 +30,14 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +msgid "Favicon Backend" msgstr "Icon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" +#, fuzzy +msgid "Favicon Backend Mimetype" msgstr "MIME-Type" #. module: web_favicon diff --git a/web_favicon/i18n/es.po b/web_favicon/i18n/es.po index 97e5c5a0..b77d0186 100644 --- a/web_favicon/i18n/es.po +++ b/web_favicon/i18n/es.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Pedro M. Baeza , 2016 msgid "" @@ -12,10 +12,10 @@ msgstr "" "PO-Revision-Date: 2016-12-23 02:13+0000\n" "Last-Translator: Pedro M. Baeza , 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" -"Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_favicon @@ -30,12 +30,14 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +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" +#, fuzzy +msgid "Favicon Backend Mimetype" msgstr "Tipo MIME del favicon de backend" #. module: web_favicon diff --git a/web_favicon/i18n/hr.po b/web_favicon/i18n/hr.po index 184674f1..7c258024 100644 --- a/web_favicon/i18n/hr.po +++ b/web_favicon/i18n/hr.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # OCA Transbot , 2017 # Bole , 2017 @@ -13,11 +13,12 @@ msgstr "" "PO-Revision-Date: 2017-04-28 18:03+0000\n" "Last-Translator: Bole , 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" -"Language: hr\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" +"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_favicon #: model:ir.model,name:web_favicon.model_res_company @@ -31,13 +32,15 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +msgid "Favicon Backend" msgstr "Favicon backend" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" -msgstr "" +#, fuzzy +msgid "Favicon Backend Mimetype" +msgstr "Favicon backend" #. module: web_favicon #: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype diff --git a/web_favicon/i18n/nl_NL.po b/web_favicon/i18n/nl_NL.po index 3a665247..ab6f2852 100644 --- a/web_favicon/i18n/nl_NL.po +++ b/web_favicon/i18n/nl_NL.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Peter Hageman , 2017 msgid "" @@ -11,11 +11,12 @@ msgstr "" "POT-Creation-Date: 2017-07-01 03:34+0000\n" "PO-Revision-Date: 2017-07-01 03:34+0000\n" "Last-Translator: Peter Hageman , 2017\n" -"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\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" -"Language: nl_NL\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. module: web_favicon @@ -30,12 +31,13 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" -msgstr "" +#, fuzzy +msgid "Favicon Backend" +msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" +msgid "Favicon Backend Mimetype" msgstr "" #. module: web_favicon diff --git a/web_favicon/i18n/pt_BR.po b/web_favicon/i18n/pt_BR.po index cd2b55ab..516c3642 100644 --- a/web_favicon/i18n/pt_BR.po +++ b/web_favicon/i18n/pt_BR.po @@ -1,7 +1,7 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: # * web_favicon -# +# # Translators: # Rodrigo de Almeida Sottomaior Macedo , 2017 msgid "" @@ -10,12 +10,14 @@ msgstr "" "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 , 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"Last-Translator: Rodrigo de Almeida Sottomaior Macedo " +", 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" -"Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: web_favicon @@ -30,12 +32,14 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -msgid "Favicon backend" +#, fuzzy +msgid "Favicon Backend" msgstr "Favicon backend" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -msgid "Favicon backend mimetype" +#, fuzzy +msgid "Favicon Backend Mimetype" msgstr "Favicon backend mimetype" #. module: web_favicon diff --git a/web_favicon/i18n/web_favicon.pot b/web_favicon/i18n/web_favicon.pot new file mode 100644 index 00000000..1e337476 --- /dev/null +++ b/web_favicon/i18n/web_favicon.pot @@ -0,0 +1,60 @@ +# 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" +"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_favicon +#: model:ir.model,name:web_favicon.model_res_company +msgid "Companies" +msgstr "" + +#. 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 "" + +#. 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 "" + From 71ca01d002b3d038ea4d9e166b354f25b2e3ed0f Mon Sep 17 00:00:00 2001 From: Rodrigo Macedo Date: Fri, 3 Aug 2018 13:14:27 +0000 Subject: [PATCH 10/12] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100,0% (9 of 9 strings) Translation: web-11.0/web-11.0-web_favicon Translate-URL: https://translation.odoo-community.org/projects/web-11-0/web-11-0-web_favicon/pt_BR/ --- web_favicon/i18n/pt_BR.po | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/web_favicon/i18n/pt_BR.po b/web_favicon/i18n/pt_BR.po index 516c3642..97f0859a 100644 --- a/web_favicon/i18n/pt_BR.po +++ b/web_favicon/i18n/pt_BR.po @@ -9,16 +9,16 @@ 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 " -", 2017\n" -"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/" -"teams/23907/pt_BR/)\n" +"PO-Revision-Date: 2018-08-04 13:35+0000\n" +"Last-Translator: Rodrigo Macedo \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" +"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 @@ -32,15 +32,13 @@ msgstr "Favicon" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend -#, fuzzy msgid "Favicon Backend" -msgstr "Favicon backend" +msgstr "Favicon back-end" #. module: web_favicon #: model:ir.model.fields,field_description:web_favicon.field_res_company_favicon_backend_mimetype -#, fuzzy msgid "Favicon Backend Mimetype" -msgstr "Favicon backend mimetype" +msgstr "Favicon back-end mimetype" #. module: web_favicon #: model:ir.model.fields,help:web_favicon.field_res_company_favicon_backend_mimetype @@ -50,7 +48,7 @@ msgstr "Defina o tipo mímico do seu arquivo." #. module: web_favicon #: model:ir.ui.view,arch_db:web_favicon.view_company_form msgid "Web Favicon" -msgstr "Web Favicon" +msgstr "Favicon Web" #. module: web_favicon #: selection:res.company,favicon_backend_mimetype:0 From 00e3c628a1f064b518f2fa262ab1a59a2068dd7b Mon Sep 17 00:00:00 2001 From: Hans Henrik Gabelgaard Date: Sat, 1 Sep 2018 05:09:49 +0000 Subject: [PATCH 11/12] Added translation using Weblate (Danish) --- web_favicon/i18n/da.po | 62 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 web_favicon/i18n/da.po diff --git a/web_favicon/i18n/da.po b/web_favicon/i18n/da.po new file mode 100644 index 00000000..cbaa6d78 --- /dev/null +++ b/web_favicon/i18n/da.po @@ -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 \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 "" From 18e0c5d86914d64f9d8a10b71581f3cff3ba6844 Mon Sep 17 00:00:00 2001 From: tarteo Date: Tue, 2 Oct 2018 15:32:25 +0200 Subject: [PATCH 12/12] [MIG] web_favicon: Migration to 12.0 --- web_favicon/README.rst | 77 ++-- web_favicon/__init__.py | 1 - web_favicon/__manifest__.py | 4 +- web_favicon/controllers/__init__.py | 1 - web_favicon/controllers/web_favicon.py | 1 - web_favicon/models/__init__.py | 1 - web_favicon/models/res_company.py | 1 - web_favicon/readme/CONFIGURE.rst | 15 + web_favicon/readme/DESCRIPTION.rst | 10 + web_favicon/readme/ROADMAP.rst | 6 + web_favicon/static/description/index.html | 447 ++++++++++++++++++++++ web_favicon/tests/__init__.py | 1 - web_favicon/tests/test_web_favicon.py | 3 +- web_favicon/views/templates.xml | 6 +- 14 files changed, 534 insertions(+), 40 deletions(-) create mode 100644 web_favicon/readme/CONFIGURE.rst create mode 100644 web_favicon/readme/DESCRIPTION.rst create mode 100644 web_favicon/readme/ROADMAP.rst create mode 100644 web_favicon/static/description/index.html diff --git a/web_favicon/README.rst b/web_favicon/README.rst index ae78ca98..bc3f9e1d 100644 --- a/web_favicon/README.rst +++ b/web_favicon/README.rst @@ -1,18 +1,46 @@ -.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html - :alt: License: AGPL-3 +==================== +Custom shortcut icon +==================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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/12.0/web_favicon + :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_favicon + :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| -============================== -Custom shortcut icon (favicon) -============================== This module was written to allow you to customize your Odoo instance's shortcut icon (aka favicon). This is useful for branding purposes, but also for integrators who have many different Odoo instances running and need to see at a glance which browser tab does what. +The icon is shown also for portal users when the website modules are not +installed. + More info about favicon: https://en.wikipedia.org/wiki/Favicon +**Table of contents** + +.. contents:: + :local: + Configuration ============= @@ -32,13 +60,6 @@ favicon generators across the web. To allow a user to edit the favicon it has to be member of group "Administration / Settings". -Usage -===== - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/162/10.0 - Known issues / Roadmap ====================== @@ -54,33 +75,33 @@ 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 -`here `_. +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 ======= -Contributors ------------- +Authors +~~~~~~~ -* Holger Brunn -* Pedro M. Baeza -* Dennis Sluijk -* Marçal Isern +* Therp BV +* Tecnativa -Maintainer ----------- +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. .. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association :target: https://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 https://odoo-community.org. +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_favicon/__init__.py b/web_favicon/__init__.py index a2666d4d..185df0ee 100644 --- a/web_favicon/__init__.py +++ b/web_favicon/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import models diff --git a/web_favicon/__manifest__.py b/web_favicon/__manifest__.py index dfa8f463..421c7b9f 100644 --- a/web_favicon/__manifest__.py +++ b/web_favicon/__manifest__.py @@ -1,17 +1,17 @@ -# -*- coding: utf-8 -*- # Copyright 2015 Therp BV # Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Custom shortcut icon", - "version": "11.0.1.0.0", + "version": "12.0.1.0.0", "author": "Therp BV, " "Tecnativa, " "Odoo Community Association (OCA)", "license": "AGPL-3", "category": "Website", "summary": "Allows to set a custom shortcut icon (aka favicon)", + "website": "https://github.com/OCA/web", "depends": [ "web", ], diff --git a/web_favicon/controllers/__init__.py b/web_favicon/controllers/__init__.py index 7c3fa3f8..7084537a 100644 --- a/web_favicon/controllers/__init__.py +++ b/web_favicon/controllers/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import web_favicon diff --git a/web_favicon/controllers/web_favicon.py b/web_favicon/controllers/web_favicon.py index a72b31c0..5e135a1b 100644 --- a/web_favicon/controllers/web_favicon.py +++ b/web_favicon/controllers/web_favicon.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2015 Therp BV # Copyright 2017 QubiQ 2010 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/web_favicon/models/__init__.py b/web_favicon/models/__init__.py index 54d77ccf..a12c1b8e 100644 --- a/web_favicon/models/__init__.py +++ b/web_favicon/models/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import res_company diff --git a/web_favicon/models/res_company.py b/web_favicon/models/res_company.py index 36a7b032..99894824 100644 --- a/web_favicon/models/res_company.py +++ b/web_favicon/models/res_company.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2015 Therp BV # Copyright 2016 Pedro M. Baeza # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). diff --git a/web_favicon/readme/CONFIGURE.rst b/web_favicon/readme/CONFIGURE.rst new file mode 100644 index 00000000..55777b65 --- /dev/null +++ b/web_favicon/readme/CONFIGURE.rst @@ -0,0 +1,15 @@ +Upload your favicon (16x16, 32x32, 64x64 or "as big as possible") on the +company form. The file format would be ico, gif or png with 16x16, 32x32 or +64x64 pixels and 16 colors. Highers resolutions or colors support depends on +the used browser, but most modern browsers do. + +Note that most browsers cache favicons basically forever, so if you want your +icon to show up, you'll most probably have to delete you browser cache. +Some browsers can refresh the favicon, accessing the URL +/web_favicon/favicon. + +You have a sample SVG that can be used as template for generating your icon +in /static/src/img/master_original_favicon.svg. You can also search for some +favicon generators across the web. + +To allow a user to edit the favicon it has to be member of group "Administration / Settings". diff --git a/web_favicon/readme/DESCRIPTION.rst b/web_favicon/readme/DESCRIPTION.rst new file mode 100644 index 00000000..83260785 --- /dev/null +++ b/web_favicon/readme/DESCRIPTION.rst @@ -0,0 +1,10 @@ + +This module was written to allow you to customize your Odoo instance's shortcut +icon (aka favicon). This is useful for branding purposes, but also for +integrators who have many different Odoo instances running and need to see at a +glance which browser tab does what. + +The icon is shown also for portal users when the website modules are not +installed. + +More info about favicon: https://en.wikipedia.org/wiki/Favicon diff --git a/web_favicon/readme/ROADMAP.rst b/web_favicon/readme/ROADMAP.rst new file mode 100644 index 00000000..b4d00087 --- /dev/null +++ b/web_favicon/readme/ROADMAP.rst @@ -0,0 +1,6 @@ +* Allow to upload some big icon (preferrably SVG or the like) and generate + all the icons from it +* Generate icons suitable for mobile devices and web apps (see /static/src/img/ + folder inside the module for a sample of the possible current formats. +* Put the icon definition at system level, not at company level. It doesn't + make sense (as the icon is cached) to have a different icon per company. diff --git a/web_favicon/static/description/index.html b/web_favicon/static/description/index.html new file mode 100644 index 00000000..866cc6c6 --- /dev/null +++ b/web_favicon/static/description/index.html @@ -0,0 +1,447 @@ + + + + + + +Custom shortcut icon + + + +
+

Custom shortcut icon

+ + +

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

+

This module was written to allow you to customize your Odoo instance’s shortcut +icon (aka favicon). This is useful for branding purposes, but also for +integrators who have many different Odoo instances running and need to see at a +glance which browser tab does what.

+

The icon is shown also for portal users when the website modules are not +installed.

+

More info about favicon: https://en.wikipedia.org/wiki/Favicon

+

Table of contents

+ +
+

Configuration

+

Upload your favicon (16x16, 32x32, 64x64 or “as big as possible”) on the +company form. The file format would be ico, gif or png with 16x16, 32x32 or +64x64 pixels and 16 colors. Highers resolutions or colors support depends on +the used browser, but most modern browsers do.

+

Note that most browsers cache favicons basically forever, so if you want your +icon to show up, you’ll most probably have to delete you browser cache. +Some browsers can refresh the favicon, accessing the URL +<base_url>/web_favicon/favicon.

+

You have a sample SVG that can be used as template for generating your icon +in /static/src/img/master_original_favicon.svg. You can also search for some +favicon generators across the web.

+

To allow a user to edit the favicon it has to be member of group “Administration / Settings”.

+
+
+

Known issues / Roadmap

+
    +
  • Allow to upload some big icon (preferrably SVG or the like) and generate +all the icons from it
  • +
  • Generate icons suitable for mobile devices and web apps (see /static/src/img/ +folder inside the module for a sample of the possible current formats.
  • +
  • Put the icon definition at system level, not at company level. It doesn’t +make sense (as the icon is cached) to have a different icon per company.
  • +
+
+
+

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

+
    +
  • Therp BV
  • +
  • Tecnativa
  • +
+
+
+

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_favicon/tests/__init__.py b/web_favicon/tests/__init__.py index 6a5f7312..9be3cd52 100644 --- a/web_favicon/tests/__init__.py +++ b/web_favicon/tests/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import test_web_favicon diff --git a/web_favicon/tests/test_web_favicon.py b/web_favicon/tests/test_web_favicon.py index 78222d31..99dbe39a 100644 --- a/web_favicon/tests/test_web_favicon.py +++ b/web_favicon/tests/test_web_favicon.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- -# © 2015 Therp BV +# Copyright 2015 Therp BV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import base64 diff --git a/web_favicon/views/templates.xml b/web_favicon/views/templates.xml index 32385c84..37edb63b 100644 --- a/web_favicon/views/templates.xml +++ b/web_favicon/views/templates.xml @@ -1,8 +1,10 @@