pwa: add application title parameter (#32371)

This commit is contained in:
Serghei Mihai 2019-04-16 12:05:12 +02:00 committed by Frédéric Péters
parent af9a647b57
commit afe102d95d
6 changed files with 67 additions and 3 deletions

View File

@ -32,6 +32,16 @@ class ManagerHomeView(UpdateView):
fields = '__all__'
success_url = reverse_lazy('pwa-manager-homepage')
def get_initial(self):
initial = super(ManagerHomeView, self).get_initial()
initial['application_name'] = self.get_object().get_application_name()
return initial
def form_valid(self, form):
if form.instance.application_name == PwaSettings.get_default_application_name():
form.instance.application_name = ''
return super(ManagerHomeView, self).form_valid(form)
def get_object(self):
return PwaSettings.singleton()

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.20 on 2019-04-16 14:08
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('pwa', '0004_pwasettings_application_icon'),
]
operations = [
migrations.AddField(
model_name='pwasettings',
name='application_name',
field=models.CharField(blank=True, max_length=64, verbose_name='Application Name'),
),
]

View File

@ -36,6 +36,10 @@ from combo import utils
class PwaSettings(models.Model):
APPLICATION_ICON_SIZES = ['%sx%s' % (x, x) for x in (48, 96, 192, 256, 512)]
application_name = models.CharField(
verbose_name=_('Application Name'),
max_length=64,
blank=True)
application_icon = models.FileField(
verbose_name=_('Application Icon'),
help_text=_(u'Should be a square of at least 512×512 pixels.'),
@ -71,6 +75,13 @@ class PwaSettings(models.Model):
setattr(obj, attr, json_settings[attr])
obj.save()
@classmethod
def get_default_application_name(cls):
return settings.TEMPLATE_VARS.get('global_title') or 'Compte Citoyen'
def get_application_name(self):
return self.application_name or self.get_default_application_name()
class PwaNavigationEntry(models.Model):
label = models.CharField(verbose_name=_('Label'), max_length=150, blank=True)

View File

@ -1,6 +1,6 @@
{% load static thumbnail %}{
"name": "{% firstof global_title "Compte Citoyen" %}",
"short_name": "{% firstof global_title "Compte Citoyen" %}",
"name": "{{ pwa_settings.get_application_name }}",
"short_name": "{{ pwa_settings.get_application_name }}",
"start_url": "{% firstof pwa_start_url "/" %}",
{% if theme_color %}
"background_color": "{{ theme_color }}",

View File

@ -15,7 +15,7 @@
{% endthumbnail %}
{% endif %}
</div>
<div class="applabel">{% firstof global_title "Compte Citoyen" %}</div>
<div class="applabel">{{ pwa_settings.get_application_name }}</div>
</div>
<iframe scrolling="no"></iframe>
</div>

View File

@ -147,6 +147,20 @@ def test_pwa_manager(app, admin_user):
resp = resp.form.submit().follow()
assert PwaSettings.singleton().application_icon.name == 'pwa/test.png'
# make sure another application name was not saved
assert not PwaSettings.singleton().application_name
resp = app.get('/manage/pwa/')
assert resp.form['application_name'].value == 'Compte Citoyen'
resp.form['application_name'] = 'Test'
resp = resp.form.submit().follow()
assert PwaSettings.singleton().application_name == 'Test'
# make sure using the default application name switches back to
# global_title/compte citoyen.
resp.form['application_name'] = 'Compte Citoyen'
resp = resp.form.submit().follow()
assert not PwaSettings.singleton().application_name
def test_pwa_offline_page(app):
PwaSettings.objects.all().delete()
@ -203,3 +217,12 @@ def test_pwa_application_icon(app, admin_user):
# make sure largest icon is referenced in service worker
resp2 = app.get('/service-worker.js', status=200)
assert resp.json['icons'][-1]['src'].split('/')[-1] in resp.text
def test_pwa_application_name(app, admin_user):
app = login(app)
assert app.get('/manifest.json', status=200).json['name'] == 'Compte Citoyen'
pwa_settings = PwaSettings.singleton()
pwa_settings.application_name = 'My wonderful app'
pwa_settings.save()
assert app.get('/manifest.json', status=200).json['name'] == 'My wonderful app'