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:
John "Elwin" Edwards 2012-06-21 09:43:52 -07:00
parent a6ca511e4d
commit e5a4a55876
3 changed files with 54 additions and 51 deletions

View file

@ -269,8 +269,8 @@ function sendkey(ev) {
return;
var keynum = ev.keyCode;
var code;
if (keynum >= ev.DOM_VK_A && keynum <= ev.DOM_VK_Z) {
/* Letters. This assumes the codes are 65-90. */
if (keynum >= 65 && keynum <= 90) {
/* Letters. */
if (ev.ctrlKey)
keynum -= 64;
else if (!ev.shiftKey)
@ -279,7 +279,7 @@ function sendkey(ev) {
if (code.length < 2)
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. */
if (ev.shiftKey) {
code = numShifts[keynum - 48].toString(16);
@ -294,8 +294,8 @@ function sendkey(ev) {
else
code = keyHexCodes[keynum][0];
}
else if (keynum == ev.DOM_VK_SHIFT || keynum == ev.DOM_VK_CONTROL ||
keynum == ev.DOM_VK_ALT || keynum == ev.DOM_VK_CAPS_LOCK) {
else if (keynum >= 16 && keynum <= 20) {
/* Shift, Cntl, Alt, CAPSLOCK */
return;
}
else {

View file

@ -213,8 +213,8 @@ function sendback(str) {
function sendkey(ev) {
var keynum = ev.keyCode;
var code;
if (keynum >= ev.DOM_VK_A && keynum <= ev.DOM_VK_Z) {
/* Letters. This assumes the codes are 65-90. */
if (keynum >= 65 && keynum <= 90) {
/* Letters. */
if (ev.ctrlKey)
keynum -= 64;
else if (!ev.shiftKey)
@ -223,7 +223,7 @@ function sendkey(ev) {
if (code.length < 2)
code = "0" + code;
}
else if (keynum >= ev.DOM_VK_0 && keynum <= ev.DOM_VK_9) {
else if (keynum >= 48 && keynum <= 57) {
/* The number row. */
if (ev.shiftKey) {
code = numShifts[keynum - 48].toString(16);
@ -238,8 +238,7 @@ function sendkey(ev) {
else
code = keyHexCodes[keynum][0];
}
else if (keynum == ev.DOM_VK_SHIFT || keynum == ev.DOM_VK_CONTROL ||
keynum == ev.DOM_VK_ALT || keynum == ev.DOM_VK_CAPS_LOCK) {
else if (keynum >= 16 && keynum <= 20) {
return;
}
else {
@ -298,7 +297,7 @@ function vkey(c) {
else
return;
//writeData("Sending " + keystr);
var formdata = {"t": "d", "n": nsend++, "d": code};
var formdata = {"t": "d", "n": nsend++, "d": keystr};
var datareq = new XMLHttpRequest();
datareq.onreadystatechange = postResponseHandler;
datareq.open('POST', '/feed', true);

View file

@ -5,25 +5,29 @@ var numShifts = [41, 33, 64, 35, 36, 37, 94, 38, 42, 40];
var keyHexCodes = {
init: function () {
this[KeyboardEvent.DOM_VK_RETURN] = ["0d", "0d"];
this[KeyboardEvent.DOM_VK_SPACE] = ["20", "20"];
this[KeyboardEvent.DOM_VK_TAB] = ["09", "09"];
this[KeyboardEvent.DOM_VK_BACK_QUOTE] = ["60", "7e"];
this[KeyboardEvent.DOM_VK_OPEN_BRACKET] = ["5b", "7b"];
this[KeyboardEvent.DOM_VK_CLOSE_BRACKET] = ["5d", "7d"];
this[KeyboardEvent.DOM_VK_BACK_SLASH] = ["5c", "7c"];
this[KeyboardEvent.DOM_VK_SEMICOLON] = ["3b", "3a"];
this[KeyboardEvent.DOM_VK_QUOTE] = ["27", "22"];
this[KeyboardEvent.DOM_VK_COMMA] = ["2c", "3c"];
this[KeyboardEvent.DOM_VK_PERIOD] = ["2e", "3e"];
this[KeyboardEvent.DOM_VK_SLASH] = ["2f", "3f"];
this[KeyboardEvent.DOM_VK_EQUALS] = ["3d", "2b"];
this[KeyboardEvent.DOM_VK_SUBTRACT] = ["2d", "5f"];
this[KeyboardEvent.DOM_VK_BACK_SPACE] = ["08", "08"];
this[KeyboardEvent.DOM_VK_DELETE] = ["1b5b337e", "1b5b337e"];
this[KeyboardEvent.DOM_VK_ESCAPE] = ["1b", "1b"];
this[KeyboardEvent.DOM_VK_PAGE_UP] = ["1b5b357e", "1b5b357e"];
this[KeyboardEvent.DOM_VK_PAGE_DOWN] = ["1b5b367e", "1b5b367e"];
this[13] = ["0d", "0d"]; // return
this[32] = ["20", "20"]; // space
this[9] = ["09", "09"]; // tab
this[192] = ["60", "7e"]; // backtick, tilde
this[219] = ["5b", "7b"]; // open bracket, open brace
this[221] = ["5d", "7d"]; // close bracket, close brace
this[220] = ["5c", "7c"]; // backslash, pipe
this[59] = ["3b", "3a"]; // semicolon, colon
this[186] = ["3b", "3a"]; // semicolon, colon (Chrome)
this[222] = ["27", "22"]; // single quote, double quote
this[188] = ["2c", "3c"]; // comma, less than
this[190] = ["2e", "3e"]; // period, right angle
this[191] = ["2f", "3f"]; // slash, question mark
this[61] = ["3d", "2b"]; // equal, plus
this[187] = ["3d", "2b"]; // equal, plus (Chrome)
this[109] = ["2d", "5f"]; // subtract, underscore (maybe on numpad)
this[173] = ["2d", "5f"]; // subtract, underscore (maybe not on numpad)
this[189] = ["2d", "5f"]; // subtract, underscore (Chrome)
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.appKeypad(false);
},
@ -31,20 +35,20 @@ var keyHexCodes = {
appCursor: function (on) {
/* Aren't special keys vile? */
if (on) {
this[KeyboardEvent.DOM_VK_LEFT] = ["1b4f44", "1b4f44"];
this[KeyboardEvent.DOM_VK_RIGHT] = ["1b4f43", "1b4f43"];
this[KeyboardEvent.DOM_VK_UP] = ["1b4f41", "1b4f41"];
this[KeyboardEvent.DOM_VK_DOWN] = ["1b4f42", "1b4f42"];
this[KeyboardEvent.DOM_VK_END] = ["1b4f46", "1b4f46"];
this[KeyboardEvent.DOM_VK_HOME] = ["1b4f48", "1b4f48"];
this[37] = ["1b4f44", "1b4f44"]; // left arror
this[39] = ["1b4f43", "1b4f43"]; // right arrow
this[38] = ["1b4f41", "1b4f41"]; // up arrow
this[40] = ["1b4f42", "1b4f42"]; // down arrow
this[35] = ["1b4f46", "1b4f46"]; // end
this[36] = ["1b4f48", "1b4f48"]; // home
}
else {
this[KeyboardEvent.DOM_VK_LEFT] = ["1b5b44", "1b5b44"];
this[KeyboardEvent.DOM_VK_RIGHT] = ["1b5b43", "1b5b43"];
this[KeyboardEvent.DOM_VK_UP] = ["1b5b41", "1b5b41"];
this[KeyboardEvent.DOM_VK_DOWN] = ["1b5b42", "1b5b42"];
this[KeyboardEvent.DOM_VK_END] = ["1b5b46", "1b5b46"];
this[KeyboardEvent.DOM_VK_HOME] = ["1b5b48", "1b5b48"];
this[37] = ["1b5b44", "1b5b44"]; // left arror
this[39] = ["1b5b43", "1b5b43"]; // right arrow
this[38] = ["1b5b41", "1b5b41"]; // up arrow
this[40] = ["1b5b42", "1b5b42"]; // down arrow
this[35] = ["1b5b46", "1b5b46"]; // end
this[36] = ["1b5b48", "1b5b48"]; // home
}
},
appKeypad: function (on) {
@ -52,15 +56,15 @@ var keyHexCodes = {
* sequences. Since we can't count on the terminfo description actually
* containing those sequences, pretend they're just arrow keys etc.
*/
this[KeyboardEvent.DOM_VK_NUMPAD1] = ["1b4f46", "1b4f46"];
this[KeyboardEvent.DOM_VK_NUMPAD2] = ["1b4f42", "1b4f42"];
this[KeyboardEvent.DOM_VK_NUMPAD3] = ["1b5b367e", "1b5b367e"];
this[KeyboardEvent.DOM_VK_NUMPAD4] = ["1b4f44", "1b4f44"];
this[KeyboardEvent.DOM_VK_NUMPAD5] = ["1b5b45", "1b5b45"];
this[KeyboardEvent.DOM_VK_NUMPAD6] = ["1b4f43", "1b4f43"];
this[KeyboardEvent.DOM_VK_NUMPAD7] = ["1b4f48", "1b4f48"];
this[KeyboardEvent.DOM_VK_NUMPAD8] = ["1b4f41", "1b4f41"];
this[KeyboardEvent.DOM_VK_NUMPAD9] = ["1b5b357e", "1b5b357e"];
this[97] = ["1b4f46", "1b4f46"];
this[98] = ["1b4f42", "1b4f42"];
this[99] = ["1b5b367e", "1b5b367e"];
this[100] = ["1b4f44", "1b4f44"];
this[101] = ["1b5b45", "1b5b45"];
this[102] = ["1b4f43", "1b4f43"];
this[103] = ["1b4f48", "1b4f48"];
this[104] = ["1b4f41", "1b4f41"];
this[105] = ["1b5b357e", "1b5b357e"];
return;
}
};