Projet

Général

Profil

0001-misc-add-settings-for-default-map-zoom-level-27154.patch

Frédéric Péters, 21 octobre 2021 14:04

Télécharger (7,21 ko)

Voir les différences:

Subject: [PATCH] misc: add settings for default map zoom level (#27154)

 tests/admin_pages/test_settings.py |  9 +++++++++
 tests/form_pages/test_all.py       | 19 +++++++++++++++++++
 wcs/admin/settings.py              | 24 +++++++++++++++++++++++-
 wcs/fields.py                      | 16 ++++++++++++----
 wcs/qommon/form.py                 |  2 ++
 wcs/qommon/publisher.py            |  3 +++
 6 files changed, 68 insertions(+), 5 deletions(-)
tests/admin_pages/test_settings.py
752 752
def test_settings_geolocation(pub):
753 753
    create_superuser(pub)
754 754
    app = login(get_app(pub))
755

  
756
    assert pub.get_default_zoom_level() == '13'
757

  
755 758
    resp = app.get('/backoffice/settings/')
756 759
    resp = resp.click('Geolocation')
757 760
    resp.form['default-position$latlng'].value = '1.234;-1.234'
......
765 768
    pub.reload_cfg()
766 769
    assert pub.cfg['misc']['default-position'] == '1.234;-1.234'
767 770

  
771
    assert pub.cfg['misc']['default-zoom-level'] == '13'
772
    resp = resp.click('Geolocation')
773
    resp.form['default-zoom-level'] = '16'
774
    resp = resp.form.submit().follow()
775
    assert pub.cfg['misc']['default-zoom-level'] == '16'
776

  
768 777

  
769 778
def test_settings_permissions(pub):
770 779
    create_superuser(pub)
tests/form_pages/test_all.py
3589 3589
    assert data.data == {'1': 'bla', '0': '1.234;-1.234'}
3590 3590

  
3591 3591

  
3592
def test_form_map_initial_zoom_level(pub):
3593
    formdef = create_formdef()
3594
    formdef.fields = [
3595
        fields.MapField(id='0', label='map'),
3596
    ]
3597
    formdef.store()
3598
    resp = get_app(pub).get('/test/')
3599
    assert 'data-initial_zoom="13"' in resp.text
3600
    pub.cfg['misc']['default-zoom-level'] = '16'
3601
    pub.write_cfg()
3602
    resp = get_app(pub).get('/test/')
3603
    assert 'data-initial_zoom="16"' in resp.text
3604

  
3605
    formdef.fields[0].initial_zoom = '11'
3606
    formdef.store()
3607
    resp = get_app(pub).get('/test/')
3608
    assert 'data-initial_zoom="11"' in resp.text
3609

  
3610

  
3592 3611
def test_form_map_geolocation_text_field(pub):
3593 3612
    formdef = create_formdef()
3594 3613
    formdef.fields = [
wcs/admin/settings.py
36 36
from wcs.blocks import BlockDef
37 37
from wcs.carddef import CardDef
38 38
from wcs.data_sources import NamedDataSource
39
from wcs.fields import MapOptionsMixin
39 40
from wcs.formdef import FormDef
40 41
from wcs.qommon import _, errors, get_cfg, ident, misc, template
41 42
from wcs.qommon.admin.cfg import cfg_submit
......
1332 1333
            default_zoom='9',
1333 1334
            required=False,
1334 1335
        )
1336
        zoom_levels = [(x[0], x[1], x[0]) for x in MapOptionsMixin.get_zoom_levels()]
1337
        form.add(
1338
            SingleSelectWidget,
1339
            'default-zoom-level',
1340
            title=_('Default zoom level'),
1341
            value=get_publisher().get_default_zoom_level(),
1342
            options=zoom_levels,
1343
            required=False,
1344
        )
1345

  
1335 1346
        form.add_submit('submit', _('Submit'))
1336 1347
        form.add_submit('cancel', _('Cancel'))
1337 1348

  
......
1339 1350
            return redirect('.')
1340 1351

  
1341 1352
        if form.is_submitted() and not form.has_errors():
1342
            cfg_submit(form, 'misc', ['default-position'])
1353
            cfg_submit(form, 'misc', ['default-position', 'default-zoom-level'])
1343 1354
            return redirect('.')
1344 1355

  
1345 1356
        get_response().breadcrumb.append(('geolocation', _('Geolocation Settings')))
......
1347 1358
        r = TemplateIO(html=True)
1348 1359
        r += htmltext('<h2>%s</h2>') % _('Geolocation Settings')
1349 1360
        r += form.render()
1361
        r += htmltext(
1362
            '''<script>
1363
$('#form_default-zoom-level').on('change', function() {
1364
  var map = $('.qommon-map')[0].leaflet_map;
1365
  var new_zoom = parseInt($(this).val());
1366
  if (! isNaN(new_zoom)) {
1367
    map.setZoom(parseInt($(this).val()));
1368
  }
1369
});
1370
</script>'''
1371
        )
1350 1372
        return r.getvalue()
1351 1373

  
1352 1374
    def user_templates(self):
wcs/fields.py
1708 1708
    min_zoom = None
1709 1709
    max_zoom = None
1710 1710

  
1711
    def fill_zoom_admin_form(self, form, **kwargs):
1712
        # 0: whole world, 9: wide area, 11: area, 13: town, 16: small road
1711
    @classmethod
1712
    def get_zoom_levels(cls):
1713 1713
        zoom_levels = [
1714 1714
            (None, '---'),
1715 1715
            ('0', _('Whole world')),
......
1721 1721
            ('18', _('Neighbourhood')),
1722 1722
            ('19', _('Ant')),
1723 1723
        ]
1724
        return zoom_levels
1725

  
1726
    def fill_zoom_admin_form(self, form, **kwargs):
1727
        zoom_levels = self.get_zoom_levels()
1728
        zoom_levels_dict = dict(zoom_levels)
1729
        default_zoom_level = get_publisher().get_default_zoom_level()
1730
        initial_zoom_levels = zoom_levels[:]
1731
        initial_zoom_levels[0] = (None, _('Default (%s)') % zoom_levels_dict[default_zoom_level])
1724 1732
        form.add(
1725 1733
            SingleSelectWidget,
1726 1734
            'initial_zoom',
1727 1735
            title=_('Initial zoom level'),
1728
            value=self.initial_zoom or '13',
1729
            options=zoom_levels,
1736
            value=self.initial_zoom,
1737
            options=initial_zoom_levels,
1730 1738
            **kwargs,
1731 1739
        )
1732 1740
        form.add(
wcs/qommon/form.py
2676 2676
        self.map_attributes = {}
2677 2677
        self.map_attributes.update(get_publisher().get_map_attributes())
2678 2678
        self.sync_map_and_address_fields = get_publisher().has_site_option('sync-map-and-address-fields')
2679
        if kwargs.get('initial_zoom') is None:
2680
            kwargs['initial_zoom'] = get_publisher().get_default_zoom_level()
2679 2681
        for attribute in ('initial_zoom', 'min_zoom', 'max_zoom', 'init_with_geoloc'):
2680 2682
            if attribute in kwargs:
2681 2683
                self.map_attributes['data-' + attribute] = kwargs.pop(attribute)
wcs/qommon/publisher.py
803 803
            default_position = '50.84;4.36'
804 804
        return default_position
805 805

  
806
    def get_default_zoom_level(self):
807
        return self.cfg.get('misc', {}).get('default-zoom-level', '13')
808

  
806 809
    def get_map_attributes(self):
807 810
        attrs = {}
808 811
        attrs['data-def-lat'], attrs['data-def-lng'] = self.get_default_position().split(';')
809
-