From a66325af7bb62da4d6e621a09ef65b0c45017d05 Mon Sep 17 00:00:00 2001 From: Scott Date: Sat, 4 Feb 2017 22:20:40 -0700 Subject: [PATCH] Initial revision. --- .gitignore | 3 ++ CHANGELOG.md | 5 ++ LICENSE.md | 21 ++++++++ MANIFEST.in | 2 + README.md | 91 +++++++++++++++++++++++++++++++++ images/screenshot1.png | Bin 0 -> 44138 bytes images/screenshot2.png | Bin 0 -> 48183 bytes pwa/__init__.py | 0 pwa/app_settings.py | 21 ++++++++ pwa/apps.py | 5 ++ pwa/templates/manifest.json | 11 ++++ pwa/templates/pwa.html | 27 ++++++++++ pwa/templates/serviceworker.js | 2 + pwa/templatetags/__init__.py | 0 pwa/templatetags/pwa.py | 25 +++++++++ pwa/urls.py | 8 +++ pwa/views.py | 17 ++++++ requirements-dev.txt | 1 + setup.py | 45 ++++++++++++++++ 19 files changed, 284 insertions(+) create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE.md create mode 100644 MANIFEST.in create mode 100644 README.md create mode 100644 images/screenshot1.png create mode 100644 images/screenshot2.png create mode 100644 pwa/__init__.py create mode 100644 pwa/app_settings.py create mode 100644 pwa/apps.py create mode 100644 pwa/templates/manifest.json create mode 100644 pwa/templates/pwa.html create mode 100644 pwa/templates/serviceworker.js create mode 100644 pwa/templatetags/__init__.py create mode 100644 pwa/templatetags/pwa.py create mode 100644 pwa/urls.py create mode 100644 pwa/views.py create mode 100644 requirements-dev.txt create mode 100644 setup.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4977a25 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.py[cod] +.idea/ +*.orig diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..ebbe20a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 0.1.0 + + - Initial release diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..aeeef25 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,21 @@ +MIT License (MIT) + +Copyright (c) 2014 Scott Vitale + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..30a7de1 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +include *.md +recursive-include pwa/templates * \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3499bc4 --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +django-progressive-web-app +===== +This Django app turns your project into a [progressive web app](https://developers.google.com/web/progressive-web-apps/). Navigating to your site on an Android phone will prompt you to add the app to your home screen. + +![Prompt for install](images/screenshot1.png) + +Launching the app from your home screen will display your app [without browser chrome](images/screenshot2.png). As such, it's critical that your application provides all navigation within the HTML (no reliance on the browser back or forward button). + +Requirements +===== +Progressive Web Apps require HTTPS unless being served from localhost. If you're not already using HTTPS on your site, check out [Let's Encrypt](https://letsencrypt.org/) and [ZeroSSL](https://zerossl.com/). + +Installation +===== +Install from PyPI: + +``` +pip install django-progressive-web-app +``` + +Configuration +===== +Add `pwa` to your list of `INSTALLED_APPS` in settings.py: + +```python +INSTALLED_APPS = [ + ... + 'pwa', + ... +] +``` + +Configure your app name, description, and icons in settings.py: +```python +PWA_APP_NAME = 'My Kickass App' +PWA_APP_DESCRIPTION = "Do kickass things all day long without that pesky browser chrome" +PWA_APP_THEME_COLOR = '#0A0302' +PWA_APP_ICONS = [ + { + 'src': '/static/images/my_app_icon.png', + 'sizes': '160x160' + } +] +``` + +Add the progressive web app URLs to urls.py: +```python +from django.conf.urls import url, include + +urlpatterns = [ + ... + url('', include('pwa.urls')), # You MUST use an empty string as the URL prefix + ... +] +``` + +Inject the required meta tags in your base.html (or wherever your HTML <head> is defined): +```html +{% load pwa %} + + + ... + {% progressive_web_app_meta %} + ... + +``` + +Troubleshooting +===== +While running the Django test server: +1. Verify that `/manifest.json` is being served +1. Verify that `/serviceworker.js` is being served +1. Use the Application tab in the Chrome Developer Tools to verify the progressive web app is configured correctly. +1. Use the "Add to homescreen" link on the Application Tab to verify you can add the app successfully. + +Adding Your Own Service Worker +===== +By default, the service worker implemented by this app is empty. To add service worker functionality, you'll want to create a `serviceworker.js` or similarly named file, and then point at it using the PWA_SERVICE_WORKER_PATH variable. + +```python +PWA_SERVICE_WORKER_PATH = os.path.join(BASE_DIR, 'my_app', 'serviceworker.js') + +``` + +Feedback +===== +I welcome your feedback and pull requests. Enjoy! + +License +===== +All files in this repository are distributed under the MIT license. diff --git a/images/screenshot1.png b/images/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..b975b44498357283a0197eceb944111d64d1c57c GIT binary patch literal 44138 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 + + + +{% for icon in PWA_APP_ICONS %} + +{% endfor %} + + + + + + + diff --git a/pwa/templates/serviceworker.js b/pwa/templates/serviceworker.js new file mode 100644 index 0000000..91e75b8 --- /dev/null +++ b/pwa/templates/serviceworker.js @@ -0,0 +1,2 @@ +// Empty Service Worker implementation. To use your own Service Worker, set the PWA_SERVICE_WORKER_PATH variable in +// settings.py diff --git a/pwa/templatetags/__init__.py b/pwa/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pwa/templatetags/pwa.py b/pwa/templatetags/pwa.py new file mode 100644 index 0000000..39f7168 --- /dev/null +++ b/pwa/templatetags/pwa.py @@ -0,0 +1,25 @@ +import json + +from django import template +from django.core.serializers.json import DjangoJSONEncoder +from django.utils.safestring import mark_safe + +from .. import app_settings + +register = template.Library() + + +@register.filter(is_safe=True) +def js(obj): + """ Transform a python object so it can be safely used in javascript/JSON. """ + return mark_safe(json.dumps(obj, cls=DjangoJSONEncoder)) + + +@register.inclusion_tag('pwa.html', takes_context=True) +def progressive_web_app_meta(context): + # Pass all PWA_* settings into the template + return { + setting_name: getattr(app_settings, setting_name) + for setting_name in dir(app_settings) + if setting_name.startswith('PWA_') + } diff --git a/pwa/urls.py b/pwa/urls.py new file mode 100644 index 0000000..fe26e7d --- /dev/null +++ b/pwa/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import url +from .views import manifest, service_worker + +# Serve up serviceworker.js and manifest.json at the root +urlpatterns = [ + url('^serviceworker.js$', service_worker), + url('^manifest.json$', manifest) +] diff --git a/pwa/views.py b/pwa/views.py new file mode 100644 index 0000000..cc77fca --- /dev/null +++ b/pwa/views.py @@ -0,0 +1,17 @@ +from django.http import HttpResponse +from django.shortcuts import render + +from . import app_settings + + +def service_worker(request): + response = HttpResponse(open(app_settings.PWA_SERVICE_WORKER_PATH).read(), content_type='application/javascript') + return response + + +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_') + }) diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..e3a0394 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1 @@ +pypandoc==1.3.3 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..e982de4 --- /dev/null +++ b/setup.py @@ -0,0 +1,45 @@ +import os +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') +except: + long_description = short_description + +# allow setup.py to be run from any path +os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir))) + +setup( + name='django-progressive-web-app', + version='0.1', + packages=find_packages(), + include_package_data=True, + license='MIT License', + description=short_description, + long_description=long_description, + url='http://github.com/svvitale/django-progressive-web-app', + author='Scott Vitale', + author_email='svvitale@gmail.com', + classifiers=[ + 'Environment :: Web Environment', + 'Framework :: Django', + 'Framework :: Django :: 1.10', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Topic :: Internet :: WWW/HTTP', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', + ], +) \ No newline at end of file