OctoPrint-Estop/octoprint_estop/static/js/estop.js

90 lines
3.2 KiB
JavaScript
Raw Normal View History

2017-03-22 22:17:16 +01:00
/*
* Author: ntoff
* License: AGPLv3
*/
$(function() {
function EstopViewModel(parameters) {
var self = this;
2017-03-22 22:17:16 +01:00
self.loginState = parameters[0];
self.printerState = parameters[1];
self.settings = parameters[2];
self.estopCommand = ko.observable("M112");
self.estopReconnect = ko.observable(false);
self.emergencyCalled = ko.observable(false);
self.enableEstop = ko.pureComputed(function() {
return self.printerState.isOperational() && self.loginState.isUser();
});
self.estopState = ko.pureComputed(function() {
return self.loginState.isUser() > 0 ? "estop_sidebar" : "estop_sidebar_disabled";
});
self.reconnect = ko.pureComputed(function() {
return self.estopReconnect() && self.emergencyCalled();
})
self.buttonText = ko.pureComputed(function() {
if (self.enableEstop()) {
return gettext("EMERGENCY STOP");
} else if (self.reconnect()) {
return gettext("Reconnecting...")
}
else {
return gettext("Offline");
}
});
self.buttonTitle = ko.pureComputed(function() {
self.estopCommand(self.settings.settings.plugins.estop.estopCommand());
return gettext("Sends " + self.estopCommand() + " to the printer IMMEDIATELY");
});
self.onBeforeBinding = function () {
self.updateSettingsValues();
}
self.onSettingsHidden = function () {
self.updateSettingsValues();
}
self.updateSettingsValues = function () { //lazy way of making sure we have the latest version of the settings
self.estopCommand(self.settings.settings.plugins.estop.estopCommand());
self.estopReconnect(self.settings.settings.plugins.estop.estopReconnect());
}
self.onEventDisconnected = function () {
if (self.estopReconnect() && self.emergencyCalled()) {
self.timedReconnect = setTimeout(function() { //reconnect 3 seconds after detecting the printer is offline
self.emergencyCalled(false);
OctoPrint.connection.connect();
}, 3*1000); //3 seconds
}
}
self.sendEstopCommand = function () {
if (self.enableEstop()) {
self.emergencyCalled(true);
self.estopCommand(self.settings.settings.plugins.estop.estopCommand());
OctoPrint.control.sendGcode(self.estopCommand());
if (self.estopReconnect()) {
OctoPrint.connection.disconnect(); //normally octoprint would probably disconnect anyway, just calling this here in case the printer is in a blocking loop
}
}
}
2017-03-22 22:17:16 +01:00
}
OCTOPRINT_VIEWMODELS.push({
2017-03-22 22:17:16 +01:00
construct: EstopViewModel,
dependencies: [
"loginStateViewModel",
"printerStateViewModel",
"settingsViewModel"],
elements: ["#sidebar_plugin_estop_wrapper"]
2017-03-22 22:17:16 +01:00
});
});