From c6f0755860b7a08b68375c534d1fae40dbaaf21d Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 11 Jun 2013 06:49:03 -0400
Subject: [PATCH] Support string list arguments in filter form (#1489018)

---
 plugins/managesieve/localization/el_GR.inc              |    2 
 plugins/managesieve/localization/az_AZ.inc              |    2 
 plugins/managesieve/localization/uk_UA.inc              |    2 
 plugins/managesieve/localization/zh_CN.inc              |    2 
 plugins/managesieve/localization/bs_BA.inc              |    2 
 plugins/managesieve/localization/ia.inc                 |    2 
 plugins/managesieve/managesieve.php                     |   81 ++++++--
 plugins/managesieve/localization/es_AR.inc              |    2 
 plugins/managesieve/localization/es_ES.inc              |    2 
 plugins/managesieve/localization/id_ID.inc              |    2 
 plugins/managesieve/localization/lt_LT.inc              |    2 
 plugins/managesieve/localization/vi_VN.inc              |    2 
 plugins/managesieve/localization/da_DK.inc              |    2 
 plugins/managesieve/localization/he_IL.inc              |    1 
 plugins/managesieve/localization/it_IT.inc              |    2 
 plugins/managesieve/localization/pt_BR.inc              |    2 
 plugins/managesieve/localization/ml_IN.inc              |    1 
 plugins/managesieve/localization/pl_PL.inc              |    2 
 plugins/managesieve/localization/cs_CZ.inc              |    2 
 plugins/managesieve/localization/hu_HU.inc              |    2 
 plugins/managesieve/localization/ru_RU.inc              |    2 
 plugins/managesieve/localization/sk_SK.inc              |    2 
 plugins/managesieve/skins/larry/images/plus_minus.png   |    0 
 plugins/managesieve/localization/pt_PT.inc              |    2 
 plugins/managesieve/localization/nn_NO.inc              |    2 
 plugins/managesieve/localization/be_BE.inc              |    2 
 plugins/managesieve/localization/gl_ES.inc              |    2 
 plugins/managesieve/localization/sv_SE.inc              |    2 
 plugins/managesieve/localization/ja_JP.inc              |    2 
 plugins/managesieve/skins/classic/images/plus_minus.png |    0 
 plugins/managesieve/localization/et_EE.inc              |    2 
 plugins/managesieve/localization/ro_RO.inc              |    2 
 plugins/managesieve/localization/nb_NO.inc              |    2 
 plugins/managesieve/localization/si_LK.inc              |    1 
 plugins/managesieve/localization/fr_FR.inc              |    6 
 plugins/managesieve/localization/sl_SI.inc              |    2 
 plugins/managesieve/localization/cy_GB.inc              |    2 
 plugins/managesieve/localization/en_US.inc              |    2 
 plugins/managesieve/skins/classic/managesieve.css       |   72 ++++++++
 plugins/managesieve/localization/fi_FI.inc              |    2 
 plugins/managesieve/localization/bg_BG.inc              |    2 
 plugins/managesieve/localization/de_CH.inc              |    2 
 plugins/managesieve/localization/en_GB.inc              |    2 
 plugins/managesieve/localization/nl_NL.inc              |    2 
 plugins/managesieve/localization/ca_ES.inc              |    2 
 plugins/managesieve/localization/mr_IN.inc              |    2 
 plugins/managesieve/localization/zh_TW.inc              |    2 
 plugins/managesieve/localization/tr_TR.inc              |    4 
 plugins/managesieve/localization/hy_AM.inc              |    2 
 plugins/managesieve/Changelog                           |   29 +-
 plugins/managesieve/localization/fa_IR.inc              |    1 
 plugins/managesieve/localization/eo.inc                 |    2 
 plugins/managesieve/localization/lv_LV.inc              |    2 
 plugins/managesieve/localization/ko_KR.inc              |    2 
 plugins/managesieve/skins/larry/managesieve.css         |   89 +++++++++
 plugins/managesieve/localization/de_DE.inc              |    2 
 plugins/managesieve/managesieve.js                      |  126 +++++++++++--
 57 files changed, 383 insertions(+), 116 deletions(-)

diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog
index 305fb1e..a5f3250 100644
--- a/plugins/managesieve/Changelog
+++ b/plugins/managesieve/Changelog
@@ -1,5 +1,6 @@
 - Add vacation-seconds extension support (RFC 6131)
 - Several script parser code improvements
+- Support string list arguments in filter form (#1489018)
 
 * version 6.2 [2013-02-17]
 -----------------------------------------------------------
@@ -206,18 +207,18 @@
 - Added it_IT localization
 
 * version 1.1 [2009-05-27]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Added new icons
 - Added support for headers lists (coma-separated) in rules
 - Added de_CH localization
 
 * version 1.0 [2009-05-21]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Rewritten using plugin API
 - Added hu_HU localization (Tamas Tevesz)
 
 * version beta7 (svn-r2300) [2009-03-01]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Added SquirrelMail script auto-import (Jonathan Ernst)
 - Added 'vacation' support (Jonathan Ernst & alec)
 - Added 'stop' support (Jonathan Ernst)
@@ -226,47 +227,47 @@
 - Small style fixes
 
 * version 0.2-stable1 (svn-r2205) [2009-01-03]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Fix moving down filter row
 - Fixes for compressed js files in stable release package
 - Created patch for svn version r2205
 
 * version 0.2-stable [2008-12-31]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Added ru_RU, fr_FR, zh_CN translation
 - Fixes for Roundcube 0.2-stable
 
-* version rc0.2beta [2008-09-21]
------------------------------------------------------------    
+* version 0.2-beta [2008-09-21]
+-----------------------------------------------------------
 - Small css fixes for IE
 - Fixes for Roundcube 0.2-beta
 
 * version beta6 [2008-08-08]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Added de_DE translation
 - Fix for Roundcube r1634
 
 * version beta5 [2008-06-10]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Fixed 'exists' operators
 - Fixed 'not*' operators for custom headers
 - Fixed filters deleting
 
 * version beta4 [2008-06-09]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Fix for Roundcube r1490
 
 * version beta3 [2008-05-22]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Fixed textarea error class setting
 - Added pagetitle setting
 - Added option 'managesieve_replace_delimiter'
 - Fixed errors on IE (still need some css fixes)
-    
+
 * version beta2 [2008-05-20]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Use 'if' only for first filter and 'elsif' for the rest
 
 * version beta1 [2008-05-15]
------------------------------------------------------------    
+-----------------------------------------------------------
 - Initial version for Roundcube r1388.
diff --git a/plugins/managesieve/localization/az_AZ.inc b/plugins/managesieve/localization/az_AZ.inc
index b1bfae5..6701625 100644
--- a/plugins/managesieve/localization/az_AZ.inc
+++ b/plugins/managesieve/localization/az_AZ.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Sil';
 $labels['sender'] = 'Göndərən';
 $labels['recipient'] = 'Qəbul edən';
-$labels['vacationaddresses'] = 'Əlavə ünvanlarım üçün siyahı (vergüllər ilə ayrılmış):';
+$labels['vacationaddr'] = 'Əlavə ünvanlarım üçün siyahı:';
 $labels['vacationdays'] = 'Məktub neçə müddətdən bir göndərilsin (gündə):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/be_BE.inc b/plugins/managesieve/localization/be_BE.inc
index 64f8159..ff54c05 100644
--- a/plugins/managesieve/localization/be_BE.inc
+++ b/plugins/managesieve/localization/be_BE.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Выдаліць';
 $labels['sender'] = 'Ад каго';
 $labels['recipient'] = 'Каму';
-$labels['vacationaddresses'] = 'Дадатковы спіс атрымальнікаў (праз коску):';
+$labels['vacationaddr'] = 'Дадатковы спіс атрымальнікаў:';
 $labels['vacationdays'] = 'Як часта дасылаць паведамленні (ў днях):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/bg_BG.inc b/plugins/managesieve/localization/bg_BG.inc
index a8f75df..e22290c 100644
--- a/plugins/managesieve/localization/bg_BG.inc
+++ b/plugins/managesieve/localization/bg_BG.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Изтриване';
 $labels['sender'] = 'Подател';
 $labels['recipient'] = 'Получател';
-$labels['vacationaddresses'] = 'Допълнителни e-mail адреси (разделени със запетая):';
+$labels['vacationaddr'] = 'Допълнителни e-mail адреси:';
 $labels['vacationdays'] = 'Колко често пращате съобщения (в дни):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/bs_BA.inc b/plugins/managesieve/localization/bs_BA.inc
index 7d21dbd..df90831 100644
--- a/plugins/managesieve/localization/bs_BA.inc
+++ b/plugins/managesieve/localization/bs_BA.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Obriši';
 $labels['sender'] = 'Pošiljaoc';
 $labels['recipient'] = 'Primaoc';
-$labels['vacationaddresses'] = 'Moje dodatne email adrese (odvojite zarezima):';
+$labels['vacationaddr'] = 'Moje dodatne email adrese:';
 $labels['vacationdays'] = 'Frekvencija slanja poruka (u danima):';
 $labels['vacationinterval'] = 'Frekvencija slanja poruka:';
 $labels['days'] = 'dana';
diff --git a/plugins/managesieve/localization/ca_ES.inc b/plugins/managesieve/localization/ca_ES.inc
index df1cdec..7ebd2c0 100644
--- a/plugins/managesieve/localization/ca_ES.inc
+++ b/plugins/managesieve/localization/ca_ES.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Suprimeix';
 $labels['sender'] = 'Remitent';
 $labels['recipient'] = 'Destinatari/a';
-$labels['vacationaddresses'] = 'Altres adreces electròniques meves (separades per coma)';
+$labels['vacationaddr'] = 'Altres adreces electròniques meves:';
 $labels['vacationdays'] = 'Cada quan enviar un missatge (en dies):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/cs_CZ.inc b/plugins/managesieve/localization/cs_CZ.inc
index 26baeff..c14873b 100644
--- a/plugins/managesieve/localization/cs_CZ.inc
+++ b/plugins/managesieve/localization/cs_CZ.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Smaž';
 $labels['sender'] = 'Odesílatel';
 $labels['recipient'] = 'Příjemce';
-$labels['vacationaddresses'] = 'Moje další e-mailové adresy (aliasy) spojené s tímto účtem (oddělené čárkou):';
+$labels['vacationaddr'] = 'Moje další e-mailové adresy (aliasy) spojené s tímto účtem:';
 $labels['vacationdays'] = 'Počet dnů mezi automatickými odpověďmi:';
 $labels['vacationinterval'] = 'Prodleva mezi automatickými odpověďmi:';
 $labels['days'] = 'dnů';
diff --git a/plugins/managesieve/localization/cy_GB.inc b/plugins/managesieve/localization/cy_GB.inc
index 800d14b..63d2e71 100644
--- a/plugins/managesieve/localization/cy_GB.inc
+++ b/plugins/managesieve/localization/cy_GB.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Dileu';
 $labels['sender'] = 'Anfonwr';
 $labels['recipient'] = 'Derbynnwr';
-$labels['vacationaddresses'] = 'Fy chyfeiriadau ebost ychwanegol (gwahanir gyda coma):';
+$labels['vacationaddr'] = 'Fy chyfeiriadau ebost ychwanegol:';
 $labels['vacationdays'] = 'Pa mor aml i ddanfon negeseuon (mewn dyddiau):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/da_DK.inc b/plugins/managesieve/localization/da_DK.inc
index 6bc43cf..0584810 100644
--- a/plugins/managesieve/localization/da_DK.inc
+++ b/plugins/managesieve/localization/da_DK.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Fjern';
 $labels['sender'] = 'Afsender';
 $labels['recipient'] = 'Modtager';
-$labels['vacationaddresses'] = 'Mine alternative e-mailadresser (kommasepareret):';
+$labels['vacationaddr'] = 'Mine alternative e-mailadresser:';
 $labels['vacationdays'] = 'Hvor tit skal besked sendes (i dage):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/de_CH.inc b/plugins/managesieve/localization/de_CH.inc
index b30625f..19a9b9d 100644
--- a/plugins/managesieve/localization/de_CH.inc
+++ b/plugins/managesieve/localization/de_CH.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Löschen';
 $labels['sender'] = 'Absender';
 $labels['recipient'] = 'Empfänger';
-$labels['vacationaddresses'] = 'Zusätzliche Liste von Empfängern (Komma getrennt):';
+$labels['vacationaddr'] = 'Zusätzliche Liste von Empfängern:';
 $labels['vacationdays'] = 'Antwort wird erneut gesendet nach (in Tagen):';
 $labels['vacationinterval'] = 'Wie oft senden:';
 $labels['days'] = 'Tage';
diff --git a/plugins/managesieve/localization/de_DE.inc b/plugins/managesieve/localization/de_DE.inc
index 1b741ef..4894904 100644
--- a/plugins/managesieve/localization/de_DE.inc
+++ b/plugins/managesieve/localization/de_DE.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Löschen';
 $labels['sender'] = 'Absender';
 $labels['recipient'] = 'Empfänger';
-$labels['vacationaddresses'] = 'Zusätzliche Liste von E-Mail Empfängern (Komma getrennt):';
+$labels['vacationaddr'] = 'Zusätzliche Liste von E-Mail Empfängern:';
 $labels['vacationdays'] = 'Wie oft sollen Nachrichten gesendet werden (in Tagen):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/el_GR.inc b/plugins/managesieve/localization/el_GR.inc
index 714b724..e5a1b79 100644
--- a/plugins/managesieve/localization/el_GR.inc
+++ b/plugins/managesieve/localization/el_GR.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Διαγραφή';
 $labels['sender'] = 'Αποστολέας';
 $labels['recipient'] = 'Παραλήπτης';
-$labels['vacationaddresses'] = 'Πρόσθετη λίστα email παραληπτών (διαχωρισμένη με κόμματα):';
+$labels['vacationaddr'] = 'Πρόσθετη λίστα email παραληπτών:';
 $labels['vacationdays'] = 'Συχνότητα αποστολής μηνυμάτων (σε ημέρες):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/en_GB.inc b/plugins/managesieve/localization/en_GB.inc
index 4dd4f7d..ff4965c 100644
--- a/plugins/managesieve/localization/en_GB.inc
+++ b/plugins/managesieve/localization/en_GB.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Delete';
 $labels['sender'] = 'Sender';
 $labels['recipient'] = 'Recipient';
-$labels['vacationaddresses'] = 'Additional list of recipient e-mails (comma separated):';
+$labels['vacationaddr'] = 'Additional list of recipient e-mails:';
 $labels['vacationdays'] = 'How often send messages (in days):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc
index 2b391e0..9fe9434 100644
--- a/plugins/managesieve/localization/en_US.inc
+++ b/plugins/managesieve/localization/en_US.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Delete';
 $labels['sender'] = 'Sender';
 $labels['recipient'] = 'Recipient';
-$labels['vacationaddresses'] = 'My additional e-mail addresse(s) (comma-separated):';
+$labels['vacationaddr'] = 'My additional e-mail addresse(s):';
 $labels['vacationdays'] = 'How often send messages (in days):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/eo.inc b/plugins/managesieve/localization/eo.inc
index 3ce49dd..3f54e23 100644
--- a/plugins/managesieve/localization/eo.inc
+++ b/plugins/managesieve/localization/eo.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Forigi';
 $labels['sender'] = 'Sendanto';
 $labels['recipient'] = 'Ricevanto';
-$labels['vacationaddresses'] = 'My additional e-mail addresse(s) (comma-separated):';
+$labels['vacationaddr'] = 'My additional e-mail addresse(s):';
 $labels['vacationdays'] = 'How often send messages (in days):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/es_AR.inc b/plugins/managesieve/localization/es_AR.inc
index c9c6e70..e8d90ef 100644
--- a/plugins/managesieve/localization/es_AR.inc
+++ b/plugins/managesieve/localization/es_AR.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Eliminar';
 $labels['sender'] = 'Remitente';
 $labels['recipient'] = 'Destinatario';
-$labels['vacationaddresses'] = 'Lista de direcciones de correo de destinatarios adicionales (separados por comas):';
+$labels['vacationaddr'] = 'Lista de direcciones de correo de destinatarios adicionales:';
 $labels['vacationdays'] = 'Cada cuanto enviar mensajes (en días):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/es_ES.inc b/plugins/managesieve/localization/es_ES.inc
index 9673a99..93ea892 100644
--- a/plugins/managesieve/localization/es_ES.inc
+++ b/plugins/managesieve/localization/es_ES.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Eliminar';
 $labels['sender'] = 'Remitente';
 $labels['recipient'] = 'Destinatario';
-$labels['vacationaddresses'] = 'Lista de direcciones de correo de destinatarios adicionales (separados por comas):';
+$labels['vacationaddr'] = 'Lista de direcciones de correo de destinatarios adicionales:';
 $labels['vacationdays'] = 'Cada cuánto enviar mensajes (en días):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/et_EE.inc b/plugins/managesieve/localization/et_EE.inc
index 334a65c..7a10af4 100644
--- a/plugins/managesieve/localization/et_EE.inc
+++ b/plugins/managesieve/localization/et_EE.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Kustuta';
 $labels['sender'] = 'Saatja';
 $labels['recipient'] = 'Saaja';
-$labels['vacationaddresses'] = 'Lisanimekiri saaja e-posti aadressidest (komadega eraldatud):';
+$labels['vacationaddr'] = 'Lisanimekiri saaja e-posti aadressidest:';
 $labels['vacationdays'] = 'Kui tihti kirju saata (päevades):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/fa_IR.inc b/plugins/managesieve/localization/fa_IR.inc
index 91dfcb6..1c8eace 100644
--- a/plugins/managesieve/localization/fa_IR.inc
+++ b/plugins/managesieve/localization/fa_IR.inc
@@ -55,7 +55,6 @@
 $labels['del'] = 'حذف';
 $labels['sender'] = 'فرستنده';
 $labels['recipient'] = 'گیرنده';
-$labels['vacationaddresses'] = 'آدرس‌های ایمیل دیگر من (جدا شده با ویرگول):';
 $labels['vacationdays'] = 'پیغام ها در چه مواقعی فرستاده شدند (در روزهای):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/fi_FI.inc b/plugins/managesieve/localization/fi_FI.inc
index 71856c9..f006f6d 100644
--- a/plugins/managesieve/localization/fi_FI.inc
+++ b/plugins/managesieve/localization/fi_FI.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Poista';
 $labels['sender'] = 'Lähettäjä';
 $labels['recipient'] = 'Vastaanottaja';
-$labels['vacationaddresses'] = 'My additional e-mail addresse(s) (comma-separated):';
+$labels['vacationaddr'] = 'My additional e-mail addresse(s):';
 $labels['vacationdays'] = 'How often send messages (in days):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/fr_FR.inc b/plugins/managesieve/localization/fr_FR.inc
index 9be9f10..047c455 100644
--- a/plugins/managesieve/localization/fr_FR.inc
+++ b/plugins/managesieve/localization/fr_FR.inc
@@ -55,12 +55,12 @@
 $labels['del'] = 'Supprimer';
 $labels['sender'] = 'Expéditeur';
 $labels['recipient'] = 'Destinataire';
-$labels['vacationaddresses'] = 'Liste des destinataires (séparés par une virgule) :';
-$labels['vacationdays'] = 'Ne pas renvoyer un message avant (jours) :';
+$labels['vacationaddr'] = 'Liste des destinataires:';
+$labels['vacationdays'] = 'Ne pas renvoyer un message avant (jours):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
 $labels['seconds'] = 'seconds';
-$labels['vacationreason'] = 'Corps du message (raison de l\'absence) :';
+$labels['vacationreason'] = 'Corps du message (raison de l\'absence):';
 $labels['vacationsubject'] = 'Sujet du message:';
 $labels['rulestop'] = 'Arrêter d\'évaluer les prochaines règles';
 $labels['enable'] = 'Activer/Désactiver';
diff --git a/plugins/managesieve/localization/gl_ES.inc b/plugins/managesieve/localization/gl_ES.inc
index 3f492ad..185490a 100644
--- a/plugins/managesieve/localization/gl_ES.inc
+++ b/plugins/managesieve/localization/gl_ES.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Eliminar';
 $labels['sender'] = 'Remitente';
 $labels['recipient'] = 'Destinatario';
-$labels['vacationaddresses'] = 'Lista de enderezos de correo de destinatarios adicionais (separados por comas):';
+$labels['vacationaddr'] = 'Lista de enderezos de correo de destinatarios adicionais:';
 $labels['vacationdays'] = 'Cada canto enviar mensaxes (en días):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/he_IL.inc b/plugins/managesieve/localization/he_IL.inc
index 0b2f67e..932d4e5 100644
--- a/plugins/managesieve/localization/he_IL.inc
+++ b/plugins/managesieve/localization/he_IL.inc
@@ -55,7 +55,6 @@
 $labels['del'] = 'מחיקה';
 $labels['sender'] = 'השולח';
 $labels['recipient'] = 'הנמען';
-$labels['vacationaddresses'] = 'כתובות דוא"ל נוספות שלי (מופרדות ע"י פסיקים)';
 $labels['vacationdays'] = 'באיזו תדירות ( בימים ) לשלוח הודעות:';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/hu_HU.inc b/plugins/managesieve/localization/hu_HU.inc
index 9d39ffa..ea59fa7 100644
--- a/plugins/managesieve/localization/hu_HU.inc
+++ b/plugins/managesieve/localization/hu_HU.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Törlés';
 $labels['sender'] = 'Feladó';
 $labels['recipient'] = 'Címzett';
-$labels['vacationaddresses'] = 'További címzettek (vesszővel elválasztva):';
+$labels['vacationaddr'] = 'További címzettek:';
 $labels['vacationdays'] = 'Válaszüzenet küldése ennyi naponként:';
 $labels['vacationinterval'] = 'Milyen gyakran küld üzeneteket:';
 $labels['days'] = 'napok';
diff --git a/plugins/managesieve/localization/hy_AM.inc b/plugins/managesieve/localization/hy_AM.inc
index 908175f..68837b0 100644
--- a/plugins/managesieve/localization/hy_AM.inc
+++ b/plugins/managesieve/localization/hy_AM.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Ջնջել';
 $labels['sender'] = 'Ուղարկող';
 $labels['recipient'] = 'Ստացող';
-$labels['vacationaddresses'] = 'Իմ հավելյալ էլփոստի հասցեներ (բաժանված ստորակետներով).';
+$labels['vacationaddr'] = 'Իմ հավելյալ էլփոստի հասցեներ.';
 $labels['vacationdays'] = 'Ինչ հաճախությամբ ուղարկել հաղորդագրությունները (օրեր)`';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/ia.inc b/plugins/managesieve/localization/ia.inc
index 45f6e52..945de27 100644
--- a/plugins/managesieve/localization/ia.inc
+++ b/plugins/managesieve/localization/ia.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Delete';
 $labels['sender'] = 'Sender';
 $labels['recipient'] = 'Recipient';
-$labels['vacationaddresses'] = 'My additional e-mail addresse(s) (comma-separated):';
+$labels['vacationaddr'] = 'My additional e-mail addresse(s):';
 $labels['vacationdays'] = 'How often send messages (in days):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/id_ID.inc b/plugins/managesieve/localization/id_ID.inc
index a30c2a0..d98a326 100644
--- a/plugins/managesieve/localization/id_ID.inc
+++ b/plugins/managesieve/localization/id_ID.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Hapus';
 $labels['sender'] = 'Pengirim';
 $labels['recipient'] = 'Penerima';
-$labels['vacationaddresses'] = 'Alamat email tambahan saya (dipisahkan koma):';
+$labels['vacationaddr'] = 'Alamat email tambahan saya:';
 $labels['vacationdays'] = 'Seberapa sering mengirim pesan (dalam hari):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/it_IT.inc b/plugins/managesieve/localization/it_IT.inc
index 6fb2c42..b54c46d 100644
--- a/plugins/managesieve/localization/it_IT.inc
+++ b/plugins/managesieve/localization/it_IT.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Elimina';
 $labels['sender'] = 'Mittente';
 $labels['recipient'] = 'Destinatario';
-$labels['vacationaddresses'] = 'Lista di indirizzi e-mail di destinatari addizionali (separati da virgola):';
+$labels['vacationaddr'] = 'Lista di indirizzi e-mail di destinatari addizionali:';
 $labels['vacationdays'] = 'Ogni quanti giorni ribadire il messaggio allo stesso mittente';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/ja_JP.inc b/plugins/managesieve/localization/ja_JP.inc
index 0cd4f44..c8927d3 100644
--- a/plugins/managesieve/localization/ja_JP.inc
+++ b/plugins/managesieve/localization/ja_JP.inc
@@ -55,7 +55,7 @@
 $labels['del'] = '削除';
 $labels['sender'] = '送信者';
 $labels['recipient'] = '宛先';
-$labels['vacationaddresses'] = '電子メールの宛先の(コンマ区切った)追加のリスト:';
+$labels['vacationaddr'] = '電子メールの宛先の追加のリスト:';
 $labels['vacationdays'] = 'メッセージを(1日に)送信する頻度:';
 $labels['vacationinterval'] = 'メッセージを送信する頻度:';
 $labels['days'] = '日';
diff --git a/plugins/managesieve/localization/ko_KR.inc b/plugins/managesieve/localization/ko_KR.inc
index 5ab4fc2..1085f62 100644
--- a/plugins/managesieve/localization/ko_KR.inc
+++ b/plugins/managesieve/localization/ko_KR.inc
@@ -55,7 +55,7 @@
 $labels['del'] = '삭제';
 $labels['sender'] = '발신인';
 $labels['recipient'] = '수신인';
-$labels['vacationaddresses'] = '나의 추가 이메일 주소 (쉼표로 구분됨):';
+$labels['vacationaddr'] = '나의 추가 이메일 주소:';
 $labels['vacationdays'] = '메시지 발신 주기 (일):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/lt_LT.inc b/plugins/managesieve/localization/lt_LT.inc
index fecd3d6..3b6f4ee 100644
--- a/plugins/managesieve/localization/lt_LT.inc
+++ b/plugins/managesieve/localization/lt_LT.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Pašalinti';
 $labels['sender'] = 'Siuntėjas';
 $labels['recipient'] = 'Gavėjas';
-$labels['vacationaddresses'] = 'Papildomas gavėjų adresų sąrašas (skirti kableliais):';
+$labels['vacationaddr'] = 'Papildomas gavėjų adresų sąrašas:';
 $labels['vacationdays'] = 'Kaip dažnai išsiųsti laiškus (dienomis):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/lv_LV.inc b/plugins/managesieve/localization/lv_LV.inc
index f1f85c2..0a008f8 100644
--- a/plugins/managesieve/localization/lv_LV.inc
+++ b/plugins/managesieve/localization/lv_LV.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Dzēst';
 $labels['sender'] = 'Sūtītājs';
 $labels['recipient'] = 'Saņēmējs';
-$labels['vacationaddresses'] = 'Ievadiet vienu vai vairākus e-pastu(s), atdalot tos komatu:';
+$labels['vacationaddr'] = 'Ievadiet vienu vai vairākus e-pastu(s):';
 $labels['vacationdays'] = 'Cik dienu laikā vienam un tam pašam sūtītājam neatbildēt atkārtoti (piem., 7):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/ml_IN.inc b/plugins/managesieve/localization/ml_IN.inc
index 67cd682..761b430 100644
--- a/plugins/managesieve/localization/ml_IN.inc
+++ b/plugins/managesieve/localization/ml_IN.inc
@@ -55,7 +55,6 @@
 $labels['del'] = 'നീക്കം ചെയ്യുക';
 $labels['sender'] = 'അയചയാള്‍';
 $labels['recipient'] = 'സ്വീകര്‍ത്താവ്';
-$labels['vacationaddresses'] = 'സ്വീകര്‍ത്താവിന്റെ ഇമെയില്‍ വിലാസങ്ങളുടെ അധികമുള്ള പട്ടിക (കോമയിട്ട് തിരിച്ച)';
 $labels['vacationdays'] = 'എത്ര ഭിവസം കൂടുമ്പോള്‍ സന്ദേശം അയക്കണം:';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/mr_IN.inc b/plugins/managesieve/localization/mr_IN.inc
index 3339737..082ea9b 100644
--- a/plugins/managesieve/localization/mr_IN.inc
+++ b/plugins/managesieve/localization/mr_IN.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'नष्ट करा';
 $labels['sender'] = 'प्रेषक';
 $labels['recipient'] = 'Recipient';
-$labels['vacationaddresses'] = 'My additional e-mail addresse(s) (comma-separated):';
+$labels['vacationaddr'] = 'My additional e-mail addresse(s):';
 $labels['vacationdays'] = 'How often send messages (in days):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/nb_NO.inc b/plugins/managesieve/localization/nb_NO.inc
index c2c17b2..c3bf98f 100644
--- a/plugins/managesieve/localization/nb_NO.inc
+++ b/plugins/managesieve/localization/nb_NO.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Slett';
 $labels['sender'] = 'Avsender';
 $labels['recipient'] = 'Mottaker';
-$labels['vacationaddresses'] = 'Liste med mottakeradresser (adskilt med komma):';
+$labels['vacationaddr'] = 'Liste med mottakeradresser:';
 $labels['vacationdays'] = 'Periode mellom meldinger (i dager):';
 $labels['vacationinterval'] = 'Periode mellom meldinger:';
 $labels['days'] = 'dager';
diff --git a/plugins/managesieve/localization/nl_NL.inc b/plugins/managesieve/localization/nl_NL.inc
index 1fd6eee..80c2274 100644
--- a/plugins/managesieve/localization/nl_NL.inc
+++ b/plugins/managesieve/localization/nl_NL.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Verwijderen';
 $labels['sender'] = 'Afzender';
 $labels['recipient'] = 'Ontvanger';
-$labels['vacationaddresses'] = 'Aanvullende lijst van geadresseerden (gescheiden met komma\'s):';
+$labels['vacationaddr'] = 'Aanvullende lijst van geadresseerden:';
 $labels['vacationdays'] = 'Hoe vaak moet een bericht verstuurd worden (in dagen):';
 $labels['vacationinterval'] = 'Hoe vaak moet een bericht verstuurd worden:';
 $labels['days'] = 'dagen';
diff --git a/plugins/managesieve/localization/nn_NO.inc b/plugins/managesieve/localization/nn_NO.inc
index 69af8cd..03563a7 100644
--- a/plugins/managesieve/localization/nn_NO.inc
+++ b/plugins/managesieve/localization/nn_NO.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Slett';
 $labels['sender'] = 'Avsendar';
 $labels['recipient'] = 'Mottakar';
-$labels['vacationaddresses'] = 'Liste med mottakaradresser (komma-separert):';
+$labels['vacationaddr'] = 'Liste med mottakaradresser:';
 $labels['vacationdays'] = 'Periode mellom meldingar (i dagar):';
 $labels['vacationreason'] = 'Innhald (grunngjeving for fråvær)';
 $labels['vacationsubject'] = 'Meldingsemne:';
diff --git a/plugins/managesieve/localization/pl_PL.inc b/plugins/managesieve/localization/pl_PL.inc
index f2ec96e..2876337 100644
--- a/plugins/managesieve/localization/pl_PL.inc
+++ b/plugins/managesieve/localization/pl_PL.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Usuń';
 $labels['sender'] = 'Nadawca';
 $labels['recipient'] = 'Odbiorca';
-$labels['vacationaddresses'] = 'Lista dodatkowych adresów odbiorców (oddzielonych przecinkami):';
+$labels['vacationaddr'] = 'Lista dodatkowych adresów odbiorców:';
 $labels['vacationdays'] = 'Częstotliwość wysyłania wiadomości (w dniach):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/pt_BR.inc b/plugins/managesieve/localization/pt_BR.inc
index fb4699f..92c1e6a 100644
--- a/plugins/managesieve/localization/pt_BR.inc
+++ b/plugins/managesieve/localization/pt_BR.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Excluir';
 $labels['sender'] = 'Remetente';
 $labels['recipient'] = 'Destinatário';
-$labels['vacationaddresses'] = 'Lista adicional de e-mails destinatários (separado por vírgula):';
+$labels['vacationaddr'] = 'Lista adicional de e-mails destinatários:';
 $labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/pt_PT.inc b/plugins/managesieve/localization/pt_PT.inc
index bfb3f29..f51e8bf 100644
--- a/plugins/managesieve/localization/pt_PT.inc
+++ b/plugins/managesieve/localization/pt_PT.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Eliminar';
 $labels['sender'] = 'Remetente';
 $labels['recipient'] = 'Destinatário';
-$labels['vacationaddresses'] = 'Lista adicional de destinatários de e-mails (separados por vírgula):';
+$labels['vacationaddr'] = 'Lista adicional de destinatários de e-mails:';
 $labels['vacationdays'] = 'Enviar mensagens com que frequência (em dias):';
 $labels['vacationinterval'] = 'Com que frequência envia mensagens:';
 $labels['days'] = 'dias';
diff --git a/plugins/managesieve/localization/ro_RO.inc b/plugins/managesieve/localization/ro_RO.inc
index 2c917cb..8d6e9c9 100644
--- a/plugins/managesieve/localization/ro_RO.inc
+++ b/plugins/managesieve/localization/ro_RO.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Șterge';
 $labels['sender'] = 'Expeditor';
 $labels['recipient'] = 'Destinatar';
-$labels['vacationaddresses'] = 'Adresele mele de e-mail adiționale (împărțite cu virgulă):';
+$labels['vacationaddr'] = 'Adresele mele de e-mail adiționale:';
 $labels['vacationdays'] = 'Cât de des să trimit mesajele (în zile):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/ru_RU.inc b/plugins/managesieve/localization/ru_RU.inc
index b05074c..6aab60d 100644
--- a/plugins/managesieve/localization/ru_RU.inc
+++ b/plugins/managesieve/localization/ru_RU.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Удалить';
 $labels['sender'] = 'Отправитель';
 $labels['recipient'] = 'Получатель';
-$labels['vacationaddresses'] = 'Список моих дополнительных адресов (разделённых запятыми):';
+$labels['vacationaddr'] = 'Список моих дополнительных адресов:';
 $labels['vacationdays'] = 'Как часто отправлять сообщения (в днях):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/si_LK.inc b/plugins/managesieve/localization/si_LK.inc
index afc2e38..378fcf1 100644
--- a/plugins/managesieve/localization/si_LK.inc
+++ b/plugins/managesieve/localization/si_LK.inc
@@ -55,7 +55,6 @@
 $labels['del'] = 'මකන්න';
 $labels['sender'] = 'යවන්නා';
 $labels['recipient'] = 'ලබන්නා';
-$labels['vacationaddresses'] = 'My additional e-mail addresse(s) (comma-separated):';
 $labels['vacationdays'] = 'How often send messages (in days):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/sk_SK.inc b/plugins/managesieve/localization/sk_SK.inc
index f336cf2..9bfb2ef 100644
--- a/plugins/managesieve/localization/sk_SK.inc
+++ b/plugins/managesieve/localization/sk_SK.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Zmaž';
 $labels['sender'] = 'Odosielateľ';
 $labels['recipient'] = 'Adresát';
-$labels['vacationaddresses'] = 'Dodatoční príjemcovia správy (oddelení čiarkami):';
+$labels['vacationaddr'] = 'Dodatoční príjemcovia správy:';
 $labels['vacationdays'] = 'Počet dní medzi odoslaním správy:';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/sl_SI.inc b/plugins/managesieve/localization/sl_SI.inc
index f1c3b98..0a30a3a 100644
--- a/plugins/managesieve/localization/sl_SI.inc
+++ b/plugins/managesieve/localization/sl_SI.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Izbriši';
 $labels['sender'] = 'Pošiljatelj';
 $labels['recipient'] = 'Prejemnik';
-$labels['vacationaddresses'] = 'Dodaten seznam naslovov prejemnikov (ločenih z vejico):';
+$labels['vacationaddr'] = 'Dodaten seznam naslovov prejemnikov:';
 $labels['vacationdays'] = 'Kako pogosto naj bodo sporočila poslana (v dnevih):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/sv_SE.inc b/plugins/managesieve/localization/sv_SE.inc
index 49d5b12..f2aeddd 100644
--- a/plugins/managesieve/localization/sv_SE.inc
+++ b/plugins/managesieve/localization/sv_SE.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Ta bort';
 $labels['sender'] = 'Avsändare';
 $labels['recipient'] = 'Mottagare';
-$labels['vacationaddresses'] = 'Ytterligare mottagaradresser (avdelade med kommatecken)';
+$labels['vacationaddr'] = 'Ytterligare mottagaradresser:';
 $labels['vacationdays'] = 'Antal dagar mellan auto-svar:';
 $labels['vacationinterval'] = 'Tid mellan auto-svar:';
 $labels['days'] = 'Dagar';
diff --git a/plugins/managesieve/localization/tr_TR.inc b/plugins/managesieve/localization/tr_TR.inc
index 984cb94..19bbb2e 100644
--- a/plugins/managesieve/localization/tr_TR.inc
+++ b/plugins/managesieve/localization/tr_TR.inc
@@ -55,8 +55,8 @@
 $labels['del'] = 'Sil';
 $labels['sender'] = 'Gönderici';
 $labels['recipient'] = 'Alıcı';
-$labels['vacationaddresses'] = 'İlave e-posta adreslerim(virgül ile ayrılmış)';
-$labels['vacationdays'] = 'Ne sıklıkla mesajlar gönderilir(gün)';
+$labels['vacationaddr'] = 'İlave e-posta adreslerim:';
+$labels['vacationdays'] = 'Ne sıklıkla mesajlar gönderilir(gün):';
 $labels['vacationinterval'] = 'Ne kadar sıklıkla mesaj gönderirsiniz:';
 $labels['days'] = 'günler';
 $labels['seconds'] = 'saniyeler';
diff --git a/plugins/managesieve/localization/uk_UA.inc b/plugins/managesieve/localization/uk_UA.inc
index 41623df..57cab9e 100644
--- a/plugins/managesieve/localization/uk_UA.inc
+++ b/plugins/managesieve/localization/uk_UA.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Видалити';
 $labels['sender'] = 'Відправник';
 $labels['recipient'] = 'Отримувач';
-$labels['vacationaddresses'] = 'Додатковий список адрес отримувачів (розділених комою)';
+$labels['vacationaddr'] = 'Додатковий список адрес отримувачів:';
 $labels['vacationdays'] = 'Як часто повторювати (у днях):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/vi_VN.inc b/plugins/managesieve/localization/vi_VN.inc
index 8d6fcd3..6e65ccc 100644
--- a/plugins/managesieve/localization/vi_VN.inc
+++ b/plugins/managesieve/localization/vi_VN.inc
@@ -55,7 +55,7 @@
 $labels['del'] = 'Xoá';
 $labels['sender'] = 'Người gửi';
 $labels['recipient'] = 'Người nhận';
-$labels['vacationaddresses'] = 'Địa chỉ email bổ sung của tôi ( phân cách bằng dấu phẩy)';
+$labels['vacationaddr'] = 'Địa chỉ email bổ sung của tôi';
 $labels['vacationdays'] = 'Số lần gửi thư (trong ngày)';
 $labels['vacationreason'] = 'Nội dung chính';
 $labels['vacationsubject'] = 'Tiêu đề thư';
diff --git a/plugins/managesieve/localization/zh_CN.inc b/plugins/managesieve/localization/zh_CN.inc
index 79b705c..106fb40 100644
--- a/plugins/managesieve/localization/zh_CN.inc
+++ b/plugins/managesieve/localization/zh_CN.inc
@@ -55,7 +55,7 @@
 $labels['del'] = '删除';
 $labels['sender'] = '发件人';
 $labels['recipient'] = '收件人';
-$labels['vacationaddresses'] = '收件人地址的附加名单(以半角逗号分隔)';
+$labels['vacationaddr'] = '收件人地址的附加名单';
 $labels['vacationdays'] = '发送邮件频率(单位:天):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/localization/zh_TW.inc b/plugins/managesieve/localization/zh_TW.inc
index 3f3fc13..047ebcc 100644
--- a/plugins/managesieve/localization/zh_TW.inc
+++ b/plugins/managesieve/localization/zh_TW.inc
@@ -55,7 +55,7 @@
 $labels['del'] = '刪除';
 $labels['sender'] = '寄件者';
 $labels['recipient'] = '收件者';
-$labels['vacationaddresses'] = '其他收件者(用半形逗號隔開):';
+$labels['vacationaddr'] = '其他收件者:';
 $labels['vacationdays'] = '多久回覆一次(單位:天):';
 $labels['vacationinterval'] = 'How often send messages:';
 $labels['days'] = 'days';
diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js
index 04b9a76..117097e 100644
--- a/plugins/managesieve/managesieve.js
+++ b/plugins/managesieve/managesieve.js
@@ -55,6 +55,11 @@
         }
 
         $('input[type="text"]:first', rcmail.gui_objects.sieveform).focus();
+
+        // initialize smart list inputs
+        $('textarea[data-type="list"]', rcmail.gui_objects.sieveform).each(function() {
+          smart_field_init(this);
+        });
       }
       else {
         rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror);
