summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2009-04-14 09:24:21 +0000
committeralecpl <alec@alec.pl>2009-04-14 09:24:21 +0000
commit80e227859406450a5df73abeb8b3ed24a87fcccc (patch)
tree0aa48dc080d8648bfd4941e3c6bea006389690fc
parent8b961eef049fae0c8afefbc6ea057910aad1fa60 (diff)
- simplified code for serverside autocomplete + set rows limit on server side only
-rw-r--r--program/js/app.js38
-rw-r--r--program/steps/mail/autocomplete.inc7
2 files changed, 11 insertions, 34 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 42ea5d95d..91237662e 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -2543,22 +2543,13 @@ function rcube_webmail()
this.hide_message();
this.env.contacts = results ? results : [];
-
- var result_ids = new Array();
- var c=0;
- for (var i=0; i < this.env.contacts.length; i++) {
- result_ids[c++] = i;
- if (c == 15) // limit search results
- break;
- }
-
- this.ksearch_display_results(this.env.contacts, result_ids, c);
+ this.ksearch_display_results(this.env.contacts);
};
- this.ksearch_display_results = function (a_results, a_result_ids, c)
+ this.ksearch_display_results = function (a_results)
{
// display search results
- if (c && a_results.length && this.ksearch_input) {
+ if (a_results.length && this.ksearch_input) {
var p, ul, li;
// create results pane if not present
@@ -2580,27 +2571,14 @@ function rcube_webmail()
li.innerHTML = a_results[i].replace(new RegExp('('+this.ksearch_value+')', 'ig'), '##$1%%').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/##([^%]+)%%/g, '<b>$1</b>');
li.onmouseover = function(){ ref.ksearch_select(this); };
li.onmouseup = function(){ ref.ksearch_click(this) };
- li._rcm_id = a_result_ids[i];
+ li._rcm_id = i;
ul.appendChild(li);
}
- // check if last selected item is still in result list
- if (this.ksearch_selected !== null) {
- p = find_in_array(this.ksearch_selected, a_result_ids);
- if (p >= 0 && ul.childNodes) {
- ul.childNodes[p].setAttribute('id', 'rcmksearchSelected');
- this.set_classname(ul.childNodes[p], 'selected', true);
- }
- else
- this.ksearch_selected = null;
- }
-
- // if no item selected, select the first one
- if (this.ksearch_selected === null) {
- ul.firstChild.setAttribute('id', 'rcmksearchSelected');
- this.set_classname(ul.firstChild, 'selected', true);
- this.ksearch_selected = a_result_ids[0];
- }
+ // select the first
+ ul.firstChild.setAttribute('id', 'rcmksearchSelected');
+ this.set_classname(ul.firstChild, 'selected', true);
+ this.ksearch_selected = 0;
// move the results pane right under the input box and make it visible
var pos = rcube_get_object_pos(this.ksearch_input);
diff --git a/program/steps/mail/autocomplete.inc b/program/steps/mail/autocomplete.inc
index 26acc88c2..b1aba7d62 100644
--- a/program/steps/mail/autocomplete.inc
+++ b/program/steps/mail/autocomplete.inc
@@ -19,7 +19,7 @@
*/
-$MAXNUM = 15; // same limit as in app.js
+$MAXNUM = 15;
$contacts = array();
$book_types = (array) $RCMAIL->config->get('autocomplete_addressbooks', 'sql');
@@ -33,12 +33,11 @@ if ($book_types && $search = get_input_value('_search', RCUBE_INPUT_POST)) {
while ($sql_arr = $result->iterate()) {
if (stripos((string)$sql_arr['email'], $search) !== false || stripos((string)$sql_arr['name'], $search) !== false) {
$contacts[] = format_email_recipient($sql_arr['email'], $sql_arr['name']);
+ if (count($contacts) >= $MAXNUM)
+ break 2;
}
}
}
-
- if (count($contacts) >= $MAXNUM)
- break;
}
sort($contacts);