Try to get some compatibility for keys.
I'd thought using the DOM_VK_ names was a good idea. Symbolic names ought to be more portable than opaque numeric constants. Foolish me, expecting things to be sane. Keys now work with FF15 and Chrome 17.
This commit is contained in:
parent
a6ca511e4d
commit
e5a4a55876
3 changed files with 54 additions and 51 deletions
10
rlgterm.js
10
rlgterm.js
|
|
@ -269,8 +269,8 @@ function sendkey(ev) {
|
||||||
return;
|
return;
|
||||||
var keynum = ev.keyCode;
|
var keynum = ev.keyCode;
|
||||||
var code;
|
var code;
|
||||||
if (keynum >= ev.DOM_VK_A && keynum <= ev.DOM_VK_Z) {
|
if (keynum >= 65 && keynum <= 90) {
|
||||||
/* Letters. This assumes the codes are 65-90. */
|
/* Letters. */
|
||||||
if (ev.ctrlKey)
|
if (ev.ctrlKey)
|
||||||
keynum -= 64;
|
keynum -= 64;
|
||||||
else if (!ev.shiftKey)
|
else if (!ev.shiftKey)
|
||||||
|
|
@ -279,7 +279,7 @@ function sendkey(ev) {
|
||||||
if (code.length < 2)
|
if (code.length < 2)
|
||||||
code = "0" + code;
|
code = "0" + code;
|
||||||
}
|
}
|
||||||
else if (keynum >= ev.DOM_VK_0 && keynum <= ev.DOM_VK_9) {
|
else if (keynum >= 48 && keynum <= 57) {
|
||||||
/* The number row, NOT the numpad. */
|
/* The number row, NOT the numpad. */
|
||||||
if (ev.shiftKey) {
|
if (ev.shiftKey) {
|
||||||
code = numShifts[keynum - 48].toString(16);
|
code = numShifts[keynum - 48].toString(16);
|
||||||
|
|
@ -294,8 +294,8 @@ function sendkey(ev) {
|
||||||
else
|
else
|
||||||
code = keyHexCodes[keynum][0];
|
code = keyHexCodes[keynum][0];
|
||||||
}
|
}
|
||||||
else if (keynum == ev.DOM_VK_SHIFT || keynum == ev.DOM_VK_CONTROL ||
|
else if (keynum >= 16 && keynum <= 20) {
|
||||||
keynum == ev.DOM_VK_ALT || keynum == ev.DOM_VK_CAPS_LOCK) {
|
/* Shift, Cntl, Alt, CAPSLOCK */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
||||||
11
shterm.js
11
shterm.js
|
|
@ -213,8 +213,8 @@ function sendback(str) {
|
||||||
function sendkey(ev) {
|
function sendkey(ev) {
|
||||||
var keynum = ev.keyCode;
|
var keynum = ev.keyCode;
|
||||||
var code;
|
var code;
|
||||||
if (keynum >= ev.DOM_VK_A && keynum <= ev.DOM_VK_Z) {
|
if (keynum >= 65 && keynum <= 90) {
|
||||||
/* Letters. This assumes the codes are 65-90. */
|
/* Letters. */
|
||||||
if (ev.ctrlKey)
|
if (ev.ctrlKey)
|
||||||
keynum -= 64;
|
keynum -= 64;
|
||||||
else if (!ev.shiftKey)
|
else if (!ev.shiftKey)
|
||||||
|
|
@ -223,7 +223,7 @@ function sendkey(ev) {
|
||||||
if (code.length < 2)
|
if (code.length < 2)
|
||||||
code = "0" + code;
|
code = "0" + code;
|
||||||
}
|
}
|
||||||
else if (keynum >= ev.DOM_VK_0 && keynum <= ev.DOM_VK_9) {
|
else if (keynum >= 48 && keynum <= 57) {
|
||||||
/* The number row. */
|
/* The number row. */
|
||||||
if (ev.shiftKey) {
|
if (ev.shiftKey) {
|
||||||
code = numShifts[keynum - 48].toString(16);
|
code = numShifts[keynum - 48].toString(16);
|
||||||
|
|
@ -238,8 +238,7 @@ function sendkey(ev) {
|
||||||
else
|
else
|
||||||
code = keyHexCodes[keynum][0];
|
code = keyHexCodes[keynum][0];
|
||||||
}
|
}
|
||||||
else if (keynum == ev.DOM_VK_SHIFT || keynum == ev.DOM_VK_CONTROL ||
|
else if (keynum >= 16 && keynum <= 20) {
|
||||||
keynum == ev.DOM_VK_ALT || keynum == ev.DOM_VK_CAPS_LOCK) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -298,7 +297,7 @@ function vkey(c) {
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
//writeData("Sending " + keystr);
|
//writeData("Sending " + keystr);
|
||||||
var formdata = {"t": "d", "n": nsend++, "d": code};
|
var formdata = {"t": "d", "n": nsend++, "d": keystr};
|
||||||
var datareq = new XMLHttpRequest();
|
var datareq = new XMLHttpRequest();
|
||||||
datareq.onreadystatechange = postResponseHandler;
|
datareq.onreadystatechange = postResponseHandler;
|
||||||
datareq.open('POST', '/feed', true);
|
datareq.open('POST', '/feed', true);
|
||||||
|
|
|
||||||
|
|
@ -5,25 +5,29 @@ var numShifts = [41, 33, 64, 35, 36, 37, 94, 38, 42, 40];
|
||||||
|
|
||||||
var keyHexCodes = {
|
var keyHexCodes = {
|
||||||
init: function () {
|
init: function () {
|
||||||
this[KeyboardEvent.DOM_VK_RETURN] = ["0d", "0d"];
|
this[13] = ["0d", "0d"]; // return
|
||||||
this[KeyboardEvent.DOM_VK_SPACE] = ["20", "20"];
|
this[32] = ["20", "20"]; // space
|
||||||
this[KeyboardEvent.DOM_VK_TAB] = ["09", "09"];
|
this[9] = ["09", "09"]; // tab
|
||||||
this[KeyboardEvent.DOM_VK_BACK_QUOTE] = ["60", "7e"];
|
this[192] = ["60", "7e"]; // backtick, tilde
|
||||||
this[KeyboardEvent.DOM_VK_OPEN_BRACKET] = ["5b", "7b"];
|
this[219] = ["5b", "7b"]; // open bracket, open brace
|
||||||
this[KeyboardEvent.DOM_VK_CLOSE_BRACKET] = ["5d", "7d"];
|
this[221] = ["5d", "7d"]; // close bracket, close brace
|
||||||
this[KeyboardEvent.DOM_VK_BACK_SLASH] = ["5c", "7c"];
|
this[220] = ["5c", "7c"]; // backslash, pipe
|
||||||
this[KeyboardEvent.DOM_VK_SEMICOLON] = ["3b", "3a"];
|
this[59] = ["3b", "3a"]; // semicolon, colon
|
||||||
this[KeyboardEvent.DOM_VK_QUOTE] = ["27", "22"];
|
this[186] = ["3b", "3a"]; // semicolon, colon (Chrome)
|
||||||
this[KeyboardEvent.DOM_VK_COMMA] = ["2c", "3c"];
|
this[222] = ["27", "22"]; // single quote, double quote
|
||||||
this[KeyboardEvent.DOM_VK_PERIOD] = ["2e", "3e"];
|
this[188] = ["2c", "3c"]; // comma, less than
|
||||||
this[KeyboardEvent.DOM_VK_SLASH] = ["2f", "3f"];
|
this[190] = ["2e", "3e"]; // period, right angle
|
||||||
this[KeyboardEvent.DOM_VK_EQUALS] = ["3d", "2b"];
|
this[191] = ["2f", "3f"]; // slash, question mark
|
||||||
this[KeyboardEvent.DOM_VK_SUBTRACT] = ["2d", "5f"];
|
this[61] = ["3d", "2b"]; // equal, plus
|
||||||
this[KeyboardEvent.DOM_VK_BACK_SPACE] = ["08", "08"];
|
this[187] = ["3d", "2b"]; // equal, plus (Chrome)
|
||||||
this[KeyboardEvent.DOM_VK_DELETE] = ["1b5b337e", "1b5b337e"];
|
this[109] = ["2d", "5f"]; // subtract, underscore (maybe on numpad)
|
||||||
this[KeyboardEvent.DOM_VK_ESCAPE] = ["1b", "1b"];
|
this[173] = ["2d", "5f"]; // subtract, underscore (maybe not on numpad)
|
||||||
this[KeyboardEvent.DOM_VK_PAGE_UP] = ["1b5b357e", "1b5b357e"];
|
this[189] = ["2d", "5f"]; // subtract, underscore (Chrome)
|
||||||
this[KeyboardEvent.DOM_VK_PAGE_DOWN] = ["1b5b367e", "1b5b367e"];
|
this[8] = ["08", "08"]; // backspace
|
||||||
|
this[46] = ["1b5b337e", "1b5b337e"]; // delete
|
||||||
|
this[27] = ["1b", "1b"]; // escape
|
||||||
|
this[33] = ["1b5b357e", "1b5b357e"]; // page up
|
||||||
|
this[34] = ["1b5b367e", "1b5b367e"]; // page down
|
||||||
this.appCursor(false);
|
this.appCursor(false);
|
||||||
this.appKeypad(false);
|
this.appKeypad(false);
|
||||||
},
|
},
|
||||||
|
|
@ -31,20 +35,20 @@ var keyHexCodes = {
|
||||||
appCursor: function (on) {
|
appCursor: function (on) {
|
||||||
/* Aren't special keys vile? */
|
/* Aren't special keys vile? */
|
||||||
if (on) {
|
if (on) {
|
||||||
this[KeyboardEvent.DOM_VK_LEFT] = ["1b4f44", "1b4f44"];
|
this[37] = ["1b4f44", "1b4f44"]; // left arror
|
||||||
this[KeyboardEvent.DOM_VK_RIGHT] = ["1b4f43", "1b4f43"];
|
this[39] = ["1b4f43", "1b4f43"]; // right arrow
|
||||||
this[KeyboardEvent.DOM_VK_UP] = ["1b4f41", "1b4f41"];
|
this[38] = ["1b4f41", "1b4f41"]; // up arrow
|
||||||
this[KeyboardEvent.DOM_VK_DOWN] = ["1b4f42", "1b4f42"];
|
this[40] = ["1b4f42", "1b4f42"]; // down arrow
|
||||||
this[KeyboardEvent.DOM_VK_END] = ["1b4f46", "1b4f46"];
|
this[35] = ["1b4f46", "1b4f46"]; // end
|
||||||
this[KeyboardEvent.DOM_VK_HOME] = ["1b4f48", "1b4f48"];
|
this[36] = ["1b4f48", "1b4f48"]; // home
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
this[KeyboardEvent.DOM_VK_LEFT] = ["1b5b44", "1b5b44"];
|
this[37] = ["1b5b44", "1b5b44"]; // left arror
|
||||||
this[KeyboardEvent.DOM_VK_RIGHT] = ["1b5b43", "1b5b43"];
|
this[39] = ["1b5b43", "1b5b43"]; // right arrow
|
||||||
this[KeyboardEvent.DOM_VK_UP] = ["1b5b41", "1b5b41"];
|
this[38] = ["1b5b41", "1b5b41"]; // up arrow
|
||||||
this[KeyboardEvent.DOM_VK_DOWN] = ["1b5b42", "1b5b42"];
|
this[40] = ["1b5b42", "1b5b42"]; // down arrow
|
||||||
this[KeyboardEvent.DOM_VK_END] = ["1b5b46", "1b5b46"];
|
this[35] = ["1b5b46", "1b5b46"]; // end
|
||||||
this[KeyboardEvent.DOM_VK_HOME] = ["1b5b48", "1b5b48"];
|
this[36] = ["1b5b48", "1b5b48"]; // home
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
appKeypad: function (on) {
|
appKeypad: function (on) {
|
||||||
|
|
@ -52,15 +56,15 @@ var keyHexCodes = {
|
||||||
* sequences. Since we can't count on the terminfo description actually
|
* sequences. Since we can't count on the terminfo description actually
|
||||||
* containing those sequences, pretend they're just arrow keys etc.
|
* containing those sequences, pretend they're just arrow keys etc.
|
||||||
*/
|
*/
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD1] = ["1b4f46", "1b4f46"];
|
this[97] = ["1b4f46", "1b4f46"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD2] = ["1b4f42", "1b4f42"];
|
this[98] = ["1b4f42", "1b4f42"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD3] = ["1b5b367e", "1b5b367e"];
|
this[99] = ["1b5b367e", "1b5b367e"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD4] = ["1b4f44", "1b4f44"];
|
this[100] = ["1b4f44", "1b4f44"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD5] = ["1b5b45", "1b5b45"];
|
this[101] = ["1b5b45", "1b5b45"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD6] = ["1b4f43", "1b4f43"];
|
this[102] = ["1b4f43", "1b4f43"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD7] = ["1b4f48", "1b4f48"];
|
this[103] = ["1b4f48", "1b4f48"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD8] = ["1b4f41", "1b4f41"];
|
this[104] = ["1b4f41", "1b4f41"];
|
||||||
this[KeyboardEvent.DOM_VK_NUMPAD9] = ["1b5b357e", "1b5b357e"];
|
this[105] = ["1b5b357e", "1b5b357e"];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue