// // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . $(function() { function KlipperViewModel(parameters) { var self = this; self.settings = parameters[0]; self.loginState = parameters[1]; self.connectionState = parameters[2]; self.levelingViewModel = parameters[3]; self.paramMacroViewModel = parameters[4]; self.shortStatus = ko.observable(); self.logMessages = ko.observableArray(); self.showPopUp = function(popupType, popupTitle, message){ var title = popupType.toUpperCase() + ": " + popupTitle; new PNotify({ title: title, text: message, type: popupType, hide: false }); }; self.showLevelingDialog = function() { var dialog = $("#klipper_leveling_dialog"); dialog.modal({ show: 'true', backdrop: 'static', keyboard: false }); self.levelingViewModel.initView(); }; self.showPidTuningDialog = function() { var dialog = $("#klipper_pid_tuning_dialog"); dialog.modal({ show: 'true', backdrop: 'static', keyboard: false }); }; self.showOffsetDialog = function() { var dialog = $("#klipper_offset_dialog"); dialog.modal({ show: 'true', backdrop: 'static' }); }; self.showGraphDialog = function() { var dialog = $("#klipper_graph_dialog"); dialog.modal({ show: 'true', minHeight: "500px", maxHeight: "600px" }); }; self.executeMacro = function(macro) { var paramObjRegex = /{(.*?)}/g; if (macro.macro().match(paramObjRegex) == null) { OctoPrint.control.sendGcode( // Use .split to create an array of strings which is sent to // OctoPrint.control.sendGcode instead of a single string. macro.macro().split(/\r\n|\r|\n/) ); } else { self.paramMacroViewModel.process(macro); var dialog = $("#klipper_macro_dialog"); dialog.modal({ show: 'true', backdrop: 'static' }); } }; self.onGetStatus = function() { OctoPrint.control.sendGcode("Status") }; self.onRestartFirmware = function() { OctoPrint.control.sendGcode("FIRMWARE_RESTART") }; self.onRestartHost = function() { OctoPrint.control.sendGcode("RESTART") }; self.onAfterBinding = function() { self.connectionState.selectedPort(self.settings.settings.plugins.klipper.connection.port()); }; self.onDataUpdaterPluginMessage = function(plugin, data) { if(plugin == "klipper") { if ("warningPopUp" == data.type){ self.showPopUp(data.subtype, data.title, data.payload); return; } if ("errorPopUp" == data.type){ self.showPopUp(data.subtype, data.title, data.payload); return; } if(data.type == "status") { self.shortStatus(data.payload); } else { self.logMessage(data.time, data.subtype, data.payload); } } }; self.logMessage = function(timestamp, type, message) { self.logMessages.push({ time: timestamp, type: type, msg: message.replace(/\n/gi, "
")} ); }; self.onClearLog = function() { self.logMessages.removeAll(); }; self.isActive = function() { return self.connectionState.isOperational() && self.loginState.isUser(); }; } OCTOPRINT_VIEWMODELS.push({ construct: KlipperViewModel, dependencies: [ "settingsViewModel", "loginStateViewModel", "connectionViewModel", "klipperLevelingViewModel", "klipperMacroDialogViewModel" ], elements: ["#tab_plugin_klipper_main", "#sidebar_plugin_klipper", "#navbar_plugin_klipper"] }); });