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() {
|
constructor() {
|
||||||
this.registerTooltips();
|
this.registerTooltips();
|
||||||
this.configureDropdowns();
|
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
|
//Initialize ClipboardJS
|
||||||
this.registerLoadHandler(() => {
|
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.
|
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
|
## Special characters
|
||||||
|
|
||||||
Using the keybindings below (Alt + key) you can insert special characters into the text fields of Part-DB. This works on
|
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]
|
#[EmbeddedSettings]
|
||||||
public ?PartInfoSettings $partInfo = null;
|
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') }}
|
{{ encore_entry_script_tags('webauthn_tfa') }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</head>
|
</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 %}
|
{% block body %}
|
||||||
<header>
|
<header>
|
||||||
<turbo-frame id="navbar-frame" target="content" data-turbo-action="advance">
|
<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>
|
<target>Show the image overlay with attachment details on hovering over the part image gallery.</target>
|
||||||
</segment>
|
</segment>
|
||||||
</unit>
|
</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">
|
<unit id="ALfPkeR" name="perm.config.change_system_settings">
|
||||||
<segment state="translated">
|
<segment state="translated">
|
||||||
<source>perm.config.change_system_settings</source>
|
<source>perm.config.change_system_settings</source>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue