From 1a05ab6a12d24f5c9c27172d924fbdbc9e5ddfbe Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Thu, 6 Sep 2018 18:18:07 +0200 Subject: Quick action: manage ajax form --- ishtar_common/forms.py | 5 ++ ishtar_common/static/js/ishtar.js | 69 +++++++++++++++++++--- ishtar_common/templates/base.html | 3 +- .../templates/blocks/bs_form_snippet.html | 1 + ishtar_common/templates/ishtar/qa_form.html | 31 +++++++++- ishtar_common/views.py | 18 +++--- 6 files changed, 108 insertions(+), 19 deletions(-) (limited to 'ishtar_common') diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index 106b68c14..2e249e472 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -455,6 +455,8 @@ class IshtarForm(forms.Form): if not getattr(profile, profile_key): for field_key in self.PROFILE_FILTER[profile_key]: self.fields.pop(field_key) + if getattr(self, 'confirm', True): + return for field in self.TYPES: self._init_type(field) for k in self.fields: @@ -646,11 +648,14 @@ class QAForm(CustomForm, ManageOldType): def __init__(self, *args, **kwargs): self.items = kwargs.pop('items') + self.confirm = kwargs.pop('confirm') super(QAForm, self).__init__(*args, **kwargs) for k in self.fields.keys(): if self.MULTI and k in self.SINGLE_FIELDS: self.fields.pop(k) continue + if self.confirm: + self.fields[k].widget = forms.HiddenInput() if self.MULTI and k not in self.REPLACE_FIELDS: self.fields[k].label = unicode(self.fields[k].label) + \ unicode(u" - append to existing") diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js index 483da495c..2750efcc2 100644 --- a/ishtar_common/static/js/ishtar.js +++ b/ishtar_common/static/js/ishtar.js @@ -413,7 +413,23 @@ $(document).on("click", '#progress-content', function(){ $('.modal-progress').hide(); }); -function long_wait(){ + +var closed_wait = true; + +function short_wait(check_wait){ + if (check_wait && closed_wait){ + return + } + closed_wait = false; + $('.modal-progress').modal('show'); + $('.progress-1').show('slow'); +} + +function long_wait(check_wait){ + if (check_wait && closed_wait){ + return + } + closed_wait = false; $('.modal-progress').modal('show'); $('.progress-1').show('slow'); setTimeout(function(){ @@ -430,11 +446,12 @@ function long_wait(){ }, 180000); setTimeout(function(){ $('.progress-4').hide('slow'); - long_wait(); + long_wait(true); }, 240000); } function close_wait(){ + closed_wait = true; $('.modal-progress').modal('hide'); if (current_modal){ $('body').addClass('modal-open'); @@ -771,12 +788,48 @@ var dt_generate_qa_url = function (table, url){ } url += value + "/"; return url; -} +}; var dt_qa_open = function (url){ - long_wait(); - $('#modal-dynamic-form').load(url, function(){ - close_wait(); - $('#modal-dynamic-form').modal("show"); + short_wait(); + $.ajax({ + url: url, + cache: false, + success: function(data, textStatus, jqXHR) { + close_wait(); + var text = jqXHR.responseText; + $('#modal-dynamic-form').html(text); + var response = $(text); + var responseScript = response.find("script"); + $.each(responseScript, function(idx, val){ + eval(val.text); + } + ); + $('#modal-dynamic-form').modal("show"); + }, + error: function() { + close_wait(); + } }); -} +}; + +var ajax_post = function(url, data, target, callback){ + $.ajax({ + url : url, + type : "POST", + data : data, + success : function(data) { + close_wait(); + $(target).html(data); + if(callback) callback(); + }, + error : function(xhr,errmsg,err) { + close_wait(); + $(target).html("
Oops! We have encountered an error: " + + errmsg + "
"); + console.log(xhr.status + ": " + xhr.responseText); + if(callback) callback(); + } + }); + +}; diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html index b9270d910..bce02f61d 100644 --- a/ishtar_common/templates/base.html +++ b/ishtar_common/templates/base.html @@ -141,7 +141,8 @@ {% trans "Time to take a coffee?" %} {% trans "Time to take another coffee?" %} - diff --git a/ishtar_common/templates/blocks/bs_form_snippet.html b/ishtar_common/templates/blocks/bs_form_snippet.html index f122b33f2..0f5f9d83d 100644 --- a/ishtar_common/templates/blocks/bs_form_snippet.html +++ b/ishtar_common/templates/blocks/bs_form_snippet.html @@ -12,6 +12,7 @@ {% endif %} {% endfor %} +{% csrf_token %} {% for field in form.visible_fields %} {% if form.SEARCH_AND_SELECT %} {{field}} diff --git a/ishtar_common/templates/ishtar/qa_form.html b/ishtar_common/templates/ishtar/qa_form.html index 2df3775ea..f3a4cf559 100644 --- a/ishtar_common/templates/ishtar/qa_form.html +++ b/ishtar_common/templates/ishtar/qa_form.html @@ -1,30 +1,57 @@ {% load i18n inline_formset table_form %}