@@ -469,6 +474,11 @@
     row.className = 'rulerow';
     row.innerHTML = content;
 
+    // initialize smart list inputs
+    $('textarea[data-type="list"]', row).each(function() {
+      smart_field_init(this);
+    });
+
     this.managesieve_formbuttons(div);
   }
 };
@@ -565,7 +575,6 @@
   var obj = document.getElementById('header' + id),
     size = document.getElementById('rule_size' + id),
     op = document.getElementById('rule_op' + id),
-    target = document.getElementById('rule_target' + id),
     header = document.getElementById('custom_header' + id),
     mod = document.getElementById('rule_mod' + id),
     trans = document.getElementById('rule_trans' + id),
@@ -574,31 +583,30 @@
   if (obj.value == 'size') {
     size.style.display = 'inline';
     op.style.display = 'none';
-    target.style.display = 'none';
     header.style.display = 'none';
     mod.style.display = 'none';
     trans.style.display = 'none';
     comp.style.display = 'none';
   }
   else {
-    header.style.display = obj.value != '...' ? 'none' : 'inline';
+    header.style.display = obj.value != '...' ? 'none' : 'inline-block';
     size.style.display = 'none';
     op.style.display = 'inline';
     comp.style.display = '';
-    rule_op_select(id);
     mod.style.display = obj.value == 'body' ? 'none' : 'block';
     trans.style.display = obj.value == 'body' ? 'block' : 'none';
   }
 
