summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-09-05 13:56:09 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-10-24 12:06:08 +0200
commit575a7fd93e52b750e323cde669e5a4c329ead978 (patch)
treeec9c9767e29588622d0e70c58fcf3bbd2b8e98de
parent7998a1f6d3096b8a6a2d8bdb80d3034a68bc544d (diff)
downloadIshtar-575a7fd93e52b750e323cde669e5a4c329ead978.tar.bz2
Ishtar-575a7fd93e52b750e323cde669e5a4c329ead978.zip
Fix display of QA form. Improve layout of criteria search.
-rw-r--r--archaeological_finds/views.py44
-rw-r--r--ishtar_common/static/js/ishtar.js6
-rw-r--r--ishtar_common/templates/blocks/bs_form_snippet.html19
-rw-r--r--ishtar_common/templates/ishtar/qa_form.html9
-rw-r--r--ishtar_common/views.py50
-rw-r--r--scss/custom.scss18
6 files changed, 83 insertions, 63 deletions
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index 034e1994f..ca575a889 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -35,7 +35,7 @@ from forms import *
from ishtar_common.forms import FinalForm
from ishtar_common.models import IshtarUser, get_current_profile
from ishtar_common.views import get_autocomplete_generic, IshtarMixin, \
- LoginRequiredMixin
+ LoginRequiredMixin, QAItemEditForm
from ishtar_common.views_item import display_item, get_item, show_item, \
revert_item, get_autocomplete_item
from wizards import *
@@ -596,49 +596,7 @@ def reset_wizards(request):
wizard_class.session_reset(request, url_name)
-class QAItemEditForm(IshtarMixin, LoginRequiredMixin, FormView):
- template_name = 'ishtar/qa_form.html'
- model = None
- form_class = None
- form_class_multi = None
-
- def dispatch(self, request, *args, **kwargs):
- assert self.model
- pks = [int(pk) for pk in kwargs.get('pks').split('-')]
- self.items = list(self.model.objects.filter(pk__in=pks))
- if not self.items:
- raise Http404()
-
- # check availability
- if not self.model.QA_EDIT.is_available(
- user=request.user, session=request.session):
- for item in self.items:
- if not self.model.QA_EDIT.is_available(
- user=request.user, session=request.session, obj=item):
- raise Http404()
-
- return super(QAItemEditForm, self).dispatch(request, *args, **kwargs)
-
- def get_form_class(self):
- if len(self.items) > 1:
- return self.form_class_multi
- return self.form_class
-
- def get_form_kwargs(self):
- kwargs = super(QAItemEditForm, self).get_form_kwargs()
- kwargs['items'] = self.items
- return kwargs
-
-
class QAFindForm(QAItemEditForm):
model = models.Find
form_class = QAFindFormSingle
form_class_multi = QAFindFormMulti
-
- def get_success_url(self, basket):
- return reverse('select_itemsinbasket',
- kwargs={'pk': basket})
-
- def form_valid(self, form):
- return HttpResponseRedirect(self.get_success_url(
- form.cleaned_data['basket']))
diff --git a/ishtar_common/static/js/ishtar.js b/ishtar_common/static/js/ishtar.js
index 119229e8d..483da495c 100644
--- a/ishtar_common/static/js/ishtar.js
+++ b/ishtar_common/static/js/ishtar.js
@@ -682,9 +682,9 @@ function update_search_field(){
$('#wizard-form input').each(function(){$(this).val("")});
$("#id_search_vector").val(query);
if (query){
- add_message(query, 'info', "#advanced-search-info", true, false);
+ add_message(query, 'secondary', "#advanced-search-info", true, false);
} else {
- add_message("-", 'info', "#advanced-search-info", true, false);
+ add_message("-", 'secondary', "#advanced-search-info", true, false);
}
enable_save();
}
@@ -776,7 +776,7 @@ var dt_generate_qa_url = function (table, url){
var dt_qa_open = function (url){
long_wait();
$('#modal-dynamic-form').load(url, function(){
- $('#modal-dynamic-form').modal("show");
close_wait();
+ $('#modal-dynamic-form').modal("show");
});
}
diff --git a/ishtar_common/templates/blocks/bs_form_snippet.html b/ishtar_common/templates/blocks/bs_form_snippet.html
index 95b8ac086..f122b33f2 100644
--- a/ishtar_common/templates/blocks/bs_form_snippet.html
+++ b/ishtar_common/templates/blocks/bs_form_snippet.html
@@ -48,22 +48,9 @@
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
+ <div class="form-group col-12" id="advanced-search-info"></div>
</div>
- <div class="modal-body form-row">
- <div class="form-group col-12" id="advanced-search-info">
- </div>
- <div class="form-group col-12">
- <p class="text-center">
- <button type="button"
- class="btn btn-primary advanced-search-valid">
- {% trans "Add" %}</button>
- <button type="button"
- class="btn btn-secondary advanced-search-clear">
- {% trans 'Clear' %}</button>
- <button type="button" class="btn btn-secondary"
- data-dismiss="modal">{% trans 'Close' %}</button>
- </p>
- </div>
+ <div class="modal-body body-scroll">
<hr>
{% endif %}
{% if field.name in form.HEADERS %}
@@ -91,6 +78,8 @@
{% if search and forloop.counter0 >= 1 %}
</div>
+ </div>
+ <div class="modal-footer">
<div class="form-group col-12">
<p class="text-center">
<button type="button"
diff --git a/ishtar_common/templates/ishtar/qa_form.html b/ishtar_common/templates/ishtar/qa_form.html
index 95f8887a8..2df3775ea 100644
--- a/ishtar_common/templates/ishtar/qa_form.html
+++ b/ishtar_common/templates/ishtar/qa_form.html
@@ -3,16 +3,21 @@
<div class="modal-dialog modal-lg modal-dialog-centered">
<div class="modal-content" id='progress-content'>
<div class="modal-header">
- <h2>{{page_name}}</h2>
+ <h2>{{page_name|safe}}</h2>
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
</div>
<form enctype="multipart/form-data" action="." method="post">{% csrf_token %}
- <div class="modal-body">
+ <div class="modal-body body-scroll">
<div class='form'>
{% for error in form.non_field_errors %}
<p>{{ error }}</p>
{% endfor %}
{% bs_form form %}
</div>
+ </div>
+ <div class="modal-footer">
<button type="submit" id="submit_form" name='validate'
value="validate" class="btn btn-success">
{% trans "Modify" %}
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index eed175753..8b22048f2 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -1795,3 +1795,53 @@ class AlertList(JSONResponseMixin, LoginRequiredMixin,
'number': nb}
)
return {'alerts': alerts}
+
+
+class QAItemEditForm(IshtarMixin, LoginRequiredMixin, FormView):
+ template_name = 'ishtar/qa_form.html'
+ model = None
+ form_class = None
+ form_class_multi = None
+
+ def dispatch(self, request, *args, **kwargs):
+ assert self.model
+ pks = [int(pk) for pk in kwargs.get('pks').split('-')]
+ self.items = list(self.model.objects.filter(pk__in=pks))
+ if not self.items:
+ raise Http404()
+
+ # check availability
+ if not self.model.QA_EDIT.is_available(
+ user=request.user, session=request.session):
+ for item in self.items:
+ if not self.model.QA_EDIT.is_available(
+ user=request.user, session=request.session, obj=item):
+ raise Http404()
+
+ return super(QAItemEditForm, self).dispatch(request, *args, **kwargs)
+
+ def get_form_class(self):
+ if len(self.items) > 1:
+ return self.form_class_multi
+ return self.form_class
+
+ def get_form_kwargs(self):
+ kwargs = super(QAItemEditForm, self).get_form_kwargs()
+ kwargs['items'] = self.items
+ return kwargs
+
+ def get_context_data(self, **kwargs):
+ data = super(QAItemEditForm, self).get_context_data(**kwargs)
+ data['page_name'] = u"{} &ndash; {}".format(
+ self.model._meta.verbose_name, self.model.QA_EDIT.text)
+ return data
+
+
+
+ def get_success_url(self, basket):
+ return reverse('select_itemsinbasket',
+ kwargs={'pk': basket})
+
+ def form_valid(self, form):
+ return HttpResponseRedirect(self.get_success_url(
+ form.cleaned_data['basket']))
diff --git a/scss/custom.scss b/scss/custom.scss
index e265b61e7..076522366 100644
--- a/scss/custom.scss
+++ b/scss/custom.scss
@@ -97,6 +97,24 @@ pre {
font-weight: bold;
}
+#modal-advanced-search .modal-header{
+ flex-wrap: wrap;
+ padding-bottom: 0;
+}
+
+#modal-advanced-search .modal-header .alert-secondary{
+ background-color: $white;
+}
+
+.modal-header, .modal-footer{
+ background-color: $gray-200;
+}
+
+.modal-body.body-scroll{
+ max-height: calc(100vh - 200px);
+ overflow-y: auto;
+}
+
.modal-dialog.full {
width: 98%;
height: 98%;