Projet

Général

Profil

0001-pwa-add-application-title-parameter-32371.patch

Frédéric Péters, 19 mai 2019 10:57

Télécharger (6,31 ko)

Voir les différences:

Subject: [PATCH] pwa: add application title parameter (#32371)

 combo/apps/pwa/manager_views.py               | 10 ++++++++
 .../0005_pwasettings_application_name.py      | 20 ++++++++++++++++
 combo/apps/pwa/models.py                      | 11 +++++++++
 combo/apps/pwa/templates/combo/manifest.json  |  4 ++--
 .../pwa/templates/combo/pwa/manager_home.html |  2 +-
 tests/test_pwa.py                             | 23 +++++++++++++++++++
 6 files changed, 67 insertions(+), 3 deletions(-)
 create mode 100644 combo/apps/pwa/migrations/0005_pwasettings_application_name.py
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
-