From 1eee2b30fa8c782f4cecd4038f8389d6ca8ed329 Mon Sep 17 00:00:00 2001 From: Niklas <44636701+MayNiklas@users.noreply.github.com> Date: Sat, 28 Feb 2026 22:07:14 +0100 Subject: [PATCH] add option to disable keybindings fixing #1251 (#1254) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add option to disable keybindings * add tests for disabling keybindings * Fixed translation keys * Added env to env configuration list * Removed useless tests The tests are already enforced by type declarations --------- Co-authored-by: Jan Böhmer --- assets/js/register_events.js | 7 ++- docs/configuration.md | 2 + docs/usage/keybindings.md | 15 ++++++ .../BehaviorSettings/BehaviorSettings.php | 3 ++ .../BehaviorSettings/KeybindingsSettings.php | 47 +++++++++++++++++++ templates/base.html.twig | 4 +- translations/messages.en.xlf | 18 +++++++ 7 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/Settings/BehaviorSettings/KeybindingsSettings.php diff --git a/assets/js/register_events.js b/assets/js/register_events.js index 9732c0c1..547742ea 100644 --- a/assets/js/register_events.js +++ b/assets/js/register_events.js @@ -27,7 +27,12 @@ class RegisterEventHelper { constructor() { this.registerTooltips(); this.configureDropdowns(); - this.registerSpecialCharInput(); + + // Only register special character input if enabled in configuration + const keybindingsEnabled = document.body.dataset.keybindingsSpecialCharacters !== 'false'; + if (keybindingsEnabled) { + this.registerSpecialCharInput(); + } //Initialize ClipboardJS this.registerLoadHandler(() => { diff --git a/docs/configuration.md b/docs/configuration.md index b4c3d747..c5e46f21 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -129,6 +129,8 @@ bundled with Part-DB. Set `DATABASE_MYSQL_SSL_VERIFY_CERT` if you want to accept unique increments for parts within a category hierarchy, ensuring consistency and uniqueness in IPN generation. * `IPN_USE_DUPLICATE_DESCRIPTION`: When enabled, the part’s description is used to find existing parts with the same description and to determine the next available IPN by incrementing their numeric suffix for the suggestion list. +* `KEYBINDINGS_SPECIAL_CHARS_ENABLED`: Set this to 0 to disable the special character keybindings (Alt + key) for inserting special characters. This can be useful if + they conflict with your keyboard layout or system shortcuts. ### E-Mail settings (all env only) diff --git a/docs/usage/keybindings.md b/docs/usage/keybindings.md index 771d7684..f4b1980e 100644 --- a/docs/usage/keybindings.md +++ b/docs/usage/keybindings.md @@ -8,6 +8,21 @@ parent: Usage This page lists all the keybindings of Part-DB. Currently, there are only the special character keybindings. +## Disabling keybindings + +If you want to disable the special character keybindings (for example, because they conflict with your keyboard layout or system shortcuts), you can do so in two ways: + +### Via the System Settings UI (recommended) + +1. Navigate to **System Settings** (Tools → System Settings) +2. Go to **Behavior** → **Keybindings** +3. Uncheck **Enable special character keybindings** +4. Save the settings + +### Via Environment Variable + +Alternatively, you can set the environment variable `KEYBINDINGS_SPECIAL_CHARS_ENABLED=0` in your `.env.local` file or your server environment configuration. + ## Special characters Using the keybindings below (Alt + key) you can insert special characters into the text fields of Part-DB. This works on diff --git a/src/Settings/BehaviorSettings/BehaviorSettings.php b/src/Settings/BehaviorSettings/BehaviorSettings.php index 3053073f..ec849db3 100644 --- a/src/Settings/BehaviorSettings/BehaviorSettings.php +++ b/src/Settings/BehaviorSettings/BehaviorSettings.php @@ -41,4 +41,7 @@ class BehaviorSettings #[EmbeddedSettings] public ?PartInfoSettings $partInfo = null; + + #[EmbeddedSettings] + public ?KeybindingsSettings $keybindings = null; } diff --git a/src/Settings/BehaviorSettings/KeybindingsSettings.php b/src/Settings/BehaviorSettings/KeybindingsSettings.php new file mode 100644 index 00000000..2788de41 --- /dev/null +++ b/src/Settings/BehaviorSettings/KeybindingsSettings.php @@ -0,0 +1,47 @@ +. + */ + +declare(strict_types=1); + + +namespace App\Settings\BehaviorSettings; + +use App\Settings\SettingsIcon; +use Jbtronics\SettingsBundle\Metadata\EnvVarMode; +use Jbtronics\SettingsBundle\Settings\Settings; +use Jbtronics\SettingsBundle\Settings\SettingsParameter; +use Symfony\Component\Translation\TranslatableMessage as TM; + +#[Settings(name: "keybindings", label: new TM("settings.behavior.keybindings"))] +#[SettingsIcon('fa-keyboard')] +class KeybindingsSettings +{ + /** + * Whether to enable special character keybindings (Alt+key) in text input fields + * @var bool + */ + #[SettingsParameter( + label: new TM("settings.behavior.keybindings.enable_special_characters"), + description: new TM("settings.behavior.keybindings.enable_special_characters.help"), + envVar: "bool:KEYBINDINGS_SPECIAL_CHARS_ENABLED", + envVarMode: EnvVarMode::OVERWRITE + )] + public bool $enableSpecialCharacters = true; +} diff --git a/templates/base.html.twig b/templates/base.html.twig index 8dc87239..62f0ce53 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -73,7 +73,9 @@ {{ encore_entry_script_tags('webauthn_tfa') }} {% endblock %} - + {% block body %}
diff --git a/translations/messages.en.xlf b/translations/messages.en.xlf index 7bf613ae..14b38e87 100644 --- a/translations/messages.en.xlf +++ b/translations/messages.en.xlf @@ -10311,6 +10311,24 @@ Please note, that you can not impersonate a disabled user. If you try you will g Show the image overlay with attachment details on hovering over the part image gallery. + + + settings.behavior.keybindings + Keybindings + + + + + settings.behavior.keybindings.enable_special_characters + Enable special character keybindings + + + + + settings.behavior.keybindings.enable_special_characters.help + Enable Alt+key shortcuts to insert special characters (Greek letters, mathematical symbols, etc.) in text input fields. Disable this if the shortcuts conflict with your keyboard layout or system shortcuts. + + perm.config.change_system_settings