From b06b2da7072967fc46cc173df142ed1348b2b709 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sat, 5 Dec 2015 21:53:57 +0100 Subject: [PATCH] manager: always update cell form after a click on the save button (#9215) --- combo/manager/static/js/combo.manager.js | 9 ++++++--- combo/manager/templates/combo/ajax_cell_form.html | 1 + combo/manager/templates/combo/cell_form.html | 2 ++ combo/manager/views.py | 8 ++++++++ tests/test_manager.py | 12 ++++++++++++ 5 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 combo/manager/templates/combo/ajax_cell_form.html diff --git a/combo/manager/static/js/combo.manager.js b/combo/manager/static/js/combo.manager.js index 2e77cfaf..2e286189 100644 --- a/combo/manager/static/js/combo.manager.js +++ b/combo/manager/static/js/combo.manager.js @@ -90,13 +90,16 @@ $(function() { data: $form.serialize(), type: 'POST', beforeSend: function() { $button.attr('disabled', 'disabled'); }, - success: function() { + success: function(data) { $button.attr('disabled', null); - $.getJSON($form.data('label-url'), + $button.parents('form').find('div.cell-form').html(data); + if (data.indexOf('class="errorlist"') == -1) { + $.getJSON($form.data('label-url'), function(data) { $form.parents('div.cell').find('.additional-label i').text(data['label']); } - ); + ); + } } }); return false; diff --git a/combo/manager/templates/combo/ajax_cell_form.html b/combo/manager/templates/combo/ajax_cell_form.html new file mode 100644 index 00000000..572164d0 --- /dev/null +++ b/combo/manager/templates/combo/ajax_cell_form.html @@ -0,0 +1 @@ +{{form.as_p}} diff --git a/combo/manager/templates/combo/cell_form.html b/combo/manager/templates/combo/cell_form.html index fcc115e8..9c8bc5d9 100644 --- a/combo/manager/templates/combo/cell_form.html +++ b/combo/manager/templates/combo/cell_form.html @@ -3,7 +3,9 @@
{% csrf_token %} {% if form %} +
{{ form.as_p }} +
{% else %}

{% trans "There are no options for this cell." %}

{% endif %} diff --git a/combo/manager/views.py b/combo/manager/views.py index b97fe1a3..afd74717 100644 --- a/combo/manager/views.py +++ b/combo/manager/views.py @@ -185,6 +185,8 @@ page_add_cell = PageAddCellView.as_view() class PageEditCellView(UpdateView): + template_name = 'combo/ajax_cell_form.html' + def get_object(self, queryset=None): page_pk = self.kwargs.get('page_pk') cell_reference = self.kwargs.get('cell_reference') @@ -202,6 +204,12 @@ class PageEditCellView(UpdateView): def get_success_url(self): return reverse('combo-manager-page-view', kwargs={'pk': self.kwargs.get('page_pk')}) + def form_valid(self, form): + if self.request.is_ajax(): + self.object = form.save() + return self.form_invalid(form) + return super(PageEditCellView, self).form_valid(form) + page_edit_cell = PageEditCellView.as_view() diff --git a/tests/test_manager.py b/tests/test_manager.py index 245389ab..1ff962a7 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -101,11 +101,23 @@ def test_add_edit_cell(admin_user): assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.body resp.forms[0]['c%s-text' % cells[0].get_reference()].value = 'Hello world' resp = resp.forms[0].submit() + assert resp.status_int == 302 assert resp.location == 'http://localhost:80/manage/pages/1/' resp = app.get('/manage/pages/%s/' % page.id) assert resp.forms[0]['c%s-text' % cells[0].get_reference()].value == 'Hello world' + resp = app.get('/manage/pages/%s/' % page.id) + assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.body + resp.forms[0]['c%s-text' % cells[0].get_reference()].value = 'World Hello' + resp = resp.forms[0].submit(xhr=True) + assert resp.status_int == 200 + assert resp.body.startswith('