1428 |
1428 |
return r.getvalue()
|
1429 |
1429 |
|
1430 |
1430 |
|
1431 |
|
class ItemField(WidgetField):
|
|
1431 |
class MapOptionsMixin:
|
|
1432 |
initial_zoom = None
|
|
1433 |
min_zoom = None
|
|
1434 |
max_zoom = None
|
|
1435 |
|
|
1436 |
def fill_zoom_admin_form(self, form, **kwargs):
|
|
1437 |
# 0: whole world, 9: wide area, 11: area, 13: town, 16: small road
|
|
1438 |
zoom_levels = [(None, '---'),
|
|
1439 |
('0', _('Whole world')),
|
|
1440 |
('6', _('Country')),
|
|
1441 |
('9', _('Wide area')),
|
|
1442 |
('11', _('Area')),
|
|
1443 |
('13', _('Town')),
|
|
1444 |
('16', _('Small road')),
|
|
1445 |
('18', _('Neighbourhood')),
|
|
1446 |
('19', _('Ant')),]
|
|
1447 |
form.add(SingleSelectWidget, 'initial_zoom', title=_('Initial zoom level'),
|
|
1448 |
value=self.initial_zoom or '13', options=zoom_levels, **kwargs)
|
|
1449 |
form.add(SingleSelectWidget, 'min_zoom', title=_('Minimal zoom level'),
|
|
1450 |
value=self.min_zoom, options=zoom_levels, required=False, **kwargs)
|
|
1451 |
form.add(SingleSelectWidget, 'max_zoom', title=_('Maximal zoom level'),
|
|
1452 |
value=self.max_zoom, options=zoom_levels, required=False, **kwargs)
|
|
1453 |
|
|
1454 |
def check_zoom_admin_form(self, form):
|
|
1455 |
initial_zoom = form.get_widget('initial_zoom').parse()
|
|
1456 |
min_zoom = form.get_widget('min_zoom').parse()
|
|
1457 |
max_zoom = form.get_widget('max_zoom').parse()
|
|
1458 |
if min_zoom and max_zoom:
|
|
1459 |
if int(min_zoom) > int(max_zoom):
|
|
1460 |
form.get_widget('min_zoom').set_error(
|
|
1461 |
_('Minimal zoom level cannot be greater than maximal zoom level.'))
|
|
1462 |
if (initial_zoom and min_zoom and int(initial_zoom) < int(min_zoom)) or (
|
|
1463 |
(initial_zoom and max_zoom and int(initial_zoom) > int(max_zoom))):
|
|
1464 |
form.get_widget('initial_zoom').set_error(
|
|
1465 |
_('Initial zoom level must be between minimal and maximal zoom levels.'))
|
|
1466 |
|
|
1467 |
|
|
1468 |
class ItemField(WidgetField, MapOptionsMixin):
|
1432 |
1469 |
key = 'item'
|
1433 |
1470 |
description = N_('List')
|
1434 |
1471 |
|
... | ... | |
1628 |
1665 |
WidgetField.fill_admin_form(self, form)
|
1629 |
1666 |
form.add(CheckboxWidget, 'in_filters', title=_('Display in default filters'),
|
1630 |
1667 |
value=self.in_filters, advanced=True)
|
1631 |
|
options = [('list', _('List')),
|
1632 |
|
('radio', _('Radio buttons')),
|
1633 |
|
('autocomplete', _('Autocomplete')),
|
|
1668 |
options = [('list', _('List'), 'list'),
|
|
1669 |
('radio', _('Radio buttons'), 'radio'),
|
|
1670 |
('autocomplete', _('Autocomplete'), 'autocomplete'),
|
|
1671 |
('map', _('Map (requires geographical data)'), 'map'),
|
1634 |
1672 |
]
|
1635 |
1673 |
form.add(RadiobuttonsWidget, 'display_mode',
|
1636 |
1674 |
title=_('Display Mode'),
|
1637 |
1675 |
options=options,
|
1638 |
|
value=self.display_mode)
|
|
1676 |
value=self.display_mode,
|
|
1677 |
attrs={'data-dynamic-display-parent': 'true'})
|
1639 |
1678 |
real_data_source = data_sources.get_real(self.data_source)
|
1640 |
1679 |
form.add(RadiobuttonsWidget, 'data_mode',
|
1641 |
1680 |
title=_('Data'),
|
... | ... | |
1663 |
1702 |
title=_('Display disabled items'),
|
1664 |
1703 |
value=self.display_disabled_items,
|
1665 |
1704 |
advanced=not(self.display_disabled_items))
|
|
1705 |
self.fill_zoom_admin_form(form,
|
|
1706 |
attrs={'data-dynamic-display-child-of': 'display_mode',
|
|
1707 |
'data-dynamic-display-value': 'map'})
|
1666 |
1708 |
|
1667 |
1709 |
def get_admin_attributes(self):
|
1668 |
1710 |
return WidgetField.get_admin_attributes(self) + ['items',
|
1669 |
1711 |
'display_mode', 'data_source', 'in_filters', 'anonymise',
|
1670 |
|
'display_disabled_items']
|
|
1712 |
'display_disabled_items', 'initial_zoom', 'min_zoom', 'max_zoom']
|
1671 |
1713 |
|
1672 |
1714 |
def check_admin_form(self, form):
|
1673 |
1715 |
data_mode = form.get_widget('data_mode').parse()
|
... | ... | |
1684 |
1726 |
data_source_type.set_value(None)
|
1685 |
1727 |
data_source_type.transfer_form_value(get_request())
|
1686 |
1728 |
|
|
1729 |
self.check_zoom_admin_form(form)
|
|
1730 |
|
1687 |
1731 |
def stats(self, values):
|
1688 |
1732 |
return item_items_stats(self, values)
|
1689 |
1733 |
|
... | ... | |
2396 |
2440 |
register_field_class(TableRowsField)
|
2397 |
2441 |
|
2398 |
2442 |
|
2399 |
|
class MapField(WidgetField):
|
|
2443 |
class MapField(WidgetField, MapOptionsMixin):
|
2400 |
2444 |
key = 'map'
|
2401 |
2445 |
description = N_('Map')
|
2402 |
2446 |
|
2403 |
|
initial_zoom = None
|
2404 |
|
min_zoom = None
|
2405 |
|
max_zoom = None
|
2406 |
2447 |
default_position = None
|
2407 |
2448 |
init_with_geoloc = False
|
2408 |
2449 |
|
... | ... | |
2412 |
2453 |
|
2413 |
2454 |
def fill_admin_form(self, form):
|
2414 |
2455 |
WidgetField.fill_admin_form(self, form)
|
2415 |
|
# 0: whole world, 9: wide area, 11: area, 13: town, 16: small road
|
2416 |
|
zoom_levels = [(None, '---'),
|
2417 |
|
('0', _('Whole world')),
|
2418 |
|
('6', _('Country')),
|
2419 |
|
('9', _('Wide area')),
|
2420 |
|
('11', _('Area')),
|
2421 |
|
('13', _('Town')),
|
2422 |
|
('16', _('Small road')),
|
2423 |
|
('18', _('Neighbourhood')),
|
2424 |
|
('19', _('Ant')),]
|
2425 |
|
form.add(SingleSelectWidget, 'initial_zoom', title=_('Initial zoom level'),
|
2426 |
|
value=self.initial_zoom or '13', options=zoom_levels)
|
2427 |
|
form.add(SingleSelectWidget, 'min_zoom', title=_('Minimal zoom level'),
|
2428 |
|
value=self.min_zoom, options=zoom_levels, required=False)
|
2429 |
|
form.add(SingleSelectWidget, 'max_zoom', title=_('Maximal zoom level'),
|
2430 |
|
value=self.max_zoom, options=zoom_levels, required=False)
|
|
2456 |
self.fill_zoom_admin_form(form)
|
2431 |
2457 |
form.add(MapWidget, 'default_position', title=_('Initial Position'),
|
2432 |
2458 |
value=self.default_position, default_zoom='9', required=False)
|
2433 |
2459 |
form.add(CheckboxWidget, 'init_with_geoloc',
|
... | ... | |
2435 |
2461 |
value=self.init_with_geoloc, required=False)
|
2436 |
2462 |
|
2437 |
2463 |
def check_admin_form(self, form):
|
2438 |
|
initial_zoom = form.get_widget('initial_zoom').parse()
|
2439 |
|
min_zoom = form.get_widget('min_zoom').parse()
|
2440 |
|
max_zoom = form.get_widget('max_zoom').parse()
|
2441 |
|
if min_zoom and max_zoom:
|
2442 |
|
if int(min_zoom) > int(max_zoom):
|
2443 |
|
form.get_widget('min_zoom').set_error(
|
2444 |
|
_('Minimal zoom level cannot be greater than maximal zoom level.'))
|
2445 |
|
if (initial_zoom and min_zoom and int(initial_zoom) < int(min_zoom)) or (
|
2446 |
|
(initial_zoom and max_zoom and int(initial_zoom) > int(max_zoom))):
|
2447 |
|
form.get_widget('initial_zoom').set_error(
|
2448 |
|
_('Initial zoom level must be between minimal and maximal zoom levels.'))
|
|
2464 |
self.check_zoom_admin_form(form)
|
2449 |
2465 |
|
2450 |
2466 |
def get_admin_attributes(self):
|
2451 |
2467 |
return WidgetField.get_admin_attributes(self) + ['initial_zoom',
|