2 commits - lib/kolab_client_task.php public_html/js

Aleksander Machniak machniak at kolabsys.com
Fri Apr 6 15:24:43 CEST 2012


 lib/kolab_client_task.php     |   11 +++++-
 public_html/js/kolab_admin.js |   67 ++++++++++++++++++------------------------
 2 files changed, 37 insertions(+), 41 deletions(-)

New commits:
commit e9513072a2b2e5136a0e86fc8503e9ba28eb1513
Merge: 2383ac4 ad31f36
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Fri Apr 6 15:24:19 2012 +0200

    Merge branch 'master' of ssh://git.kolab.org/git/kolab-wap



commit 2383ac4d54a8f1d6a34764bf28049b6768084b89
Author: Aleksander Machniak <machniak at kolabsys.com>
Date:   Fri Apr 6 15:23:53 2012 +0200

    Fix (properly) list widgets

diff --git a/lib/kolab_client_task.php b/lib/kolab_client_task.php
index 49f803e..c1ba15f 100644
--- a/lib/kolab_client_task.php
+++ b/lib/kolab_client_task.php
@@ -1014,15 +1014,20 @@ class kolab_client_task
                     $field['value'] = $data[$idx];
 
                     // Convert data for the list field with autocompletion
-                    if ($field['data-type'] == kolab_form::TYPE_LIST && kolab_utils::is_assoc($data[$idx])) {
-                        $assoc_fields[$idx] = $data[$idx];
-                        $field['value'] = array_keys($data[$idx]);
+                    if ($field['data-type'] == kolab_form::TYPE_LIST) {
+                        $field['value'] = !empty($field['data-autocomplete']) ? array_keys($data[$idx]) : array_values($data[$idx]);
                     }
 
                     if (is_array($field['value'])) {
                         $field['value'] = implode("\n", $field['value']);
                     }
                 }
+
+                // @TODO: We assume here that all autocompletion lists are associative
+                // It's likely that we'll need autocompletion on ordinary lists
+                if (!empty($field['data-autocomplete'])) {
+                    $assoc_fields[$idx] = !empty($data[$idx]) ? $data[$idx] : array();
+                }
 /*
                 if (!empty($field['suffix'])) {
                     $field['suffix'] = kolab_html::escape($this->translate($field['suffix']));
diff --git a/public_html/js/kolab_admin.js b/public_html/js/kolab_admin.js
index 1018a02..0a73bde 100644
--- a/public_html/js/kolab_admin.js
+++ b/public_html/js/kolab_admin.js
@@ -690,29 +690,24 @@ function kolab_admin()
 
     // replace some textarea fields with pretty/smart input lists
     $('textarea[data-type="list"]', form).not('disabled').each(function() {
-      var i, k, v, value = [],
+      var i, v, value = [],
         re = RegExp('^' + RegExp.escape(this.name) + '\[[0-9-]+\]$');
 
       for (i in data.json) {
         if (i.match(re)) {
-          if (v = $('input[name="'+i+'"]', form).val()) {
-            pushed = 0;
-            if (kadm.env.assoc_fields[this.name]) {
-              for (k in kadm.env.assoc_fields[this.name]) {
-                if (kadm.env.assoc_fields[this.name][k] == v) {
-                  value.push(k);
-                  pushed = 1;
-                }
-              }
-            }
-            if (!pushed) {
-              value.push(v);
-            }
-          }
+          if (v = $('input[name="'+i+'"]', form).val())
+            value.push(v);
           delete data.json[i];
         }
       }
 
+      // autocompletion lists data is stored in env variable
+      if (kadm.env.assoc_fields[this.name]) {
+        value = [];
+        for (i in kadm.env.assoc_fields[this.name])
+          value.push(i);
+      }
+
       data.json[this.name] = value;
     });
 
@@ -738,8 +733,7 @@ function kolab_admin()
   // Replaces form element with smart element
   this.form_element_wrapper = function(form_element)
   {
-    var i, j = 0, elem, e = $(form_element),
-      list = this.env.assoc_fields[form_element.name],
+    var i = 0, j = 0, list = [], elem, e = $(form_element),
       disabled = e.attr('disabled'),
       readonly = e.attr('readonly'),
       autocomplete = e.attr('data-autocomplete'),
@@ -748,30 +742,34 @@ function kolab_admin()
 
     e.hide();
 
-    if (!list) {
-      if (form_element.value)
-        list = form_element.value.split("\n");
-      else if (!autocomplete || disabled || readonly)
-        list = {0: ''};
+    if (autocomplete)
+      list = this.env.assoc_fields[form_element.name];
+    else if (form_element.value)
+      list = form_element.value.split("\n");
+
+    // Need at least one element
+    if (!autocomplete || disabled || readonly) {
+      $.each(list, function() { i++; });
+      if (!i)
+        list = [''];
     }
-    list = $.extend({}, list);
 
     // Create simple list for readonly/disabled
     if (disabled || readonly) {
       area.addClass('readonly');
 
       // add simple input rows
-      for (i in list) {
+      $.each(list, function(i, v) {
         elem = $('<input>');
         elem.attr({
-          value: list[i],
+          value: v,
           disabled: disabled,
           readonly: readonly,
           name: form_element.name + '[' + (j++) + ']'
           })
         elem = $('<span class="listelement">').append(elem);
         elem.appendTo(area);
-      }
+      });
     }
     // extended widget with add/remove buttons and/or autocompletion
     else {
@@ -785,29 +783,22 @@ function kolab_admin()
 
         elem.appendTo(area);
         this.ac_init(elem, {attribute: form_element.name, oninsert: this.form_element_oninsert});
-        
+
         area.addClass('autocomplete');
       }
 
       // add input rows
-      ac_value = []
-      for (i in list) {
-        elem = this.form_list_element(form_element.form, {
-          value: list[i],
+      $.each(list, function(i, v) {
+        elem = kadm.form_list_element(form_element.form, {
+          value: v,
           key: i,
           maxlength: maxlength,
           autocomplete: autocomplete,
           element: e
         }, j++);
 
-        if (autocomplete)
-            ac_value.push(list[i]);
-
         elem.appendTo(area);
-      }
-
-      if (autocomplete)
-        e.val(ac_value.join("\n"));
+      });
     }
 
     area.appendTo(form_element.parentNode);





More information about the commits mailing list