From bcc96588bf77f53f4221368c10935b8e83ee09a7 Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Thu, 23 Jan 2025 12:49:50 -0300 Subject: [PATCH] feat: PWA support --- app/WYGIWYH/settings.py | 41 ++++++++++++++++++++++ app/WYGIWYH/urls.py | 1 + app/static/img/favicon/manifest.json | 41 ---------------------- app/static/img/pwa/splash-640x1136.png | Bin 0 -> 19916 bytes app/static/img/pwa/splash-750x1334.png | Bin 0 -> 23050 bytes app/templates/includes/head/favicons.html | 3 +- app/templates/layouts/base.html | 2 ++ app/templates/layouts/base_auth.html | 4 ++- requirements.txt | 2 +- 9 files changed, 49 insertions(+), 45 deletions(-) delete mode 100644 app/static/img/favicon/manifest.json create mode 100644 app/static/img/pwa/splash-640x1136.png create mode 100644 app/static/img/pwa/splash-750x1334.png diff --git a/app/WYGIWYH/settings.py b/app/WYGIWYH/settings.py index b2eeba1..97b2f9c 100644 --- a/app/WYGIWYH/settings.py +++ b/app/WYGIWYH/settings.py @@ -72,6 +72,7 @@ INSTALLED_APPS = [ "apps.rules.apps.RulesConfig", "apps.calendar_view.apps.CalendarViewConfig", "apps.dca.apps.DcaConfig", + "pwa", ] MIDDLEWARE = [ @@ -335,3 +336,43 @@ else: } CACHALOT_UNCACHABLE_TABLES = ("django_migrations", "procrastinate_jobs") + + +# PWA +PWA_APP_NAME = SITE_TITLE +PWA_APP_DESCRIPTION = "A simple and powerful finance tracker" +PWA_APP_THEME_COLOR = "#fbb700" +PWA_APP_BACKGROUND_COLOR = "#222222" +PWA_APP_DISPLAY = "standalone" +PWA_APP_SCOPE = "/" +PWA_APP_ORIENTATION = "any" +PWA_APP_START_URL = "/" +PWA_APP_STATUS_BAR_COLOR = "default" +PWA_APP_ICONS = [ + {"src": "/static/img/favicon/android-icon-192x192.png", "sizes": "192x192"} +] +PWA_APP_ICONS_APPLE = [ + {"src": "/static/img/favicon/apple-icon-180x180.png", "sizes": "180x180"} +] +PWA_APP_SPLASH_SCREEN = [ + { + "src": "/static/img/pwa/splash-640x1136.png", + "media": "(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)", + } +] +PWA_APP_DIR = "ltr" +PWA_APP_LANG = "en-US" +PWA_APP_SHORTCUTS = [] +PWA_APP_SCREENSHOTS = [ + { + "src": "/static/img/pwa/splash-750x1334.png", + "sizes": "750x1334", + "type": "image/png", + "form_factor": "wide", + }, + { + "src": "/static/img/pwa/splash-750x1334.png", + "sizes": "750x1334", + "type": "image/png", + }, +] diff --git a/app/WYGIWYH/urls.py b/app/WYGIWYH/urls.py index 5a465a5..7aed790 100644 --- a/app/WYGIWYH/urls.py +++ b/app/WYGIWYH/urls.py @@ -27,6 +27,7 @@ urlpatterns = [ path("hijack/", include("hijack.urls")), path("__debug__/", include("debug_toolbar.urls")), path("__reload__/", include("django_browser_reload.urls")), + path("", include("pwa.urls")), # path("api/", include("rest_framework.urls")), path("api/", include("apps.api.urls")), path("api/schema/", SpectacularAPIView.as_view(), name="schema"), diff --git a/app/static/img/favicon/manifest.json b/app/static/img/favicon/manifest.json deleted file mode 100644 index 9d5c19d..0000000 --- a/app/static/img/favicon/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "WYGIWYH", - "icons": [ - { - "src": "\/static\/img\/favicon\/android-icon-36x36.png", - "sizes": "36x36", - "type": "image\/png", - "density": "0.75" - }, - { - "src": "\/static\/img\/favicon\/android-icon-48x48.png", - "sizes": "48x48", - "type": "image\/png", - "density": "1.0" - }, - { - "src": "\/static\/img\/favicon\/android-icon-72x72.png", - "sizes": "72x72", - "type": "image\/png", - "density": "1.5" - }, - { - "src": "\/static\/img\/favicon\/android-icon-96x96.png", - "sizes": "96x96", - "type": "image\/png", - "density": "2.0" - }, - { - "src": "\/static\/img\/favicon\/android-icon-144x144.png", - "sizes": "144x144", - "type": "image\/png", - "density": "3.0" - }, - { - "src": "\/static\/img\/favicon\/android-icon-192x192.png", - "sizes": "192x192", - "type": "image\/png", - "density": "4.0" - } - ] -} diff --git a/app/static/img/pwa/splash-640x1136.png b/app/static/img/pwa/splash-640x1136.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5db6b432af55ff914fc609cad28557e443c658 GIT binary patch literal 19916 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 literal 0 HcmV?d00001 diff --git a/app/static/img/pwa/splash-750x1334.png b/app/static/img/pwa/splash-750x1334.png new file mode 100644 index 0000000000000000000000000000000000000000..93098b38dd6f9d7d0ff320682b84cd7657fe1097 GIT binary patch literal 23050 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 PG90?3kJHP$U>Eim+iGfa literal 0 HcmV?d00001 diff --git a/app/templates/includes/head/favicons.html b/app/templates/includes/head/favicons.html index 52a872b..458ad45 100644 --- a/app/templates/includes/head/favicons.html +++ b/app/templates/includes/head/favicons.html @@ -12,7 +12,6 @@ - - \ No newline at end of file + diff --git a/app/templates/layouts/base.html b/app/templates/layouts/base.html index b55ceba..6545aa9 100644 --- a/app/templates/layouts/base.html +++ b/app/templates/layouts/base.html @@ -1,3 +1,4 @@ +{% load pwa %} {% load formats %} {% load i18n %} {% load title %} @@ -15,6 +16,7 @@ {% include 'includes/head/favicons.html' %} + {% progressive_web_app_meta %} {% include 'includes/styles.html' %} {% block extra_styles %}{% endblock %} diff --git a/app/templates/layouts/base_auth.html b/app/templates/layouts/base_auth.html index c38d0d3..6cd9a16 100644 --- a/app/templates/layouts/base_auth.html +++ b/app/templates/layouts/base_auth.html @@ -1,3 +1,4 @@ +{% load pwa %} {% load title %} {% load webpack_loader %} @@ -11,8 +12,9 @@ {% endblock title %} {% endfilter %} - + {% include 'includes/head/favicons.html' %} + {% progressive_web_app_meta %} {% include 'includes/styles.html' %} {% block extra_styles %}{% endblock %} diff --git a/requirements.txt b/requirements.txt index b4e4f02..808f347 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,7 +9,7 @@ django-filter==24.3 django-debug-toolbar==4.3.0 django-cachalot~=2.6.3 django-cotton~=1.2.1 - +django-pwa~=2.0.1 djangorestframework~=3.15.2 drf-spectacular~=0.27.2