Fix paste.

This commit is contained in:
Brad Nelson
2022-08-04 10:55:45 -07:00
parent 9d72d59a9d
commit e0744746eb

View File

@ -82,6 +82,7 @@ if (!globalObj.write) {
const BACKSPACE = ['⌫', 8, 45]; const BACKSPACE = ['⌫', 8, 45];
const BACKTICK = String.fromCharCode(96); const BACKTICK = String.fromCharCode(96);
const TILDE = String.fromCharCode(126); const TILDE = String.fromCharCode(126);
const PASTE = ['^V', 22, 30];
const G1 = ['Gap', 0, 15]; const G1 = ['Gap', 0, 15];
const KEY_COLOR = 'linear-gradient(to bottom right, #ccc, #999)'; const KEY_COLOR = 'linear-gradient(to bottom right, #ccc, #999)';
var keymaps = [ var keymaps = [
@ -99,13 +100,13 @@ if (!globalObj.write) {
]), ]),
AddKeymap([ AddKeymap([
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'Newline', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'Newline',
'@', '#', '$', '_', '&', '-', '+', '(', ')', '/', 'Newline', PASTE, '@', '$', '_', '&', '-', '+', '(', ')', '/', 'Newline',
SHIFT3, '*', '"', '\'', ':', ';', '!', '?', BACKSPACE, 'Newline', SHIFT3, '*', '"', '\'', ':', ';', '!', '?', BACKSPACE, 'Newline',
ABC, ',', [' ', 32, 5 * 30], '.', ENTER, ABC, ',', [' ', 32, 5 * 30], '.', ENTER,
]), ]),
AddKeymap([ AddKeymap([
TILDE, BACKTICK, '3', '4', '5', '6', '7', '8', '9', '0', 'Newline', TILDE, BACKTICK, '3', '4', '5', '^', '7', '8', '9', '0', 'Newline',
'@', '#', '$', '_', '&', '-', '=', '{', '}', '\\', 'Newline', '#', '@', '$', '_', '&', '-', '=', '{', '}', '\\', 'Newline',
NUMS, '%', '"', '\'', ':', ';', '[', ']', BACKSPACE, 'Newline', NUMS, '%', '"', '\'', ':', ';', '[', ']', BACKSPACE, 'Newline',
ABC, '<', [' ', 32, 5 * 30], '>', ENTER, ABC, '<', [' ', 32, 5 * 30], '>', ENTER,
]), ]),
@ -115,6 +116,17 @@ if (!globalObj.write) {
keymaps[i].style.display = i == n ? '' : 'none'; keymaps[i].style.display = i == n ? '' : 'none';
} }
} }
context.Inject = function(text) {
var data = new TextEncoder().encode(text);
for (var i = 0; i < data.length; ++i) {
context.inbuffer.push(data[i]);
}
};
context.Paste = function() {
navigator.clipboard.readText().then(function(clipText) {
context.Inject(clipText);
});
};
function AddKey(keymap, item) { function AddKey(keymap, item) {
if (item === 'Newline') { if (item === 'Newline') {
var k = document.createElement('br'); var k = document.createElement('br');
@ -147,6 +159,8 @@ if (!globalObj.write) {
k.onclick = function() { k.onclick = function() {
if (item.length > 3) { // SHIFT if (item.length > 3) { // SHIFT
SwitchKeymap(item[1]); SwitchKeymap(item[1]);
} else if (keycode === 22) { // PASTE
context.Paste();
} else { } else {
context.inbuffer.push(keycode); context.inbuffer.push(keycode);
} }
@ -246,10 +260,7 @@ if (!globalObj.write) {
new Uint8Array(context.outbuffer)) + cursor; new Uint8Array(context.outbuffer)) + cursor;
}; };
window.addEventListener('paste', function(e) { window.addEventListener('paste', function(e) {
var data = new TextEncoder().encode(e.clipboardData.getData('text')); context.Inject(e.clipboardData.getData('text'));
for (var i = 0; i < data.length; ++i) {
context.inbuffer.push(data[i]);
}
}); });
setMode(0); setMode(0);
context.Clear(); context.Clear();