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