X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/d4937c088ffb429c8b3fdf1b3d35b8cbc78d1290..331ae2a07f1496d06d34878afd2ccd116db39bbb:/keys.js diff --git a/keys.js b/keys.js index d891b52..650cb15 100644 --- a/keys.js +++ b/keys.js @@ -23,3 +23,31 @@ function setmode(classname) { } } +var keyfocus = undefined; +document.onkeypress = function(e) { + var keylabels = document.getElementById('rows').getElementsByTagName('B'); + var keys = {}; + for (var i = 0; i < keylabels.length; i++) { + keys[keylabels[i].innerHTML] = keylabels[i].parentNode; + } + var input = e.charCode || e.keyCode; + for (var i = 0; i < keylabels.length; i++) { + var key = keylabels[i].parentNode; + if (!key.onclick) continue; + var keychar = key.className.match(/ chr(\d+)$/); + if (!keychar) continue; // not enterable + keychar = keychar[1]; + if (keychar != input) continue; // different key + var keymod = key.parentNode.className; + if ((keymod.search(/\bctrl\b/) != -1) != e.ctrlKey) continue; // modifier mismatch + if ((keymod.search(/\bmeta\b/) != -1) != e.altKey) continue; + var row = key.parentNode.parentNode; + var shown = row.style.display != 'none'; + if (!shown) continue; // foreign mode + if (keyfocus) keyfocus.style.outline = ''; + key.style.outline = '1px solid red'; + keyfocus = key; + if (key.onclick) key.onclick(); + return false; + } +}