Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

- Add option for minimum length of autocomplete's string (#1486428)

  • Loading branch information...
commit c296b810bc63c91f27c4c601646d5011cae54b5f 1 parent cdf1ae0
Aleksander Machniak alecpl authored
1  CHANGELOG
View
@@ -63,6 +63,7 @@ CHANGELOG Roundcube Webmail
- Add missing confirmation/error messages on contact/group/message actions (#1486845)
- Add 'loading' message on message move/copy/delete/mark actions
- Improve responsiveness of messages displaying (#1486986)
+- Add option for minimum length of autocomplete's string (#1486428)
RELEASE 0.4.2
-------------
5 config/main.inc.php.dist
View
@@ -462,6 +462,11 @@ $rcmail_config['ldap_public']['Verisign'] = array(
// when populating address autocomplete fields server-side. ex: array('sql','Verisign');
$rcmail_config['autocomplete_addressbooks'] = array('sql');
+// The minimum number of characters required to be typed in an autocomplete field
+// before address books will be searched. Most useful for LDAP directories that
+// may need to do lengthy results building given overly-broad searches
+$rcmail_config['autocomplete_min_length'] = 1;
+
// ----------------------------------
// USER PREFERENCES
// ----------------------------------
34 program/js/app.js
View
@@ -3426,14 +3426,14 @@ function rcube_webmail()
return;
// get cursor pos
- var inp_value = this.ksearch_input.value;
- var cpos = this.get_caret_pos(this.ksearch_input);
- var p = inp_value.lastIndexOf(this.ksearch_value, cpos);
+ var inp_value = this.ksearch_input.value,
+ cpos = this.get_caret_pos(this.ksearch_input),
+ p = inp_value.lastIndexOf(this.ksearch_value, cpos),
+ insert = '',
- // replace search string with full address
- var pre = this.ksearch_input.value.substring(0, p);
- var end = this.ksearch_input.value.substring(p+this.ksearch_value.length, this.ksearch_input.value.length);
- var insert = '';
+ // replace search string with full address
+ pre = inp_value.substring(0, p),
+ end = inp_value.substring(p+this.ksearch_value.length, inp_value.length);
// insert all members of a group
if (typeof this.env.contacts[id] == 'object' && this.env.contacts[id].id) {
@@ -3465,6 +3465,7 @@ function rcube_webmail()
this.ksearch_get_results = function()
{
var inp_value = this.ksearch_input ? this.ksearch_input.value : null;
+
if (inp_value === null)
return;
@@ -3472,9 +3473,10 @@ function rcube_webmail()
this.ksearch_pane.hide();
// get string from current cursor pos to last comma
- var cpos = this.get_caret_pos(this.ksearch_input);
- var p = inp_value.lastIndexOf(',', cpos-1);
- var q = inp_value.substring(p+1, cpos);
+ var cpos = this.get_caret_pos(this.ksearch_input),
+ p = inp_value.lastIndexOf(',', cpos-1),
+ q = inp_value.substring(p+1, cpos),
+ min = this.env.autocomplete_min_length;
// trim query string
q = q.replace(/(^\s+|\s+$)/g, '');
@@ -3483,6 +3485,18 @@ function rcube_webmail()
if (q == this.ksearch_value)
return;
+ if (q.length < min) {
+ if (!this.env.acinfo) {
+ var label = this.get_label('autocompletechars');
+ label = label.replace('$min', min);
+ this.env.acinfo = this.display_message(label);
+ }
+ return;
+ }
+ else if (this.env.acinfo && q.length == min) {
+ this.hide_message(this.env.acinfo);
+ }
+
var old_value = this.ksearch_value;
this.ksearch_value = q;
1  program/localization/en_US/messages.inc
View
@@ -127,5 +127,6 @@ $messages['messagedeleted'] = 'Message(s) deleted successfully';
$messages['messagemoved'] = 'Message(s) moved successfully';
$messages['messagecopied'] = 'Message(s) copied successfully';
$messages['messagemarked'] = 'Message(s) marked successfully';
+$messages['autocompletechars'] = 'Enter at least $min characters for autocompletion';
?>
1  program/localization/pl_PL/messages.inc
View
@@ -132,5 +132,6 @@ $messages['messagedeleted'] = 'Wiadomości zostały usunięte';
$messages['messagemoved'] = 'Wiadomości zostały przeniesione';
$messages['messagecopied'] = 'Wiadomości zostały skopiowane';
$messages['messagemarked'] = 'Wiadomości zostały oznaczone';
+$messages['autocompletechars'] = 'Wprowadź co najmniej $min znak(ów) aby skorzystać z autouzupełniania';
?>
4 program/steps/mail/compose.inc
View
@@ -112,7 +112,8 @@ if (!is_array($_SESSION['compose']) || $_SESSION['compose']['id'] != $MESSAGE_ID
// add some labels to client
$OUTPUT->add_label('nosubject', 'nosenderwarning', 'norecipientwarning', 'nosubjectwarning', 'cancel',
'nobodywarning', 'notsentwarning', 'notuploadedwarning', 'savingmessage', 'sendingmessage',
- 'messagesaved', 'converting', 'editorwarning', 'searching', 'uploading', 'fileuploaderror');
+ 'messagesaved', 'converting', 'editorwarning', 'searching', 'uploading', 'fileuploaderror',
+ 'autocompletechars');
// add config parameters to client script
if (!empty($CONFIG['drafts_mbox'])) {
@@ -123,6 +124,7 @@ if (!empty($CONFIG['drafts_mbox'])) {
$OUTPUT->set_env('mailbox', $IMAP->get_mailbox_name());
$OUTPUT->set_env('sig_above', $CONFIG['sig_above']);
$OUTPUT->set_env('top_posting', $CONFIG['top_posting']);
+$OUTPUT->set_env('autocomplete_min_length', $CONFIG['autocomplete_min_length']);
// get reference message and set compose mode
if ($msg_uid = $_SESSION['compose']['param']['reply_uid'])
Please sign in to comment.
Something went wrong with that request. Please try again.