Shortcut to printer.cfg with granulary access (#29)

* Shortcut to printer.cfg with granulary access

* added button to sidebar

* restyle
This commit is contained in:
thelastWallE 2021-03-11 19:42:05 +01:00
parent d6cbf8d867
commit 1b1014f58c
5 changed files with 118 additions and 74 deletions

View File

@ -21,8 +21,10 @@ import glob
import os import os
import sys import sys
from octoprint.util.comm import parse_firmware_line from octoprint.util.comm import parse_firmware_line
from octoprint.access.permissions import Permissions, ADMIN_GROUP, USER_GROUP
from .modules import KlipperLogAnalyzer from .modules import KlipperLogAnalyzer
import flask import flask
from flask_babel import gettext
class KlipperPlugin( class KlipperPlugin(
octoprint.plugin.StartupPlugin, octoprint.plugin.StartupPlugin,
@ -49,6 +51,17 @@ class KlipperPlugin(
#-- Settings Plugin #-- Settings Plugin
def get_additional_permissions(self, *args, **kwargs):
return [
dict(key="CONFIG",
name="Config Klipper",
description=gettext("Allows to config klipper"),
default_groups=[ADMIN_GROUP],
dangerous=True,
roles=["admin"]
)
]
def get_settings_defaults(self): def get_settings_defaults(self):
return dict( return dict(
connection = dict( connection = dict(
@ -358,6 +371,7 @@ def __plugin_load__():
global __plugin_hooks__ global __plugin_hooks__
__plugin_implementation__ = KlipperPlugin() __plugin_implementation__ = KlipperPlugin()
__plugin_hooks__ = { __plugin_hooks__ = {
"octoprint.access.permissions": __plugin_implementation__.get_additional_permissions,
"octoprint.comm.protocol.gcode.received": __plugin_implementation__.on_parse_gcode, "octoprint.comm.protocol.gcode.received": __plugin_implementation__.on_parse_gcode,
"octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information "octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information
} }

View File

@ -22,6 +22,7 @@ $(function() {
self.connectionState = parameters[2]; self.connectionState = parameters[2];
self.levelingViewModel = parameters[3]; self.levelingViewModel = parameters[3];
self.paramMacroViewModel = parameters[4]; self.paramMacroViewModel = parameters[4];
self.access = parameters[5];
self.shortStatus = ko.observable(); self.shortStatus = ko.observable();
self.logMessages = ko.observableArray(); self.logMessages = ko.observableArray();
@ -127,6 +128,25 @@ $(function() {
self.isActive = function() { self.isActive = function() {
return self.connectionState.isOperational() && self.loginState.isUser(); return self.connectionState.isOperational() && self.loginState.isUser();
} }
// OctoKlipper settings link
self.openOctoKlipperSettings = function(profile_type) {
if (
!self.loginState.hasPermission(
self.access.permissions.PLUGIN_KLIPPER_CONFIG
)
)
return;
$('a#navbar_show_settings').click();
$('li#settings_plugin_klipper_link a').click();
if(profile_type)
{
var query= "#klipper-settings a[data-profile-type='"+profile_type+"']";
$(query).click();
}
};
} }
OCTOPRINT_VIEWMODELS.push({ OCTOPRINT_VIEWMODELS.push({
@ -136,7 +156,8 @@ $(function() {
"loginStateViewModel", "loginStateViewModel",
"connectionViewModel", "connectionViewModel",
"klipperLevelingViewModel", "klipperLevelingViewModel",
"klipperMacroDialogViewModel" "klipperMacroDialogViewModel",
"accessViewModel"
], ],
elements: ["#tab_plugin_klipper_main", "#sidebar_plugin_klipper", "#navbar_plugin_klipper"] elements: ["#tab_plugin_klipper_main", "#sidebar_plugin_klipper", "#navbar_plugin_klipper"]
}); });

View File

@ -1,9 +1,9 @@
<form class="form-horizontal"> <form class="form-horizontal">
<ul class="nav nav-pills" id="klipper-settings"> <ul class="nav nav-pills" id="klipper-settings">
<li><a href="#basic" data-toggle="tab">Basic</a></li> <li><a href="#basic" data-toggle="tab" data-profile-type="klipper-basic">Basic</a></li>
<li><a href="#macros" data-toggle="tab">Macros</a></li> <li><a href="#macros" data-toggle="tab" data-profile-type="klipper-macros">Macros</a></li>
<li><a href="#level" data-toggle="tab">Bed Leveling</a></li> <li><a href="#level" data-toggle="tab" data-profile-type="klipper-bed">Bed Leveling</a></li>
<li><a href="#conf" data-toggle="tab">Klipper Configuration</a></li> <li><a href="#conf" data-toggle="tab" data-profile-type="klipper-config">Klipper Configuration</a></li>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<!-- Basics --> <!-- Basics -->

View File

@ -5,6 +5,11 @@
<button class="btn btn-block" data-bind="click: connectionState.connect, text: connectionState.buttonText(), enable: loginState.isUser()">{{ _('Connect') }}</button> <button class="btn btn-block" data-bind="click: connectionState.connect, text: connectionState.buttonText(), enable: loginState.isUser()">{{ _('Connect') }}</button>
</div> </div>
</div> </div>
<div class="control-group">
<div class="controls">
<button class="btn btn-block" data-bind="visible: loginState.hasPermissionKo(access.permissions.PLUGIN_KLIPPER_CONFIG), click: function() {openOctoKlipperSettings('klipper-config');}">{{ _('Open Klipper config') }}</button>
</div>
</div>
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<label class="control-label small"><i class="icon-list-alt"></i> {{ _('Macros') }}</label> <label class="control-label small"><i class="icon-list-alt"></i> {{ _('Macros') }}</label>

View File

@ -1,6 +1,8 @@
<div class="row-fluid"> <div class="row-fluid">
<div class="span8"> <div class="span8">
<label><i class="icon-tasks"></i> {{ _('Messages') }}</label> <label>
<i class="icon-tasks"></i> {{ _('Messages') }}
</label>
<div class="plugin-klipper-log" data-bind="foreach: logMessages"> <div class="plugin-klipper-log" data-bind="foreach: logMessages">
<div class="log-item" data-bind="css: type"> <div class="log-item" data-bind="css: type">
<div data-bind="text: time" class="ts"></div> <div data-bind="text: time" class="ts"></div>
@ -18,10 +20,12 @@
<div class="control-group"> <div class="control-group">
<div class="controls"> <div class="controls">
<label class="control-label"></label> <label class="control-label"></label>
<button class="btn btn-block btn-small" data-bind="click: onGetStatus, enable: isActive()" <button class="btn btn-block btn-small" data-bind="click: onGetStatus, enable: isActive()" title="Query Klipper for its current status">
title="Query Klipper for its current status">
<i class="fa icon-black fa-info-circle"></i> {{ _('Get Status') }} <i class="fa icon-black fa-info-circle"></i> {{ _('Get Status') }}
</button> </button>
<button class="btn btn-block btn-small" data-bind="visible: loginState.hasPermissionKo(access.permissions.PLUGIN_KLIPPER_CONFIG), click: function() {openOctoKlipperSettings('klipper-config');}" title="Open the Klipper configurationfile">
<i class="fa icon-black fa-file-code-o"></i> {{ _('Open Klipper config') }}
</button>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">