summaryrefslogtreecommitdiff
path: root/js/ui/keys.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/ui/keys.js')
-rw-r--r--js/ui/keys.js68
1 files changed, 64 insertions, 4 deletions
diff --git a/js/ui/keys.js b/js/ui/keys.js
index f76d562..8850aa2 100644
--- a/js/ui/keys.js
+++ b/js/ui/keys.js
@@ -9,7 +9,11 @@ var keys = (function(){
if (e.altKey) {
document.body.classList.add("dropper")
}
-
+ if (window.focused && focused.raw_key) {
+ focused.raw_key(e)
+ return
+ }
+
switch (e.keyCode) {
case 27: // esc
if (focused) focused.blur()
@@ -77,8 +81,8 @@ var keys = (function(){
if (focused && char) {
var y = focused.y, x = focused.x
- focused.key(char, e.keyCode)
- if (! ('y' in focused && 'x' in focused) ) { return }
+ var moving = focused.key(char, e.keyCode)
+ if ( ! moving || ! ('y' in focused && 'x' in focused) ) { return }
// console.log(y, direction[0], x, direction[1])
current_canvas.focusLex(y + direction[0], x + direction[1])
}
@@ -89,9 +93,65 @@ var keys = (function(){
document.body.classList.remove("dropper")
}
})
-
}
+ keys.int_key = function (f) {
+ return function (key, keyCode) {
+ var n = parseInt(key)
+ ! isNaN(n) && f(n)
+ }
+ }
+ keys.arrow_key = function (lex, canvas, prop, rebuild_prop, min, max) {
+ return function (e){
+ switch (e.keyCode) {
+ case 38: // up
+ e.preventDefault()
+ canvas[prop] = Math.min(canvas[prop]+1, max)
+ lex.char = "" + canvas[prop]
+ lex.build()
+ canvas[rebuild_prop]()
+ break
+ case 40: // down
+ e.preventDefault()
+ canvas[prop] = Math.max(canvas[prop]-1, min)
+ lex.char = "" + canvas[prop]
+ lex.build()
+ canvas[rebuild_prop]()
+ break
+ }
+ }
+ }
+ keys.single_numeral_key = function (lex, canvas, prop, min, max) {
+ return keys.int_key(function(n, keyCode){
+ if (n == 0) n = 10
+ lex.blur()
+ lex.char = ""+n
+ lex.build()
+ canvas[prop] = n
+ canvas.rebuild()
+ })
+ }
+ keys.multi_numeral_key = function (lex, digits){
+ return keys.int_key(function(n, keyCode){
+ lex.read()
+ if (lex.char.length < digits) {
+ n = parseInt(lex.char) * 10 + n
+ }
+ lex.char = ""+n
+ lex.build()
+ })
+ }
+ keys.multi_numeral_blur = function (lex, canvas, prop, min, max){
+ return function(){
+ var n = clamp(parseInt(lex.char), min, max)
+ if (! n) return;
+ lex.char = n+""
+ lex.build()
+ canvas[prop] = n
+ canvas.resize(canvas.w, canvas.h)
+ }
+ }
+
return keys
})()