Skip to content

Commit

Permalink
fix: some keybinding names were incorrectly parsed
Browse files Browse the repository at this point in the history
feat: make fullscreen button (F11) configurable in the keybinding panel
  • Loading branch information
zardoy committed Nov 18, 2024
1 parent 0506d9d commit 85ece5b
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 9 deletions.
9 changes: 5 additions & 4 deletions src/controls.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ export const contro = new ControMax({
selectItem: ['KeyH'] // default will be removed
},
ui: {
toggleFullscreen: ['F11'],
back: [null/* 'Escape' */, 'B'],
leftClick: [null, 'A'],
rightClick: [null, 'Y'],
Expand Down Expand Up @@ -419,6 +420,10 @@ contro.on('trigger', ({ command }) => {
if (command === 'ui.pauseMenu') {
showModal({ reactType: 'pause-screen' })
}

if (command === 'ui.toggleFullscreen') {
void goFullscreen(true)
}
})

contro.on('release', ({ command }) => {
Expand Down Expand Up @@ -742,10 +747,6 @@ window.addEventListener('keydown', (e) => {

// #region experimental debug things
window.addEventListener('keydown', (e) => {
if (e.code === 'F11') {
e.preventDefault()
void goFullscreen(true)
}
if (e.code === 'KeyL' && e.altKey) {
console.clear()
}
Expand Down
10 changes: 5 additions & 5 deletions src/react/Keybinding.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,19 +30,19 @@ export default ({ type, val, isPS }: Props) => {
</>
}

async function parseBindingName (binding: string) {
export async function parseBindingName (binding: string) {
if (!binding) return ''

const { keyboard } = navigator
const layoutMap = await keyboard?.getLayoutMap?.() ?? new Map()
const layoutMap = await keyboard?.getLayoutMap?.() ?? new Map<string, string>()

const mapKey = key => layoutMap.get(key) || key
const mapKey = (key: string) => layoutMap.get(key) || key

const cut = binding.replaceAll(/(Numpad|Digit|Key)/g, '')
const cut = binding.replaceAll(/(Digit|Key)/g, '')
const parts = cut.includes('+') ? cut.split('+') : [cut]

for (let i = 0; i < parts.length; i++) {
parts[i] = mapKey(parts[i]).split(/(?=[A-Z\d])/).reverse().join(' ')
parts[i] = mapKey(parts[i]).split(/(?<=[a-z])(?=\d)/).join(' ').split(/(?=[A-Z])/).reverse().join(' ')
}

return parts.join(' + ')
Expand Down
14 changes: 14 additions & 0 deletions src/react/keybinding.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { test, expect } from 'vitest'
import { parseBindingName } from './Keybinding'

test('display keybinding correctly', async () => {
expect(await parseBindingName('unknown')).toMatchInlineSnapshot('"unknown"')
expect(await parseBindingName('KeyT')).toMatchInlineSnapshot('"T"')
expect(await parseBindingName('Digit1')).toMatchInlineSnapshot('"1"')
expect(await parseBindingName('Numpad1')).toMatchInlineSnapshot('"Numpad 1"')
expect(await parseBindingName('MetaLeft')).toMatchInlineSnapshot('"Left Meta"')
expect(await parseBindingName('Space')).toMatchInlineSnapshot('"Space"')
expect(await parseBindingName('Escape')).toMatchInlineSnapshot('"Escape"')
expect(await parseBindingName('F11')).toMatchInlineSnapshot('"F11"')
expect(await parseBindingName('Mouse 55')).toMatchInlineSnapshot('"Mouse 55"')
})
1 change: 1 addition & 0 deletions vitest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export default defineConfig({
include: [
'../../src/botUtils.test.ts',
'../../src/markdownToFormattedText.test.ts',
'../../src/react/keybinding.test.ts',
'lib/mesher/test/tests.test.ts',
'sign-renderer/tests.test.ts'
],
Expand Down

0 comments on commit 85ece5b

Please sign in to comment.