From b64dc497beec6d03a1fe7236fb834c77a29dd483 Mon Sep 17 00:00:00 2001 From: Miodec Date: Mon, 15 Jan 2024 13:19:30 +0100 Subject: [PATCH] fix(layout emulator): not returning default char if no alt char was defined closes #4922 --- frontend/src/ts/test/layout-emulator.ts | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/frontend/src/ts/test/layout-emulator.ts b/frontend/src/ts/test/layout-emulator.ts index 28aee6771..760c7c831 100644 --- a/frontend/src/ts/test/layout-emulator.ts +++ b/frontend/src/ts/test/layout-emulator.ts @@ -9,10 +9,10 @@ const isPunctuationPattern = /\p{P}/u; export async function getCharFromEvent( event: JQuery.KeyDownEvent ): Promise { - function emulatedLayoutGetVariantIndex( + function emulatedLayoutGetVariant( event: JQuery.KeyDownEvent, keyVariants: string - ): number { + ): string | undefined { let isCapitalized = event.shiftKey; const altGrIndex = isAltGrPressed && keyVariants.length > 2 ? 2 : 0; const isNotPunctuation = !isPunctuationPattern.test( @@ -21,7 +21,12 @@ export async function getCharFromEvent( if (capsState && isNotPunctuation) { isCapitalized = !event.shiftKey; } - return (isCapitalized ? 1 : 0) + altGrIndex; + + const altVersion = keyVariants[(isCapitalized ? 1 : 0) + altGrIndex]; + const nonAltVersion = keyVariants[isCapitalized ? 1 : 0]; + const defaultVersion = keyVariants[0]; + + return altVersion || nonAltVersion || defaultVersion; } let layout; @@ -193,6 +198,10 @@ export async function getCharFromEvent( ]; } + if (!keyEventCodes.includes(event.code)) { + return null; + } + const layoutKeys = layout.keys; const layoutMap = layoutKeys["row1"] @@ -209,10 +218,9 @@ export async function getCharFromEvent( return null; } } - const variant = emulatedLayoutGetVariantIndex(event, layoutMap[mapIndex]); - const char = layoutMap[mapIndex][variant]; - if (char) { - return char; + const charVariant = emulatedLayoutGetVariant(event, layoutMap[mapIndex]); + if (charVariant !== undefined) { + return charVariant; } else { return null; }