diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js index bc95b3e0..66525f28 100644 --- a/plugins/calendar/calendar_ui.js +++ b/plugins/calendar/calendar_ui.js @@ -2809,9 +2809,10 @@ function rcube_calendar_ui(settings) }; // mark the given calendar folder as selected - this.select_calendar = function(id) + this.select_calendar = function(id, nolistupdate) { - calendars_list.select(id); + if (!nolistupdate) + calendars_list.select(id); // trigger event hook rcmail.triggerEvent('selectfolder', { folder:id, prefix:'rcmlical' }); @@ -2872,7 +2873,7 @@ function rcube_calendar_ui(settings) add_calendar_source(cal); // check active calendars - $('#rcmlical'+id+' > .calendar input').get(0).checked = active; + $('#rcmlical'+id+' > .calendar input').prop('checked', active); if (active) { event_sources.push(this.calendars[id]); @@ -2897,9 +2898,11 @@ function rcube_calendar_ui(settings) search_title: rcmail.gettext('calsearchresults','calendar') }); calendars_list.addEventListener('select', function(node) { - me.select_calendar(node.id); - rcmail.enable_command('calendar-edit', 'calendar-showurl', true); - rcmail.enable_command('calendar-remove', !me.calendars[node.id].readonly); + if (node && node.id && me.calendars[node.id]) { + me.select_calendar(node.id, true); + rcmail.enable_command('calendar-edit', 'calendar-showurl', true); + rcmail.enable_command('calendar-remove', !me.calendars[node.id].readonly); + } }); calendars_list.addEventListener('insert-item', function(p) { var cal = p.data; diff --git a/plugins/kolab_notes/notes.js b/plugins/kolab_notes/notes.js index 567cfa9d..b7a3db0b 100644 --- a/plugins/kolab_notes/notes.js +++ b/plugins/kolab_notes/notes.js @@ -84,8 +84,10 @@ function rcube_kolab_notes_ui(settings) }); // initialize folder selectors - var li, id; - for (id in me.notebooks) { + if (settings.selected_list && !me.notebooks[settings.selected_list]) { + settings.selected_list = null; + } + for (var id in me.notebooks) { if (me.notebooks[id].editable && !settings.selected_list) { settings.selected_list = id; } diff --git a/plugins/kolab_notes/skins/larry/notes.css b/plugins/kolab_notes/skins/larry/notes.css index ecbe6c8a..f59e0f58 100644 --- a/plugins/kolab_notes/skins/larry/notes.css +++ b/plugins/kolab_notes/skins/larry/notes.css @@ -226,7 +226,7 @@ width: 100%; font-size: 14px; font-weight: bold; - color: #777; + color: #333; } .notesview #notedetailstitle .dates, diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js index c31409d4..49cbd153 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 = $('').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) $('
').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 c157c6a7..5888ff01 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'])); } diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js index 59943818..0852e126 100644 --- a/plugins/tasklist/tasklist.js +++ b/plugins/tasklist/tasklist.js @@ -432,6 +432,9 @@ function rcube_tasklist_ui(settings) } }) .on('keydown', '.taskhead', function(e) { + if (e.target.nodeName == 'INPUT' && e.target.type == 'text') + return true; + var inc = 1; switch (e.keyCode) { case 13: // Enter