mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-02-28 20:39:35 +00:00
Merge ac00e332be into 1650ade338
This commit is contained in:
commit
8987a1e7ef
8 changed files with 239 additions and 2 deletions
|
|
@ -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(() => {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -41,4 +41,7 @@ class BehaviorSettings
|
|||
|
||||
#[EmbeddedSettings]
|
||||
public ?PartInfoSettings $partInfo = null;
|
||||
|
||||
#[EmbeddedSettings]
|
||||
public ?KeybindingsSettings $keybindings = null;
|
||||
}
|
||||
|
|
|
|||
47
src/Settings/BehaviorSettings/KeybindingsSettings.php
Normal file
47
src/Settings/BehaviorSettings/KeybindingsSettings.php
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2025 Jan Böhmer (https://github.com/jbtronics)
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
@ -73,7 +73,9 @@
|
|||
{{ encore_entry_script_tags('webauthn_tfa') }}
|
||||
{% endblock %}
|
||||
</head>
|
||||
<body data-base-url="{{ path('homepage', {'_locale': app.request.locale}) }}" data-locale="{{ app.request.locale|default("en")|slice(0,2) }}">
|
||||
<body data-base-url="{{ path('homepage', {'_locale': app.request.locale}) }}"
|
||||
data-locale="{{ app.request.locale|default("en")|slice(0,2) }}"
|
||||
data-keybindings-special-characters="{{ settings_instance('keybindings').enableSpecialCharacters ? 'true' : 'false' }}">
|
||||
{% block body %}
|
||||
<header>
|
||||
<turbo-frame id="navbar-frame" target="content" data-turbo-action="advance">
|
||||
|
|
|
|||
70
tests/Settings/BehaviorSettings/BehaviorSettingsTest.php
Normal file
70
tests/Settings/BehaviorSettings/BehaviorSettingsTest.php
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2025 Jan Böhmer (https://github.com/jbtronics)
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
namespace App\Tests\Settings\BehaviorSettings;
|
||||
|
||||
use App\Settings\BehaviorSettings\BehaviorSettings;
|
||||
use App\Settings\BehaviorSettings\KeybindingsSettings;
|
||||
use App\Tests\SettingsTestHelper;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class BehaviorSettingsTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Test that BehaviorSettings has the keybindings property
|
||||
*/
|
||||
public function testHasKeybindingsProperty(): void
|
||||
{
|
||||
$settings = SettingsTestHelper::createSettingsDummy(BehaviorSettings::class);
|
||||
|
||||
$reflection = new \ReflectionClass($settings);
|
||||
$this->assertTrue($reflection->hasProperty('keybindings'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that keybindings property is nullable and of correct type
|
||||
*/
|
||||
public function testKeybindingsPropertyType(): void
|
||||
{
|
||||
$settings = SettingsTestHelper::createSettingsDummy(BehaviorSettings::class);
|
||||
|
||||
$reflection = new \ReflectionClass($settings);
|
||||
$property = $reflection->getProperty('keybindings');
|
||||
|
||||
$this->assertTrue($property->hasType());
|
||||
|
||||
$type = $property->getType();
|
||||
$this->assertInstanceOf(\ReflectionNamedType::class, $type);
|
||||
$this->assertEquals(KeybindingsSettings::class, $type->getName());
|
||||
$this->assertTrue($type->allowsNull());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that keybindings property defaults to null
|
||||
*/
|
||||
public function testKeybindingsDefaultsToNull(): void
|
||||
{
|
||||
$settings = SettingsTestHelper::createSettingsDummy(BehaviorSettings::class);
|
||||
|
||||
$this->assertNull($settings->keybindings);
|
||||
}
|
||||
}
|
||||
77
tests/Settings/BehaviorSettings/KeybindingsSettingsTest.php
Normal file
77
tests/Settings/BehaviorSettings/KeybindingsSettingsTest.php
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/*
|
||||
* This file is part of Part-DB (https://github.com/Part-DB/Part-DB-symfony).
|
||||
*
|
||||
* Copyright (C) 2019 - 2025 Jan Böhmer (https://github.com/jbtronics)
|
||||
*
|
||||
* 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 <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
namespace App\Tests\Settings\BehaviorSettings;
|
||||
|
||||
use App\Settings\BehaviorSettings\KeybindingsSettings;
|
||||
use App\Tests\SettingsTestHelper;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
final class KeybindingsSettingsTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Test that the default value for enableSpecialCharacters is true
|
||||
*/
|
||||
public function testDefaultValueIsTrue(): void
|
||||
{
|
||||
$settings = SettingsTestHelper::createSettingsDummy(KeybindingsSettings::class);
|
||||
|
||||
$this->assertTrue($settings->enableSpecialCharacters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that enableSpecialCharacters can be set to false
|
||||
*/
|
||||
public function testCanBeDisabled(): void
|
||||
{
|
||||
$settings = SettingsTestHelper::createSettingsDummy(KeybindingsSettings::class);
|
||||
$settings->enableSpecialCharacters = false;
|
||||
|
||||
$this->assertFalse($settings->enableSpecialCharacters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that enableSpecialCharacters can be set to true
|
||||
*/
|
||||
public function testCanBeEnabled(): void
|
||||
{
|
||||
$settings = SettingsTestHelper::createSettingsDummy(KeybindingsSettings::class);
|
||||
$settings->enableSpecialCharacters = false;
|
||||
$settings->enableSpecialCharacters = true;
|
||||
|
||||
$this->assertTrue($settings->enableSpecialCharacters);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the settings class has the correct type for enableSpecialCharacters
|
||||
*/
|
||||
public function testPropertyTypeIsBool(): void
|
||||
{
|
||||
$settings = SettingsTestHelper::createSettingsDummy(KeybindingsSettings::class);
|
||||
|
||||
$reflection = new \ReflectionClass($settings);
|
||||
$property = $reflection->getProperty('enableSpecialCharacters');
|
||||
|
||||
$this->assertTrue($property->hasType());
|
||||
$this->assertEquals('bool', $property->getType()->getName());
|
||||
}
|
||||
}
|
||||
|
|
@ -10311,6 +10311,24 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<target>Show the image overlay with attachment details on hovering over the part image gallery.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="keybind1" name="settings.behavior.keybindings">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.keybindings</source>
|
||||
<target>Keybindings</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="keybind2" name="settings.behavior.keybindings.enable_special_characters">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.keybindings.enable_special_characters</source>
|
||||
<target>Enable special character keybindings</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="keybind3" name="settings.behavior.keybindings.enable_special_characters.help">
|
||||
<segment state="translated">
|
||||
<source>settings.behavior.keybindings.enable_special_characters.help</source>
|
||||
<target>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.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="ALfPkeR" name="perm.config.change_system_settings">
|
||||
<segment state="translated">
|
||||
<source>perm.config.change_system_settings</source>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue