1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
import * as api from './api'
export function loadBehaviours () {
return api.loadBehaviours()
}
export function loadKeycodes () {
return api.loadKeycodes().then(normalizeZmkKeycodes)
}
function shortestAlias (aliases) {
return [...aliases]
.sort((a, b) => a.length - b.length)[0]
.replace(/^KC_/, '')
}
function normalizeZmkKeycodes (keycodes) {
const fnPattern = /^(.+?)\((code)\)$/
return keycodes.reduce((keycodes, keycode) => {
const { description, context, symbol } = keycode
const aliases = keycode.names.filter(name => !name.match(fnPattern))
const fnCode = keycode.names.map(name => name.match(fnPattern)).filter(v => !!v)[0]
const base = { aliases, description, context, symbol: symbol || shortestAlias(aliases), params: [] }
for (let code of aliases) {
keycodes.push(Object.assign({}, base, {
code,
isModifier: !!fnCode
}))
}
if (fnCode) {
keycodes.push(Object.assign({}, base, {
code: fnCode[1],
params: fnCode[2].split(',')
}))
}
return keycodes
}, [])
}
|