mirror of https://github.com/zulip/zulip.git
Detect whether the user is currently in an input area correctly.
Rather than trying to keep track of whether the last thing that happened was an input area being focused (which had all kinds of bugs), just detect whether we're in an input area using the appropriate jquery selector. Hopefully this has OK performance. (imported from commit 6150692ffcb0ab9b04244c3d053b5527847ded2d)
This commit is contained in:
parent
ad213fc810
commit
a5c8b5dc7e
|
@ -18,7 +18,6 @@ var globals =
|
|||
+ ' get_id get_zephyr_row'
|
||||
|
||||
// hotkey.js
|
||||
+ ' set_keydown_in_input'
|
||||
|
||||
// narrow.js
|
||||
+ ' narrowed show_all_messages'
|
||||
|
|
|
@ -33,6 +33,12 @@ function simulate_keydown(keycode) {
|
|||
|
||||
function process_hotkey(code) {
|
||||
var next_zephyr;
|
||||
|
||||
// Disable hotkeys when in an input, textarea, or button
|
||||
if ($('input:focus,textarea:focus,button:focus').length > 0) {
|
||||
return process_key_in_input(code);
|
||||
}
|
||||
|
||||
if (directional_hotkeys.hasOwnProperty(code)) {
|
||||
next_zephyr = directional_hotkeys[code](selected_zephyr);
|
||||
if (next_zephyr.length !== 0) {
|
||||
|
@ -80,10 +86,10 @@ function process_hotkey(code) {
|
|||
return process_compose_hotkey;
|
||||
case 114: // 'r': respond to zephyr
|
||||
respond_to_zephyr();
|
||||
return process_key_in_input;
|
||||
return process_hotkey;
|
||||
case 82: // 'R': respond to author
|
||||
respond_to_zephyr("personal");
|
||||
return process_key_in_input;
|
||||
return process_hotkey;
|
||||
case 103: // 'g': start of "go to" command
|
||||
return process_goto_hotkey;
|
||||
}
|
||||
|
@ -91,6 +97,11 @@ function process_hotkey(code) {
|
|||
return false;
|
||||
}
|
||||
|
||||
/* The current handler function for keydown events.
|
||||
It should return a new handler, or 'false' to
|
||||
decline to handle the event. */
|
||||
var keydown_handler = process_hotkey;
|
||||
|
||||
var goto_hotkeys = {
|
||||
99: narrow_by_recipient, // 'c'
|
||||
105: narrow_instance, // 'i'
|
||||
|
@ -104,27 +115,27 @@ function process_goto_hotkey(code) {
|
|||
goto_hotkeys[code]();
|
||||
|
||||
/* Always return to the initial hotkey mode, even
|
||||
with an unrecognized "go to" command. */
|
||||
after an unrecognized "go to" command. */
|
||||
return process_hotkey;
|
||||
}
|
||||
|
||||
function process_key_in_input(code) {
|
||||
if (code === 27) {
|
||||
// User hit Escape key
|
||||
// If the user hit the escape key, hide the compose window
|
||||
hide_compose();
|
||||
return process_hotkey;
|
||||
}
|
||||
// Otherwise, let the browser handle the key normally
|
||||
return false;
|
||||
}
|
||||
|
||||
function process_compose_hotkey(code) {
|
||||
if (code === 9) { // Tab: toggle between class and huddle compose tabs.
|
||||
if (code === 9) { // Tab: toggles between class and huddle compose tabs.
|
||||
toggle_compose();
|
||||
return process_compose_hotkey;
|
||||
} else {
|
||||
set_keydown_in_input(true);
|
||||
simulate_keydown(code);
|
||||
}
|
||||
// After we hit a non-tab character, tab should be processed normally
|
||||
keydown_handler = process_hotkey;
|
||||
return false;
|
||||
}
|
||||
|
||||
$(document).keydown(function (e) {
|
||||
|
@ -135,23 +146,6 @@ $(document).keyup(function (e) {
|
|||
pressed_keys = {};
|
||||
});
|
||||
|
||||
/* The current handler function for keydown events.
|
||||
It should return a new handler, or 'false' to
|
||||
decline to handle the event. */
|
||||
var keydown_handler = process_hotkey;
|
||||
|
||||
function set_keydown_in_input(flag) {
|
||||
// No argument should behave like 'true'.
|
||||
if (flag === undefined)
|
||||
flag = true;
|
||||
|
||||
if (flag) {
|
||||
keydown_handler = process_key_in_input;
|
||||
} else {
|
||||
keydown_handler = process_hotkey;
|
||||
}
|
||||
}
|
||||
|
||||
/* We register both a keydown and a keypress function because
|
||||
we want to intercept pgup/pgdn, escape, etc, and process them
|
||||
as they happen on the keyboard. However, if we processed
|
||||
|
|
|
@ -110,14 +110,6 @@ $(function () {
|
|||
// NB: This just binds to current elements, and won't bind to elements
|
||||
// created after ready() is called.
|
||||
|
||||
// Enable our hotkeys when we're not focused on a data entry box
|
||||
$('input, textarea, button').focus(function () {
|
||||
set_keydown_in_input(true);
|
||||
});
|
||||
$('input, textarea, button').blur(function () {
|
||||
set_keydown_in_input(false);
|
||||
});
|
||||
|
||||
$('#zephyr-type-tabs a[href="#class-message"]').on('shown', function (e) {
|
||||
$('#personal-message').hide();
|
||||
$('#class-message').show();
|
||||
|
|
Loading…
Reference in New Issue