# HG changeset patch # User John "Elwin" Edwards # Date 1340297032 25200 # Node ID d7eb63cd7a164c628e0d997cf43479b4a85856fe # Parent 0c16f07135dd9fed0aa90c80384668998dfd93a4 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. diff -r 0c16f07135dd -r d7eb63cd7a16 rlgterm.js --- a/rlgterm.js Wed Jun 20 14:14:22 2012 -0700 +++ b/rlgterm.js Thu Jun 21 09:43:52 2012 -0700 @@ -269,8 +269,8 @@ 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 @@ 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 @@ 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 { diff -r 0c16f07135dd -r d7eb63cd7a16 shterm.js --- a/shterm.js Wed Jun 20 14:14:22 2012 -0700 +++ b/shterm.js Thu Jun 21 09:43:52 2012 -0700 @@ -213,8 +213,8 @@ 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 @@ 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 @@ 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 @@ 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); diff -r 0c16f07135dd -r d7eb63cd7a16 termemu-keys.js --- a/termemu-keys.js Wed Jun 20 14:14:22 2012 -0700 +++ b/termemu-keys.js Thu Jun 21 09:43:52 2012 -0700 @@ -5,25 +5,29 @@ 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 @@ 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 @@ * 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; } };