From 76f0b05a096fcd06db15d505e7d1f8a7f37b7d6a Mon Sep 17 00:00:00 2001 From: buchmann Date: Wed, 11 Feb 2026 14:10:05 +0100 Subject: [PATCH] Autofocus for frequently used input fields Fixes #1157. - Focus `name` field on new part - Focus `amount` on add/withdraw modal - Focus first "number type" input on any newly added collectionType table row... (debatable) It would be even more favorable if the user could configure if they want to use autofocus and/or for which fields/dialogs it should be enabled. --- assets/controllers/elements/collection_type_controller.js | 4 ++++ assets/controllers/pages/part_withdraw_modal_controller.js | 5 +++++ src/Form/AdminPages/BaseEntityAdminForm.php | 1 + src/Form/Part/PartBaseType.php | 1 + 4 files changed, 11 insertions(+) diff --git a/assets/controllers/elements/collection_type_controller.js b/assets/controllers/elements/collection_type_controller.js index 14b683e0..19f5c531 100644 --- a/assets/controllers/elements/collection_type_controller.js +++ b/assets/controllers/elements/collection_type_controller.js @@ -79,9 +79,13 @@ export default class extends Controller { //Afterwards return the newly created row if(targetTable.tBodies[0]) { targetTable.tBodies[0].insertAdjacentHTML('beforeend', newElementStr); + var fields = targetTable.tBodies[0].querySelectorAll("input[type=number]"); + fields[fields.length - 1].focus(); return targetTable.tBodies[0].lastElementChild; } else { //Otherwise just insert it targetTable.insertAdjacentHTML('beforeend', newElementStr); + var fields = targetTable.querySelectorAll("input[type=number]"); + fields[fields.length - 1].focus(); return targetTable.lastElementChild; } } diff --git a/assets/controllers/pages/part_withdraw_modal_controller.js b/assets/controllers/pages/part_withdraw_modal_controller.js index 2d6742b4..0e5c0fc5 100644 --- a/assets/controllers/pages/part_withdraw_modal_controller.js +++ b/assets/controllers/pages/part_withdraw_modal_controller.js @@ -5,6 +5,7 @@ export default class extends Controller { connect() { this.element.addEventListener('show.bs.modal', event => this._handleModalOpen(event)); + this.element.addEventListener('shown.bs.modal', event => this._handleModalShown(event)); } _handleModalOpen(event) { @@ -61,4 +62,8 @@ export default class extends Controller amountInput.setAttribute('max', lotAmount); } } + + _handleModalShown(event) { + this.element.querySelector('input[name="amount"]').focus(); + } } \ No newline at end of file diff --git a/src/Form/AdminPages/BaseEntityAdminForm.php b/src/Form/AdminPages/BaseEntityAdminForm.php index 5a4ef5bc..64ccbdb9 100644 --- a/src/Form/AdminPages/BaseEntityAdminForm.php +++ b/src/Form/AdminPages/BaseEntityAdminForm.php @@ -71,6 +71,7 @@ class BaseEntityAdminForm extends AbstractType 'label' => 'name.label', 'attr' => [ 'placeholder' => 'part.name.placeholder', + 'autofocus' => true, ], 'disabled' => !$this->security->isGranted($is_new ? 'create' : 'edit', $entity), ]); diff --git a/src/Form/Part/PartBaseType.php b/src/Form/Part/PartBaseType.php index b8276589..0b69d477 100644 --- a/src/Form/Part/PartBaseType.php +++ b/src/Form/Part/PartBaseType.php @@ -115,6 +115,7 @@ class PartBaseType extends AbstractType 'label' => 'part.edit.name', 'attr' => [ 'placeholder' => 'part.edit.name.placeholder', + 'autofocus' => true, ], ]) ->add('description', RichTextEditorType::class, [