18 Commits

Author SHA1 Message Date
11ea32ef6e Update 'pwa/urls.py'
Fix for Django 4.0
2022-05-06 19:14:40 +02:00
Silvio Leite
0ff60e7afa chore(setup): Include the python 3.8 to classifiers 2020-07-01 19:37:01 -03:00
Silvio Leite
e38a9307eb chore(setup): Update the version, add the tox test to python 3.8 and update the dev dependencies 2020-07-01 19:35:49 -03:00
Silvio Leite
257f2f2922 feat(tests): Add manifest content type test 2020-07-01 19:03:52 -03:00
Vivien
a410a6575a Returns correct content_type 2020-06-26 09:33:58 -03:00
Silvio Leite
5f50788bf4 Merge pull request #45 from stacks13/patch-1
Escape wildcard in paths
2020-06-24 10:35:42 -03:00
Sahil Nirkhe
991a6ee8c2 Escape wildcard in paths
Both serviceworker.js and manifest.json load even if the '.' character is replaced by any other character. This regex fix will prevent that.
2020-06-22 21:57:09 +05:30
Silvio Leite
0d4488a0c5 chore(setup): Update version 2020-05-30 18:15:07 -03:00
Silvio Leite
8e39aebe17 feat(status_bar): Make status bar style configurable 2020-05-30 18:00:17 -03:00
Silvio Leite
43a8131e8e chore(version): new version on setup 2020-02-03 14:20:55 -03:00
Silvio Luis
61cdbf6727 Merge pull request #35 from Natureshadow/patch-1
Fix URL inclusion
2020-02-03 14:12:03 -03:00
Dominik George
67cf917a08 Fix URL inclusion
Closes #34.
2020-01-26 20:49:26 +01:00
Silvio Leite
63139af3f3 feat(version): Update the version on setup 2020-01-23 07:38:48 -03:00
Silvio Luis
3c36673a21 Merge pull request #32 from Natureshadow/reverse-urls
Allow view names in settings and mounting at subdirectory
2020-01-23 07:36:01 -03:00
Silvio Luis
82f1abb342 Merge pull request #31 from hansegucker/master
Extend support for apple devices
2020-01-23 07:25:48 -03:00
Dominik George
83fa72fcac Update changelog 2020-01-19 10:06:26 +01:00
Dominik George
4f641bc79a Fix PWA if app is not mounted in root of webserver
Uses the same method as Django itself (e.g. in LOGIN_URL).
2020-01-19 10:01:08 +01:00
Jonathan Weth
447aa7c06d Extend support for apple devices
Add option to specify special icons for apple devices because icons on
apple devices are tailored to size differently
2020-01-04 12:47:28 +01:00
12 changed files with 61 additions and 25 deletions

View File

@@ -59,3 +59,9 @@
- Updated manifest.json by adding scope parameter.
- Updated serviceworker.js add scope dynamic parameter
## 1.0.7
### Fixed
- Fix PWA if app is not mounted in root of webserver
### Added
- Allow use of view names in PWA_APP_SCOPE, PWA_START_URL, PWA_APP_FETCH_URL and PWA_APP_ROOT

View File

