@@ -114,6 +114,13 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
// btn: btn | // btn: btn | ||||
// } | // } | ||||
$(opts.btn).prop("disabled", true); | $(opts.btn).prop("disabled", true); | ||||
if(frappe.ui.form.is_saving) { | |||||
msgprint(__("Already saving. Please wait a few moments.")); | |||||
throw "saving"; | |||||
} | |||||
frappe.ui.form.is_saving = true; | |||||
return frappe.call({ | return frappe.call({ | ||||
freeze: true, | freeze: true, | ||||
method: opts.method, | method: opts.method, | ||||
@@ -121,6 +128,9 @@ frappe.ui.form.save = function(frm, action, callback, btn) { | |||||
callback: function(r) { | callback: function(r) { | ||||
$(opts.btn).prop("disabled", false); | $(opts.btn).prop("disabled", false); | ||||
opts.callback && opts.callback(r); | opts.callback && opts.callback(r); | ||||
}, | |||||
always: function() { | |||||
frappe.ui.form.is_saving = false; | |||||
} | } | ||||
}) | }) | ||||
}; | }; | ||||
@@ -29,6 +29,7 @@ frappe.call = function(opts) { | |||||
args: args, | args: args, | ||||
success: opts.callback, | success: opts.callback, | ||||
error: opts.error, | error: opts.error, | ||||
always: opts.always, | |||||
btn: opts.btn, | btn: opts.btn, | ||||
freeze: opts.freeze, | freeze: opts.freeze, | ||||
show_spinner: !opts.no_spinner, | show_spinner: !opts.no_spinner, | ||||
@@ -124,6 +125,7 @@ frappe.request.call = function(opts) { | |||||
data = JSON.parse(data.responseText); | data = JSON.parse(data.responseText); | ||||
} | } | ||||
frappe.request.cleanup(opts, data); | frappe.request.cleanup(opts, data); | ||||
if(opts.always) opts.always(data); | |||||
}) | }) | ||||
.done(function(data, textStatus, xhr) { | .done(function(data, textStatus, xhr) { | ||||
var status_code_handler = statusCode[xhr.statusCode().status]; | var status_code_handler = statusCode[xhr.statusCode().status]; | ||||