Projet

Général

Profil

0001-manager-always-update-cell-form-after-a-click-on-the.patch

Frédéric Péters, 05 décembre 2015 22:14

Télécharger (4,56 ko)

Voir les différences:

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
combo/manager/static/js/combo.manager.js
90 90
         data: $form.serialize(),
91 91
         type: 'POST',
92 92
         beforeSend: function() { $button.attr('disabled', 'disabled'); },
93
         success: function() {
93
         success: function(data) {
94 94
            $button.attr('disabled', null);
95
            $.getJSON($form.data('label-url'),
95
            $button.parents('form').find('div.cell-form').html(data);
96
            if (data.indexOf('class="errorlist"') == -1) {
97
              $.getJSON($form.data('label-url'),
96 98
                function(data) {
97 99
                    $form.parents('div.cell').find('.additional-label i').text(data['label']);
98 100
                }
99
            );
101
              );
102
            }
100 103
         }
101 104
     });
102 105
     return false;
combo/manager/templates/combo/ajax_cell_form.html
1
{{form.as_p}}
combo/manager/templates/combo/cell_form.html
3 3
<form action="{{ url }}" method="post" data-label-url="{% url 'combo-manager-page-get-additional-label' page_pk=page.id cell_reference=cell.get_reference %}">
4 4
{% csrf_token %}
5 5
{% if form %}
6
  <div class="cell-form">
6 7
  {{ form.as_p }}
8
  </div>
7 9
{% else %}
8 10
  <p>{% trans "There are no options for this cell." %}</p>
9 11
{% endif %}
combo/manager/views.py
185 185

  
186 186

  
187 187
class PageEditCellView(UpdateView):
188
    template_name = 'combo/ajax_cell_form.html'
189

  
188 190
    def get_object(self, queryset=None):
189 191
        page_pk = self.kwargs.get('page_pk')
190 192
        cell_reference = self.kwargs.get('cell_reference')
......
202 204
    def get_success_url(self):
203 205
        return reverse('combo-manager-page-view', kwargs={'pk': self.kwargs.get('page_pk')})
204 206

  
207
    def form_valid(self, form):
208
        if self.request.is_ajax():
209
            self.object = form.save()
210
            return self.form_invalid(form)
211
        return super(PageEditCellView, self).form_valid(form)
212

  
205 213
page_edit_cell = PageEditCellView.as_view()
206 214

  
207 215

  
tests/test_manager.py
101 101
    assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.body
102 102
    resp.forms[0]['c%s-text' % cells[0].get_reference()].value = 'Hello world'
103 103
    resp = resp.forms[0].submit()
104
    assert resp.status_int == 302
104 105
    assert resp.location == 'http://localhost:80/manage/pages/1/'
105 106

  
106 107
    resp = app.get('/manage/pages/%s/' % page.id)
107 108
    assert resp.forms[0]['c%s-text' % cells[0].get_reference()].value == 'Hello world'
108 109

  
110
    resp = app.get('/manage/pages/%s/' % page.id)
111
    assert ('data-cell-reference="%s"' % cells[0].get_reference()) in resp.body
112
    resp.forms[0]['c%s-text' % cells[0].get_reference()].value = 'World Hello'
113
    resp = resp.forms[0].submit(xhr=True)
114
    assert resp.status_int == 200
115
    assert resp.body.startswith('<p><label')
116

  
117
    resp = app.get('/manage/pages/%s/' % page.id)
118
    assert resp.forms[0]['c%s-text' % cells[0].get_reference()].value == 'World Hello'
119

  
120

  
109 121
def test_logout(admin_user):
110 122
    app = login(TestApp(application))
111 123
    app.get('/logout/')
112
-