diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index d08a8b7f..3f77be59 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -10,7 +10,6 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.appearance_name = ko.observable(undefined); self.appearance_color = ko.observable(undefined); - /* I did attempt to allow arbitrary gradients but cross browser support via knockout or jquery was going to be horrible */ self.appearance_available_colors = ko.observable(["default", "red", "orange", "yellow", "green", "blue", "violet", "black"]); self.printer_movementSpeedX = ko.observable(undefined); @@ -18,7 +17,7 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.printer_movementSpeedZ = ko.observable(undefined); self.printer_movementSpeedE = ko.observable(undefined); self.printer_invertAxes = ko.observable(undefined); - self.printer_numExtruders = ko.observable(1); + self.printer_numExtruders = ko.observable(undefined); self._printer_extruderOffsets = ko.observableArray([]); self.printer_extruderOffsets = ko.computed({ @@ -45,12 +44,14 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { } self._printer_extruderOffsets(result); }, - owner: self, - deferEvaluation: true + owner: self }); self.ko_printer_extruderOffsets = ko.computed(function() { var extruderOffsets = self._printer_extruderOffsets(); var numExtruders = self.printer_numExtruders(); + if (!numExtruders) { + numExtruders = 1; + } if (numExtruders > extruderOffsets.length) { for (var i = extruderOffsets.length; i < numExtruders; i++) { diff --git a/src/octoprint/static/js/app/viewmodels/temperature.js b/src/octoprint/static/js/app/viewmodels/temperature.js index d3e31a65..e0c327a0 100644 --- a/src/octoprint/static/js/app/viewmodels/temperature.js +++ b/src/octoprint/static/js/app/viewmodels/temperature.js @@ -33,14 +33,14 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { self.heaterOptions = ko.observable({}); - self.settingsViewModel.printer_numExtruders.subscribe(function(oldVal, newVal) { + self._numExtrudersUpdated = function() { var graphColors = ["red", "orange", "green", "brown", "purple"]; var heaterOptions = {}; var tools = self.tools(); // tools var numExtruders = self.settingsViewModel.printer_numExtruders(); - if (numExtruders > 1) { + if (numExtruders && numExtruders > 1) { // multiple extruders for (var extruder = 0; extruder < numExtruders; extruder++) { var color = graphColors.shift(); @@ -71,7 +71,8 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { // write back self.heaterOptions(heaterOptions); self.tools(tools); - }); + }; + self.settingsViewModel.printer_numExtruders.subscribe(self._numExtrudersUpdated); self.temperatures = []; self.plotOptions = { @@ -106,19 +107,19 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { noColumns: 2, backgroundOpacity: 0 } - } + }; self.fromCurrentData = function(data) { self._processStateData(data.state); self._processTemperatureUpdateData(data.temps); self._processOffsetData(data.offsets); - } + }; self.fromHistoryData = function(data) { self._processStateData(data.state); self._processTemperatureHistoryData(data.tempHistory); self._processOffsetData(data.offsets); - } + }; self._processStateData = function(data) { self.isErrorOrClosed(data.flags.closedOrError); @@ -128,7 +129,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { self.isError(data.flags.error); self.isReady(data.flags.ready); self.isLoading(data.flags.loading); - } + }; self._processTemperatureUpdateData = function(data) { if (data.length == 0) @@ -156,12 +157,12 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { }); self.updatePlot(); - } + }; self._processTemperatureHistoryData = function(data) { self.temperatures = self._processTemperatureData(data); self.updatePlot(); - } + }; self._processOffsetData = function(data) { var tools = self.tools(); @@ -174,7 +175,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { if (data.hasOwnProperty("bed")) { self.bedTemp["offset"](data["bed"]); } - } + }; self._processTemperatureData = function(data, result) { var types = _.keys(self.heaterOptions()); @@ -202,7 +203,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { }); return result; - } + }; self.updatePlot = function() { var graph = $("#temperature-graph"); @@ -237,7 +238,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { $.plot(graph, data, self.plotOptions); } - } + }; self.setTarget = function(item) { var value = item.newTarget();