some interaction improvements, PR9564

svn: r10554
This commit is contained in:
Eli Barzilay 2008-07-02 06:48:14 +00:00
parent f539581ebc
commit f787d68b71

View File

@ -498,19 +498,22 @@ function UpdateResults() {
var search_timer = false; var search_timer = false;
function HandleKeyEvent(event) { function HandleKeyEvent(event) {
if (search_timer) clearTimeout(search_timer);
kill_bg_search();
var key = null; var key = null;
if (typeof event == "string") key = event; if (typeof event == "string") key = event;
else if (event) { else if (event) {
switch (event.which || event.keyCode) { switch (event.which || event.keyCode) {
case 13: if (event.ctrlKey) key = "C-Enter"; case 13: key = (event.ctrlKey ? "C-Enter" : "Enter"); break;
break;
case 33: key = "PgUp"; break; case 33: key = "PgUp"; break;
case 34: key = "PgDn"; break; case 34: key = "PgDn"; break;
} }
} }
// note: uses of DoSearch() below starts a background search, which
// means that the operation can still be done on the previously
// displayed results.
switch (key) { switch (key) {
case "Enter": // starts a search immediately
DoSearch();
return false;
case "C-Enter": // C-enter with no change scrolls down (S -> up) case "C-Enter": // C-enter with no change scrolls down (S -> up)
if (query.value == last_search_term_raw) { if (query.value == last_search_term_raw) {
if (!event.shiftKey) first_search_result += results_num; if (!event.shiftKey) first_search_result += results_num;
@ -534,6 +537,13 @@ function HandleKeyEvent(event) {
} }
return false; return false;
} }
// what if we get a key just before the results are shown? we might
// get them displayed and then the new search begins. this can be
// solved by using kill_bg_search() here, but then *all* keys abort
// the current search, and that's a problem in case the new key
// won't make DoSearch start a new search (like Enter or using Tab).
// so leave it without that.
if (search_timer) clearTimeout(search_timer);
search_timer = setTimeout(DoSearch, type_delay); search_timer = setTimeout(DoSearch, type_delay);
return true; return true;
} }
@ -554,9 +564,9 @@ function NewQuery(node) {
} }
new_query = NewQuery; new_query = NewQuery;
// and this appends the the query to the current value (it's hooked // and this appends the query to the current value (it's hooked on the
// on the oncontextmenu handler that doesn't work everywhere, but at // oncontextmenu handler that doesn't work everywhere, but at least in
// least in FF and IE) // FF and IE)
function RefineQuery(node) { function RefineQuery(node) {
var m = node.href.search(/[?]q=[^?&;]+$/); var m = node.href.search(/[?]q=[^?&;]+$/);
if (m < 0) return true; if (m < 0) return true;