visualization: add a duplicate button (#13662)

This commit is contained in:
Benjamin Dauvergne 2020-02-11 23:48:53 +01:00
parent 29dc792b15
commit d0c5e2c529
4 changed files with 31 additions and 0 deletions

View File

@ -15,6 +15,7 @@
{% block actions %}
<a rel="popup" class="button" href="{% url "rename-visualization" pk=object.pk %}">{% trans "Rename" %}</a>
<a rel="popup" class="button" href="{% url "delete-visualization" pk=object.pk %}">{% trans "Delete" %}</a>
<a rel="popup" class="button" href="{% url "save-as-visualization" pk=object.pk %}">{% trans "Save as" %}</a>
<a class="button" href="{% url "visualization-ods" pk=object.pk %}">{% trans "Export as ODS" %}</a>
<a download class="button" href="{% url "export-visualization" pk=object.pk %}">{% trans "Export as JSON" %}</a>
<a href="{{ iframe_url }}" class="button">{% trans "URL for IFRAME" %}</a>

View File

@ -41,4 +41,5 @@ urlpatterns = [
url(r'(?P<pk>\d+)/rename/$', views.rename_visualization, name='rename-visualization'),
url(r'(?P<pk>\d+)/delete/$', views.delete_visualization, name='delete-visualization'),
url(r'(?P<pk>\d+)/export$', views.export_visualization, name='export-visualization'),
url(r'(?P<pk>\d+)/save-as/$', views.save_as_visualization, name='save-as-visualization'),
]

View File

@ -120,6 +120,22 @@ class CreateVisualizationView(views.AuthorizationMixin, CubeMixin, CreateView):
return super(CreateVisualizationView, self).form_valid(form)
class SaveAsVisualizationView(views.AuthorizationMixin, DetailView, CreateView):
model = models.Visualization
form_class = forms.VisualizationForm
template_name = 'bijoe/create_visualization.html'
success_url = '/visualization/{id}/'
def form_valid(self, form):
form.instance.parameters = self.get_object().parameters
return super(SaveAsVisualizationView, self).form_valid(form)
def get_initial(self):
return {
'name': '%s %s' % (self.get_object().name, _('(Copy)'))
}
class VisualizationView(views.AuthorizationMixin, CubeDisplayMixin, DetailView):
model = models.Visualization
template_name = 'bijoe/visualization.html'
@ -408,6 +424,7 @@ create_visualization = CreateVisualizationView.as_view()
delete_visualization = DeleteVisualizationView.as_view()
rename_visualization = RenameVisualization.as_view()
export_visualization = ExportVisualizationView.as_view()
save_as_visualization = SaveAsVisualizationView.as_view()
visualization = VisualizationView.as_view()
visualization_iframe = xframe_options_exempt(VisualizationIframeView.as_view())
visualization_geojson = VisualizationGeoJSONView.as_view()

View File

@ -186,3 +186,15 @@ def test_import_visualization(schema1, app, admin, visualization):
resp = resp.form.submit().follow()
assert '3 visualizations have been created. No visualization updated.' in resp.text
assert Visualization.objects.count() == 3
def test_save_as(schema1, app, admin, visualization):
login(app, admin)
resp = app.get('/visualization/%s/' % visualization.id)
resp = resp.click('Save as')
assert resp.form['name'].value == 'test (Copy)'
resp.form['name'] = 'zob'
resp = resp.form.submit().follow()
assert Visualization.objects.count() == 2
new_visualization = Visualization.objects.get(name='zob')
assert new_visualization.parameters == visualization.parameters