@@ -54,12 +54,19 @@ 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/images/my_app_icon.png',
'sizes': '160x160'
}
]
PWA_APP_ICONS_APPLE = [
{
'src': '/static/images/my_apple_icon.png',
'sizes': '160x160'
}
]
PWA_APP_SPLASH_SCREEN = [
{
'src': '/static/images/icons/splash-640x1136.png',

View File

@@ -1,7 +1,16 @@
""" Settings required by django-app. """
from django.conf import settings
from django.shortcuts import resolve_url
from django.urls import get_script_prefix
from django.utils.functional import lazy
import os
# Lazy-evaluate URLs so including pwa.urls in root urlconf works
resolve_url = lazy(resolve_url, str)
# Get script prefix for apps not mounted under /
_PWA_SCRIPT_PREFIX = get_script_prefix()
# Path to the service worker implementation. Default implementation is empty.
PWA_SERVICE_WORKER_PATH = getattr(settings, 'PWA_SERVICE_WORKER_PATH',
os.path.join(os.path.abspath(os.path.dirname(__file__)), 'templates',
@@ -9,15 +18,16 @@ PWA_SERVICE_WORKER_PATH = getattr(settings, 'PWA_SERVICE_WORKER_PATH',
# App parameters to include in manifest.json and appropriate meta tags
PWA_APP_NAME = getattr(settings, 'PWA_APP_NAME', 'MyApp')
PWA_APP_DESCRIPTION = getattr(settings, 'PWA_APP_DESCRIPTION', 'My Progressive Web App')
PWA_APP_ROOT_URL = getattr(settings, 'PWA_APP_ROOT_URL', '/')
PWA_APP_ROOT_URL = resolve_url(getattr(settings, 'PWA_APP_ROOT_URL', _PWA_SCRIPT_PREFIX))
PWA_APP_THEME_COLOR = getattr(settings, 'PWA_APP_THEME_COLOR', '#000')
PWA_APP_BACKGROUND_COLOR = getattr(settings, 'PWA_APP_BACKGROUND_COLOR', '#fff')
PWA_APP_DISPLAY = getattr(settings, 'PWA_APP_DISPLAY', 'standalone')
PWA_APP_SCOPE = getattr(settings, 'PWA_APP_SCOPE', '/')
PWA_APP_SCOPE = resolve_url(getattr(settings, 'PWA_APP_SCOPE', _PWA_SCRIPT_PREFIX))
PWA_APP_DEBUG_MODE = getattr(settings, 'PWA_APP_DEBUG_MODE', True)
PWA_APP_ORIENTATION = getattr(settings, 'PWA_APP_ORIENTATION', 'any')
PWA_APP_START_URL = getattr(settings, 'PWA_APP_START_URL', '/')
PWA_APP_FETCH_URL = getattr(settings, 'PWA_APP_FETCH_URL', '/')
PWA_APP_START_URL = resolve_url(getattr(settings, 'PWA_APP_START_URL', _PWA_SCRIPT_PREFIX))
PWA_APP_FETCH_URL = resolve_url(getattr(settings, 'PWA_APP_FETCH_URL', _PWA_SCRIPT_PREFIX))
PWA_APP_STATUS_BAR_COLOR = getattr(settings, 'PWA_APP_STATUS_BAR_COLOR', 'default')
PWA_APP_ICONS = getattr(settings, 'PWA_APP_ICONS', [
{
'src': '/static/images/icons/icon-72x72.png',
@@ -97,5 +107,3 @@ PWA_APP_SPLASH_SCREEN = getattr(settings, 'PWA_APP_SPLASH_SCREEN', [
])
PWA_APP_DIR = getattr(settings, 'PWA_APP_DIR', 'auto')
PWA_APP_LANG = getattr(settings, 'PWA_APP_LANG', 'en-US')

View File

@@ -9,6 +9,7 @@
"orientation": {{ PWA_APP_ORIENTATION|js }},
"background_color": {{ PWA_APP_BACKGROUND_COLOR|js }},
"theme_color": {{ PWA_APP_THEME_COLOR|js }},
"status_bar": {{ PWA_APP_STATUS_BAR_COLOR|js }},
"icons": {{ PWA_APP_ICONS|js }},
"dir": {{ PWA_APP_DIR|js }},
"lang": {{ PWA_APP_LANG|js }}

View File

@@ -12,10 +12,17 @@
<!-- Add to homescreen for Safari on iOS -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-title" content="{{ PWA_APP_NAME }}">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="apple-mobile-web-app-status-bar-style" content="{{ PWA_APP_STATUS_BAR_COLOR }}">
{% if PWA_APP_ICONS_APPLE %}
{% for icon in PWA_APP_ICONS_APPLE %}
<link rel="apple-touch-icon" href="{{ icon.src }}" sizes="{{ icon.size }}">
{% endfor %}
{% else %}
{% for icon in PWA_APP_ICONS %}
<link rel="apple-touch-icon" href="{{ icon.src }}" sizes="{{ icon.size }}">
{% endfor %}
{% endif %}
{% for splash in PWA_APP_SPLASH_SCREEN %}

View File

@@ -1,10 +1,10 @@
from django.conf.urls import url
from django.urls import re_path
from .views import manifest, service_worker, offline
# Serve up serviceworker.js and manifest.json at the root
urlpatterns = [
url('^serviceworker.js$', service_worker, name='serviceworker'),
url('^manifest.json$', manifest, name='manifest'),
url('^offline/$', offline, name='offline')
re_path(r'^serviceworker\.js$', service_worker, name='serviceworker'),
re_path(r'^manifest\.json$', manifest, name='manifest'),
re_path('^offline/$', offline, name='offline')
]

View File

@@ -14,7 +14,7 @@ def manifest(request):
setting_name: getattr(app_settings, setting_name)
for setting_name in dir(app_settings)
if setting_name.startswith('PWA_')
})
}, content_type='application/json')
def offline(request):

View File

@@ -1,2 +1,2 @@
pypandoc==1.3.3
tox==3.2.1
pypandoc==1.5
tox==3.16.1

View File

@@ -4,9 +4,7 @@ from setuptools import find_packages, setup
short_description = 'A Django app to include a manifest.json and Service Worker instance to enable progressive web ' \
'app behavior '
# noinspection PyBroadException
try:
# noinspection PyPackageRequirements
import pypandoc
long_description = pypandoc.convert('README.md', 'rst')
@@ -22,7 +20,7 @@ install_requirements = [
setup(
name='django-pwa',
version='1.0.6',
version='1.0.10',
packages=find_packages(),
install_requires=install_requirements,
include_package_data=True,
@@ -52,6 +50,7 @@ setup(
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Topic :: Internet :: WWW/HTTP',
'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
],

View File

@@ -19,7 +19,8 @@ class AppSettingsTest(TestCase):
'PWA_APP_FETCH_URL',
'PWA_APP_ICONS',
'PWA_APP_DIR',
'PWA_APP_LANG'
'PWA_APP_LANG',
'PWA_APP_STATUS_BAR_COLOR'
]
for attr in attributes:
with self.subTest():

View File

@@ -19,6 +19,10 @@ class ManifestTest(TestCase):
"""GET /manifest.json Should return status code 200"""
self.assertEqual(self.response.status_code, 200)
def test_content_type_json(self):
"""The content type Must be JSON"""
self.assertEqual(self.response['content-type'], 'application/json')
def test_template(self):
"""Must have the template manifest.json"""
self.assertTemplateUsed(self.response, 'manifest.json')
@@ -37,7 +41,8 @@ class ManifestTest(TestCase):
'"orientation":',
'"icons":',
'"dir":',
'"lang":'
'"lang":',
'"status_bar":'
]
for expected in contents:
with self.subTest():

View File

@@ -6,6 +6,7 @@ envlist =
py37-django{20}
py37-django{21}
py37-django{30}
py38-django{30}
[testenv]
commands = python runtests.py
@@ -16,6 +17,7 @@ basepython =
py35: python3.5
py36: python3.6
py37: python3.7
py38: python3.8
deps =
django18: django==1.8
django19: django==1.9
@@ -25,4 +27,4 @@ deps =
django21: Django==2.1
django30: Django==3.0
pypandoc==1.3.3
pypandoc==1.5