From 532c10669be034d314b1906e8247339132f1ec61 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Thu, 06 Mar 2014 07:17:14 -0500
Subject: [PATCH] Support structured data for autocompletion results; map 'type' attribute to CSS class for autocomplete list items

---
 program/js/app.js |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 28a1b38..20bda2e 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -4310,10 +4310,14 @@
     this.ksearch_destroy();
 
     // insert all members of a group
-    if (typeof this.env.contacts[id] === 'object' && this.env.contacts[id].id) {
+    if (typeof this.env.contacts[id] === 'object' && this.env.contacts[id].type == 'group') {
       insert += this.env.contacts[id].name + this.env.recipients_delimiter;
       this.group2expand[this.env.contacts[id].id] = $.extend({ input: this.ksearch_input }, this.env.contacts[id]);
       this.http_request('mail/group-expand', {_source: this.env.contacts[id].source, _gid: this.env.contacts[id].id}, false);
+    }
+    else if (typeof this.env.contacts[id] === 'object' && this.env.contacts[id].name) {
+      insert = this.env.contacts[id].name + this.env.recipients_delimiter;
+      trigger = true;
     }
     else if (typeof this.env.contacts[id] === 'string') {
       insert = this.env.contacts[id] + this.env.recipients_delimiter;
@@ -4328,7 +4332,7 @@
       this.ksearch_input.setSelectionRange(cpos, cpos);
 
     if (trigger) {
-      this.triggerEvent('autocomplete_insert', { field:this.ksearch_input, insert:insert });
+      this.triggerEvent('autocomplete_insert', { field:this.ksearch_input, insert:insert, data:this.env.contacts[id] });
       this.compose_type_activity++;
     }
   };
@@ -4423,7 +4427,7 @@
       return;
 
     // display search results
-    var i, len, ul, li, text, init,
+    var i, len, ul, li, text, type, init,
       value = this.ksearch_value,
       data = this.ksearch_data,
       maxlen = this.env.autocomplete_max ? this.env.autocomplete_max : 15;
@@ -4457,11 +4461,13 @@
     if (results && (len = results.length)) {
       for (i=0; i < len && maxlen > 0; i++) {
         text = typeof results[i] === 'object' ? results[i].name : results[i];
+        type = typeof results[i] === 'object' ? results[i].type : '';
         li = document.createElement('LI');
         li.innerHTML = text.replace(new RegExp('('+RegExp.escape(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 = this.env.contacts.length + i;
+        if (type) li.className = type;
         ul.appendChild(li);
         maxlen -= 1;
       }

--
Gitblit v1.9.1