add bindKeyboard and unbindKeyboard methods to Ox.Element, allowing an element to receive all keyboard events, independently of focus
This commit is contained in:
parent
b6a8ed28b4
commit
3aa10edec8
2 changed files with 30 additions and 38 deletions
|
@ -301,6 +301,11 @@ Ox.Element = function(options, self) {
|
||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.bindKeyboard = function() {
|
||||||
|
Ox.Keyboard.bind(that.id);
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
/*@
|
/*@
|
||||||
defaults <function> Sets the default options for an element object
|
defaults <function> Sets the default options for an element object
|
||||||
({key: value, ...}) -> <obj> This element object
|
({key: value, ...}) -> <obj> This element object
|
||||||
|
@ -335,7 +340,6 @@ Ox.Element = function(options, self) {
|
||||||
loseFocus <function> Makes an element object lose focus
|
loseFocus <function> Makes an element object lose focus
|
||||||
() -> <object> This element object
|
() -> <object> This element object
|
||||||
@*/
|
@*/
|
||||||
|
|
||||||
that.loseFocus = function() {
|
that.loseFocus = function() {
|
||||||
Ox.Focus.blur(that.id);
|
Ox.Focus.blur(that.id);
|
||||||
return that;
|
return that;
|
||||||
|
@ -428,6 +432,11 @@ Ox.Element = function(options, self) {
|
||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.unbindKeyboard = function() {
|
||||||
|
Ox.Keyboard.unbind(that.id);
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
return that;
|
return that;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,42 +1,11 @@
|
||||||
// vim: et:ts=4:sw=4:sts=4:ft=javascript
|
// vim: et:ts=4:sw=4:sts=4:ft=javascript
|
||||||
/***
|
/*@
|
||||||
Ox.Keyboard
|
Ox.Keyboard <o> Basic keyboard handler
|
||||||
***/
|
@*/
|
||||||
|
|
||||||
(function() {
|
Ox.Keyboard = (function() {
|
||||||
|
|
||||||
var buffer = '', resetTimeout, triggerTimeout;
|
var buffer = '', bound = [], resetTimeout, triggerTimeout;
|
||||||
|
|
||||||
/*
|
|
||||||
Ox.UI.ready(function() {
|
|
||||||
// fixme: how to do this better?
|
|
||||||
// in firefox on mac, keypress doesn't fire for up/down
|
|
||||||
// if the cursor is at the start/end of an input element
|
|
||||||
// on linux, it doesn't seem to fire if the input element has focus
|
|
||||||
if ($.browser.mozilla) {
|
|
||||||
Ox.UI.$document.keypress(keypress);
|
|
||||||
Ox.UI.$document.keydown(function(event) {
|
|
||||||
var $element = $('input:focus');
|
|
||||||
if ($element.length) {
|
|
||||||
if (
|
|
||||||
(
|
|
||||||
Ox.KEYS[event.keyCode] == 'up' &&
|
|
||||||
$element[0].selectionStart + $element[0].selectionEnd == 0
|
|
||||||
) || (
|
|
||||||
Ox.KEYS[event.keyCode] == 'down' &&
|
|
||||||
$element[0].selectionStart == $element.val().length &&
|
|
||||||
$element[0].selectionEnd == $element.val().length
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
keypress(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Ox.UI.$document.keydown(keypress);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
Ox.UI.ready(function() {
|
Ox.UI.ready(function() {
|
||||||
Ox.UI.$document.keydown(keydown)
|
Ox.UI.$document.keydown(keydown)
|
||||||
|
@ -59,7 +28,10 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
key = keyNames.join('_');
|
key = keyNames.join('_');
|
||||||
if (focused !== null) {
|
bound.forEach(function(id) {
|
||||||
|
Ox.UI.elements[id].triggerEvent('key_' + key);
|
||||||
|
});
|
||||||
|
if (focused !== null && bound.indexOf(focused) == -1) {
|
||||||
Ox.UI.elements[focused].triggerEvent('key_' + key);
|
Ox.UI.elements[focused].triggerEvent('key_' + key);
|
||||||
// prevent Chrome from scrolling, or going back in history
|
// prevent Chrome from scrolling, or going back in history
|
||||||
if (
|
if (
|
||||||
|
@ -105,4 +77,15 @@
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
bind: function(id) {
|
||||||
|
var index = bound.indexOf(id);
|
||||||
|
index == -1 && bound.push(id);
|
||||||
|
},
|
||||||
|
unbind: function(id) {
|
||||||
|
var index = bound.indexOf(id);
|
||||||
|
index > -1 && bound.splice(index, 1);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in a new issue