Thomas Bruederli
2014-03-06 5ba53819cfd4ebfa25dd6a416b663c2c5748d8eb
Revert "Support structured data for autocompletion results; map 'type' attribute to CSS class for autocomplete list items"

This reverts commit e3773d46cb4f06aaab2747db98765edd6d871524.
3 files modified
31 ■■■■ changed files
program/js/app.js 12 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_ldap.php 14 ●●●● patch | view | raw | blame | history
program/steps/mail/autocomplete.inc 5 ●●●●● patch | view | raw | blame | history
program/js/app.js
@@ -4310,14 +4310,10 @@
    this.ksearch_destroy();
    // insert all members of a group
    if (typeof this.env.contacts[id] === 'object' && this.env.contacts[id].type == 'group') {
    if (typeof this.env.contacts[id] === 'object' && this.env.contacts[id].id) {
      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;
@@ -4332,7 +4328,7 @@
      this.ksearch_input.setSelectionRange(cpos, cpos);
    if (trigger) {
      this.triggerEvent('autocomplete_insert', { field:this.ksearch_input, insert:insert, data:this.env.contacts[id] });
      this.triggerEvent('autocomplete_insert', { field:this.ksearch_input, insert:insert });
      this.compose_type_activity++;
    }
  };
@@ -4427,7 +4423,7 @@
      return;
    // display search results
    var i, len, ul, li, text, type, init,
    var i, len, ul, li, text, init,
      value = this.ksearch_value,
      data = this.ksearch_data,
      maxlen = this.env.autocomplete_max ? this.env.autocomplete_max : 15;
@@ -4461,13 +4457,11 @@
    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;
      }
program/lib/Roundcube/rcube_ldap.php
@@ -95,8 +95,8 @@
            if (empty($this->prop['groups']['scope']))
                $this->prop['groups']['scope'] = 'sub';
            // extend group objectclass => member attribute mapping
            if (!empty($this->prop['groups']['event-panel-summary']))
                $this->group_types = array_merge($this->group_types, $this->prop['groups']['event-panel-summary']);
            if (!empty($this->prop['groups']['class_member_attr']))
                $this->group_types = array_merge($this->group_types, $this->prop['groups']['class_member_attr']);
            // add group name attrib to the list of attributes to be fetched
            $fetch_attributes[] = $this->prop['groups']['name_attr'];
@@ -1407,16 +1407,6 @@
            $out['_type'] = 'group';
            $out['readonly'] = true;
            $fieldmap['name'] = $this->group_data['name_attr'] ? $this->group_data['name_attr'] : $this->prop['groups']['name_attr'];
        }
        // assign object type from object class mapping
        if (!empty($this->prop['class_type_map'])) {
            foreach (array_map('strtolower', (array)$rec['objectclass']) as $objcls) {
                if (!empty($this->prop['class_type_map'][$objcls])) {
                    $out['_type'] = $this->prop['class_type_map'][$objcls];
                    break;
                }
            }
        }
        foreach ($fieldmap as $rf => $lf)
program/steps/mail/autocomplete.inc
@@ -90,7 +90,7 @@
                    // skip duplicates
                    if (!in_array($contact, $contacts)) {
                        $contacts[]  = array('name' => $contact, 'type' => $sql_arr['_type']);
                        $contacts[]  = $contact;
                        $sort_keys[] = sprintf('%s %03d', $sql_arr['name'] , $idx++);
                        if (count($contacts) >= $MAXNUM) {
@@ -118,7 +118,7 @@
                if ($group_prop['email']) {
                    $idx = 0;
                    foreach ((array)$group_prop['email'] as $email) {
                        $contacts[]  = array('name' => format_email_recipient($email, $group['name']), 'type' => 'group');
                        $contacts[]  = format_email_recipient($email, $group['name']);
                        $sort_keys[] = sprintf('%s %03d', $group['name'] , $idx++);
                        if (count($contacts) >= $MAXNUM) {
@@ -131,7 +131,6 @@
                    $sort_keys[] = $group['name'];
                    $contacts[]  = array(
                        'name'   => $group['name'] . ' (' . intval($result->count) . ')',
                        'type'   => 'group',
                        'id'     => $group['ID'],
                        'source' => $id
                    );