0001-maps-move-layer-request-parameter-options-to-separat.patch
combo/apps/maps/forms.py | ||
---|---|---|
37 | 37 | |
38 | 38 |
class Meta: |
39 | 39 |
model = MapLayer |
40 |
exclude = ('kind',) |
|
40 |
exclude = ( |
|
41 |
'kind', |
|
42 |
'include_user_identifier', |
|
43 |
'geojson_query_parameter', |
|
44 |
'geojson_accepts_circle_param', |
|
45 |
) |
|
41 | 46 |
widgets = { |
42 | 47 |
'marker_colour': ColourOrTextInput, |
43 | 48 |
'icon_colour': forms.TextInput(attrs={'type': 'color'}), |
... | ... | |
49 | 54 |
# new instance, delete some fields |
50 | 55 |
del self.fields['slug'] |
51 | 56 |
del self.fields['cache_duration'] |
52 |
del self.fields['include_user_identifier'] |
|
53 | 57 |
else: |
54 | 58 |
# new widget for icon field |
55 | 59 |
self.fields['icon'].widget = IconRadioSelect() |
... | ... | |
65 | 69 |
'icon', |
66 | 70 |
'icon_colour', |
67 | 71 |
'cache_duration', |
68 |
'include_user_identifier', |
|
69 |
'geojson_query_parameter', |
|
70 |
'geojson_accepts_circle_param', |
|
71 | 72 |
] |
72 | 73 |
for field in todelete_fields: |
73 | 74 |
if field in self.fields: |
... | ... | |
83 | 84 |
return cleaned_data |
84 | 85 | |
85 | 86 | |
87 |
class MapLayerRequestParametersForm(forms.ModelForm): |
|
88 |
class Meta: |
|
89 |
model = MapLayer |
|
90 |
fields = ('include_user_identifier', 'geojson_query_parameter', 'geojson_accepts_circle_param') |
|
91 | ||
92 | ||
86 | 93 |
class MapLayerOptionsForm(forms.ModelForm): |
87 | 94 |
class Meta: |
88 | 95 |
model = MapLayerOptions |
combo/apps/maps/manager_views.py | ||
---|---|---|
22 | 22 | |
23 | 23 |
from combo.data.models import CellBase, PageSnapshot |
24 | 24 | |
25 |
from .forms import MapLayerForm, MapLayerOptionsForm |
|
25 |
from .forms import MapLayerForm, MapLayerOptionsForm, MapLayerRequestParametersForm
|
|
26 | 26 |
from .models import Map, MapLayer, MapLayerOptions |
27 | 27 | |
28 | 28 | |
... | ... | |
56 | 56 |
template_name = 'maps/map_layer_form.html' |
57 | 57 | |
58 | 58 | |
59 |
class LayerEditRequestParametersView(MapLayerMixin, UpdateView): |
|
60 |
form_class = MapLayerRequestParametersForm |
|
61 |
template_name = 'maps/map_layer_request_parameters_form.html' |
|
62 | ||
63 |
def get_success_url(self): |
|
64 |
return reverse('maps-manager-layer-edit', kwargs={'slug': self.object.slug}) |
|
65 | ||
66 | ||
59 | 67 |
class LayerDeleteView(MapLayerMixin, DeleteView): |
60 | 68 |
template_name = 'maps/map_layer_confirm_delete.html' |
61 | 69 |
combo/apps/maps/templates/maps/map_layer_form.html | ||
---|---|---|
4 | 4 |
{% block appbar %} |
5 | 5 |
{% if object.id %} |
6 | 6 |
<h2>{% trans "Edit Map Layer" %}</h2> |
7 |
{% if object.kind == 'geojson' %} |
|
8 |
<span class="actions"> |
|
9 |
<a rel="popup" href="{% url 'maps-manager-layer-edit-request-parameters' slug=object.slug %}">{% trans 'Request parameters' %}</a> |
|
10 |
</span> |
|
11 |
{% endif %} |
|
7 | 12 |
{% else %} |
8 | 13 |
<h2>{% trans "New Map Layer" %}</h2> |
9 | 14 |
{% endif %} |
... | ... | |
11 | 16 | |
12 | 17 |
{% block breadcrumb %} |
13 | 18 |
{{ block.super }} |
14 |
<a href="{% url 'maps-manager-homepage' %}">{% trans 'Maps' %}</a> |
|
19 |
{% if object.id %} |
|
20 |
<a href="{% url 'maps-manager-layer-edit' slug=object.slug %}">{% trans 'Edit Map Layer' %}</a> |
|
21 |
{% else %} |
|
22 |
<a href="#">{% trans "New Map Layer" %}</a> |
|
23 |
{% endif %} |
|
15 | 24 |
{% endblock %} |
16 | 25 | |
17 | 26 |
{% block content %} |
combo/apps/maps/templates/maps/map_layer_request_parameters_form.html | ||
---|---|---|
1 |
{% extends "maps/map_layer_form.html" %} |
|
2 |
{% load i18n %} |
|
3 | ||
4 |
{% block appbar %} |
|
5 |
<h2>{% trans "Edit request parameters" %}</h2> |
|
6 |
{% endblock %} |
|
7 | ||
8 |
{% block breadcrumb %} |
|
9 |
{{ block.super }} |
|
10 |
<a rel="popup" href="{% url 'maps-manager-layer-edit-request-parameters' slug=object.slug %}">{% trans "Edit request parameters" %}</a> |
|
11 |
{% endblock %} |
combo/apps/maps/urls.py | ||
---|---|---|
33 | 33 |
manager_views.LayerEditView.as_view(), |
34 | 34 |
name='maps-manager-layer-edit', |
35 | 35 |
), |
36 |
url( |
|
37 |
r'^layers/(?P<slug>[\w-]+)/edit/request-parameters/$', |
|
38 |
manager_views.LayerEditRequestParametersView.as_view(), |
|
39 |
name='maps-manager-layer-edit-request-parameters', |
|
40 |
), |
|
36 | 41 |
url( |
37 | 42 |
r'^layers/(?P<slug>[\w-]+)/delete/$', |
38 | 43 |
manager_views.LayerDeleteView.as_view(), |
tests/test_maps_manager.py | ||
---|---|---|
53 | 53 |
resp = resp.click('New GeoJSON layer') |
54 | 54 |
assert 'slug' not in resp.context['form'].fields |
55 | 55 |
assert 'cache_duration' not in resp.context['form'].fields |
56 |
assert 'include_user_identifier' not in resp.context['form'].fields |
|
57 | 56 |
assert 'tiles_template_url' not in resp.context['form'].fields |
58 | 57 |
assert 'tiles_attribution' not in resp.context['form'].fields |
59 | 58 |
assert 'tiles_default' not in resp.context['form'].fields |
... | ... | |
64 | 63 |
resp.form['icon'] = 'bicycle' |
65 | 64 |
assert resp.form['icon_colour'].value == '#000000' |
66 | 65 |
resp.form['icon_colour'] = '#FFFFFF' |
67 |
resp.form['geojson_query_parameter'] = 'foobar' |
|
68 |
resp.form['geojson_accepts_circle_param'] = True |
|
69 | 66 |
resp = resp.forms[0].submit() |
70 | 67 |
assert resp.location.endswith('/manage/maps/') |
71 | 68 |
assert MapLayer.objects.count() == 1 |
72 | 69 |
layer = MapLayer.objects.get() |
73 | 70 |
assert layer.label == 'Test' |
74 | 71 |
assert layer.slug == 'test' |
75 |
assert layer.geojson_query_parameter == 'foobar' |
|
76 |
assert layer.geojson_accepts_circle_param is True |
|
77 | 72 |
assert layer.kind == 'geojson' |
78 | 73 | |
79 | 74 | |
... | ... | |
83 | 78 |
resp = resp.click('New tiles layer') |
84 | 79 |
assert 'slug' not in resp.context['form'].fields |
85 | 80 |
assert 'cache_duration' not in resp.context['form'].fields |
86 |
assert 'include_user_identifier' not in resp.context['form'].fields |
|
87 | 81 |
assert 'geojson_url' not in resp.context['form'].fields |
88 | 82 |
assert 'marker_colour' not in resp.context['form'].fields |
89 | 83 |
assert 'icon' not in resp.context['form'].fields |
90 | 84 |
assert 'icon_colour' not in resp.context['form'].fields |
91 |
assert 'geojson_query_parameter' not in resp.context['form'].fields |
|
92 |
assert 'geojson_accepts_circle_param' not in resp.context['form'].fields |
|
93 | 85 |
resp.forms[0]['label'] = 'Test' |
94 | 86 |
resp.forms[0]['tiles_template_url'] = 'http://somedomain.com/blabla/{z}/{x}/{y}{r}.png' |
95 | 87 |
resp.forms[0]['tiles_attribution'] = 'Foo bar' |
... | ... | |
138 | 130 |
layer.refresh_from_db() |
139 | 131 |
assert layer.geojson_url == 'http://example.net/new_geojson' |
140 | 132 | |
133 |
resp = resp.follow().click('Test') |
|
134 |
resp = resp.click('Request parameters') |
|
135 |
resp.form['geojson_query_parameter'] = 'foobar' |
|
136 |
resp.form['geojson_accepts_circle_param'] = True |
|
137 |
resp.form['include_user_identifier'] = True |
|
138 |
resp = resp.form.submit() |
|
139 |
assert resp.location.endswith('/manage/maps/layers/%s/edit/' % layer.slug) |
|
140 |
layer.refresh_from_db() |
|
141 |
assert layer.geojson_query_parameter == 'foobar' |
|
142 |
assert layer.geojson_accepts_circle_param is True |
|
143 |
assert layer.include_user_identifier is True |
|
144 | ||
141 | 145 | |
142 | 146 |
def test_edit_tiles_layer(app, admin_user, tiles_layer): |
143 | 147 |
app = login(app) |
144 | 148 |
resp = app.get('/manage/maps/', status=200) |
145 | 149 |
resp = resp.click('Test') |
146 | 150 |
assert 'cache_duration' not in resp.context['form'] |
147 |
assert 'include_user_identifier' not in resp.context['form'] |
|
148 | 151 |
assert 'geojson_url' not in resp.context['form'] |
149 | 152 |
assert 'marker_colour' not in resp.context['form'] |
150 | 153 |
assert 'icon' not in resp.context['form'] |
151 | 154 |
assert 'icon_colour' not in resp.context['form'] |
155 |
assert 'Request parameters' not in resp.text |
|
152 | 156 |
resp.forms[0]['tiles_default'] = False |
153 | 157 |
resp = resp.forms[0].submit() |
154 | 158 |
assert resp.location.endswith('/manage/maps/') |
155 |
- |