- Fix the document print view by switching it to a GET view instead.

- Add support for passing the form target.
- Update ajaxForm to emulate '_blank' form targets.

Signed-off-by: Eric Riggs <ericriggs42@gmail.com>
This commit is contained in:
Eric Riggs
2018-03-07 16:55:05 -04:00
committed by Roberto Rosario
parent 410f8fed76
commit c8911b901e
4 changed files with 44 additions and 24 deletions

View File

@@ -168,11 +168,19 @@ PartialNavigation.prototype.setupAjaxForm = function () {
console.log('>> ajaxForm.beforeSubmit.$form.target: ' + $form.attr('action')); console.log('>> ajaxForm.beforeSubmit.$form.target: ' + $form.attr('action'));
var uri = new URI(location); var uri = new URI(location);
var uriFragment = uri.fragment(); var uriFragment = uri.fragment();
console.log('>>ajaxForm.$form.target.uriFragment:' + uriFragment);
var url = $form.attr('action') || uriFragment; var url = $form.attr('action') || uriFragment;
console.log('>>ajaxForm.$form.target.uriFragment:' + uriFragment);
options.url = url; options.url = url;
if ($form.attr('target') == '_blank') {
window.open(
$form.attr('action') + '?' + decodeURIComponent($form.serialize())
);
return false;
}
console.log('>>ajaxForm.url:' + url); console.log('>>ajaxForm.url:' + url);
}, },
dataType: 'html', dataType: 'html',

View File

@@ -10,9 +10,9 @@
<div class="well"> <div class="well">
{% if form.is_multipart %} {% if form.is_multipart %}
<form name="{{ form.prefix }}" enctype="multipart/form-data" method="{{ submit_method|default:'post' }}" action="{{ form_action }}" class="{{ form_class|default:'' }}"> <form action="{{ form_action }}" class="{{ form_class|default:'' }}" enctype="multipart/form-data" method="{{ submit_method|default:'post' }}" name="{{ form.prefix }}" target="{{ submit_target|default:'_self' }}">
{% else %} {% else %}
<form name="{{ form.prefix }}" method="{{ submit_method|default:'post' }}" action="{{ form_action }}" class="{{ form_class|default:'' }}"> <form action="{{ form_action }}" class="{{ form_class|default:'' }}" method="{{ submit_method|default:'post' }}" name="{{ form.prefix }}" target="{{ submit_target|default:'_self' }}">
{% endif %} {% endif %}
{{ wizard.management_form }} {{ wizard.management_form }}

View File

@@ -1,4 +1,4 @@
{% extends 'appearance/base.html' %} {% extends 'appearance/base_plain.html' %}
{% block title %}{{ title }}{% endblock title %} {% block title %}{{ title }}{% endblock title %}

View File

@@ -717,38 +717,50 @@ class DocumentTransformationsCloneView(FormView):
class DocumentPrint(FormView): class DocumentPrint(FormView):
form_class = DocumentPrintForm form_class = DocumentPrintForm
def form_valid(self, form): def dispatch(self, request, *args, **kwargs):
instance = self.get_object() self.page_group = self.request.GET.get('page_group')
self.page_range = self.request.GET.get('page_range')
return super(DocumentPrint, self).dispatch(request, *args, **kwargs)
if form.cleaned_data['page_group'] == PAGE_RANGE_RANGE: def get(self, request, *args, **kwargs):
page_range = form.cleaned_data['page_range']
if page_range: if not self.page_group and not self.page_range:
page_range = parse_range(page_range) return super(DocumentPrint, self).get(request, *args, **kwargs)
pages = instance.pages.filter(page_number__in=page_range) else:
instance = self.get_object()
if self.page_group == PAGE_RANGE_RANGE:
if self.page_range:
page_range = parse_range(self.page_range)
pages = instance.pages.filter(page_number__in=page_range)
else:
pages = instance.pages.all()
else: else:
pages = instance.pages.all() pages = instance.pages.all()
else:
pages = instance.pages.all()
context = self.get_context_data() context = self.get_context_data()
context.update( context.update(
{ {
'appearance_type': 'plain', 'appearance_type': 'plain',
'pages': pages, 'pages': pages,
'size': setting_print_size.value, 'size': setting_print_size.value,
} }
) )
return self.render_to_response(context=context) return self.render_to_response(context=context)
def get_extra_context(self): def get_extra_context(self):
instance = self.get_object() instance = self.get_object()
context = { context = {
'form_action': reverse(
'documents:document_print', args=(instance.pk,)
),
'object': instance, 'object': instance,
'submit_label': _('Submit'), 'submit_label': _('Submit'),
'submit_method': 'GET',
'submit_target': '_blank',
'title': _('Print: %s') % instance, 'title': _('Print: %s') % instance,
} }
@@ -767,7 +779,7 @@ class DocumentPrint(FormView):
return instance return instance
def get_template_names(self): def get_template_names(self):
if self.request.method == 'POST': if self.page_group or self.page_range:
return ('documents/document_print.html',) return ('documents/document_print.html',)
else: else:
return (self.template_name,) return (self.template_name,)