From 80e227859406450a5df73abeb8b3ed24a87fcccc Mon Sep 17 00:00:00 2001 From: alecpl Date: Tue, 14 Apr 2009 09:24:21 +0000 Subject: - simplified code for serverside autocomplete + set rows limit on server side only --- program/js/app.js | 38 ++++++++----------------------------- program/steps/mail/autocomplete.inc | 7 +++---- 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, '>').replace(/##([^%]+)%%/g, '$1'); 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); -- cgit v1.2.3