From a79e38a35058e1ed72e9ba6501df933f22e534ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Tue, 1 Sep 2015 17:18:08 +0200 Subject: [PATCH] Settings saving now supports callbacks, SWU plugin utilizes those --- .../static/js/softwareupdate.js | 27 ++++++++--------- .../static/js/app/viewmodels/settings.js | 29 ++++++++++++++----- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js b/src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js index 32c95674..abdbd91a 100644 --- a/src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js +++ b/src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js @@ -26,8 +26,6 @@ $(function() { self.config_checkoutFolder = ko.observable(); self.config_checkType = ko.observable(); - self.savingSettings = false; - self.configurationDialog = $("#settings_plugin_softwareupdate_configurationdialog"); self.config_availableCheckTypes = [ @@ -90,8 +88,10 @@ $(function() { self.configurationDialog.modal(); }; - self.savePluginSettings = function() { - self.savingSettings = true; + self.savePluginSettings = function(viewModel, event) { + var target = $(event.target); + target.prepend(' '); + var data = { plugins: { softwareupdate: { @@ -101,11 +101,16 @@ $(function() { } } }; - self.settings.saveData(data, function() { - self.configurationDialog.modal("hide"); - self._copyConfig(); - self.performCheck(); - self.savingSettings = false; + self.settings.saveData(data, { + success: function() { + self.configurationDialog.modal("hide"); + self._copyConfig(); + self.performCheck(); + }, + complete: function() { + $("i.icon-spinner", target).remove(); + }, + sending: true }); }; @@ -375,10 +380,6 @@ $(function() { return true; }; - self.onSettingsPreventRefresh = function() { - return self.savingSettings; - }; - self.onDataUpdaterReconnect = function() { if (self.waitingForRestart) { self.waitingForRestart = false; diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 399101c0..8b4d4560 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -669,13 +669,22 @@ $(function() { mapToObservables(serverChangedData, specialMappings, clientChangedData); }; - self.saveData = function (data, successCallback) { + self.saveData = function (data, successCallback, setAsSending) { + var options; + if (_.isPlainObject(successCallback)) { + options = successCallback; + } else { + options = { + success: successCallback, + sending: (setAsSending == true) + } + } + self.settingsDialog.trigger("beforeSave"); - if (data == undefined) { - // we only set sending to true when we didn't include data - self.sending(true); + self.sending(data == undefined || options.sending || false); + if (data == undefined) { // we also only send data that actually changed when no data is specified data = getOnlyChangedData(self.getLocalData(), self.lastReceivedSettings); } @@ -686,18 +695,22 @@ $(function() { dataType: "json", contentType: "application/json; charset=UTF-8", data: JSON.stringify(data), - success: function(response) { + success: function(data, status, xhr) { self.receiving(true); self.sending(false); try { - self.fromResponse(response); - if (successCallback) successCallback(response); + self.fromResponse(data); + if (options.success) options.success(data, status, xhr); } finally { self.receiving(false); } }, - error: function(xhr) { + error: function(xhr, status, error) { self.sending(false); + if (options.error) options.error(xhr, status, error); + }, + complete: function(xhr, status) { + if (options.complete) options.complete(xhr, status); } }); };