|
|
|
@ -4,6 +4,12 @@ module.exports = function (screen, input) { |
|
|
|
|
const keyInput = qs('#softkb-input') |
|
|
|
|
if (!keyInput) return // abort, we're not on the terminal page
|
|
|
|
|
|
|
|
|
|
const shortcutBar = document.createElement('div') |
|
|
|
|
shortcutBar.id = 'keyboard-shortcut-bar' |
|
|
|
|
if (navigator.userAgent.match(/iPad|iPhone|iPod/)) { |
|
|
|
|
qs('#screen').appendChild(shortcutBar) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
let keyboardOpen = false |
|
|
|
|
|
|
|
|
|
// moves the input to where the cursor is on the canvas.
|
|
|
|
@ -19,9 +25,13 @@ module.exports = function (screen, input) { |
|
|
|
|
keyInput.addEventListener('focus', () => { |
|
|
|
|
keyboardOpen = true |
|
|
|
|
updateInputPosition() |
|
|
|
|
shortcutBar.classList.add('open') |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
keyInput.addEventListener('blur', () => (keyboardOpen = false)) |
|
|
|
|
keyInput.addEventListener('blur', () => { |
|
|
|
|
keyboardOpen = false |
|
|
|
|
shortcutBar.classList.remove('open') |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
screen.on('cursor-moved', updateInputPosition) |
|
|
|
|
|
|
|
|
@ -104,4 +114,30 @@ module.exports = function (screen, input) { |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
screen.on('open-soft-keyboard', () => keyInput.focus()) |
|
|
|
|
|
|
|
|
|
// shortcut bar
|
|
|
|
|
const shortcuts = { |
|
|
|
|
Tab: 0x09, |
|
|
|
|
'←': 0x25, |
|
|
|
|
'↓': 0x28, |
|
|
|
|
'↑': 0x26, |
|
|
|
|
'→': 0x27, |
|
|
|
|
'^C': { which: 0x43, ctrlKey: true } |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for (const shortcut in shortcuts) { |
|
|
|
|
const button = document.createElement('button') |
|
|
|
|
button.classList.add('shortcut-button') |
|
|
|
|
button.textContent = shortcut |
|
|
|
|
shortcutBar.appendChild(button) |
|
|
|
|
|
|
|
|
|
const key = shortcuts[shortcut] |
|
|
|
|
button.addEventListener('click', e => { |
|
|
|
|
e.preventDefault() |
|
|
|
|
let fakeEvent = key |
|
|
|
|
if (typeof key === 'number') fakeEvent = { which: key } |
|
|
|
|
fakeEvent.preventDefault = () => {} |
|
|
|
|
input.handleKeyDown(fakeEvent) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|