Included the default serviceworker, updated the manifest, Add the default offline page, updated the unit test, Redme

This commit is contained in:
Silvio Leite
2018-11-30 20:33:20 -02:00
parent 73151d2585
commit 79c6963219
25 changed files with 252 additions and 33 deletions

View File

@@ -0,0 +1 @@
default_app_config = 'pwa.apps.PwaConfig'

View File

@@ -3,8 +3,7 @@ from django.conf import settings
import os
# 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', 'serviceworker.js'))
PWA_SERVICE_WORKER_PATH = getattr(settings, 'PWA_SERVICE_WORKER_PATH', 'serviceworker.js')
# App parameters to include in manifest.json and appropriate meta tags
PWA_APP_NAME = getattr(settings, 'PWA_APP_NAME', 'MyApp')
@@ -15,10 +14,39 @@ PWA_APP_BACKGROUND_COLOR = getattr(settings, 'PWA_APP_BACKGROUND_COLOR', '#fff')
PWA_APP_DISPLAY = getattr(settings, 'PWA_APP_DISPLAY', 'standalone')
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_ICONS = getattr(settings, 'PWA_APP_ICONS', [
{
'src': '/',
'sizes': '160x160'
'src': '/static/images/icons/icon-72x72.png',
'sizes': '72x72'
},
{
'src': '/static/images/icons/icon-96x96.png',
'sizes': '96x96'
},
{
'src': '/static/images/icons/icon-128x128.png',
'sizes': '128x128'
},
{
'src': '/static/images/icons/icon-144x144.png',
'sizes': '144x144'
},
{
'src': '/static/images/icons/icon-152x152.png',
'sizes': '152x152'
},
{
'src': '/static/images/icons/icon-192x192.png',
'sizes': '192x192'
},
{
'src': '/static/images/icons/icon-384x384.png',
'sizes': '384x384'
},
{
'src': '/static/images/icons/icon-512x512.png',
'sizes': '512x512'
}
])
PWA_APP_DIR = getattr(settings, 'PWA_APP_DIR', 'auto')

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,11 @@
{% load static %}<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Default offline template</title>
<link href="{% static '/css/django-pwa-app.css' %}" rel="stylesheet">
</head>
<body>
<h1>You are currently not connected to any networks.</h1>
</body>
</html>

View File

@@ -1,2 +1,53 @@
// Empty Service Worker implementation. To use your own Service Worker, set the PWA_SERVICE_WORKER_PATH variable in
// settings.py
// Base Service Worker implementation. To use your own Service Worker, set the PWA_SERVICE_WORKER_PATH variable in settings.py
var staticCacheName = "django-pwa-v" + new Date().getTime();
var filesToCache = [
'/offline',
'/static/css/django-pwa-app.css',
'/static/images/icons/icon-72x72.png',
'/static/images/icons/icon-96x96.png',
'/static/images/icons/icon-128x128.png',
'/static/images/icons/icon-144x144.png',
'/static/images/icons/icon-152x152.png',
'/static/images/icons/icon-192x192.png',
'/static/images/icons/icon-384x384.png',
'/static/images/icons/icon-512x512.png',
];
// Cache on install
self.addEventListener("install", event => {
this.skipWaiting();
event.waitUntil(
caches.open(staticCacheName)
.then(cache => {
return cache.addAll(filesToCache);
})
)
});
// Clear cache on activate
self.addEventListener('activate', event => {
event.waitUntil(
caches.keys().then(cacheNames => {
return Promise.all(
cacheNames
.filter(cacheName => (cacheName.startsWith("django-pwa-")))
.filter(cacheName => (cacheName !== staticCacheName))
.map(cacheName => caches.delete(cacheName))
);
})
);
});
// Serve from Cache
self.addEventListener("fetch", event => {
event.respondWith(
caches.match(event.request)
.then(response => {
return response || fetch(event.request);
})
.catch(() => {
return caches.match('offline');
})
)
});

View File

@@ -1,8 +1,10 @@
from django.conf.urls import url
from .views import manifest, service_worker
from django.urls import path
from .views import Manifest, ServiceWorker, OfflineView
# Serve up serviceworker.js and manifest.json at the root
urlpatterns = [
url('^serviceworker.js$', service_worker, name="serviceworker"),
url('^manifest.json$', manifest, name="manifest")
path('serviceworker.js', ServiceWorker.as_view(), name='serviceworker'),
path('manifest.json', Manifest.as_view(), name='manifest'),
path('offline', OfflineView.as_view(), name='offline')
]

View File

@@ -1,17 +1,27 @@
from django.http import HttpResponse
from django.shortcuts import render
from django.views.generic.base import TemplateView
from . import app_settings
def service_worker(request):
response = HttpResponse(open(app_settings.PWA_SERVICE_WORKER_PATH).read(), content_type='application/javascript')
return response
class ServiceWorker(TemplateView):
content_type = 'application/javascript'
template_name = app_settings.PWA_SERVICE_WORKER_PATH
def get_context_data(self, **kwargs):
kwargs['PWA_APP_FETCH_URL'] = app_settings.PWA_APP_FETCH_URL
return super().get_context_data(**kwargs)
def manifest(request):
return render(request, 'manifest.json', {
setting_name: getattr(app_settings, setting_name)
for setting_name in dir(app_settings)
if setting_name.startswith('PWA_')
})
class Manifest(TemplateView):
content_type = 'application/json'
template_name = 'manifest.json'
def get_context_data(self, **kwargs):
for setting_name in dir(app_settings):
if setting_name.startswith('PWA_'):
kwargs[setting_name] = getattr(app_settings, setting_name)
return super().get_context_data(**kwargs)
class OfflineView(TemplateView):
template_name = "offline.html"