From 46563d418ecd973eb08f2d5eb04ecac1cec6a443 Mon Sep 17 00:00:00 2001 From: Marko Stamcar Date: Wed, 13 May 2020 18:48:50 +0200 Subject: [PATCH 1/2] Fix for mobile browsers: soft keyboards do not send key events except for ENTER so we just take the last line from textarea without the prompt prefix --- src/terminal.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/terminal.js b/src/terminal.js index 5e36e6c..1bec9ff 100644 --- a/src/terminal.js +++ b/src/terminal.js @@ -128,7 +128,7 @@ const executor = commands => (cmd, ...args) => cb => { }; // Handle keyboard events -const keyboard = (parse) => { +const keyboard = ($element, prompt, parse) => { let input = []; const keys = {8: 'backspace', 13: 'enter'}; const ignoreKey = code => code >= 33 && code <= 40; @@ -138,7 +138,7 @@ const keyboard = (parse) => { keypress: (ev) => { if (key(ev) === 'enter') { const str = input.join('').trim(); - parse(str); + parse(str || $element.value.split(/\n/)[$element.value.split(/\n/).length - 1].replace(prompt(), '')); input = []; } else if (key(ev) !== 'backspace') { input.push(String.fromCharCode(ev.which || ev.keyCode)); @@ -190,7 +190,7 @@ export const terminal = (opts) => { const render = renderer(tickrate, onrender); const parse = parser(onparsed); const focus = () => setTimeout(() => $element.focus(), 1); - const kbd = keyboard(parse); + const kbd = keyboard($element, prompt, parse); const clear = () => ($element.value = ''); const input = ev => busy ? ev.preventDefault() From 5a83864fb0109eafe405f79696e564b93072424c Mon Sep 17 00:00:00 2001 From: Marko Stamcar Date: Fri, 15 May 2020 16:25:30 +0200 Subject: [PATCH 2/2] iOS Safari keyboard fix --- src/terminal.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/terminal.js b/src/terminal.js index 1bec9ff..67bc178 100644 --- a/src/terminal.js +++ b/src/terminal.js @@ -42,6 +42,7 @@ const createElement = root => { el.value = ''; root.appendChild(el); + document.body.ontouchend = function() { el.focus(); }; return el; };