0002-visualization-add-a-duplicate-button-39637.patch
bijoe/templates/bijoe/visualization.html | ||
---|---|---|
15 | 15 |
{% block actions %} |
16 | 16 |
<a rel="popup" class="button" href="{% url "rename-visualization" pk=object.pk %}">{% trans "Rename" %}</a> |
17 | 17 |
<a rel="popup" class="button" href="{% url "delete-visualization" pk=object.pk %}">{% trans "Delete" %}</a> |
18 |
<a rel="popup" href="{% url "save-as-visualization" pk=object.pk %}" title="{{ visualization.title }}" class="button">{% trans "Duplicate" %}</a> |
|
18 | 19 |
<a class="button" href="{% url "visualization-ods" pk=object.pk %}">{% trans "Export as ODS" %}</a> |
19 | 20 |
<a download class="button" href="{% url "export-visualization" pk=object.pk %}">{% trans "Export as JSON" %}</a> |
20 | 21 |
<a href="{{ iframe_url }}" class="button">{% trans "URL for IFRAME" %}</a> |
bijoe/visualization/urls.py | ||
---|---|---|
41 | 41 |
url(r'(?P<pk>\d+)/rename/$', views.rename_visualization, name='rename-visualization'), |
42 | 42 |
url(r'(?P<pk>\d+)/delete/$', views.delete_visualization, name='delete-visualization'), |
43 | 43 |
url(r'(?P<pk>\d+)/export$', views.export_visualization, name='export-visualization'), |
44 |
url(r'(?P<pk>\d+)/save-as/$', views.save_as_visualization, name='save-as-visualization'), |
|
44 | 45 |
] |
bijoe/visualization/views.py | ||
---|---|---|
120 | 120 |
return super(CreateVisualizationView, self).form_valid(form) |
121 | 121 | |
122 | 122 | |
123 |
class SaveAsVisualizationView(views.AuthorizationMixin, DetailView, CreateView): |
|
124 |
model = models.Visualization |
|
125 |
form_class = forms.VisualizationForm |
|
126 |
template_name = 'bijoe/create_visualization.html' |
|
127 |
success_url = '/visualization/{id}/' |
|
128 | ||
129 |
def form_valid(self, form): |
|
130 |
form.instance.parameters = self.get_object().parameters |
|
131 |
return super(SaveAsVisualizationView, self).form_valid(form) |
|
132 | ||
133 |
def get_initial(self): |
|
134 |
return { |
|
135 |
'name': '%s %s' % (self.object.name, _('(Copy)')) |
|
136 |
} |
|
137 | ||
138 | ||
123 | 139 |
class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView): |
124 | 140 |
model = models.Visualization |
125 | 141 |
template_name = 'bijoe/visualization.html' |
... | ... | |
408 | 424 |
delete_visualization = DeleteVisualizationView.as_view() |
409 | 425 |
rename_visualization = RenameVisualization.as_view() |
410 | 426 |
export_visualization = ExportVisualizationView.as_view() |
427 |
save_as_visualization = SaveAsVisualizationView.as_view() |
|
411 | 428 |
visualization = VisualizationView.as_view() |
412 | 429 |
visualization_iframe = xframe_options_exempt(VisualizationIframeView.as_view()) |
413 | 430 |
visualization_geojson = VisualizationGeoJSONView.as_view() |
tests/test_views.py | ||
---|---|---|
186 | 186 |
resp = resp.form.submit().follow() |
187 | 187 |
assert '3 visualizations have been created. No visualization updated.' in resp.text |
188 | 188 |
assert Visualization.objects.count() == 3 |
189 | ||
190 | ||
191 |
def test_save_as(schema1, app, admin, visualization): |
|
192 |
login(app, admin) |
|
193 |
resp = app.get('/visualization/%s/' % visualization.id) |
|
194 |
resp = resp.click('Duplicate') |
|
195 |
resp.form['name'] = 'zob' |
|
196 |
resp = resp.form.submit().follow() |
|
197 |
assert Visualization.objects.count() == 2 |
|
198 |
new_visualization = Visualization.objects.get(name='zob') |
|
199 |
assert new_visualization.parameters == visualization.parameters |
|
189 |
- |