From 13b33da51a70300f9080a643b25cf2c474322fbe Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 9 Jun 2014 15:14:36 +0200 Subject: Managesieve: Improved UI accessibility --- plugins/managesieve/Changelog | 1 + .../lib/Roundcube/rcube_sieve_vacation.php | 20 ++++----- plugins/managesieve/localization/en_US.inc | 5 +++ plugins/managesieve/managesieve.js | 49 +++++++++++++++------- plugins/managesieve/skins/larry/managesieve.css | 1 + .../skins/larry/templates/managesieve.html | 45 +++++++++++--------- .../skins/larry/templates/vacation.html | 6 ++- 7 files changed, 79 insertions(+), 48 deletions(-) (limited to 'plugins/managesieve') diff --git a/plugins/managesieve/Changelog b/plugins/managesieve/Changelog index 29b359d7f..856b8acf4 100644 --- a/plugins/managesieve/Changelog +++ b/plugins/managesieve/Changelog @@ -1,6 +1,7 @@ - Added optional separate interface for out-of-office management (#1488266) - Fix disabled "create filter" action - Fix enotify/notify extension handling +- Improved UI accessibility * version 7.2 [2014-02-14] ----------------------------------------------------------- diff --git a/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php index 636b5fcc1..2f998744a 100644 --- a/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php +++ b/plugins/managesieve/lib/Roundcube/rcube_sieve_vacation.php @@ -216,18 +216,18 @@ class rcube_sieve_vacation extends rcube_sieve_engine ) + $attrib); // form elements - $subject = new html_inputfield(array('name' => 'vacation_subject', 'size' => 50)); - $reason = new html_textarea(array('name' => 'vacation_reason', 'cols' => 60, 'rows' => 8)); - $interval = new html_inputfield(array('name' => 'vacation_interval', 'size' => 5)); - $addresses = ''; - $status = new html_select(array('name' => 'vacation_status')); + $status = new html_select(array('name' => 'vacation_status', 'id' => 'vacation_status')); $status->add($this->plugin->gettext('vacation.on'), 'on'); $status->add($this->plugin->gettext('vacation.off'), 'off'); if ($this->rc->config->get('managesieve_vacation') != 2 && count($this->vacation['list'])) { - $after = new html_select(array('name' => 'vacation_after')); + $after = new html_select(array('name' => 'vacation_after', 'id' => 'vacation_after')); $after->add('', ''); foreach ($this->vacation['list'] as $idx => $rule) { @@ -247,7 +247,7 @@ class rcube_sieve_vacation extends rcube_sieve_engine } if ($date_extension) { - $date_from = new html_inputfield(array('name' => 'vacation_datefrom', 'class' => 'datepicker', 'size' => 12)); + $date_from = new html_inputfield(array('name' => 'vacation_datefrom', 'id' => 'vacation_datefrom', 'class' => 'datepicker', 'size' => 12)); $date_to = new html_inputfield(array('name' => 'vacation_dateto', 'class' => 'datepicker', 'size' => 12)); $date_format = $this->rc->config->get('date_format', 'Y-m-d'); @@ -283,12 +283,12 @@ class rcube_sieve_vacation extends rcube_sieve_engine // Advanced tab $table = new html_table(array('cols' => 2)); - $table->add('title', $this->plugin->gettext('vacation.addresses')); + $table->add('title', html::label('vacation_addresses', $this->plugin->gettext('vacation.addresses'))); $table->add(null, $addresses); - $table->add('title', $this->plugin->gettext('vacation.interval')); + $table->add('title', html::label('vacation_interval', $this->plugin->gettext('vacation.interval'))); $table->add(null, $interval_txt); if ($after) { - $table->add('title', $this->plugin->gettext('vacation.after')); + $table->add('title', html::label('vacation_after', $this->plugin->gettext('vacation.after'))); $table->add(null, $after->show($this->vacation['idx'] - 1)); } diff --git a/plugins/managesieve/localization/en_US.inc b/plugins/managesieve/localization/en_US.inc index 1ea7d969e..6b13eff17 100644 --- a/plugins/managesieve/localization/en_US.inc +++ b/plugins/managesieve/localization/en_US.inc @@ -177,6 +177,11 @@ $labels['vacation.addresses'] = 'My additional addresses'; $labels['vacation.interval'] = 'Reply interval'; $labels['vacation.after'] = 'Put vacation rule after'; $labels['vacation.saving'] = 'Saving data...'; +$labels['arialabelfiltersetactions'] = 'Filter set actions'; +$labels['arialabelfilteractions'] = 'Filter actions'; +$labels['arialabelfilterform'] = 'Filter properties'; +$labels['ariasummaryfilterslist'] = 'List of filters'; +$labels['ariasummaryfiltersetslist'] = 'List of filter sets'; $messages = array(); $messages['filterunknownerror'] = 'Unknown server error.'; diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js index 27ab38a77..e81ab3332 100644 --- a/plugins/managesieve/managesieve.js +++ b/plugins/managesieve/managesieve.js @@ -73,7 +73,7 @@ if (window.rcmail) { changeMonth: true, showOtherMonths: true, selectOtherMonths: true, - onSelect: function(dateText) { $(this).focus().val(dateText) } + onSelect: function(dateText) { $(this).focus().val(dateText); } }); $('input.datepicker').datepicker(); } @@ -82,46 +82,47 @@ if (window.rcmail) { rcmail.enable_command('plugin.managesieve-add', 'plugin.managesieve-setadd', !rcmail.env.sieveconnerror); } - var i, p = rcmail, setcnt, set = rcmail.env.currentset; + var setcnt, set = rcmail.env.currentset; if (rcmail.gui_objects.filterslist) { rcmail.filters_list = new rcube_list_widget(rcmail.gui_objects.filterslist, - {multiselect:false, draggable:true, keyboard:false}); + {multiselect:false, draggable:true, keyboard:true}); rcmail.filters_list - .addEventListener('select', function(e) { p.managesieve_select(e); }) - .addEventListener('dragstart', function(e) { p.managesieve_dragstart(e); }) - .addEventListener('dragend', function(e) { p.managesieve_dragend(e); }) + .addEventListener('select', function(e) { rcmail.managesieve_select(e); }) + .addEventListener('dragstart', function(e) { rcmail.managesieve_dragstart(e); }) + .addEventListener('dragend', function(e) { rcmail.managesieve_dragend(e); }) .addEventListener('initrow', function(row) { - row.obj.onmouseover = function() { p.managesieve_focus_filter(row); }; - row.obj.onmouseout = function() { p.managesieve_unfocus_filter(row); }; + row.obj.onmouseover = function() { rcmail.managesieve_focus_filter(row); }; + row.obj.onmouseout = function() { rcmail.managesieve_unfocus_filter(row); }; }) - .init().focus(); + .init(); } if (rcmail.gui_objects.filtersetslist) { rcmail.filtersets_list = new rcube_list_widget(rcmail.gui_objects.filtersetslist, - {multiselect:false, draggable:false, keyboard:false}); + {multiselect:false, draggable:false, keyboard:true}); - rcmail.filtersets_list - .addEventListener('select', function(e) { p.managesieve_setselect(e); }) - .init().focus(); + rcmail.filtersets_list.init().focus(); if (set != null) { set = rcmail.managesieve_setid(set); - rcmail.filtersets_list.shift_start = set; - rcmail.filtersets_list.highlight_row(set, false); + rcmail.filtersets_list.select(set); } + // attach select event after initial record was selected + rcmail.filtersets_list.addEventListener('select', function(e) { rcmail.managesieve_setselect(e); }); + setcnt = rcmail.filtersets_list.rowcount; rcmail.enable_command('plugin.managesieve-set', true); rcmail.enable_command('plugin.managesieve-setact', 'plugin.managesieve-setget', setcnt); rcmail.enable_command('plugin.managesieve-setdel', setcnt > 1); // Fix dragging filters over sets list - $('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { p.managesieve_fixdragend(e); }); + $('tr', rcmail.gui_objects.filtersetslist).each(function (i, e) { rcmail.managesieve_fixdragend(e); }); } } + if (rcmail.gui_objects.sieveform && rcmail.env.rule_disabled) $('#disabled').attr('checked', true); }); @@ -778,6 +779,7 @@ function smart_field_row(value, name, idx, size) input = $('input', elem).attr(attrs).keydown(function(e) { var input = $(this); + // element creation event (on Enter) if (e.which == 13) { var name = input.attr('name').replace(/\[\]$/, ''), @@ -787,6 +789,21 @@ function smart_field_row(value, name, idx, size) input.parent().after(elem); $('input', elem).focus(); } + // backspace or delete: remove input, focus previous one + else if ((e.which == 8 || e.which == 46) && input.val() == '') { + + var parent = input.parent(), siblings = parent.parent().children(); + + if (siblings.length > 1) { + if (parent.prev().length) + parent.prev().children('input').focus(); + else + parent.next().children('input').focus(); + + parent.remove(); + return false; + } + } }); // element deletion event diff --git a/plugins/managesieve/skins/larry/managesieve.css b/plugins/managesieve/skins/larry/managesieve.css index 2172c60b2..a0526eb68 100644 --- a/plugins/managesieve/skins/larry/managesieve.css +++ b/plugins/managesieve/skins/larry/managesieve.css @@ -306,6 +306,7 @@ a.button.disabled font-size: 11px; padding: 1px; vertical-align: middle; + max-width: 280px; } html.mozilla #filter-form select diff --git a/plugins/managesieve/skins/larry/templates/managesieve.html b/plugins/managesieve/skins/larry/templates/managesieve.html index 471bbf4d2..8d648dbdc 100644 --- a/plugins/managesieve/skins/larry/templates/managesieve.html +++ b/plugins/managesieve/skins/larry/templates/managesieve.html @@ -8,35 +8,38 @@ +

:

+
-
-
-

+
+
+

- +
- +
-
-

+
+

- +
- +
-
- +
@@ -44,19 +47,21 @@
-
-
    -
  • -
  • -
  • + -
    -
      -
    • -
    • + diff --git a/plugins/managesieve/skins/larry/templates/vacation.html b/plugins/managesieve/skins/larry/templates/vacation.html index c91eb87c8..26dd2027b 100644 --- a/plugins/managesieve/skins/larry/templates/vacation.html +++ b/plugins/managesieve/skins/larry/templates/vacation.html @@ -10,11 +10,13 @@
      +

      :

      + -
      +
      -

      +

      -- cgit v1.2.3