mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Updated modal form code
- Modal form template now uses multipart-data (to allow file uploads) - Cleaned modal_form.js code (split into separate functions)
This commit is contained in:
parent
9311164825
commit
de176ecac9
@ -97,8 +97,77 @@ function launchDeleteForm(modal, url, options = {}) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function injectModalForm(modal, form_html) {
|
||||||
|
// Inject the form data into the modal window
|
||||||
|
$(modal).find('.modal-form-content').html(form_html);
|
||||||
|
|
||||||
|
// Attach to any 'select' inputs on the modal
|
||||||
|
// Provide search filtering of dropdown items
|
||||||
|
$(modal + ' .select').select2({
|
||||||
|
dropdownParent: $(modal),
|
||||||
|
dropdownAutoWidth: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleModalForm(modal, url, options) {
|
||||||
|
|
||||||
|
var form = $(modal).find('.js-modal-form');
|
||||||
|
|
||||||
|
var _form = $(modal).find(".js-modal-form");
|
||||||
|
|
||||||
|
form.ajaxForm({
|
||||||
|
url: url,
|
||||||
|
dataType: 'json',
|
||||||
|
type: 'post'
|
||||||
|
});
|
||||||
|
|
||||||
|
form.submit(function() {
|
||||||
|
alert('form submit');
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
$(modal).on('click', '#modal-form-submit', function() {
|
||||||
|
$(modal).find('.js-modal-form').ajaxSubmit({
|
||||||
|
url: url,
|
||||||
|
// POST was successful
|
||||||
|
success: function(response, status, xhr, f) {
|
||||||
|
if ('form_valid' in response) {
|
||||||
|
// Form data was validated correctly
|
||||||
|
if (response.form_valid) {
|
||||||
|
$(modal).modal('hide');
|
||||||
|
afterForm(response, options);
|
||||||
|
}
|
||||||
|
// Form was returned, invalid!
|
||||||
|
else {
|
||||||
|
if (response.html_form) {
|
||||||
|
injectModalForm(modal, response.html_form);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
alert('HTML form data missing from server response');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(modal).modal('hide');
|
||||||
|
afterForm(response, options);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
error: function(xhr, ajaxOptions, thrownError) {
|
||||||
|
alert('Error posting form data:\n' + thrownError);
|
||||||
|
$(modal).modal('hide');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* launchModalForm
|
||||||
|
* Opens a model window and fills it with a requested form
|
||||||
|
* If the form is loaded successfully, calls handleModalForm
|
||||||
|
*/
|
||||||
function launchModalForm(modal, url, options = {}) {
|
function launchModalForm(modal, url, options = {}) {
|
||||||
|
|
||||||
|
// Ensure the modal view scrolls to the top of the loaded form
|
||||||
$(modal).on('shown.bs.modal', function () {
|
$(modal).on('shown.bs.modal', function () {
|
||||||
$(modal + ' .modal-form-content').scrollTop(0);
|
$(modal + ' .modal-form-content').scrollTop(0);
|
||||||
});
|
});
|
||||||
@ -108,12 +177,14 @@ function launchModalForm(modal, url, options = {}) {
|
|||||||
if (event.keyCode == 13) {
|
if (event.keyCode == 13) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
|
// Simulate a click on the 'Submit' button
|
||||||
$(modal).find("#modal-form-submit").click();
|
$(modal).find("#modal-form-submit").click();
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Form the ajax request to retrieve the django form data
|
||||||
ajax_data = {
|
ajax_data = {
|
||||||
url: url,
|
url: url,
|
||||||
type: 'get',
|
type: 'get',
|
||||||
@ -125,14 +196,14 @@ function launchModalForm(modal, url, options = {}) {
|
|||||||
if (response.title) {
|
if (response.title) {
|
||||||
$(modal + ' #modal-title').html(response.title);
|
$(modal + ' #modal-title').html(response.title);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (response.submit_text) {
|
if (response.submit_text) {
|
||||||
$(modal + ' #modal-form-submit').html(response.submit_text);
|
$(modal + ' #modal-form-submit').html(response.submit_text);
|
||||||
}
|
}
|
||||||
if (response.html_form) {
|
|
||||||
var target = modal + ' .modal-form-content';
|
|
||||||
$(target).html(response.html_form);
|
|
||||||
|
|
||||||
attachSelect(modal);
|
if (response.html_form) {
|
||||||
|
injectModalForm(modal, response.html_form);
|
||||||
|
handleModalForm(modal, url, options);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
alert('JSON response missing form data');
|
alert('JSON response missing form data');
|
||||||
@ -152,48 +223,4 @@ function launchModalForm(modal, url, options = {}) {
|
|||||||
|
|
||||||
// Send the AJAX request
|
// Send the AJAX request
|
||||||
$.ajax(ajax_data);
|
$.ajax(ajax_data);
|
||||||
|
|
||||||
$(modal).on('click', '#modal-form-submit', function() {
|
|
||||||
|
|
||||||
// Extract the form from the modal dialog
|
|
||||||
var form = $(modal).find(".js-modal-form");
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: url,
|
|
||||||
data: form.serialize(),
|
|
||||||
type: form.attr('method'),
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (response) {
|
|
||||||
|
|
||||||
// Form validation was performed
|
|
||||||
if ('form_valid' in response) {
|
|
||||||
if (response.form_valid) {
|
|
||||||
$(modal).modal('hide');
|
|
||||||
afterForm(response, options);
|
|
||||||
}
|
|
||||||
// Form was invalid - try again!
|
|
||||||
else {
|
|
||||||
if (response.html_form) {
|
|
||||||
$(modal + ' .modal-form-content').html(response.html_form);
|
|
||||||
attachSelect(modal);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
alert('HTML form data missing from AJAX response');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$(modal).modal('hide');
|
|
||||||
afterForm(response, options);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function (xhr, ajaxOptions, thrownError) {
|
|
||||||
alert("Error posting form data:\n" + thrownError);
|
|
||||||
$(modal).modal('hide');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Override the default form submit functionality
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
<form method="post" action='' class='js-modal-form'>
|
<form method="post" action='' class='js-modal-form' enctype="multipart/form-data">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% load crispy_forms_tags %}
|
{% load crispy_forms_tags %}
|
||||||
{% crispy form %}
|
{% crispy form %}
|
||||||
|
Loading…
Reference in New Issue
Block a user