+  rule_op_select(op, id, obj.value);
   obj.style.width = obj.value == '...' ? '40px' : '';
 };
 
-function rule_op_select(id)
+function rule_op_select(obj, id, header)
 {
-  var obj = document.getElementById('rule_op' + id),
-    target = document.getElementById('rule_target' + id);
+  var target = document.getElementById('rule_target' + id + '_list'),
+    style = obj.value == 'exists' || obj.value == 'notexists' || header == 'size' ? 'none' : 'inline-block';
 
-  target.style.display = obj.value == 'exists' || obj.value == 'notexists' ? 'none' : 'inline';
+  target.style.display = style;
 };
 
 function rule_trans_select(id)
@@ -677,6 +685,75 @@
   }
 };
 
+// Inititalizes smart list input
+function smart_field_init(field)
+{
+  var id = field.id + '_list',
+    area = $('<span class="listarea"></span>'),
+    list = field.value ? field.value.split("\n") : [''];
+
+  if ($('#'+id).length)
+    return;
+
+  // add input rows
+  $.each(list, function(i, v) {
+    area.append(smart_field_row(v, field.name, i, $(field).data('size')));
+  });
+
+  area.attr('id', id);
+  field = $(field);
+
+  if (field.attr('disabled'))
+    area.hide();
+
+  field.after(area);
+
+  if (field.hasClass('error')) {
+    area.addClass('error');
+    rcmail.managesieve_tip_register([[id, field.data('tip')]]);
+  }
+};
+
+function smart_field_row(value, name, idx, size)
+{
+  // build row element content
+  var input, content = '<span class="listelement">'
+      + '<span class="actions"><span class="add"></span><span class="reset"></span></span>'
+      + '<input type="text"></span>',
+    elem = $(content),
+    attrs = {value: value, name: name + '[]'};
+
+  if (size)
+    attrs.size = size;
+
+  input = $('input', elem).attr(attrs)
+    .keydown(function(e) { if (e.which == 13) $('span[class="add"]', elem).click(); });
+
+  // element creation event
+  $('span[class="add"]', elem).click(function() {
+    var span = $(this.parentNode.parentNode),
+      input = $('input', span),
+      name = input.attr('name').replace(/\[\]$/, ''),
+      dt = (new Date()).getTime(),
+      elem = smart_field_row('', name, dt, size);
+
+    span.after(elem);
+    $('input', elem).focus();
+  });
+
+  // element deletion event
+  $('span[class="reset"]', elem).click(function() {
+    var span = $(this.parentNode.parentNode);
+
+    if (span.parent().children().length > 1)
+      span.remove();
+    else
+      $('input', span).val('').focus();
+  });
+
+  return elem;
+}
+
 // Register onmouse(leave/enter) events for tips on specified form element
 rcube_webmail.prototype.managesieve_tip_register = function(tips)
 {
@@ -685,25 +762,26 @@
 
   for (var n in tips) {
     $('#'+tips[n][0])
-      .bind('mouseenter', {str: tips[n][1]},
-        function(e) {
-          var offset = $(this).offset(),
-            left = offset.left,
-            top = offset.top - 12,
-            minwidth = $(this).width();
+      .data('tip', tips[n][1])
+      .bind('mouseenter', function(e) {
+        var elem = $(this),
+          offset = elem.offset(),
+          left = offset.left,
+          top = offset.top - 12,
+          minwidth = elem.width();
 
-          if (framed) {
-            offset = $((rcmail.env.task == 'mail'  ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset();
-            top  += offset.top;
-            left += offset.left;
-          }
+        if (framed) {
+          offset = $((rcmail.env.task == 'mail'  ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset();
+          top  += offset.top;
+          left += offset.left;
+        }
 
-          tip.html(e.data.str)
-          top -= tip.height();
+        tip.html(elem.data('tip'));
+        top -= tip.height();
 
-          tip.css({left: left, top: top, minWidth: (minwidth-2) + 'px'}).show();
-        })
-      .bind('mouseleave', function(e) { tip.hide(); });
+        tip.css({left: left, top: top, minWidth: (minwidth-2) + 'px'}).show();
+      })
+    .bind('mouseleave', function(e) { tip.hide(); });
   }
 };
 
diff --git a/plugins/managesieve/managesieve.php b/plugins/managesieve/managesieve.php
index f451a81..c7d5911 100644
--- a/plugins/managesieve/managesieve.php
+++ b/plugins/managesieve/managesieve.php
@@ -708,8 +708,9 @@
             }
             else {
                 foreach ($headers as $idx => $header) {
+                    // targets are indexed differently (assume form order)
+                    $target     = $this->strip_value(array_shift($targets), true);
                     $header     = $this->strip_value($header);
-                    $target     = $this->strip_value($targets[$idx], true);
                     $operator   = $this->strip_value($ops[$idx]);
                     $comparator = $this->strip_value($comparators[$idx]);
 
@@ -747,10 +748,16 @@
                         $this->form['tests'][$i]['type'] = $type;
                         $this->form['tests'][$i]['arg']  = $target;
 
-                        if ($target == '' && $type != 'exists')
+                        if (empty($target) && $type != 'exists') {
                             $this->errors['tests'][$i]['target'] = $this->gettext('cannotbeempty');
-                        else if (preg_match('/^(value|count)-/', $type) && !preg_match('/[0-9]+/', $target))
-                            $this->errors['tests'][$i]['target'] = $this->gettext('forbiddenchars');
+                        }
+                        else if (preg_match('/^(value|count)-/', $type)) {
+                            foreach ($target as $target_value) {
+                                if (!preg_match('/[0-9]+/', $target_value)) {
+                                    $this->errors['tests'][$i]['target'] = $this->gettext('forbiddenchars');
+                                }
+                            }
+                        }
 
                         $this->form['tests'][$i]['part'] = $trans;
                         if ($trans == 'content') {
@@ -809,10 +816,16 @@
                             $this->form['tests'][$i]['arg1'] = $header;
                             $this->form['tests'][$i]['arg2'] = $target;
 
-                            if ($target == '')
+                            if (empty($target)) {
                                 $this->errors['tests'][$i]['target'] = $this->gettext('cannotbeempty');
-                            else if (preg_match('/^(value|count)-/', $type) && !preg_match('/[0-9]+/', $target))
-                                $this->errors['tests'][$i]['target'] = $this->gettext('forbiddenchars');
+                            }
+                            else if (preg_match('/^(value|count)-/', $type)) {
+                                foreach ($target as $target_value) {
+                                    if (!preg_match('/[0-9]+/', $target_value)) {
+                                        $this->errors['tests'][$i]['target'] = $this->gettext('forbiddenchars');
+                                    }
+                                }
+                            }
 
                             if ($mod) {
                                 $this->form['tests'][$i]['part'] = $mod_type;
@@ -893,20 +906,14 @@
                     $interval_type = $interval_types[$idx] == 'seconds' ? 'seconds' : 'days';
                     $this->form['actions'][$i]['reason']    = str_replace("\r\n", "\n", $reason);
                     $this->form['actions'][$i]['subject']   = $subject[$idx];
-                    $this->form['actions'][$i]['addresses'] = explode(',', $addresses[$idx]);
+                    $this->form['actions'][$i]['addresses'] = array_shift($addresses);
                     $this->form['actions'][$i][$interval_type] = $intervals[$idx];
 // @TODO: vacation :mime, :from, :handle
 
-                    if ($this->form['actions'][$i]['addresses']) {
-                        foreach($this->form['actions'][$i]['addresses'] as $aidx => $address) {
-                            $address = trim($address);
-                            if (!$address)
-                                unset($this->form['actions'][$i]['addresses'][$aidx]);
-                            else if(!rcube_utils::check_email($address)) {
-                                $this->errors['actions'][$i]['addresses'] = $this->gettext('noemailwarning');
-                                break;
-                            } else
-                                $this->form['actions'][$i]['addresses'][$aidx] = $address;
+                    foreach ((array)$this->form['actions'][$i]['addresses'] as $aidx => $address) {
+                        if (!rcube_utils::check_email($address)) {
+                            $this->errors['actions'][$i]['addresses'] = $this->gettext('noemailwarning');
+                            break;
                         }
                     }
 
@@ -1406,9 +1413,9 @@
         }
 
         $tout .= $select_op->show($test);
-        $tout .= '<input type="text" name="_rule_target[]" id="rule_target' .$id. '"
-            value="' .rcube::Q($target). '" size="20" ' . $this->error_class($id, 'test', 'target', 'rule_target')
-            . ' style="display:' . ($rule['test']!='size' && $rule['test'] != 'exists' ? 'inline' : 'none') . '" />'."\n";
+        $tout .= $this->list_input($id, 'rule_target', $target,
+            $rule['test'] != 'size' && $rule['test'] != 'exists',
+            $this->error_class($id, 'test', 'target', 'rule_target')) . "\n";
 
         $select_size_op = new html_select(array('name' => "_rule_size_op[]", 'id' => 'rule_size_op'.$id));
         $select_size_op->add(rcube::Q($this->gettext('filterover')), 'over');
@@ -1589,10 +1596,9 @@
             .'<input type="text" name="_action_subject['.$id.']" id="action_subject'.$id.'" '
             .'value="' . (is_array($action['subject']) ? rcube::Q(implode(', ', $action['subject']), 'strict', false) : $action['subject']) . '" size="35" '
             . $this->error_class($id, 'action', 'subject', 'action_subject') .' />';
-        $out .= '<br /><span class="label">' .rcube::Q($this->gettext('vacationaddresses')) . '</span><br />'
-            .'<input type="text" name="_action_addresses['.$id.']" id="action_addr'.$id.'" '
-            .'value="' . (is_array($action['addresses']) ? rcube::Q(implode(', ', $action['addresses']), 'strict', false) : $action['addresses']) . '" size="35" '
-            . $this->error_class($id, 'action', 'addresses', 'action_addr') .' />';
+        $out .= '<br /><span class="label">' .rcube::Q($this->gettext('vacationaddr')) . '</span><br />'
+            . $this->list_input($id, 'action_addresses', $action['addresses'], true,
+                $this->error_class($id, 'action', 'addresses', 'action_addresses'), 30);
         $out .= '<br /><span class="label">' . rcube::Q($this->gettext($vsec ? 'vacationinterval' : 'vacationdays')) . '</span><br />'
             .'<input type="text" name="_action_interval['.$id.']" id="action_interval'.$id.'" '
             .'value="' .rcube::Q(isset($action['seconds']) ? $action['seconds'] : $action['days'], 'strict', false) . '" size="2" '
@@ -1727,6 +1733,18 @@
 
     private function strip_value($str, $allow_html = false, $trim = true)
     {
+        if (is_array($str)) {
+            foreach ($str as $idx => $val) {
+                $val = $this->strip_value($val, $allow_html, $trim);
+
+                if ($val === '') {
+                    unset($str[$idx]);
+                }
+            }
+
+            return $str;
+        }
+
         if (!$allow_html) {
             $str = strip_tags($str);
         }
@@ -1764,6 +1782,19 @@
         $this->rc->output->add_script($script, 'foot');
     }
 
+    private function list_input($id, $name, $value, $enabled, $class, $size=null)
+    {
+        $value = (array) $value;
+        $value = array_map(array('rcube', 'Q'), $value);
+        $value = implode("\n", $value);
+
+        return '<textarea data-type="list" name="_' . $name . '['.$id.']" id="' . $name.$id . '"'
+            . ($enabled ? '' : ' disabled="disabled"')
+            . ($size ? ' data-size="'.$size.'"' : '')
+            . $class
+            . ' style="display:none">' . $value . '</textarea>';
+    }
+
     /**
      * Converts mailbox name from/to UTF7-IMAP from/to internal Sieve encoding
      * with delimiter replacement.
diff --git a/plugins/managesieve/skins/classic/images/plus_minus.png b/plugins/managesieve/skins/classic/images/plus_minus.png
new file mode 100644
index 0000000..d92af25
--- /dev/null
+++ b/plugins/managesieve/skins/classic/images/plus_minus.png
Binary files differ
diff --git a/plugins/managesieve/skins/classic/managesieve.css b/plugins/managesieve/skins/classic/managesieve.css
index 86a0d19..5305b52 100644
--- a/plugins/managesieve/skins/classic/managesieve.css
+++ b/plugins/managesieve/skins/classic/managesieve.css
@@ -226,6 +226,7 @@
 select.operator_selector
 {
   width: 200px;
+  vertical-align: top;
 }
 
 td.rowtargets span,
@@ -308,6 +309,77 @@
   font-size: 11px;
 }
 
+/* smart multi-row input field */
+.listarea
+{
+  border: 1px solid #666;
+  margin: 0;
+  padding: 1px;
+  display: inline-block;
+  max-height: 67px;
+  overflow-y: auto;
+}
+
+.listelement
+{
+  display: block;
+  white-space: nowrap;
+  background-color: #fff;
+  border-top: 1px solid #e2e2e2;
+  height: 16px;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+  line-height: 16px;
+}
+
+.listarea.error .listelement
+{
+  background-color: #FFFFC4;
+}
+
+.listelement:first-child
+{
+  border-top: none;
+}
+
+#filter-form .listelement input
+{
+  border: none;
+  border-radius: 0;
+  box-shadow: none;
+  outline: none;
+  vertical-align: top;
+  height: 16px;
+  padding-top: 0;
+  padding-bottom: 0;
+  line-height: 16px;
+  background-color: transparent;
+}
+
+.listelement input:focus
+{
+  box-shadow: none;
+}
+
+.listelement .actions
+{
+  display: inline-block;
+  width: 32px;
+  height: 16px;
+  background: url(images/plus_minus.png) -1px 0 no-repeat #eee;
+}
+
+.actions .add,
+.actions .reset
+{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  cursor: pointer;
+}
+
+
 /* fixes for popup window */
 
 body.iframe.mail
diff --git a/plugins/managesieve/skins/larry/images/plus_minus.png b/plugins/managesieve/skins/larry/images/plus_minus.png
new file mode 100644
index 0000000..d92af25
--- /dev/null
+++ b/plugins/managesieve/skins/larry/images/plus_minus.png
Binary files differ
diff --git a/plugins/managesieve/skins/larry/managesieve.css b/plugins/managesieve/skins/larry/managesieve.css
index 099f05f..058b662 100644
--- a/plugins/managesieve/skins/larry/managesieve.css
+++ b/plugins/managesieve/skins/larry/managesieve.css
@@ -175,6 +175,12 @@
   padding-top: 2px;
 }
 
+td.rowtargets > div
+{
+  vertical-align: top;
+  margin-top: 2px;
+}
+
 td.rowtargets div.adv
 {
   padding-top: 3px;
@@ -205,6 +211,7 @@
 select.operator_selector
 {
   width: 200px;
+  vertical-align: top;
 }
 
 td.rowtargets span,
@@ -292,6 +299,12 @@
   padding: 1px;
 }
 
+html.mozilla #filter-form select
+{
+  padding-top: 3px;
+  padding-bottom: 3px;
+}
+
 /* revert larry style button */
 #filter-form input.button
 {
@@ -306,6 +319,82 @@
   border-radius: 4px;
 }
 
+/* smart multi-row input field */
+.listarea
+{
+  border: 1px solid #B2B2B2;
+  border-radius: 4px;
+  box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+  -moz-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+  -webkit-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+  -o-box-shadow: inset 0 0 2px 1px rgba(0,0,0, 0.1);
+  margin: 0;
+  padding: 2px;
+  display: inline-block;
+  max-height: 59px;
+  overflow-y: auto;
+}
+
+.listelement
+{
+  display: block;
+  white-space: nowrap;
+  background-color: #fff;
+  border-top: 1px solid #e2e2e2;
+  height: 14px;
+  padding: 0;
+  margin: 0;
+  overflow: hidden;
+  line-height: 14px;
+}
+
+.listarea.error .listelement
+{
+  background-color: #FFFFC4;
+}
+
+.listelement:first-child
+{
+  border-top: none;
+}
+
+#filter-form .listelement input
+{
+  border: none;
+  border-radius: 0;
+  box-shadow: none;
+  outline: none;
+  vertical-align: top;
+  height: 14px;
+  padding-top: 0;
+  padding-bottom: 0;
+  line-height: 14px;
+  background-color: transparent;
+}
+
+.listelement input:focus
+{
+  box-shadow: none;
+}
+
+.listelement .actions
+{
+  display: inline-block;
+  width: 32px;
+  height: 16px;
+  background: url(images/plus_minus.png) -1px -1px no-repeat #eee;
+}
+
+.actions .add,
+.actions .reset
+{
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  cursor: pointer;
+}
+
+
 /* fixes for popup window */
 
 body.iframe.mail

--
Gitblit v1.9.1