browser keypress selects page key
[sheet.git] / keys.js
diff --git a/keys.js b/keys.js
index d891b528d2bd9362ee6be15baeba2f92928bb4f1..5dbfb104f3f34cfa847c4c79264763ec6eafbc6c 100644 (file)
--- a/keys.js
+++ b/keys.js
@@ -23,3 +23,30 @@ 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;
+               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;
+       }
+}