diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php index cafd281d5..1cddec899 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_engine.php @@ -1342,18 +1342,16 @@ class rcube_sieve_engine function filterset_form($attrib) { - if (!$attrib['id']) + if (!$attrib['id']) { $attrib['id'] = 'rcmfiltersetform'; + } - $out = '
'."\n"; - + $table = new html_table(array('cols' => 2, 'class' => 'propform')); $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $this->rc->task)); $hiddenfields->add(array('name' => '_action', 'value' => 'plugin.managesieve-save')); $hiddenfields->add(array('name' => '_framed', 'value' => ($_POST['_framed'] || $_GET['_framed'] ? 1 : 0))); $hiddenfields->add(array('name' => '_newset', 'value' => 1)); - $out .= $hiddenfields->show(); - $name = rcube_utils::get_input_value('_name', rcube_utils::INPUT_POST); $copy = rcube_utils::get_input_value('_copy', rcube_utils::INPUT_POST); $selected = rcube_utils::get_input_value('_from', rcube_utils::INPUT_POST); @@ -1362,18 +1360,17 @@ class rcube_sieve_engine $input_name = new html_inputfield(array('name' => '_name', 'id' => '_name', 'size' => 30, 'class' => ($this->errors['name'] ? 'error' : ''))); - $out .= sprintf(' %s

', - '_name', rcube::Q($this->plugin->gettext('filtersetname')), $input_name->show($name)); + $table->add('title', html::label('_name', rcube::Q($this->plugin->gettext('filtersetname')))); + $table->add(null, $input_name->show($name)); - $out .="\n
" . $this->plugin->gettext('filters') . ":\n"; - $out .= html::tag('input', array( + $filters = '
'; + )) . rcube::Q($this->plugin->gettext('fromfile')) . ' ' . $upload->show()) . ''; + + $filters .= ''; + + $table->add('title', html::label('from_none', rcube::Q($this->plugin->gettext('filters')))); + $table->add('', $filters); + + $out = '' + . "\n" . $hiddenfields->show() . "\n" . $table->show(); $this->rc->output->add_gui_object('sieveform', 'filtersetform'); @@ -1432,14 +1430,15 @@ class rcube_sieve_engine function filter_form($attrib) { - if (!$attrib['id']) + if (!$attrib['id']) { $attrib['id'] = 'rcmfilterform'; + } $fid = rcube_utils::get_input_value('_fid', rcube_utils::INPUT_GPC); $scr = isset($this->form) ? $this->form : $this->script[$fid]; $compact = !empty($attrib['compact-form']); - $_SESSION['managesieve-compact-form'] = true; + $_SESSION['managesieve-compact-form'] = $compact; // do not allow creation of new rules if ($fid == null && in_array('new_rule', $this->disabled_actions)) { @@ -1782,7 +1781,7 @@ class rcube_sieve_engine 'size' => 10, 'class' => $this->error_class($id, 'test', 'sizetarget', 'rule_size_i'), )); - $tout .= $select_size_item->show($sizeitem); + $tout .= "\n" . $select_size_item->show($sizeitem); $tout .= ''; $tout .= ''; @@ -1806,13 +1805,13 @@ class rcube_sieve_engine $need_mod = !in_array($rule['test'], array('size', 'body', 'date', 'currentdate', 'duplicate', 'string')); $mout = ''; + $mout .= '
'; + $mout .= '' . rcube::Q($this->plugin->gettext('modtype')) . ' '; $mout .= $select_type->show($rule['part']); - $mout .= ''; $mout .= '
'; // Advanced modifiers (body transformations) @@ -2160,7 +2159,7 @@ class rcube_sieve_engine $out .= $interval_select->show(isset($action['seconds']) ? 'seconds' : 'days'); } else { - $out .= html::span('input-group-addon', $this->plugin->gettext('days')); + $out .= "\n" . html::span('input-group-addon', $this->plugin->gettext('days')); } $out .= ''; @@ -2176,18 +2175,18 @@ class rcube_sieve_engine $flout = ''; foreach ($flags as $fidx => $flag) { - $flout .= html::tag('input', array( + $flout .= html::label(null, html::tag('input', array( 'type' => 'checkbox', 'name' => '_action_flags[' .$id .'][]', 'value' => $flag, 'checked' => in_array_nocase($flag, $flags_target), )) - . rcube::Q($this->plugin->gettext('flag'.$fidx)) .'
'; + . rcube::Q($this->plugin->gettext('flag'.$fidx))) . '
'; } $out .= html::div(array( 'id' => 'action_flags' . $id, 'style' => 'display:' . (preg_match('/^(set|add|remove)flag$/', $action['type']) ? 'inline' : 'none'), - 'class' => $this->error_class($id, 'action', 'flags', 'action_flags'), + 'class' => trim('checklist ' . $this->error_class($id, 'action', 'flags', 'action_flags')), ), $flout); // set variable @@ -2381,10 +2380,10 @@ class rcube_sieve_engine protected function add_tip($id, $str, $error=false) { if ($error) { - $str = html::span('sieve error', $str); + $class = 'sieve error'; } - $this->tips[] = array($id, $str); + $this->tips[] = array($id, $class ?: '', $str); } protected function print_tips() diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php index be75fa01f..1957c4876 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php @@ -395,7 +395,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine $interval_txt .= $interval_select->show(isset($this->vacation['seconds']) ? 'seconds' : 'days'); } else { - $interval_txt .= html::span('input-group-addon', $this->plugin->gettext('days')); + $interval_txt .= "\n" . html::span('input-group-addon', $this->plugin->gettext('days')); } if ($date_extension || $regex_extension) { diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc index d8da8ac49..bcb440f2d 100644 --- a/plugins/managesieve/localization/en_US.inc +++ b/plugins/managesieve/localization/en_US.inc @@ -72,10 +72,11 @@ $labels['enable'] = 'Enable/Disable'; $labels['filterset'] = 'Filters set'; $labels['filtersets'] = 'Filter sets'; $labels['filtersetadd'] = 'Add filters set'; -$labels['filtersetdel'] = 'Delete current filters set'; +$labels['filtersetdel'] = 'Delete filters set'; $labels['filtersetact'] = 'Activate current filters set'; $labels['filtersetdeact'] = 'Deactivate current filters set'; $labels['filterseteditraw'] = 'Edit filter set'; +$labels['filtersetswitch'] = 'Enable/disable filters set'; $labels['filterdef'] = 'Filter definition'; $labels['filtersetname'] = 'Filters set name'; $labels['newfilterset'] = 'New filters set'; diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js index 6c1f22fb1..dcf831ec6 100644 --- a/plugins/managesieve/managesieve.js +++ b/plugins/managesieve/managesieve.js @@ -84,6 +84,7 @@ if (window.rcmail) { rcmail.filtersets_list.init().focus(); if (set != null) { + $('#filterset-name').text(set); set = rcmail.managesieve_setid(set); rcmail.filtersets_list.select(set); } @@ -163,8 +164,10 @@ rcube_webmail.prototype.managesieve_setselect = function(list) this.enable_command('plugin.managesieve-seteditraw', list.rowcount > 0 && this.env.raw_sieve_editor); var id = list.get_single_selection(); - if (id != null) + if (id != null) { this.managesieve_list(this.env.filtersets[id]); + $('#filterset-name').text(this.env.filtersets[id]); + } }; rcube_webmail.prototype.managesieve_rowid = function(id) @@ -355,13 +358,13 @@ rcube_webmail.prototype.managesieve_updatelist = function(action, o) case 'setdel': var id = this.managesieve_setid(o.name); - this.filtersets_list.remove_row(id); this.filters_list.clear(); this.show_contentframe(false); - this.enable_command('plugin.managesieve-setdel', 'plugin.managesieve-setact', 'plugin.managesieve-setget', false); + this.enable_command('plugin.managesieve-setdel', 'plugin.managesieve-setact', + 'plugin.managesieve-setget', 'plugin.managesieve-seteditraw', false); + this.filtersets_list.remove_row(id, true); delete this.env.filtersets[id]; - break; // Create set row @@ -695,7 +698,7 @@ function rule_mod_select(id, header) if (!header) header = document.getElementById('header' + id).value; - target.style.display = obj.value != 'address' && obj.value != 'envelope' ? 'none' : 'inline'; + target.style.display = obj.value != 'address' && obj.value != 'envelope' ? 'none' : ''; if (index) index.style.display = !header.match(/^(body|currentdate|size|message|string)$/) && obj.value != 'envelope' ? '' : 'none'; @@ -802,7 +805,7 @@ function smart_field_init(field) if (field.hasClass('error')) { area.addClass('error'); - rcmail.managesieve_tip_register([[id, field.data('tip')]]); + rcmail.managesieve_tip_register([[id, field.data('tip-class'), field.data('tip-msg')]]); } }; @@ -880,19 +883,25 @@ function smart_field_reset(field, data) // Register onmouse(leave/enter) events for tips on specified form element rcube_webmail.prototype.managesieve_tip_register = function(tips) { + if (window.UI && UI.form_errors) + return UI.form_errors(tips); + var n, framed = parent.rcmail, tip = framed ? parent.rcmail.env.ms_tip_layer : rcmail.env.ms_tip_layer; for (n in tips) { +console.log(tips[n]); $('#'+tips[n][0]) - .data('tip', tips[n][1]) + .data('tip-class', tips[n][1]) + .data('tip-msg', tips[n][2]) .mouseleave(function(e) { tip.hide(); }) .mouseenter(function(e) { var elem = $(this), offset = elem.offset(), left = offset.left, top = offset.top - 12, - minwidth = elem.width(); + minwidth = elem.width(), + span = $('').addClass(elem.data('tip-class')).text(elem.data('tip-msg')); if (framed) { offset = $((rcmail.env.task == 'mail' ? '#sievefilterform > iframe' : '#filter-box'), parent.document).offset(); @@ -900,7 +909,7 @@ rcube_webmail.prototype.managesieve_tip_register = function(tips) left += offset.left; } - tip.html(elem.data('tip')); + tip.html('').append(span); top -= tip.height(); tip.css({left: left, top: top, minWidth: (minwidth-2) + 'px'}).show(); diff --git a/plugins/managesieve/skins/classic/managesieve.css b/plugins/managesieve/skins/classic/managesieve.css index 5c0f55e13..cc4b6c07b 100644 --- a/plugins/managesieve/skins/classic/managesieve.css +++ b/plugins/managesieve/skins/classic/managesieve.css @@ -392,7 +392,7 @@ td.rowtargets > span.listarea .listarea.error .listelement { - background-color: #FFFFC4; + background-color: #FFFF88; } .listelement:first-child diff --git a/plugins/managesieve/skins/elastic/templates/managesieve.html b/plugins/managesieve/skins/elastic/templates/managesieve.html index 113474e00..db11f44cc 100644 --- a/plugins/managesieve/skins/elastic/templates/managesieve.html +++ b/plugins/managesieve/skins/elastic/templates/managesieve.html @@ -4,38 +4,35 @@

:

- - -
+
- +
-
+ + + + +
- + + +
@@ -47,29 +44,29 @@
+ label="create" title="managesieve.filteradd" innerClass="inner" + class="button create disabled" classAct="button create" />

-

-
diff --git a/plugins/managesieve/skins/elastic/templates/setedit.html b/plugins/managesieve/skins/elastic/templates/setedit.html index fdac20666..542378b54 100644 --- a/plugins/managesieve/skins/elastic/templates/setedit.html +++ b/plugins/managesieve/skins/elastic/templates/setedit.html @@ -7,7 +7,7 @@
- +
diff --git a/plugins/managesieve/skins/larry/managesieve.css b/plugins/managesieve/skins/larry/managesieve.css index 8de38af2e..394eeacb8 100644 --- a/plugins/managesieve/skins/larry/managesieve.css +++ b/plugins/managesieve/skins/larry/managesieve.css @@ -101,6 +101,10 @@ body.iframe vertical-align: middle; } +#filter-form li { + border: none; +} + #filter-form .col-form-label { display: inline-block; min-width: 75px; diff --git a/program/js/list.js b/program/js/list.js index 964815607..cd3c0ca89 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -931,7 +931,7 @@ get_first_row: function() var i, uid, rows = this.tbody.childNodes; for (i=0; i=0; i--) - if (rows[i].id && (uid = this.get_row_uid(rows[i]))) + if (rows[i].id && (uid = this.get_row_uid(rows[i])) && this.rows[uid]) return uid; }