0001-pwa-add-application-title-parameter-32371.patch
combo/apps/pwa/manager_views.py | ||
---|---|---|
32 | 32 |
fields = '__all__' |
33 | 33 |
success_url = reverse_lazy('pwa-manager-homepage') |
34 | 34 | |
35 |
def get_initial(self): |
|
36 |
initial = super(ManagerHomeView, self).get_initial() |
|
37 |
initial['application_name'] = self.get_object().get_application_name() |
|
38 |
return initial |
|
39 | ||
40 |
def form_valid(self, form): |
|
41 |
if form.instance.application_name == PwaSettings.get_default_application_name(): |
|
42 |
form.instance.application_name = '' |
|
43 |
return super(ManagerHomeView, self).form_valid(form) |
|
44 | ||
35 | 45 |
def get_object(self): |
36 | 46 |
return PwaSettings.singleton() |
37 | 47 |
combo/apps/pwa/migrations/0005_pwasettings_application_name.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# Generated by Django 1.11.20 on 2019-04-16 14:08 |
|
3 |
from __future__ import unicode_literals |
|
4 | ||
5 |
from django.db import migrations, models |
|
6 | ||
7 | ||
8 |
class Migration(migrations.Migration): |
|
9 | ||
10 |
dependencies = [ |
|
11 |
('pwa', '0004_pwasettings_application_icon'), |
|
12 |
] |
|
13 | ||
14 |
operations = [ |
|
15 |
migrations.AddField( |
|
16 |
model_name='pwasettings', |
|
17 |
name='application_name', |
|
18 |
field=models.CharField(blank=True, max_length=64, verbose_name='Application Name'), |
|
19 |
), |
|
20 |
] |
combo/apps/pwa/models.py | ||
---|---|---|
36 | 36 | |
37 | 37 |
class PwaSettings(models.Model): |
38 | 38 |
APPLICATION_ICON_SIZES = ['%sx%s' % (x, x) for x in (48, 96, 192, 256, 512)] |
39 |
application_name = models.CharField( |
|
40 |
verbose_name=_('Application Name'), |
|
41 |
max_length=64, |
|
42 |
blank=True) |
|
39 | 43 |
application_icon = models.FileField( |
40 | 44 |
verbose_name=_('Application Icon'), |
41 | 45 |
help_text=_(u'Should be a square of at least 512×512 pixels.'), |
... | ... | |
71 | 75 |
setattr(obj, attr, json_settings[attr]) |
72 | 76 |
obj.save() |
73 | 77 | |
78 |
@classmethod |
|
79 |
def get_default_application_name(cls): |
|
80 |
return settings.TEMPLATE_VARS.get('global_title') or 'Compte Citoyen' |
|
81 | ||
82 |
def get_application_name(self): |
|
83 |
return self.application_name or self.get_default_application_name() |
|
84 | ||
74 | 85 | |
75 | 86 |
class PwaNavigationEntry(models.Model): |
76 | 87 |
label = models.CharField(verbose_name=_('Label'), max_length=150, blank=True) |
combo/apps/pwa/templates/combo/manifest.json | ||
---|---|---|
1 | 1 |
{% load static thumbnail %}{ |
2 |
"name": "{% firstof global_title "Compte Citoyen" %}",
|
|
3 |
"short_name": "{% firstof global_title "Compte Citoyen" %}",
|
|
2 |
"name": "{{ pwa_settings.get_application_name }}",
|
|
3 |
"short_name": "{{ pwa_settings.get_application_name }}",
|
|
4 | 4 |
"start_url": "{% firstof pwa_start_url "/" %}", |
5 | 5 |
{% if theme_color %} |
6 | 6 |
"background_color": "{{ theme_color }}", |
combo/apps/pwa/templates/combo/pwa/manager_home.html | ||
---|---|---|
15 | 15 |
{% endthumbnail %} |
16 | 16 |
{% endif %} |
17 | 17 |
</div> |
18 |
<div class="applabel">{% firstof global_title "Compte Citoyen" %}</div>
|
|
18 |
<div class="applabel">{{ pwa_settings.get_application_name }}</div>
|
|
19 | 19 |
</div> |
20 | 20 |
<iframe scrolling="no"></iframe> |
21 | 21 |
</div> |
tests/test_pwa.py | ||
---|---|---|
147 | 147 |
resp = resp.form.submit().follow() |
148 | 148 |
assert PwaSettings.singleton().application_icon.name == 'pwa/test.png' |
149 | 149 | |
150 |
# make sure another application name was not saved |
|
151 |
assert not PwaSettings.singleton().application_name |
|
152 |
resp = app.get('/manage/pwa/') |
|
153 |
assert resp.form['application_name'].value == 'Compte Citoyen' |
|
154 |
resp.form['application_name'] = 'Test' |
|
155 |
resp = resp.form.submit().follow() |
|
156 |
assert PwaSettings.singleton().application_name == 'Test' |
|
157 | ||
158 |
# make sure using the default application name switches back to |
|
159 |
# global_title/compte citoyen. |
|
160 |
resp.form['application_name'] = 'Compte Citoyen' |
|
161 |
resp = resp.form.submit().follow() |
|
162 |
assert not PwaSettings.singleton().application_name |
|
163 | ||
150 | 164 | |
151 | 165 |
def test_pwa_offline_page(app): |
152 | 166 |
PwaSettings.objects.all().delete() |
... | ... | |
203 | 217 |
# make sure largest icon is referenced in service worker |
204 | 218 |
resp2 = app.get('/service-worker.js', status=200) |
205 | 219 |
assert resp.json['icons'][-1]['src'].split('/')[-1] in resp.text |
220 | ||
221 | ||
222 |
def test_pwa_application_name(app, admin_user): |
|
223 |
app = login(app) |
|
224 |
assert app.get('/manifest.json', status=200).json['name'] == 'Compte Citoyen' |
|
225 |
pwa_settings = PwaSettings.singleton() |
|
226 |
pwa_settings.application_name = 'My wonderful app' |
|
227 |
pwa_settings.save() |
|
228 |
assert app.get('/manifest.json', status=200).json['name'] == 'My wonderful app' |
|
206 |
- |