plugins/libcalendaring

Thomas Brüderli bruederli at kolabsys.com
Thu Jul 3 15:17:00 CEST 2014


 plugins/libcalendaring/libcalendaring.js  |   24 +++++++++++++++++-------
 plugins/libcalendaring/libcalendaring.php |    1 +
 2 files changed, 18 insertions(+), 7 deletions(-)

New commits:
commit d0a7c813476c297130f970752eb55e3b17eb4a9b
Author: Thomas Bruederli <bruederli at kolabsys.com>
Date:   Thu Jul 3 15:16:51 2014 +0200

    Make alarms dialog accessible and operable with keyboard

diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js
index c31409d..49cbd15 100644
--- a/plugins/libcalendaring/libcalendaring.js
+++ b/plugins/libcalendaring/libcalendaring.js
@@ -454,7 +454,7 @@ function rcube_libcalendaring(settings)
                 me.dismiss_alarm(me.dismiss_link.data('id'), 0);
             });
             asnooze = $('<a href="#" class="alarm-action-snooze"></a>').html(rcmail.gettext('snooze','libcalendaring')).click(function(e){
-                me.snooze_dropdown($(this));
+                me.snooze_dropdown($(this), e);
                 e.stopPropagation();
                 return false;
             });
@@ -463,6 +463,10 @@ function rcube_libcalendaring(settings)
             $('<div>').addClass('alarm-item').html(html).append(actions).appendTo(this.alarm_dialog);
         }
 
+        buttons[rcmail.gettext('close')] = function() {
+            $(this).dialog('close');
+        };
+
         buttons[rcmail.gettext('dismissall','libcalendaring')] = function() {
             // submit dismissed event_ids to server
             me.dismiss_alarm(me.alarm_ids.join(','), 0);
@@ -476,6 +480,11 @@ function rcube_libcalendaring(settings)
             dialogClass: 'alarms',
             title: rcmail.gettext('alarmtitle','libcalendaring'),
             buttons: buttons,
+            open: function() {
+              setTimeout(function() {
+                me.alarm_dialog.parent().find('.ui-button:not(.ui-dialog-titlebar-close)').first().focus();
+              }, 5);
+            },
             close: function() {
               $('#alarm-snooze-dropdown').hide();
               $(this).dialog('destroy').remove();
@@ -487,13 +496,15 @@ function rcube_libcalendaring(settings)
             }
         });
 
+        this.alarm_dialog.closest('div[role=dialog]').attr('role', 'alertdialog');
+
         this.alarm_ids = event_ids;
     };
 
     /**
      * Show a drop-down menu with a selection of snooze times
      */
-    this.snooze_dropdown = function(link)
+    this.snooze_dropdown = function(link, event)
     {
         if (!this.snooze_popup) {
             this.snooze_popup = $('#alarm-snooze-dropdown');
@@ -511,13 +522,12 @@ function rcube_libcalendaring(settings)
 
         // hide visible popup
         if (this.snooze_popup.is(':visible') && this.snooze_popup.data('id') == link.data('id')) {
-            this.snooze_popup.hide();
+            rcmail.command('menu-close', 'alarm-snooze-dropdown');
             this.dismiss_link = null;
         }
         else {  // open popup below the clicked link
-            var pos = link.offset();
-            pos.top += link.height() + 2;
-            this.snooze_popup.data('id', link.data('id')).css({ top:Math.floor(pos.top)+'px', left:Math.floor(pos.left)+'px' }).show();
+            rcmail.command('menu-open', 'alarm-snooze-dropdown', link.get(0), event);
+            this.snooze_popup.data('id', link.data('id'));
             this.dismiss_link = link;
         }
     };
@@ -527,7 +537,7 @@ function rcube_libcalendaring(settings)
      */
     this.dismiss_alarm = function(id, snooze)
     {
-        $('#alarm-snooze-dropdown').hide();
+        rcmail.command('menu-close', 'alarm-snooze-dropdown');
         rcmail.http_post('utils/plugin.alarms', { action:'dismiss', data:{ id:id, snooze:snooze } });
 
         // remove dismissed alarm from list
diff --git a/plugins/libcalendaring/libcalendaring.php b/plugins/libcalendaring/libcalendaring.php
index c157c6a..5888ff0 100644
--- a/plugins/libcalendaring/libcalendaring.php
+++ b/plugins/libcalendaring/libcalendaring.php
@@ -580,6 +580,7 @@ class libcalendaring extends rcube_plugin
         if (!$plugin['abort'] && !empty($plugin['alarms'])) {
             // make sure texts and env vars are available on client
             $this->add_texts('localization/', true);
+            $this->rc->output->add_label('close');
             $this->rc->output->set_env('snooze_select', $this->snooze_select());
             $this->rc->output->command('plugin.display_alarms', $this->_alarms_output($plugin['alarms']));
         }




More information about the commits mailing list