Projects
Kolab:Winterfell
roundcubemail-plugins-kolab
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 62
View file
roundcubemail-plugins-kolab.spec
Changed
@@ -48,15 +48,6 @@ Patch1001: roundcubemail-plugins-kolab-3.3-kolab-files-manticore-api.patch -Patch0001: 0001-Move-more-common-methods-used-by-tasklist-and-calend.patch -Patch0002: 0002-T2504-Fix-DTSTAMP-in-iTip-replies.patch -Patch0003: 0003-Add-missing-status-tentative-label.patch -Patch0004: 0004-T2531-Support-SCHEDULE-AGENT-in-iTip.patch -Patch0005: 0005-Don-t-ignore-global-userlogins-sendmail-logging-in-p.patch -Patch0006: 0006-Add-missing-type-link-for-template-buttons-for-compa.patch -Patch0007: 0007-Update-calendar-and-tasklist-styles-sprites-to-new-L.patch -Patch0008: 0008-T2561-Fix-recognizing-event-organizer-on-event-move-.patch - BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildArch: noarch @@ -869,15 +860,6 @@ %patch1001 -p1 -%patch0001 -p1 -%patch0002 -p1 -%patch0003 -p1 -%patch0004 -p1 -%patch0005 -p1 -%patch0006 -p1 -%patch0007 -p1 -%patch0008 -p1 - find -type d -name "helpdocs" -exec rm -rvf {} \; 2>/dev/null || : rm -rf plugins/kolab_zpush
View file
0001-Move-more-common-methods-used-by-tasklist-and-calend.patch
Deleted
@@ -1,489 +0,0 @@ -From 2ad0d6651dfbcb32c146465ad9539848b285e3f9 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Thu, 29 Jun 2017 11:20:09 +0200 -Subject: [PATCH 1/8] Move more common methods used by tasklist and calendar to - libcalendaring - ---- - plugins/calendar/calendar_ui.js | 74 +++++--------------------- - plugins/libcalendaring/libcalendaring.js | 64 ++++++++++++++++++++++ - plugins/tasklist/tasklist.js | 91 ++++++++------------------------ - 3 files changed, 97 insertions(+), 132 deletions(-) - -diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js -index c8f67477..7da1f594 100644 ---- a/plugins/calendar/calendar_ui.js -+++ b/plugins/calendar/calendar_ui.js -@@ -283,49 +283,6 @@ function rcube_calendar_ui(settings) - else - return date.getHours() >= settings['work_start'] && date.getHours() < settings['work_end']; - }; -- -- // check if the event has 'real' attendees, excluding the current user -- var has_attendees = function(event) -- { -- return (event.attendees && event.attendees.length && (event.attendees.length > 1 || String(event.attendees[0].email).toLowerCase() != settings.identity.email)); -- }; -- -- // check if the current user is an attendee of this event -- var is_attendee = function(event, role, email) -- { -- var emails = email ? ';'+email.toLowerCase() : settings.identity.emails; -- for (var i=0; event.attendees && i < event.attendees.length; i++) { -- if ((!role || event.attendees[i].role == role) && event.attendees[i].email && emails.indexOf(';'+event.attendees[i].email.toLowerCase()) >= 0) -- return event.attendees[i]; -- } -- return false; -- }; -- -- // check if the current user is the organizer -- var is_organizer = function(event, email) -- { -- return is_attendee(event, 'ORGANIZER', email) || !event.id; -- }; -- -- /** -- * Check permissions on the given calendar object -- */ -- var has_permission = function(cal, perm) -- { -- // multiple chars means "either of" -- if (String(perm).length > 1) { -- for (var i=0; i < perm.length; i++) { -- if (has_permission(cal, perm[i])) -- return true; -- } -- } -- -- if (cal.rights && String(cal.rights).indexOf(perm) >= 0) { -- return true; -- } -- -- return (perm == 'i' && cal.editable) || (perm == 'v' && cal.editable); -- } - - var load_attachment = function(event, att) - { -@@ -514,7 +471,7 @@ function rcube_calendar_ui(settings) - }); - - var data, mystatus = null, rsvp, line, morelink, html = '', overflow = '', -- organizer = is_organizer(event); -+ organizer = me.is_organizer(event); - - for (var j=0; j < event.attendees.length; j++) { - data = event.attendees[j]; -@@ -568,7 +525,7 @@ function rcube_calendar_ui(settings) - .text(rcmail.gettext('status' + mystatus, 'libcalendaring')); - } - -- var show_rsvp = rsvp && !organizer && event.status != 'CANCELLED' && has_permission(calendar, 'v'); -+ var show_rsvp = rsvp && !organizer && event.status != 'CANCELLED' && me.has_permission(calendar, 'v'); - $('#event-rsvp')[(show_rsvp ? 'show' : 'hide')](); - $('#event-rsvp .rsvp-buttons input').prop('disabled', false).filter('input[rel='+mystatus+']').prop('disabled', true); - -@@ -596,7 +553,7 @@ function rcube_calendar_ui(settings) - } - }); - } -- if (!temp && has_permission(calendar, 'td') && event.editable !== false) { -+ if (!temp && me.has_permission(calendar, 'td') && event.editable !== false) { - buttons.push({ - text: rcmail.gettext('delete', 'calendar'), - 'class': 'delete', -@@ -737,7 +694,7 @@ function rcube_calendar_ui(settings) - calendars.val($('option:first', calendars).attr('value')); - - invite.checked = settings.itip_notify & 1 > 0; -- notify.checked = has_attendees(event) && invite.checked; -+ notify.checked = me.has_attendees(event) && invite.checked; - - if (event.allDay) { - starttime.val("12:00").hide(); -@@ -751,7 +708,7 @@ function rcube_calendar_ui(settings) - // set calendar selection according to permissions - calendars.find('option').each(function(i, opt) { - var cal = me.calendars[opt.value] || {}; -- $(opt).prop('disabled', !(cal.editable || (action == 'new' && has_permission(cal, 'i')))) -+ $(opt).prop('disabled', !(cal.editable || (action == 'new' && me.has_permission(cal, 'i')))) - }); - - // set alarm(s) -@@ -783,13 +740,13 @@ function rcube_calendar_ui(settings) - $('#edit-recurring-warning').hide(); - - // init attendees tab -- var organizer = !event.attendees || is_organizer(event), -+ var organizer = !event.attendees || me.is_organizer(event), - allow_invitations = organizer || (calendar.owner && calendar.owner == 'anonymous') || settings.invite_shared; - event_attendees = []; - attendees_list = $('#edit-attendees-table > tbody').html(''); - resources_list = $('#edit-resources-table > tbody').html(''); -- $('#edit-attendees-notify')[(action != 'new' && allow_invitations && has_attendees(event) && (settings.itip_notify & 2) ? 'show' : 'hide')](); -- $('#edit-localchanges-warning')[(action != 'new' && has_attendees(event) && !(allow_invitations || (calendar.owner && is_organizer(event, calendar.owner))) ? 'show' : 'hide')](); -+ $('#edit-attendees-notify')[(action != 'new' && allow_invitations && me.has_attendees(event) && (settings.itip_notify & 2) ? 'show' : 'hide')](); -+ $('#edit-localchanges-warning')[(action != 'new' && me.has_attendees(event) && !(allow_invitations || (calendar.owner && me.is_organizer(event, calendar.owner))) ? 'show' : 'hide')](); - - var load_attendees_tab = function() - { -@@ -2554,13 +2511,13 @@ function rcube_calendar_ui(settings) - - if (!data) data = event; - var decline = false, notify = false, html = '', cal = me.calendars[event.calendar], -- _has_attendees = has_attendees(event), _is_organizer = is_organizer(event); -+ _has_attendees = me.has_attendees(event), _is_organizer = me.is_organizer(event); - - // event has attendees, ask whether to notify them - if (_has_attendees) { - var checked = (settings.itip_notify & 1 ? ' checked="checked"' : ''); - -- if (action == 'remove' && cal.group != 'shared' && !_is_organizer && is_attendee(event)) { -+ if (action == 'remove' && cal.group != 'shared' && !_is_organizer && me.is_attendee(event)) { - decline = true; - checked = event.status != 'CANCELLED' ? checked : ''; - html += '<div class="message">' + -@@ -2588,7 +2545,7 @@ function rcube_calendar_ui(settings) - - // disable the 'future' savemode if I'm an attendee - // reason: no calendaring system supports the thisandfuture range parameter in iTip REPLY -- if (action == 'remove' && _has_attendees && !_is_organizer && is_attendee(event)) { -+ if (action == 'remove' && _has_attendees && !_is_organizer && me.is_attendee(event)) { - future_disabled = ' disabled'; - } - -@@ -3529,13 +3486,6 @@ function rcube_calendar_ui(settings) - this.fisheye_view(this.fisheye_date); - }; - -- // resize and reposition (center) the dialog window -- this.dialog_resize = function(id, height, width) -- { -- var win = $(window), w = win.width(), h = win.height(); -- $(id).dialog('option', { height: Math.min(h-20, height+130), width: Math.min(w-20, width+50) }); -- }; -- - // adjust calendar view size - this.view_resize = function() - { -@@ -3593,7 +3543,7 @@ function rcube_calendar_ui(settings) - - // insert to #calendar-select options if writeable - select = $('#edit-calendar'); -- if (fc && has_permission(cal, 'i') && select.length && !select.find('option[value="'+id+'"]').length) { -+ if (fc && me.has_permission(cal, 'i') && select.length && !select.find('option[value="'+id+'"]').length) { - $('<option>').attr('value', id).html(cal.name).appendTo(select); - } - } -diff --git a/plugins/libcalendaring/libcalendaring.js b/plugins/libcalendaring/libcalendaring.js -index c15fa048..c6bee178 100644 ---- a/plugins/libcalendaring/libcalendaring.js -+++ b/plugins/libcalendaring/libcalendaring.js -@@ -94,6 +94,59 @@ function rcube_libcalendaring(settings) - return fromto; - }; - -+ /** -+ * Checks if the event/task has 'real' attendees, excluding the current user -+ */ -+ this.has_attendees = function(event) -+ { -+ return !!(event.attendees && event.attendees.length && (event.attendees.length > 1 || String(event.attendees[0].email).toLowerCase() != settings.identity.email)); -+ }; -+ -+ /** -+ * Check if the current user is an attendee of this event/task -+ */ -+ this.is_attendee = function(event, role, email) -+ { -+ var i, emails = email ? ';' + email.toLowerCase() : settings.identity.emails; -+ -+ for (i=0; event.attendees && i < event.attendees.length; i++) { -+ if ((!role || event.attendees[i].role == role) && event.attendees[i].email && emails.indexOf(';'+event.attendees[i].email.toLowerCase()) >= 0) { -+ return event.attendees[i]; -+ } -+ } -+ -+ return false; -+ }; -+ -+ /** -+ * Checks if the current user is the organizer of the event/task -+ */ -+ this.is_organizer = function(event, email) -+ { -+ return this.is_attendee(event, 'ORGANIZER', email) || !event.id; -+ }; -+ -+ /** -+ * Check permissions on the given folder object -+ */ -+ this.has_permission = function(folder, perm) -+ { -+ // multiple chars means "either of" -+ if (String(perm).length > 1) { -+ for (var i=0; i < perm.length; i++) { -+ if (this.has_permission(folder, perm[i])) { -+ return true; -+ } -+ } -+ } -+ -+ if (folder.rights && String(folder.rights).indexOf(perm) >= 0) { -+ return true; -+ } -+ -+ return (perm == 'i' && folder.editable) || (perm == 'v' && folder.editable); -+ }; -+ - - /** - * From time and date strings to a real date object -@@ -1000,6 +1053,17 @@ function rcube_libcalendaring(settings) - - container.empty().append(ul); - } -+ -+ // resize and reposition (center) the dialog window -+ this.dialog_resize = function(id, height, width) -+ { -+ var win = $(window), w = win.width(), h = win.height(); -+ -+ $(id).dialog('option', { -+ height: Math.min(h-20, height+130), -+ width: Math.min(w-20, width+50) -+ }); -+ }; - } - - ////// static methods -diff --git a/plugins/tasklist/tasklist.js b/plugins/tasklist/tasklist.js -index a95b5960..42f7da3f 100644 ---- a/plugins/tasklist/tasklist.js -+++ b/plugins/tasklist/tasklist.js -@@ -173,9 +173,9 @@ function rcube_tasklist_ui(settings) - }); - tasklists_widget.addEventListener('select', function(node) { - var id = $(this).data('id'); -- rcmail.enable_command('list-edit', has_permission(me.tasklists[node.id], 'wa')); -- rcmail.enable_command('list-delete', has_permission(me.tasklists[node.id], 'xa')); -- rcmail.enable_command('list-import', has_permission(me.tasklists[node.id], 'i')); -+ rcmail.enable_command('list-edit', me.has_permission(me.tasklists[node.id], 'wa')); -+ rcmail.enable_command('list-delete', me.has_permission(me.tasklists[node.id], 'xa')); -+ rcmail.enable_command('list-import', me.has_permission(me.tasklists[node.id], 'i')); - rcmail.enable_command('list-remove', me.tasklists[node.id] && me.tasklists[node.id].removable); - rcmail.enable_command('list-showurl', me.tasklists[node.id] && !!me.tasklists[node.id].caldavurl); - me.selected_list = node.id; -@@ -739,27 +739,6 @@ function rcube_tasklist_ui(settings) - } - - /** -- * Check permissions on the given list object -- */ -- function has_permission(list, perm) -- { -- // multiple chars means "either of" -- if (String(perm).length > 1) { -- for (var i=0; i < perm.length; i++) { -- if (has_permission(list, perm[i])) { -- return true; -- } -- } -- } -- -- if (list.rights && String(list.rights).indexOf(perm) >= 0) { -- return true; -- } -- -- return (perm == 'i' && list.editable); -- } -- -- /** - * Request counts from the server - */ - function fetch_counts() -@@ -1247,7 +1226,7 @@ function rcube_tasklist_ui(settings) - list = drop_rec && me.tasklists[drop_rec.list] ? me.tasklists[drop_rec.list] : { editable:true }; - - // target is not editable or already has this tag assigned -- if (!drop_rec || drop_rec.readonly || !has_permission(list, 'i') || (drop_rec.tags && $.inArray(tag, drop_rec.tags) >= 0)) { -+ if (!drop_rec || drop_rec.readonly || !me.has_permission(list, 'i') || (drop_rec.tags && $.inArray(tag, drop_rec.tags) >= 0)) { - return false; - } - -@@ -1370,7 +1349,7 @@ function rcube_tasklist_ui(settings) - function save_task(rec, action) - { - // show confirmation dialog when status of an assigned task has changed -- if (rec._status_before !== undefined && is_attendee(rec)) -+ if (rec._status_before !== undefined && me.is_attendee(rec)) - return save_task_confirm(rec, action); - - if (!rcmail.busy) { -@@ -1393,7 +1372,7 @@ function rcube_tasklist_ui(settings) - do_confirm = settings.itip_notify & 2; - - // task has attendees, ask whether to notify them -- if (has_attendees(rec) && is_organizer(rec)) { -+ if (me.has_attendees(rec) && me.is_organizer(rec)) { - notify = true; - if (do_confirm) { - html = rcmail.gettext('changeconfirmnotifications', 'tasklist'); -@@ -1403,7 +1382,7 @@ function rcube_tasklist_ui(settings) - } - } - // ask whether to change my partstat and notify organizer -- else if (data._status_before !== undefined && data.status && data._status_before != data.status && is_attendee(rec)) { -+ else if (data._status_before !== undefined && data.status && data._status_before != data.status && me.is_attendee(rec)) { - partstat = true; - if (do_confirm) { - html = rcmail.gettext('partstatupdatenotification', 'tasklist'); -@@ -1885,29 +1864,8 @@ function rcube_tasklist_ui(settings) - scroll_timer = window.setTimeout(function(){ tasklist_drag_scroll(container, dir); }, scroll_speed); - } - -- // check if the task has 'real' attendees, excluding the current user -- var has_attendees = function(task) -- { -- return !!(task.attendees && task.attendees.length && (task.attendees.length > 1 || String(task.attendees[0].email).toLowerCase() != settings.identity.email)); -- }; -- -- // check if the current user is an attendee of this task -- var is_attendee = function(task, email, role) -- { -- var i, attendee, emails = email ? ';' + email.toLowerCase() : settings.identity.emails; -- -- for (i=0; task.attendees && i < task.attendees.length; i++) { -- attendee = task.attendees[i]; -- if ((!role || attendee.role == role) && attendee.email && emails.indexOf(';'+attendee.email.toLowerCase()) >= 0) { -- return attendee; -- } -- } -- -- return false; -- }; -- - // check if the current user is the organizer -- var is_organizer = function(task, email) -+ this.is_organizer = function(task, email) - { - if (!email) email = task.organizer ? task.organizer.email : null; - if (email) -@@ -2140,7 +2098,7 @@ function rcube_tasklist_ui(settings) - }); - */ - var j, data, rsvp = false, mystatus = null, line, morelink, html = '', overflow = '', -- organizer = is_organizer(rec); -+ organizer = me.is_organizer(rec); - - for (j=0; j < rec.attendees.length; j++) { - data = rec.attendees[j]; -@@ -2194,7 +2152,7 @@ function rcube_tasklist_ui(settings) - .html(rcmail.gettext('status' + mystatus, 'libcalendaring')); - } - */ -- var show_rsvp = !temp && rsvp && list.editable && !is_organizer(rec) && rec.status != 'CANCELLED'; -+ var show_rsvp = !temp && rsvp && list.editable && !me.is_organizer(rec) && rec.status != 'CANCELLED'; - $('#task-rsvp')[(show_rsvp ? 'show' : 'hide')](); - $('#task-rsvp .rsvp-buttons input').prop('disabled', false).filter('input[rel='+mystatus+']').prop('disabled', true); - -@@ -2221,7 +2179,7 @@ function rcube_tasklist_ui(settings) - }); - } - -- if (has_permission(list, 'td') && !rec.readonly) { -+ if (me.has_permission(list, 'td') && !rec.readonly) { - buttons.push({ - text: rcmail.gettext('delete','tasklist'), - 'class': 'delete', -@@ -2456,7 +2414,7 @@ function rcube_tasklist_ui(settings) - list = rec.list && me.tasklists[rec.list] ? me.tasklists[rec.list] : - (me.selected_list ? me.tasklists[me.selected_list] : { editable: action == 'new', rights: action == 'new' ? 'rwitd' : 'r' }); - -- if (rcmail.busy || !has_permission(list, 'i') || (action == 'edit' && (!rec || rec.readonly))) -+ if (rcmail.busy || !me.has_permission(list, 'i') || (action == 'edit' && (!rec || rec.readonly))) - return false; - - me.selected_task = $.extend({ valarms:[] }, rec); // clone task object -@@ -2488,12 +2446,12 @@ function rcube_tasklist_ui(settings) - var comment = $('#edit-attendees-comment'); - - invite.checked = settings.itip_notify & 1 > 0; -- notify.checked = has_attendees(rec) && invite.checked; -+ notify.checked = me.has_attendees(rec) && invite.checked; - - // set tasklist selection according to permissions - tasklist.find('option').each(function(i, opt) { - var l = me.tasklists[opt.value] || {}, -- writable = l.editable || (action == 'new' && has_permission(l, 'i')); -+ writable = l.editable || (action == 'new' && me.has_permission(l, 'i')); - $(opt).prop('disabled', !writable); - - if (!selected_list && writable) -@@ -2536,13 +2494,13 @@ function rcube_tasklist_ui(settings) - me.set_recurrence_edit(rec); - - // init attendees tab -- var organizer = !rec.attendees || is_organizer(rec), -+ var organizer = !rec.attendees || me.is_organizer(rec), - allow_invitations = organizer || (rec.owner && rec.owner == 'anonymous') || settings.invite_shared; - - task_attendees = []; - attendees_list = $('#edit-attendees-table > tbody').html(''); -- $('#edit-attendees-notify')[(allow_invitations && has_attendees(rec) && (settings.itip_notify & 2) ? 'show' : 'hide')](); -- $('#edit-localchanges-warning')[(has_attendees(rec) && !(allow_invitations || (rec.owner && is_organizer(rec, rec.owner))) ? 'show' : 'hide')](); -+ $('#edit-attendees-notify')[(allow_invitations && me.has_attendees(rec) && (settings.itip_notify & 2) ? 'show' : 'hide')](); -+ $('#edit-localchanges-warning')[(me.has_attendees(rec) && !(allow_invitations || (rec.owner && me.is_organizer(rec, rec.owner))) ? 'show' : 'hide')](); - - // attendees (aka assignees) - if (list.attendees) { -@@ -2697,7 +2655,7 @@ function rcube_tasklist_ui(settings) - } - - // tell server to send notifications -- if ((has_attendees(data) || (rec.id && has_attendees(rec))) && allow_invitations && (notify.checked || invite.checked || need_invitation)) { -+ if ((me.has_attendees(data) || (rec.id && me.has_attendees(rec))) && allow_invitations && (notify.checked || invite.checked || need_invitation)) { - data._notify = settings.itip_notify; - data._comment = comment.val(); - } -@@ -2935,13 +2893,13 @@ function rcube_tasklist_ui(settings) - }); - } - -- if (is_attendee(rec)) { -+ if (me.is_attendee(rec)) { - html += '<div class="task-dialog-message">' + - '<label><input class="confirm-attendees-decline" type="checkbox" checked="checked" value="1" name="_decline" /> ' + - rcmail.gettext('itipdeclinetask', 'tasklist') + - '</label></div>'; - } -- else if (has_attendees(rec) && is_organizer(rec)) { -+ else if (me.has_attendees(rec) && me.is_organizer(rec)) { - html += '<div class="task-dialog-message">' + - '<label><input class="confirm-attendees-notify" type="checkbox" checked="checked" value="1" name="_notify" /> ' + - rcmail.gettext('sendcancellation', 'tasklist') + -@@ -3107,7 +3065,7 @@ function rcube_tasklist_ui(settings) - editform = $('#tasklisteditform'); - me.dialog_resize(rcmail.gui_containers.tasklistform, editform.height(), editform.width()); - -- name = $('#taskedit-tasklistame').prop('disabled', !has_permission(list, 'a')||list.norename).val(list.editname || list.name); -+ name = $('#taskedit-tasklistame').prop('disabled', !me.has_permission(list, 'a')||list.norename).val(list.editname || list.name); - alarms = $('#taskedit-showalarms').prop('checked', list.showalarms).get(0); - name.select(); - -@@ -3427,13 +3385,6 @@ function rcube_tasklist_ui(settings) - return active; - } - -- // resize and reposition (center) the dialog window -- this.dialog_resize = function(id, height, width) -- { -- var win = $(window), w = win.width(), h = win.height(); -- $(id).dialog('option', { height: Math.min(h-20, height+130), width: Math.min(w-20, width+50) }); -- }; -- - /** - * Enable/disable focusview mode for the given list - */ --- -2.13.2 -
View file
0002-T2504-Fix-DTSTAMP-in-iTip-replies.patch
Deleted
@@ -1,26 +0,0 @@ -From c2e8cc16abf3c016b32fa84eb7e0a9e693b0bb73 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Thu, 29 Jun 2017 13:08:35 +0000 -Subject: [PATCH 2/8] T2504: Fix DTSTAMP in iTip replies - -It should be set to NOW whenever METHOD is specified. ---- - plugins/libcalendaring/libvcalendar.php | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php -index 78a9e2c1..a84f1a98 100644 ---- a/plugins/libcalendaring/libvcalendar.php -+++ b/plugins/libcalendaring/libvcalendar.php -@@ -1002,7 +1002,7 @@ class libvcalendar implements Iterator - $ve->UID = $event['uid']; - - // set DTSTAMP according to RFC 5545, 3.8.7.2. -- $dtstamp = !empty($event['changed']) && !empty($this->method) ? $event['changed'] : new DateTime('now', new \DateTimeZone('UTC')); -+ $dtstamp = !empty($event['changed']) && empty($this->method) ? $event['changed'] : new DateTime('now', new \DateTimeZone('UTC')); - $ve->DTSTAMP = $this->datetime_prop($cal, 'DTSTAMP', $dtstamp, true); - - // all-day events end the next day --- -2.13.2 -
View file
0003-Add-missing-status-tentative-label.patch
Deleted
@@ -1,24 +0,0 @@ -From 94dd9965a7553836851a51902bfc7f064aba27b3 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Mon, 3 Jul 2017 10:13:59 +0200 -Subject: [PATCH 3/8] Add missing status-tentative label - ---- - plugins/calendar/localization/en_US.inc | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/plugins/calendar/localization/en_US.inc b/plugins/calendar/localization/en_US.inc -index 43d07922..2e2952c2 100644 ---- a/plugins/calendar/localization/en_US.inc -+++ b/plugins/calendar/localization/en_US.inc -@@ -82,6 +82,7 @@ $labels['mystatus'] = 'My status'; - $labels['status'] = 'Status'; - $labels['status-confirmed'] = 'Confirmed'; - $labels['status-cancelled'] = 'Cancelled'; -+$labels['status-tentative'] = 'Tentative'; - $labels['priority'] = 'Priority'; - $labels['sensitivity'] = 'Privacy'; - $labels['public'] = 'public'; --- -2.13.2 -
View file
0004-T2531-Support-SCHEDULE-AGENT-in-iTip.patch
Deleted
@@ -1,105 +0,0 @@ -From 0c02d0d45c63444588a666e5b9f1671f91bd99a1 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Tue, 4 Jul 2017 14:27:19 +0000 -Subject: [PATCH 4/8] T2531: Support SCHEDULE-AGENT in iTip - -This property is used when scheduling method on the original and updated -event via CalDAV (iRony) using SCHEDULING-AGENT=CLIENT. CANCEL invitations -are supposed to be sent to attendees only if the initial scheduling was not -done with SCHEDULING-AGENT=CLIENT. - -https://tools.ietf.org/html/rfc6638#section-3.2.1.2 ---- - plugins/libcalendaring/libvcalendar.php | 39 +++++++++++++++++++++++++++++---- - 1 file changed, 35 insertions(+), 4 deletions(-) - -diff --git a/plugins/libcalendaring/libvcalendar.php b/plugins/libcalendaring/libvcalendar.php -index a84f1a98..06e660b8 100644 ---- a/plugins/libcalendaring/libvcalendar.php -+++ b/plugins/libcalendaring/libvcalendar.php -@@ -45,11 +45,13 @@ class libvcalendar implements Iterator - 'delegated-from' => 'DELEGATED-FROM', - 'delegated-to' => 'DELEGATED-TO', - 'schedule-status' => 'SCHEDULE-STATUS', -+ 'schedule-agent' => 'SCHEDULE-AGENT', - 'sent-by' => 'SENT-BY', - ); - private $organizer_keymap = array( - 'name' => 'CN', - 'schedule-status' => 'SCHEDULE-STATUS', -+ 'schedule-agent' => 'SCHEDULE-AGENT', - 'sent-by' => 'SENT-BY', - ); - private $iteratorkey = 0; -@@ -549,6 +551,10 @@ class libvcalendar implements Iterator - $attendee['role'] = 'ORGANIZER'; - $attendee['status'] = 'ACCEPTED'; - $event['organizer'] = $attendee; -+ -+ if (array_key_exists('schedule-agent', $attendee)) { -+ $schedule_agent = $attendee['schedule-agent']; -+ } - } - else if ($attendee['email'] != $event['organizer']['email']) { - $event['attendees'][] = $attendee; -@@ -708,6 +714,12 @@ class libvcalendar implements Iterator - $event['end'] = clone $event['start']; - } - -+ // T2531: Remember SCHEDULE-AGENT in custom property to properly -+ // support event updates via CalDAV when SCHEDULE-AGENT=CLIENT is used -+ if (isset($schedule_agent)) { -+ $event['x-custom'][] = array('SCHEDULE-AGENT', $schedule_agent); -+ } -+ - // minimal validation - if (empty($event['uid']) || ($event['_type'] == 'event' && empty($event['start']) != empty($event['end']))) { - throw new VObject\ParseException('Object validation failed: missing mandatory object properties'); -@@ -1164,6 +1176,13 @@ class libvcalendar implements Iterator - $ve->add($va); - } - -+ // Find SCHEDULE-AGENT -+ foreach ((array)$event['x-custom'] as $prop) { -+ if ($prop[0] === 'SCHEDULE-AGENT') { -+ $schedule_agent = $prop[1]; -+ } -+ } -+ - foreach ((array)$event['attendees'] as $attendee) { - if ($attendee['role'] == 'ORGANIZER') { - if (empty($event['organizer'])) -@@ -1172,14 +1191,26 @@ class libvcalendar implements Iterator - else if (!empty($attendee['email'])) { - if (isset($attendee['rsvp'])) - $attendee['rsvp'] = $attendee['rsvp'] ? 'TRUE' : null; -- $ve->add('ATTENDEE', 'mailto:' . $attendee['email'], -- array_filter(self::map_keys($attendee, $this->attendee_keymap))); -+ -+ $mailto = $attendee['email']; -+ $attendee = array_filter(self::map_keys($attendee, $this->attendee_keymap)); -+ -+ if ($schedule_agent !== null && !isset($attendee['SCHEDULE-AGENT'])) { -+ $attendee['SCHEDULE-AGENT'] = $schedule_agent; -+ } -+ -+ $ve->add('ATTENDEE', 'mailto:' . $mailto, $attendee); - } - } - - if ($event['organizer']) { -- $ve->add('ORGANIZER', 'mailto:' . $event['organizer']['email'], -- array_filter(self::map_keys($event['organizer'], $this->organizer_keymap))); -+ $organizer = array_filter(self::map_keys($event['organizer'], $this->organizer_keymap)); -+ -+ if ($schedule_agent !== null && !isset($organizer['SCHEDULE-AGENT'])) { -+ $organizer['SCHEDULE-AGENT'] = $schedule_agent; -+ } -+ -+ $ve->add('ORGANIZER', 'mailto:' . $event['organizer']['email'], $organizer); - } - - foreach ((array)$event['url'] as $url) { --- -2.13.2 -
View file
0005-Don-t-ignore-global-userlogins-sendmail-logging-in-p.patch
Deleted
@@ -1,28 +0,0 @@ -From 38e6afc90338def196f2d156825653a377f57c57 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Mon, 10 Jul 2017 16:35:42 +0200 -Subject: [PATCH 5/8] Don't ignore (global) userlogins/sendmail logging in - per_user_logging mode - ---- - plugins/kolab_auth/kolab_auth.php | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/plugins/kolab_auth/kolab_auth.php b/plugins/kolab_auth/kolab_auth.php -index 12e08169..f8628443 100644 ---- a/plugins/kolab_auth/kolab_auth.php -+++ b/plugins/kolab_auth/kolab_auth.php -@@ -298,8 +298,8 @@ class kolab_auth extends rcube_plugin - if (is_writable($user_log_dir)) { - $args['dir'] = $user_log_dir; - } -- else if ($args['name'] != 'errors') { -- $args['abort'] = true; // don't log if unauthenticed -+ else if (!in_array($args['name'], array('errors', 'userlogins', 'sendmail'))) { -+ $args['abort'] = true; // don't log if unauthenticed or no per-user log dir - } - } - --- -2.13.2 -
View file
0006-Add-missing-type-link-for-template-buttons-for-compa.patch
Deleted
@@ -1,379 +0,0 @@ -From 8ce594f23aa1c450605b87808f4c4487307d2ab4 Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Tue, 11 Jul 2017 14:33:31 +0000 -Subject: [PATCH 6/8] Add missing type="link" for template buttons for compat. - with Roundcube 1.4 - ---- - plugins/calendar/lib/calendar_ui.php | 9 ++++---- - .../calendar/skins/larry/templates/calendar.html | 24 +++++++++++----------- - .../kolab_addressbook/lib/kolab_addressbook_ui.php | 3 ++- - plugins/kolab_files/lib/kolab_files_engine.php | 1 + - .../skins/larry/templates/compose_plugin.html | 6 +++--- - .../kolab_files/skins/larry/templates/files.html | 18 ++++++++-------- - .../skins/larry/templates/message_plugin.html | 2 +- - plugins/kolab_notes/kolab_notes_ui.php | 9 ++++---- - .../kolab_notes/skins/larry/templates/notes.html | 12 +++++------ - plugins/kolab_tags/skins/larry/templates/ui.html | 6 +++--- - .../tasklist/skins/larry/templates/mainview.html | 20 +++++++++--------- - plugins/tasklist/tasklist_ui.php | 1 + - 12 files changed, 58 insertions(+), 53 deletions(-) - -diff --git a/plugins/calendar/lib/calendar_ui.php b/plugins/calendar/lib/calendar_ui.php -index 4276fb48..5152c287 100644 ---- a/plugins/calendar/lib/calendar_ui.php -+++ b/plugins/calendar/lib/calendar_ui.php -@@ -47,11 +47,12 @@ class calendar_ui - - // add taskbar button - $this->cal->add_button(array( -- 'command' => 'calendar', -- 'class' => 'button-calendar', -- 'classsel' => 'button-calendar button-selected', -+ 'command' => 'calendar', -+ 'class' => 'button-calendar', -+ 'classsel' => 'button-calendar button-selected', - 'innerclass' => 'button-inner', -- 'label' => 'calendar.calendar', -+ 'label' => 'calendar.calendar', -+ 'type' => 'link' - ), 'taskbar'); - - // load basic client script -diff --git a/plugins/calendar/skins/larry/templates/calendar.html b/plugins/calendar/skins/larry/templates/calendar.html -index b7f04bd9..895b6cfb 100644 ---- a/plugins/calendar/skins/larry/templates/calendar.html -+++ b/plugins/calendar/skins/larry/templates/calendar.html -@@ -35,7 +35,7 @@ - <label for="calendarlistsearch" class="voice"><roundcube:label name="calendar.searchterms" /></label> - <input type="text" name="q" id="calendarlistsearch" placeholder="<roundcube:label name='calendar.findcalendars' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-listsearch" id="calendarlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-listsearch" id="calendarlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div class="scroller withfooter"> -@@ -52,7 +52,7 @@ - <label for="quicksearchbox" class="voice"><roundcube:label name="calendar.arialabelquicksearchbox" /></label> - <roundcube:object name="plugin.searchform" id="quicksearchbox" /> - <a id="searchmenulink" class="iconbutton searchoptions" tabindex="-1"> </a> -- <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - - <h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2> -@@ -68,14 +68,14 @@ - <div id="calendaroptionsmenu" class="popupmenu" aria-hidden="true"> - <h3 id="aria-label-calendaroptions" class="voice"><roundcube:label name="calendar.calendaractions" /></h3> - <ul id="calendaroptionsmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-calendaroptions"> -- <li role="menuitem"><roundcube:button command="calendar-edit" label="calendar.edit" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="calendar-delete" label="delete" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-edit" label="calendar.edit" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-delete" label="delete" classAct="active" /></li> - <roundcube:if condition="env:calendar_driver == 'kolab'" /> -- <li role="menuitem"><roundcube:button command="calendar-remove" label="calendar.removelist" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-remove" label="calendar.removelist" classAct="active" /></li> - <roundcube:endif /> -- <li role="menuitem"><roundcube:button command="calendar-showurl" label="calendar.showurl" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="calendar-showurl" label="calendar.showurl" classAct="active" /></li> - <roundcube:if condition="env:calendar_driver == 'kolab'" /> -- <li role="menuitem"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folders" task="settings" label="managefolders" classAct="active" /></li> - <roundcube:endif /> - </ul> - </div> -@@ -162,11 +162,11 @@ - <div id="eventoptionsmenu" class="popupmenu" aria-hidden="true"> - <h3 id="aria-label-eventoptions" class="voice"><roundcube:label name="calendar.eventoptions" /></h3> - <ul id="eventoptionsmenu-menu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-eventoptions"> -- <li role="menuitem"><roundcube:button command="event-download" label="download" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="event-sendbymail" label="send" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="event-copy" label="copy" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-download" label="download" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-sendbymail" label="send" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-copy" label="copy" classAct="active" /></li> - <roundcube:if condition="env:calendar_driver == 'kolab' && config:kolab_bonnie_api" /> -- <li role="menuitem"><roundcube:button command="event-history" type="link" label="calendar.eventhistory" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="event-history" label="calendar.eventhistory" classAct="active" /></li> - <roundcube:endif /> - </ul> - </div> -@@ -265,7 +265,7 @@ - <label for="resourcesearchbox" class="voice"><roundcube:label name="calendar.searchterms" /></label> - <roundcube:object name="plugin.resources_searchform" id="resourcesearchbox" /> - <a id="resourcesearchmenulink" class="iconbutton searchoptions"> </a> -- <roundcube:button command="reset-resource-search" id="resourcesearchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-resource-search" id="resourcesearchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div class="scroller"> -diff --git a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php -index 26455cf1..941c4242 100644 ---- a/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php -+++ b/plugins/kolab_addressbook/lib/kolab_addressbook_ui.php -@@ -86,7 +86,8 @@ class kolab_addressbook_ui - 'label' => 'kolab_addressbook.'.str_replace('-', '', $command), - 'domain' => $this->ID, - 'classact' => 'active', -- 'command' => $command -+ 'command' => $command, -+ 'type' => 'link' - ))); - $this->plugin->api->add_content($content, 'groupoptions'); - $idx++; -diff --git a/plugins/kolab_files/lib/kolab_files_engine.php b/plugins/kolab_files/lib/kolab_files_engine.php -index 4ea58ba1..5d98a146 100644 ---- a/plugins/kolab_files/lib/kolab_files_engine.php -+++ b/plugins/kolab_files/lib/kolab_files_engine.php -@@ -127,6 +127,7 @@ class kolab_files_engine - 'classsel' => 'button-files button-selected', - 'innerclass' => 'button-inner', - 'label' => 'kolab_files.files', -+ 'type' => 'link' - ), 'taskbar'); - } - -diff --git a/plugins/kolab_files/skins/larry/templates/compose_plugin.html b/plugins/kolab_files/skins/larry/templates/compose_plugin.html -index 4e249edd..a823a2a1 100644 ---- a/plugins/kolab_files/skins/larry/templates/compose_plugin.html -+++ b/plugins/kolab_files/skins/larry/templates/compose_plugin.html -@@ -3,9 +3,9 @@ - <div id="quicksearchbar" class="searchbox" role="search" aria-labelledby="aria-label-searchform"> - <h3 id="aria-label-searchform" class="voice"><roundcube:label name="kolab_files.arialabelsearchform" /></h3> - <label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label> -- <roundcube:button name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="return UI.toggle_popup('filesearchmenu', event)" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> -+ <roundcube:button type="link" name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="return UI.toggle_popup('filesearchmenu', event)" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> - <roundcube:object name="file-search-form" id="filesearchbox" /> -- <roundcube:button command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> -+ <roundcube:button type="link" command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> - </div> - - <div id="folderlistbox" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist"> -@@ -20,7 +20,7 @@ - <label for="foldersearch" class="voice"><roundcube:label name="arialabelsearchterms" /></label> - <input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div id="files-folder-list" class="scroller"></div> -diff --git a/plugins/kolab_files/skins/larry/templates/files.html b/plugins/kolab_files/skins/larry/templates/files.html -index db5a222c..05772770 100644 ---- a/plugins/kolab_files/skins/larry/templates/files.html -+++ b/plugins/kolab_files/skins/larry/templates/files.html -@@ -29,9 +29,9 @@ - <div id="quicksearchbar" class="quicksearchbox" role="search" aria-labelledby="aria-label-searchform"> - <h2 id="aria-label-searchform" class="voice"><roundcube:label name="kolab_files.arialabelsearchform" /></h2> - <label for="quicksearchbox" class="voice"><roundcube:label name="arialabelquicksearchbox" /></label> -- <roundcube:button name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="UI.toggle_popup('filesearchmenu', event); return false" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> -+ <roundcube:button type="link" name="filesearchmenulink" id="filesearchmenulink" class="iconbutton searchoptions" onclick="UI.toggle_popup('filesearchmenu', event); return false" title="searchmod" label="options" aria-haspopup="true" aria-expanded="false" aria-owns="filesearchmenu-menu" /> - <roundcube:object name="file-search-form" id="quicksearchbox" /> -- <roundcube:button command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="files-search-reset" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - - <div id="folderlistbox" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist"> -@@ -46,7 +46,7 @@ - <label for="foldersearch" class="voice"><roundcube:label name="arialabelsearchterms" /></label> - <input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div id="files-folder-list" class="scroller withfooter"></div> -@@ -75,12 +75,12 @@ - <div id="folderoptions" class="popupmenu" data-editable="true" aria-hidden="true"> - <h3 id="aria-label-folderoptions" class="voice"><roundcube:label name="kolab_files.folderoptions" /></h3> - <ul id="folderoptionsmenu" class="toolbarmenu" role="menu" aria-labelledby="aria-label-folderoptions"> -- <li role="menuitem"><roundcube:button command="folder-rename" label="rename" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="files-folder-delete" label="delete" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folder-rename" label="rename" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="files-folder-delete" label="delete" classAct="active" /></li> - <roundcube:if condition="!empty(env:external_sources)" /> -- <li role="menuitem"><roundcube:button command="folder-mount" label="kolab_files.foldermount" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folder-mount" label="kolab_files.foldermount" classAct="active" /></li> - <roundcube:endif /> -- <li role="menuitem"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folders" task="settings" label="managefolders" classAct="active" /></li> - <roundcube:container name="filesfolderoptions" id="folderoptionsmenu" /> - </ul> - </div> -@@ -203,8 +203,8 @@ - - <div id="dragfilemenu" class="popupmenu" aria-hidden="true"> - <ul class="toolbarmenu" role="menu"> -- <li role="menuitem"><roundcube:button command="files-move" onclick="return kolab_files_drag_menu_action('files-move')" label="move" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="files-copy" onclick="return kolab_files_drag_menu_action('files-copy')" label="copy" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="files-move" onclick="return kolab_files_drag_menu_action('files-move')" label="move" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="files-copy" onclick="return kolab_files_drag_menu_action('files-copy')" label="copy" classAct="active" /></li> - </ul> - </div> - -diff --git a/plugins/kolab_files/skins/larry/templates/message_plugin.html b/plugins/kolab_files/skins/larry/templates/message_plugin.html -index df8452b0..0be224b5 100644 ---- a/plugins/kolab_files/skins/larry/templates/message_plugin.html -+++ b/plugins/kolab_files/skins/larry/templates/message_plugin.html -@@ -6,7 +6,7 @@ - <label for="foldersearch" class="voice"><roundcube:label name="arialabelsearchterms" /></label> - <input type="text" name="q" id="foldersearch" placeholder="<roundcube:label name='findfolders' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-foldersearch" id="folderlistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div id="folderlistbox" class="uibox listbox" role="navigation" aria-labelledby="aria-label-folderlist"> -diff --git a/plugins/kolab_notes/kolab_notes_ui.php b/plugins/kolab_notes/kolab_notes_ui.php -index f180f50a..bf790237 100644 ---- a/plugins/kolab_notes/kolab_notes_ui.php -+++ b/plugins/kolab_notes/kolab_notes_ui.php -@@ -22,11 +22,12 @@ class kolab_notes_ui - - // add taskbar button - $this->plugin->add_button(array( -- 'command' => 'notes', -- 'class' => 'button-notes', -- 'classsel' => 'button-notes button-selected', -+ 'command' => 'notes', -+ 'class' => 'button-notes', -+ 'classsel' => 'button-notes button-selected', - 'innerclass' => 'button-inner', -- 'label' => 'kolab_notes.navtitle', -+ 'label' => 'kolab_notes.navtitle', -+ 'type' => 'link' - ), 'taskbar'); - - $this->plugin->include_stylesheet($this->plugin->local_skin_path() . '/notes.css'); -diff --git a/plugins/kolab_notes/skins/larry/templates/notes.html b/plugins/kolab_notes/skins/larry/templates/notes.html -index e591ea70..4a6fdccc 100644 ---- a/plugins/kolab_notes/skins/larry/templates/notes.html -+++ b/plugins/kolab_notes/skins/larry/templates/notes.html -@@ -24,7 +24,7 @@ - <label for="quicksearchbox" class="voice"><roundcube:label name="kolab_notes.arialabelnotesquicksearchbox" /></label> - <a id="searchmenulink" class="iconbutton searchoptions" > </a> - <roundcube:object name="plugin.searchform" id="quicksearchbox" /> -- <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> -+ <roundcube:button type="link" command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> - </div> - - <div id="mainscreencontent"> -@@ -47,7 +47,7 @@ - <label for="notebooksearch" class="voice"><roundcube:label name="kolab_notes.searchterms" /></label> - <input type="text" name="q" id="notebooksearch" placeholder="<roundcube:label name='kolab_notes.findnotebooks' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-listsearch" id="notebooksearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-listsearch" id="notebooksearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div class="scroller withfooter"> -@@ -61,10 +61,10 @@ - <div id="notesoptionsmenu" class="popupmenu" aria-hidden="true"> - <h3 id="aria-label-optionsmenu" class="voice"><roundcube:label name="kolab_notes.arialabelnotesoptionsmenu" /></h3> - <ul class="toolbarmenu" id="notesoptionsmenu-menu" role="menu" aria-labelledby="aria-label-optionsmenu"> -- <li role="menuitem"><roundcube:button command="list-edit" label="edit" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="list-delete" label="delete" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="list-remove" label="kolab_notes.removelist" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="list-edit" label="edit" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="list-delete" label="delete" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="list-remove" label="kolab_notes.removelist" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folders" task="settings" label="managefolders" classAct="active" /></li> - </ul> - </div> - </div> -diff --git a/plugins/kolab_tags/skins/larry/templates/ui.html b/plugins/kolab_tags/skins/larry/templates/ui.html -index 1df50730..0b8d66a7 100644 ---- a/plugins/kolab_tags/skins/larry/templates/ui.html -+++ b/plugins/kolab_tags/skins/larry/templates/ui.html -@@ -20,9 +20,9 @@ - <div id="tagmessagemenu" class="popupmenu" aria-hidden="true"> - <ul class="toolbarmenu iconized"> - <li class="separator"><label><roundcube:label name="kolab_tags.tags" /></label></li> -- <li role="menuitem"><roundcube:button command="tag-add" label="kolab_tags.tagadd" classAct="icon active" class="icon" innerclass="icon tagadd folder-selector-link" /></li> -- <li role="menuitem"><roundcube:button command="tag-remove" label="kolab_tags.tagremove" classAct="icon active" class="icon" innerclass="icon tagremove folder-selector-link" /></li> -- <li role="menuitem"><roundcube:button command="tag-remove-all" label="kolab_tags.tagremoveall" classAct="icon active" class="icon" innerclass="icon tagremoveall" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="tag-add" label="kolab_tags.tagadd" classAct="icon active" class="icon" innerclass="icon tagadd folder-selector-link" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="tag-remove" label="kolab_tags.tagremove" classAct="icon active" class="icon" innerclass="icon tagremove folder-selector-link" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="tag-remove-all" label="kolab_tags.tagremoveall" classAct="icon active" class="icon" innerclass="icon tagremoveall" /></li> - </ul> - </div> - -diff --git a/plugins/tasklist/skins/larry/templates/mainview.html b/plugins/tasklist/skins/larry/templates/mainview.html -index 7f84cec6..ca40df13 100644 ---- a/plugins/tasklist/skins/larry/templates/mainview.html -+++ b/plugins/tasklist/skins/larry/templates/mainview.html -@@ -39,31 +39,31 @@ - <label for="tasklistsearch" class="voice"><roundcube:label name="tasklist.searchterms" /></label> - <input type="text" name="q" id="tasklistsearch" placeholder="<roundcube:label name='tasklist.findlists' />" /> - <a class="iconbutton searchicon"></a> -- <roundcube:button command="reset-listsearch" id="tasklistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-listsearch" id="tasklistsearch-reset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - </div> - <div class="scroller withfooter"> - <roundcube:object name="plugin.tasklists" id="tasklists" class="treelist listing" /> - </div> - <div class="boxfooter"> -- <roundcube:button command="list-create" type="link" title="tasklist.createlist" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="tasklist.createlist" /><roundcube:button name="tasklistoptionslink" id="tasklistoptionsmenulink" type="link" title="tasklist.listactions" class="listbutton groupactions" onclick="return UI.toggle_popup('tasklistoptionsmenu', event, { above:true })" innerClass="inner" label="tasklist.listactions" aria-haspopup="true" aria-expanded="false" aria-owns="tasklistoptionsmenu-menu" /> -+ <roundcube:button type="link" command="list-create" type="link" title="tasklist.createlist" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" label="tasklist.createlist" /><roundcube:button name="tasklistoptionslink" id="tasklistoptionsmenulink" type="link" title="tasklist.listactions" class="listbutton groupactions" onclick="return UI.toggle_popup('tasklistoptionsmenu', event, { above:true })" innerClass="inner" label="tasklist.listactions" aria-haspopup="true" aria-expanded="false" aria-owns="tasklistoptionsmenu-menu" /> - </div> - </div> - - <div id="tasklistoptionsmenu" class="popupmenu" aria-hidden="true"> - <h3 id="aria-label-tasklistoptions" class="voice"><roundcube:label name="tasklist.listactions" /></h3> - <ul class="toolbarmenu" id="tasklistoptionsmenu-menu" role="menu" aria-labelledby="aria-label-tasklistoptions"> -- <li role="menuitem"><roundcube:button command="list-edit" label="edit" classAct="active" /></li> -- <li role="menuitem"><roundcube:button command="list-delete" label="delete" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="list-edit" label="edit" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="list-delete" label="delete" classAct="active" /></li> - <!--<li role="menuitem"><roundcube:button command="list-import" label="tasklist.import" classAct="active" /></li>--> - <roundcube:if condition="env:tasklist_driver == 'kolab'" /> -- <li role="menuitem"><roundcube:button command="list-remove" label="tasklist.removelist" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="list-remove" label="tasklist.removelist" classAct="active" /></li> - <roundcube:endif /> - <roundcube:if condition="config:calendar_caldav_url" /> -- <li role="menuitem"><roundcube:button command="list-showurl" label="tasklist.showcaldavurl" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="list-showurl" label="tasklist.showcaldavurl" classAct="active" /></li> - <roundcube:endif /> - <roundcube:if condition="env:tasklist_driver == 'kolab'" /> -- <li role="menuitem"><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="folders" task="settings" label="managefolders" classAct="active" /></li> - <roundcube:endif /> - </ul> - </div> -@@ -81,7 +81,7 @@ - <label for="quicksearchbox" class="voice"><roundcube:label name="tasklist.arialabelquicksearchbox" /></label> - <roundcube:object name="plugin.searchform" id="quicksearchbox" /> - <a id="searchmenulink" class="iconbutton searchoptions" > </a> -- <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> -+ <roundcube:button type="link" command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" label="resetsearch" /> - </div> - - <div id="tasksview" class="uibox"> -@@ -131,8 +131,8 @@ - <div id="taskviewactions" class="popupmenu" aria-hidden="true" data-align="right"> - <h3 id="aria-label-taskviewactions" class="voice"><roundcube:label name="tasklist.viewactions" /></h3> - <ul class="toolbarmenu" id="taskviewactions-menu" role="menu" aria-labelledby="aria-label-taskviewactions"> -- <li role="menuitem"><roundcube:button command="expand-all" label="expand-all" class="icon" classAct="icon active" innerclass="icon expand" /></li> -- <li role="menuitem"><roundcube:button command="collapse-all" label="collapse-all" class="icon" classAct="icon active" innerclass="icon collapse" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="expand-all" label="expand-all" class="icon" classAct="icon active" innerclass="icon expand" /></li> -+ <li role="menuitem"><roundcube:button type="link" command="collapse-all" label="collapse-all" class="icon" classAct="icon active" innerclass="icon collapse" /></li> - </ul> - </div> - </div> -diff --git a/plugins/tasklist/tasklist_ui.php b/plugins/tasklist/tasklist_ui.php -index 502bb2f0..de23a87c 100644 ---- a/plugins/tasklist/tasklist_ui.php -+++ b/plugins/tasklist/tasklist_ui.php -@@ -51,6 +51,7 @@ class tasklist_ui - 'classsel' => 'button-tasklist button-selected', - 'innerclass' => 'button-inner', - 'label' => 'tasklist.navtitle', -+ 'type' => 'link' - ), 'taskbar'); - - $this->plugin->include_stylesheet($this->plugin->local_skin_path() . '/tasklist.css'); --- -2.13.2 -
View file
0007-Update-calendar-and-tasklist-styles-sprites-to-new-L.patch
Deleted
@@ -1,962 +0,0 @@ -From d91bfd77a71512611b0c7d44d1840348737e518e Mon Sep 17 00:00:00 2001 -From: Thomas Bruederli <thomas@roundcube.net> -Date: Wed, 12 Jul 2017 15:00:24 +0200 -Subject: [PATCH 7/8] Update calendar and tasklist styles/sprites to new Larry - "flat" design - -Summary: With Roundcube version 1.3, the default Larry theme receives a small face-list. This change adapts the styles of the calendar and tasklist plugins to tat. - -Reviewers: machniak - -Differential Revision: https://git.kolab.org/D423 ---- - plugins/calendar/skins/larry/calendar.css | 122 ++++++--------------- - plugins/calendar/skins/larry/images/calendars.png | Bin 2582 -> 2350 bytes - .../calendar/skins/larry/images/sendinvitation.png | Bin 337 -> 204 bytes - plugins/calendar/skins/larry/images/toolbar.png | Bin 3662 -> 1112 bytes - plugins/tasklist/skins/larry/images/buttons.png | Bin 4645 -> 1096 bytes - .../tasklist/skins/larry/images/sendinvitation.png | Bin 337 -> 204 bytes - plugins/tasklist/skins/larry/images/sprites.png | Bin 5961 -> 3799 bytes - plugins/tasklist/skins/larry/tasklist.css | 56 +++------- - 8 files changed, 48 insertions(+), 130 deletions(-) - -diff --git a/plugins/calendar/skins/larry/calendar.css b/plugins/calendar/skins/larry/calendar.css -index c8f36b14..3db114ab 100644 ---- a/plugins/calendar/skins/larry/calendar.css -+++ b/plugins/calendar/skins/larry/calendar.css -@@ -69,31 +69,18 @@ body.calendarmain #mainscreen { - #datepicker .ui-datepicker-activerange a { - color: #185d7a; - background: #d9f1fb; -- background: -moz-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d9f1fb), color-stop(100%,#c5e3ee)); -- background: -o-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- background: -ms-linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- background: linear-gradient(top, #d9f1fb 0%, #c5e3ee 100%); -- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#d9f1fb', endColorstr='#c5e3ee', GradientType=0); - } - - #datepicker .ui-datepicker-days-cell-over a.ui-state-default { - color: #fff; - border-color: #2fa0c0; - background: rgba(73,180,210,0.6); -- text-shadow: 0px 1px 1px #666; - filter: none; - } - - #datepicker .ui-datepicker-activerange a.ui-state-active { - color: #fff; - background: #00acd4; -- background: -moz-linear-gradient(top, #00acd4 0%, #008fc7 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00acd4), color-stop(100%,#008fc7)); -- background: -o-linear-gradient(top, #00acd4 0%, #008fc7 100%); -- background: -ms-linear-gradient(top, #00acd4 0%, #008fc7 100%); -- background: linear-gradient(top, #00acd4 0%, #008fc7 100%); -- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00acd4', endColorstr='#008fc7', GradientType=0); - } - - #datepicker td.ui-datepicker-week-col { -@@ -253,17 +240,14 @@ pre { - #calendars .treelist li span.handle { - display: inline-block; - position: absolute; -- top: 8px; -+ top: 7px; - right: 6px; - padding: 0; -- width: 10px; -- height: 10px; -- border-radius: 7px; -+ width: 11px; -+ height: 11px; -+ border-radius: 8px; - font-size: 0.8em; -- border: 1px solid rgba(0, 0, 0, 0.5); -- -webkit-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); -- -moz-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); -- box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); -+ border: 1px solid rgba(0, 0, 0, 0.4); - } - - #calendars .treelist div span.actions { -@@ -281,15 +265,9 @@ pre { - #calendars .treelist div:hover span.actions { - top: 1px; - right: 21px; -- border: 1px solid #c6c6c6; -+ border: 1px solid #ababab; - border-radius: 4px; -- background: #f7f7f7; -- background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6)); -- background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0); -+ background: #f1f1f1; - } - - #calendars .treelist li a.subscribed { -@@ -431,13 +409,6 @@ pre { - min-width: 1.3em; - padding: 2px 4px; - background: #005d76; -- background: -moz-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#005d76), color-stop(100%,#004558)); -- background: -o-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -ms-linear-gradient(top, #005d76 0%, #004558 100%); -- background: linear-gradient(to bottom, #005d76 0%, #004558 100%); -- -webkit-box-shadow: inset 0 1px 1px 0 #002635; -- box-shadow: inset 0 1px 1px 0 #002635; - border-radius: 10px; - color: #fff; - text-align: center; -@@ -545,6 +516,10 @@ body.calendarmain #searchmenulink { - display: none; - } - -+#calendarform { -+ overflow: visible; -+} -+ - #user { - position: absolute; - top: 10px; -@@ -627,7 +602,6 @@ a.miniColors-trigger { - color: #333; - font-weight: bold; - padding: 4px 4px 3px 30px; -- text-shadow: 0px 1px 1px #fff; - text-decoration: none; - white-space: nowrap; - line-height: 20px; -@@ -735,11 +709,6 @@ a.miniColors-trigger { - font-size: 11px; - font-weight: bold; - background: #d6eaf3; -- background: -moz-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); -- background: -webkit-gradient(linear, left top, right top, color-stop(0,#e3f2f6), color-stop(8%,#d6eaf3), color-stop(100%,#d6eaf3)); -- background: -o-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); -- background: -ms-linear-gradient(left, #e3f2f6 0, #d6eaf3 14px ,#d6eaf3 100%); -- background: linear-gradient(left, #e3f2f6 0, #d6eaf3 14px, #d6eaf3 100%); - border: 0; - border-bottom: 1px solid #ccc; - height: 18px; -@@ -1568,12 +1537,7 @@ a.dropdown-link:after { - border-top-color: #ddd; - border-bottom-color: #bbb; - border-radius: 0 0 4px 4px; -- background: #ebebeb; -- background: -moz-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ebebeb), color-stop(100%,#c6c6c6)); -- background: -o-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -- background: -ms-linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -- background: linear-gradient(top, #ebebeb 0%, #c6c6c6 100%); -+ background: #eaeaea; - } - - #agendaoptions label { -@@ -1717,10 +1681,6 @@ a.dropdown-link:after { - overflow: hidden; - border: 0; - border-radius: 4px; -- box-shadow: 0 0 2px #999; -- -o-box-shadow: 0 0 2px #999; -- -webkit-box-shadow: 0 0 2px #999; -- -moz-box-shadow: 0 0 2px #999; - } - - .calendarmain .fc-content { -@@ -1752,39 +1712,23 @@ a.dropdown-link:after { - .calendarmain .fc-button.fc-state-default, - .calendarmain .fc-button.fc-state-hover { - background-color: #f5f5f5; -- background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); -- background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); -- background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); -- background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); -- background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); -- background-position: 0 0; - } - - .calendarmain #calendar .fc-button, - .calendarmain #calendar .fc-button.fc-state-default, - .calendarmain #calendar .fc-button.fc-state-hover { -- margin: 0 0 0 0; -- height: 20px; -- line-height: 20px; -- color: #505050; -- text-shadow: 0px 1px 1px #fff; -- border: 1px solid #e6e6e6; -- background: #d8d8d8; -- background: -moz-linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#d8d8d8), color-stop(100%,#bababa)); -- background: -o-linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- background: -ms-linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- background: linear-gradient(top, #d8d8d8 0%, #bababa 100%); -- box-shadow: 0 1px 1px 0 #999; -- -o-box-shadow: 0 1px 1px 0 #999; -- -webkit-box-shadow: 0 1px 1px 0 #999; -- -moz-box-shadow: 0 1px 1px 0 #999; -+ margin: -2px 0 0 0; -+ height: 24px; -+ line-height: 24px; -+ color: #333; -+ border: 1px solid #ababab; -+ background: #f1f1f1; - text-decoration: none; -+ text-shadow: none; - } - - .calendarmain #calendar .fc-button.fc-state-disabled { -- color: #999; -- background: #d8d8d8; -+ color: #666; - } - - .calendarmain .fc-button.fc-state-active, -@@ -1792,12 +1736,8 @@ a.dropdown-link:after { - .calendarmain #calendar .fc-button.fc-state-active, - .calendarmain #calendar .fc-button.fc-state-down { - color: #333; -- background: #bababa; -- background: -moz-linear-gradient(top, #bababa 0%, #d8d8d8 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bababa), color-stop(100%,#d8d8d8)); -- background: -o-linear-gradient(top, #bababa 0%, #d8d8d8 100%); -- background: -ms-linear-gradient(top, #bababa 0%, #d8d8d8 100%); -- background: linear-gradient(top, #bababa 0%, #d8d8d8 100%); -+ background: #f1f1f1; -+ box-shadow: none; - } - - .calendarmain #calendar .fc-header .fc-button { -@@ -2054,6 +1994,15 @@ div.fc-event-location { - background-color: rgba(233,198,14, 0.12); - } - -+.fc-widget-header, -+.fc-widget-content { -+ border-color: #bbd3da !important; -+} -+ -+.fc-widget-header .fc-agenda-divider-inner { -+ background: #cad2d9 !important; -+} -+ - .fc-widget-header { - background-color: #d6eaf3; - color: #004458; -@@ -2098,15 +2047,15 @@ div.fc-event-location { - } - - .calendarmain .fc-view-table tr.fc-event td { -- border-color: #ddd; -- padding: 4px 7px; -+ border-color: #bbd3da; -+ padding: 6px 8px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - } - - .calendarmain .fc-view-table tr.fc-event td.fc-event-handle { -- padding: 5px 0 2px 7px; -+ padding: 6px 0 2px 7px; - width: 12px; - } - -@@ -2129,9 +2078,6 @@ div.fc-event-location { - font-size: 10px; - border-radius: 8px; - border: 1px solid rgba(0, 0, 0, 0.4); -- -webkit-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); -- -moz-box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); -- box-shadow: inset 0px 0 1px 1px rgba(0, 0, 0, 0.3); - } - - .calendarmain .fc-view-table col.fc-event-location { -diff --git a/plugins/calendar/skins/larry/images/calendars.png b/plugins/calendar/skins/larry/images/calendars.png -index 5b5ca85b2b95110ae2193769b04e6c17a6248d8b..41421a1692d5bf21ea6847483aeb2b4522efa89b 100644 -GIT binary patch -literal 2350 -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 -U;TxKeJ^%m!07*qoM6N<$g7~d$r~m)} - -literal 2582 -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 -GkbeWq3{k)U - -diff --git a/plugins/calendar/skins/larry/images/sendinvitation.png b/plugins/calendar/skins/larry/images/sendinvitation.png -index dea30fab7f37dda580d9d8996ff3997ccc235154..5e639c489cdec5aff4423239150fe0c2bebca4cb 100644 -GIT binary patch -delta 187 -zcmV;s07U=M0?YxB8Gi-<004=6%`gA}0Fy~XK~#7FW1ue>1vwLD6#(&nGVyyLcED$F -z0hxv-fG{qD_XF{Hkj)UqgbjtN4}hv~z-cg=3(gZTbUv~V2^)+sJOGd3{UC#2e8L7} -zYBqql3?UA6r2@!Oatxji#t3!;Eao8wBG{xDJRgfI*JDO1!ZdJ#2BRBF7$XeFXK(_t -pp=1~yfXm>13Ui(T!_Wt#003_@#Ruc3S*!p6002ovPDHLkV1kjIL&^XE - -delta 321 -zcmV-H0lxms0nq}G8Gi!+006$CJpup#0CG@FR7C&)0Be+>hp4few!YKf;*zkrcbuoh -z)Y)y7plOnxxy;gusk522z0TX;*y85@|NqI@+<c&`-RJ3rrm&B$x1zhlxXaPt>FfXh -z|CO@4ztPrdlAdXjp8x;<X_B7*|Nn)ju%Wxda+##r<mbK5)PJzW%+@H%{r~^~9&}Pp -zQvmbtz}ws9_4V)Gwy^Z`@7~+k*VWIcosWoda6m9H$A%yP003}FL_t&-)3wM~7K0!Z -zKtV|&*7V-4fV%%J>hXyO7T|nNva&Cc;wN2q1YGu(KI_)unSEYMZ%~;**b=tB$xrhA -zov^7c7U-TjYC3x(?Om&joeA2e!1bU&jqiKh+4OUlvdcfDD~SFh{c0k|f3m6pxHA){ -Tk+%FD00000NkvXXu0mjfdZo5S - -diff --git a/plugins/calendar/skins/larry/images/toolbar.png b/plugins/calendar/skins/larry/images/toolbar.png -index 5e79c66755a031e627b5ca222d52c2400b5e0f1c..5fe9f773fa7f47c17052a4fe095296d2e03179a9 100644 -GIT binary patch -delta 1092 -zcmV-K1iSmr9M}kuBYyy3P)t-s0001HZE<F8ab|6CW^Hk1ZE<F8ab|6CW^Hk1ZE<F8 -zab|6CW^Hk1ZE<F8ab|6CW^HlV+S~vC|Mm9vsjaV!l9k2C%Dlh9?CtG&e}m7_(&FUg -zvbMOEo1SoXdV`3JUsN}o0000HbW%=J0RO*0fZrexFwc*0uYXYQV4o0AXA=Mb1C~id -zK~#7F?9~U7q(BTr(M+YF@YVM}?b74gFVaMe=Y_+4JQO|%Y2P)HyOWK(w|J=NTnFbX -z;UV#yy)SAdk-el6j9xb0yb<Cxy)QBwHX~gs1zSYoilWhI(+r^X77#5IITun;PsO8V -zDKp*4Oym^@j(@EVnFwWKUjWZU-9iVFQN!L{$%sduimrqrT^S?MjSq=-yIp{h_Fbca -zFFbjiqXRNZ&sATL(k<i?YV6Gbap^Fa88+~wqE<LpiHIFAGaD^!x1=NX4TF(gi$u5< -zjik0y*GjDvjz~9}lTLnMBo%j6uX2}rEFyJ%qz{VR+kdyyYo+{=u===2DsK-r8u_(I -zbZay6d+`13cDqg|9fFJ}_Wh#jCl%X@-&62k&KpZZPe;R?k5(TR;ZiVi;gviZ(a+|C -zkzGW#9aURhMyrZ#7ZHNEjPja{dae%1s2nR#Mr##4(p9z0S{;Z~^#YknFR<I~ekb0y -zN5M$ArhgBN%J4E|4i=A$tF;=*aMZFXGYw=S>da9&!95YJ#)SfqiHflil2Om8AQ{a( -zvRqW{XaHdLfp5g9Ya{=)a|SAM!ax}AB%(Q6nkG6~?~-fZ|1FyhvVo-qM|Qx2{{u6} -z!G~dRVI0F;;HMz~0Dw9IQi#t4MQK@?Q>?6fTz_J!RO?1`SlZ})`5=x&0x5Hei9TZ~ -z0;zKQ-TshB3)6duLg^2EE>S3b&>faZiSMlU+_T~naSPAfP)7g&{s-y^^dnq*$Mvm? -zKiAbAk?i9j?9dt$7Sbi9seOkW>pHe?lN0(80D#wmIs*NO+}?3hT~l1^nvY1Ky-k<8 -zmVefm2$z%~Eg^&)x4LdI*L6WZ0s!!GP)Fc=gss7l=|N3$#<<zcdpIKb!H>f*_HaPz -z`|3eSa@I}OPJ5{Tli%sAB+nksM*sjcKplbe5upYq?m<n;%z5Q?4@aa_(pJjW!vU%9 -zs|O`1hrEQa>><V|ztee1nmwG4006uk)PE7^M-1)i45uWu?Tyw>qwS1p+w;aaZ#w?s -zDOboI`Vmq90H`C-k0|Zxlv9%0_O=j~Ep#@u?Iq@%xRWlPa;@y49|3?4({w_5`yqFJ -z5zSJ^Q^m_1OLu-c>5R!{O_C(g&fAp+d(s2jq?QkL$yw`!(s$dKB~s_qAVSq4m_5=d -zljnzE8sld(`x=Z9PMN&^5KP^9mZzj=)E?LqlKmIo0001hFTh_FuUf{(6a_#40000< -KMNUMnLSTY?<O`Yr - -literal 3662 -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 -I#K<%CzhgnwYXATM - -diff --git a/plugins/tasklist/skins/larry/images/buttons.png b/plugins/tasklist/skins/larry/images/buttons.png -index 81bb25587201ae9b8d8fa5ac89631a8c1b1064f1..097c8a32fd74c6356c638cfd32a9092fff0bc000 100644 -GIT binary patch -literal 1096 -zcmeAS@N?(olHy`uVBq!ia0vp^azK2YgBeI#aSFZxQj-IGLR|m<|Noanps?&WNhmG1 -zkR-Iub&Vs?d4?rHe!&du|DP9_U$DQS|Gk1kK*D_kbpHPT0SyZG9nK3R%ztmtU$B1d -z|HTg(7?_PcT^vIy81GzaJ*TZG(DpEY>aGP}zx`YPiRXeyn!1bsoBGF}*D(FyFRjg# -zXe^Y{o~s=i*j~4yM)dej(-ocb7>^lyEt#$RT=sGu|H;q(*9Ck&zg*2F!9VBnp9%Yl -zjG11GKF^h3oPB9>+25wq=Y@OR56;+B)?w~_u1+Spr}0ON+U2P88Ad;)eDyr%NuKw9 -z7aDuM;+^Z8!nqgt>KAR+ljM#_*Zw-SZH3$HQ~HH-b~hD$;W7B8G4bBJIr2VVg(v;> -zUoYTO{QWA!4e{qD^-I_9iF{D?u;#kqE;ZYi3&msV<{j9_dN|cq`JRsD@7voX+I}<x -zEvz<~`KL>5x=Qu2x|3E{GLOZbu6b-Q_2|#*b+HQWe9VCob%|}-D|CBreEjRbeVTRh -zg)N6%qyHWL$;P|tTijfwujzMQS~45g*<VQflNYJ0d-H1itjPLP=k`5c{XFg3jNdbA -zuRnOuZPn#)Vc|1}bK*-=(q>kMEQ*-Iv><ogj^!I&Tx=PvYV%x!`HZT=O@6X%jy`eb -zUz^$CFB!(_pEg`v_iUGGd%xt~RnkV^{=Jsl86Nrm-12wx8{8Z7&z;XZ9(UU3M4X|Q -ztG>eL!%M#NuUE34Z{J__?@N{P$ESZSu1vLj=ah2C@3O7jdDmw<|86?_XWp%vpDbyG -zn+wFxTylGw_cT`N{nWkl(|77*`v<RNUUQ&}&30O&M_5w9M41$`$!e2b`9$27>S=e@ -zDh0Vn`K4sU9oIeC<1wXX_D|cbH_J0VEwEHC^!MJi(R)YF{H^JBR~#hY8U>!p^>uk- -z(^qNzyz-Z3UC88&b4-0ZI5Gv!Mjda8nmsdkz2)Km4{l~XlPeZ_eOBzG*UA`U`>B43 -zZKlsf4l)Oc-B|v3k0pakNa2!=CuVym+zZ>Yk=4ylxO~FQz3pe-aPg*n&wb|d&iqxj -z+SYdgA2Tx(-}^;A_I~^J<4;}HHGK061CA?Q(0uAv<|TP;kF67XW$fcOA9u)Y*kBy- -zX|?Ip$m`j8p9FSHVBIw(usHtTQ~t}cwpn%2v5wK%+I%ig&aAlNxw?7T_bQK`6RQ-A -zt3UCk0aN4;u3abN9=pGuWt?5RIwIqt&I?BG#DGx4$IIXTW&UWf<JV2~qM5+F$KdJe -K=d#Wzp$PzNDluRH - -literal 4645 -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 -b>^c4$A%LCdn+#_c00000NkvXXu0mjfVd)QB - -diff --git a/plugins/tasklist/skins/larry/images/sendinvitation.png b/plugins/tasklist/skins/larry/images/sendinvitation.png -index dea30fab7f37dda580d9d8996ff3997ccc235154..5e639c489cdec5aff4423239150fe0c2bebca4cb 100644 -GIT binary patch -delta 187 -zcmV;s07U=M0?YxB8Gi-<004=6%`gA}0Fy~XK~#7FW1ue>1vwLD6#(&nGVyyLcED$F -z0hxv-fG{qD_XF{Hkj)UqgbjtN4}hv~z-cg=3(gZTbUv~V2^)+sJOGd3{UC#2e8L7} -zYBqql3?UA6r2@!Oatxji#t3!;Eao8wBG{xDJRgfI*JDO1!ZdJ#2BRBF7$XeFXK(_t -pp=1~yfXm>13Ui(T!_Wt#003_@#Ruc3S*!p6002ovPDHLkV1kjIL&^XE - -delta 321 -zcmV-H0lxms0nq}G8Gi!+006$CJpup#0CG@FR7C&)0Be+>hp4few!YKf;*zkrcbuoh -z)Y)y7plOnxxy;gusk522z0TX;*y85@|NqI@+<c&`-RJ3rrm&B$x1zhlxXaPt>FfXh -z|CO@4ztPrdlAdXjp8x;<X_B7*|Nn)ju%Wxda+##r<mbK5)PJzW%+@H%{r~^~9&}Pp -zQvmbtz}ws9_4V)Gwy^Z`@7~+k*VWIcosWoda6m9H$A%yP003}FL_t&-)3wM~7K0!Z -zKtV|&*7V-4fV%%J>hXyO7T|nNva&Cc;wN2q1YGu(KI_)unSEYMZ%~;**b=tB$xrhA -zov^7c7U-TjYC3x(?Om&joeA2e!1bU&jqiKh+4OUlvdcfDD~SFh{c0k|f3m6pxHA){ -Tk+%FD00000NkvXXu0mjfdZo5S - -diff --git a/plugins/tasklist/skins/larry/images/sprites.png b/plugins/tasklist/skins/larry/images/sprites.png -index 14f827197e7a3cdd2fd55339fc663648b2e610a1..a9f8a730072b1295591d0a8bc4e96d6dd35fba13 100644 -GIT binary patch -literal 3799 -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 - -literal 5961 -zcmV-P7q;k$P)<h;3K|Lk000e1NJLTq001Na00FKD1^@s6_*|rt000*dNkl<Zc-rip -z3s6*7n#Vgan^-ZMp*FQ9wNvi0m1HWj?qtc#PS!Cmd?jjB&>$cPH1Y<OH$nq?06{<$ -z0YMP)1t=;HUqMYoz(?>A1&JC_0|J8LBZz<~pl82-SGRRXkcZOu_RQRW)xYlTbIzrI -z{hf2Wzk9e3g)CXR(2qa<Xhbd`7n4~p^#)=C)c{JfzCi<L2oTL{CKd=Hq9n&-DJVBZ -zoyLq@E+$YpqJi~3+HC-&7(j>)7mOjJ-r5O)#eizoMgYrxqG>1wP&}Dy25`B?#hQWc -z^;9(D#Q-wY0C{Q5P_Es>V8K^Ijac1QfHwmK{8Sx7#I$2fEFe=&l#CVnB29z}^a;pI -z6D31^0Wu&rtGi8>ELnf=;+z|ht;kX2PxS%D?QxV_)uTBd-F}>(ehRNquBo3u{(~4G -zzax9`J5Br5Fdr#+w~>N(en<{?tD?Fbaza~5Ohw1Hc|Yhpa%vc_X?2e$zTM8RoGa48 -zbc|N;wht8i?thQyyz}{cE!W;r@N32&-9~rn8fXkJNI!+hpqskPKf0}jX?|D1Z~nW2 -z1E%_46#T;L1bY5l5pDBZT|;GbPk6h%%l`B0T^TVI&w{CVMZvGySXWbfM_mJb)4eM2 -z93u1R^0}hB|Mzx#Z!qP<6#VR)BRad9n)cH+BXkKg;xP?sMCSftx2o1)x2nc>M|8F% -z##A)Sv#!>{Xx$VWQ-Qrs=YzY=X<FT_4@Pu$UOZRy;8;m1mD!TrT1!hx5g84TXx;X^ -z&a#qHbkp6$zm5RFFqrE-+^P^AKxzlJuAvg@{`6i;^<R4I-l!W%wi1Gh0W|s6ikJ$F -z8FUk(CiTz92<$-^FTc!~R)=w=kXjfojjF(Nx7VqE%f{#f&_9t))G)GS$<mR`%*;&Z -z&YjzAXJ^M@tfNeH5EBy<BXe_eV;>)%>V$-Z?n8$TaTx0;Lmk?P24rt<&%M07IAe@2 -zU%s42M@Pe0N13_~ZA1f7sZ@N$iWNLDF_Eucy&92$v5qoz9omQnR9#)o>+0(IG}?&y -zvthhs$&&K$@bF%ZI<!%UDSv-|9u^kXt5K&ATNDY5nO==L(SbH^-po@|Q+Zlin$YSp -z)QJv6Z{D1ooZJHlWvCM!C?zGOnYyP35Xw*|I?$dyduo!Bl6nB440WOdWoBlU(3fEk -zAe5m_iWHXdXNxIh$&&StA}cE^1Eo?~ZewGklpMy|+S<U=)3cKDA--tQB0g{4JV~LD -z+FB#G&dA8Xk1W!VTFJV}!NH+CFE4M|g$oyWc6K%|C@A3V?d_G4bko9x3oGe2>^>#< -zMSJ(|U3cZm6@LHz{Yw11L6R{;N!fjh$Xy%;#m2_g5{Rj!FuQi`x{F`>ZQHg<*G+(l -zi;L^ty?giFwQJY%+}vDgyNSAnr>Cc5kCF}s^7i&lp~3sGs;UafJoYBZU~o)tK;JD7 -zcJAESPSLp~X=I?lz`!6Jw-Zd~kt0W%C53@#++03$<_z!X=(vkCRZ<v;0E)?8Y7kkn -zWXbv)*C(HRV#GN&8nQn&apFWy%N`y-e!O<Q&o@IGWDF-yo_z5MQhYM}G0LO4qobqH -z>N3>z_vrzSwr*~2>H~sv=gz$t*x9pZ%kjs0Gd}eIqKprqZcqP?;K9McJS!`UU%Ytn -z`M|IdJ{kU)&?rOQV1YtHLU?3kBwx95r8>ttfByX7!LSiN8U7fIb%Y*uFA8+|^5ww; -zVFQF2e+Z^^L3Ez4%jmf7#l{l;06rCr{vX7iDjd{(cF~}tgb>4n`Gfe{z}|?RV@N=R -zLVx2EiulFYf0W4bS;Mkq$&#g48b3#={7UIuKGo5KPjPVPU)j6z@z(YQpMEoEP(KGW -zNjjDsLQWIdjXY{#AeOd<QytyQE&M~dGJH7?Tfc=b&(7l>amjp+Dx6Pq_2gez*mw;9 -z<Sik{;lqd1%F4>p4jecj1e?(JFSND2(KibNTINN>@z9Jd{8D`bFE0P7c5Bh$nw!mc -zTXr8i$(2i2@LAqLe4Lg2hCX0Mef#aV33$_@qN23hw{NG_)YL4a<SvRPO%rH#P6%b! -zJB*dmV2)pKgG=mc9=mN9Z|ita8=AUthXVoFQKT$`!dt3p>sMW@t>+#q*YH_B!TbwL -zJ7q60uNM{;#%QC`+1a_Qq@=_}3jokxfBn@Qkb-E9?Ey5~GhnYvOd=1@%Hyr~JJd60 -z_5`vZX&v`ST*qx#47U#sUxi=&k~5X<%E*;`re{F=C*RC5R0u>c^R<zA`0(LkYX3T3 -z3w`k5L35lvN+-1>;Wcf8<y#7&{1evP^-0U*OEb4W1PsdDR;2L2O}X5E{Wk8rVhxX3 -zpIL(P{G!rmhnOU8wRjm{6ccZ$5Qt8ET7@?$EiFw349cDcI(_=IFUsjZ0<*MbCr+IB -zvqGpV^$i#O)@|YLD^t0NhmU%E#P8V6gEI5E|Ay_{g~~71TwOKE&e>?TZ*Z$4b#2!E -zq8?c!bw~Kq;{$_P2!t-vjI%_%rsOXT5$kbqSa!aOd#%~Tm0>Y_wvVd(Qr)#v#TDoH -zw<pf<pRd+&&*+tYv%CWD+0me9>$d_XzL#WfRDFHD5Fq5vojWQz-zbd+GX^-K_a(-X -zW}E@W{8^cy@;E^SuFK}mG@k5e+^AAAD&w+ul-Y+xU$+Wg%I#_F#O3Vd_uB7Q_K{(Z -z1(a|Xr-8kgx@FP6efySc%Mdw?Geutl)UCTME!hW;aF2v^?i`!M9irm76D@<*X7Zzz -z7dWZ7zll*mVHdBcsCWVeYX>}lsg198ob?A~NZ!!?-~q3yyT&ipUgLF5Hvv)u;6dc# -zZ;|b2*GE^W-O|zmkSG8@?`1j0@QWNlAPN|?8jn)Qk|j&l0F=J}hyhtiW&$fwE(MG! -zxtYv+aWm@0gh3Se0IU=P#)!<}(^qQwrh{cd0K7)Iu*^u;Km}wD-@exdYoV~zmI;9h -zbPdGGJpgh_PxS!QS~MUb6eNI=fkf;w=?As+yS?;ZjMD#fNdMz1pBExamaKv33$r<| -z7@JuQr{&91a$uTy_!N5=rHQL2Gj;c7SWZ#8C?x~3@m2lVZgCV#$=}O<_~`;$x^XMB -z4UJ@9JGg%!36OJGw718KHLT(0Z5vGKR5#vOfY;v9EA1o!qIquSzH$u{-0I~Wx42}c -zN=o+=9p-CCkJnx4&D|&>CT`w_<1B0pP29Z=U1F11U~-0PveM->QGr|+FEv7R7A9pd -zYgIU#wZLD!^oUPmPRmv?8eboZ3bbZx?j)M`W<F_IY(e5WhIK5xQ!|-cTna<IxIj61 -zliUcxH+@SFqa5|3N63XD;hmP%!!A-pD0%CSNlvk=*}^rOdl==Y7Zs@O{{7MI9UZK_ -z<3SIj{QiRnqs2ZQdKh_lAAVUOOO~u5&{U<f(F~UbN>evaC6-f^&L2n$qzs7&c8{Yk -z$W>{~Ehdq<g~zx{3gnrvmW6HG!y<MRve4`T7PWC}prk+nYqMC?&hOc>T?bi2?miZp -zo)sb~P*isQ6QHH}`&r=H%q5ZnZ7)6=v@~!3lL!@^u9P-HKV7N*X35rF>L^8S-^=J6 -zl5vs(?LS)f{`sr*EW7kLyV7u7m6WyZeMvyRoNGUPy3_nIHbG%Q3s$aCWqw!UiQV5; -z6{bQt>cs+iWxA8cWD8#vb6Oh5e3Cb?Md{frAU%r(W^84?Yc?{c$Q2CrXovPX1+w)E -ze%CR4IrB@~%ofx44hA&#E_@F~<{!Xol&kB}4()Xcv~lO&G5GGmn`6&<mQjy(Xs=VC -z&aSTi?Ck1hUETc~?a*G=sq0JRR|esi6tZMVJx?e>#@PQnp#&LY|MP?*XN>*N6H1aX -z_CHTJ_>58HdBXlPMv><U`_C9fo+s=-V-#VYP=t(ep!0+xWQ>EGCln!L9Navi2pQwx -z<_YDDQPw|VV)qjHRZU_iy(Zf_{(idi0wi{nL%F$5vbL9Yj<Kww@=piKPO=qS^O<Ah -zN@nRFisa66yoJqhNr0R~BgW+(EHS|a26O=wi^|GnN*2RrdHA>^Jr)&al8wXg+1^3w -zlx5DMC0=oxw@xH5*USUOjIPomC|_}BWH;sQGB|wZEL*d)kU2)hv$??$jILcXB`DL> -zUHjCLqKoQ`MFX<+4f-&1&%P-wZSB@obq&mC^*Uxt2Mp$Z!Nx6ZZPwmN^g1{qWTLf5 -zlUH+mg1pRqgPDb2NYKthNB&rQqe%q_E9%17^_g!Ml>QLnfPwBE_?aj``;H#>4$H`5 -z%7{30m8$Sa+4}{hWg!mKeU5CI$)(!*$&Sksn0sX0LY;zqI@5gk#JLV*!c*5<(gk$x -z+YTLNO3Hogg2T;kH{YG;6rITCN3RONk&ItbI*Ul(9H3L6sq<W|=?Xn&?!TB>1}t{3 -zZn$pZND%(<DSk*>@(&$hc}1nZ+DCGbEp-ZH<`=>oV-nR_<s4N6LnO}sa+S5Tw$0N( -z7>oLpg4Db{%snxK&0oEN1yc?!xGGDUZ)beZbUb`WDegn|`0-;`eR*WmtK`?@j8K-W -zfoR8$9ZIsH;srHkhMDr?X|oJp6vl|$3}apKoce6Gwb7UMu6&}MbIaJ77Dg`$#L4VM -zpwe=3E#`zoa(JrC!h3*vUZ7&~20_==JP(wmf5<6Z^zD<nnOiT3em*EoRLY;xg#%7K -zzf`&~D~in0>^wd{Wg~Y>SVvGXe2VizK6aL+aeokA+NfyW*g#khK#iHA4~?_5^_pno -zP(0beZG*)k#=Tds=YDImx)-Eu;xxa+>Bm<cDUYya8~cMnmzd&BpY9qBWC36R`pk&f -zIeD4+sJKmN6sK&F`=qSrOE%{|@}%zaO3UI4Q#1Lh{6d~z`UAgt=hx_g>`}^IcYVMD -zq#qqQUB28qaUJ(ro2|CD+F9H?J)69RFW$I~E|G6PBD{C#V4#F$MgzUu+|}z%_d+-4 -z;Wi8EyBhdq<Zxf|BD#41WsnU38SED!*FvG2;KAMkkFL*e4<ML80t?u<gMha3<buM^ -zL0_G&>6&I(180D;K~KCdTXidB(+<vZcB>=hM?jwOYuX13<E4#`psO^y|G+ifb)gp> -zbMYU}Uu>_tdHdet%slSDK8J^_-SluUFa~{$A2#6c9a~2OyO4<c$12Zrk`i51d*kLk -z6#?aZSA2c25i%W$hm4;1>3kbtgky@_OlFcL`U+XHWXX~xOO~v@HEr6oH>XdZ?u6xl -z+UQ#JIF(8CjF(1o(To{0Mn7GTGSs0B+KQ1>jim>sHM+XGHrm?SUYa>`riHc+>nKAV -z-F~hSZN<v;e2*VL-Z+2${6>0YMk76YGakk|%BT)7PGYB@7IY)EMtbgMqr1C1tX@YM -z>a^`7fug4<!P3GAp{`xK)(8t>q=p&|D`d%%B}<kpS<ff+BxT>)AS%#=2@^h}XP0%* -z2>`q|o0^(BD@4|CdWhq}uC6XlH<^86yr$=y{Y>=+3bFO^#~)9-ckf;YMGB89<XF;u -zfO%+WXt+Wm4X63)gKceXoNm9%TU%T4RFWDhH&jR^M2T+Y+|k_JtOg1Q2#8iltl{)@ -z$%BYcWo4x%IudK{+_{zy9y}04M|v3q1qJ1(qoYUqKp{((ELpN-$$BwqAM~J4Ksdrc -za$iFaEmrCikUGJqgujMTS*6|pA&sT{n%}y03t(PUW*{XHl6*u7OSqNR{Uiax!6A;v -zkXPe4Ehi_Z#L&=?;j~ssfF3=1#Ocu}&Gbn5{TdKs@^DGU5Ix_gnV$N;lU{luB5Dw+ -zBmgl|=!F0xOO`BIvi?RyKeEN$-QC6X%U`T7Ku_kX^#X_@gM0|q4<ICHm^_E|0!Wy` -zN-<s-Wr-Ls=psY~Fi7%|upxWoH*enL*RNlPQKs90e(KbzjkHGzfe;zIF^)R4OMu}B -zg#S#^IS?WQC>Y}h(E$Kp@V^g$YE6$t)h&=FiDyCs2;GFpJXHsafAENZzF@o{N(y}t -zx(YxTGkO7py$s!juG0%3+L3DT&$|m3F4QRWM9L?YB}<kpS+WK%n%Vy^%Ck36R{0yr -zVJJ%+M)^^NCh?Edhg2j4c{V-D`{u}zBPU6HIP?bs>ZIjk2M32(DjFu%f#EQUf+vlY -zVS=uDl`_Y(=&J48x8u;~x1zw%5yvnB*+xefIQ+>a05ue4iws>=TU*;Cc2~VjheG>s -zh@*v~ZZbkw5m2|awRNPrt3=k+UAuN26F_0yaQeqf5!Jn;kVunqb8`;^in@?jS64T_ -z@x~kD6cTHEc6N3V4f1X?GqWY=PO{|se9Dw5iM0Gzh297-vSi7UB}<n0qVxH=-oS)} -zgm73dptK-ZYArd87D)0)@jj%GrP;Hd>N4%RWL>5O5L(hM15_U{(n9IiV3zkRS+Zow -z(uGV+OpNFzHpVd4B?Fl?YnCxha27i{I&!+3j@np98R|rZv9PdE0zjow@u;XM9vd4A -zV;yB`IJ6N3X7=pa26Pvl_Q=Rco|KftQ&UrUT3Q;6b#)o)&<1UF4&>qC5gi^L&Xbdq -z0nw{bhc;-db0F%L8amsY(@l?fSy@@HMjhIqt<Hhy(>KS&#BdVp%V>kPItNNgNomI5 -zr5k23J3G5xjXJbJTb%>Z4Yg|U>5*>w`ug^2)S(U9igEH%bYfy6Pe@4M@$vD!8g*!c -zwqoSH26P*Q_Wt%Vv_V_Z?rL%M>Q$bfpWowq2xX{48?lcNjLF3}ZrtE?b#-cE9c8GK -z^3cTy02<2|pU9H+_oLZMmP{wRJg27*eGVNG;=2FD34W)gg%4C{i*2y&&>vj{2D;s% -zH`sgZ7;kEB=3S2-^=Y(0TWo`EhaBi@KR=I7dZPw9XS$%IM7`|j>gv_PHrNK+4mr?Q -zo}LRjy1RKRoykz!)Wo-c|2>v?EpX2|Y=dow9B6{OyJu@>C;zp*UF|Ck4LrNB5X(Nx -zuno2y`qLMjoV=Uqf`A(|Cg57?j?&6XzG?SvexbG&#yZMS_oN-R!L~yV^cOoj-`gD> -zyq->X|Ao5a#HCB>Wo30W&!8L##=5W$ZLtlu9de-mwX*WRL8s(gY;5GmE?iJAt8d*> -z`}F0@@RQfVHrNK+4mr^On3)CE&?hcAdzPQ8ujiL20(}{6&=%WZ+aU+~kMZLd7o9o7 -zf1!&3>RVd}WVFRL*mlT)M!ff)>py?^Vbt>&+bVRRSIHyE|29aERBtOwmMmGiJCq(p -zo=o;7o0CUN36e`^4_~JXZ=2{8)LU5MHOfT=!<*3?SJBzQzh1t4xr(Olw$r3}B9?R; -z#Iq>ZfSHQ{^Cm^&5}mGm7XVabL;fRqlxAs8w?a&(%LAJbF~IBkZ1bgnp_6iV13()w -zbd#Xjdo(S)o=$6Sp|;sN1)}q(Yw_u6b*#4R=+UE7(M?Y^9gXg!^Q`Y6syYKgbm)Hg -zWx}$;!a`F-<LS0^68ILB(>1W4>tc`kncRRkz^BGKIZOyduN{Tk(X4(F%2BTvV*Q5x -z<rImo!W+Q!aEHTGK2G!Bq2E(9zN0H$ZW7dY+JRhERh5IbSy@>V6gtpIEtCdkvY_rY -zz>OI*CW0VNlASPasC(<^f|FWotI&}~{(n1XY=R*SMB#LnPGFTOB$Z3p*@+AMwF`;p -z0xqBnSOu$q-M@nG6K(8G<%37yntSA4?jVpj=UT*&5I%QOEHShmb`SVXU;cLHWuypE -z!bw~h8xOzbl<jVs=V^?9L}eS*0{&O?Tg9GLB6q~d(6hC+F%eNPF7T80enmtGVM7RU -rZg3E8A|t!ZU5P)jM#vfe@Iep`XQi%{iV(%%00000NkvXXu0mjfk2;Ei - -diff --git a/plugins/tasklist/skins/larry/tasklist.css b/plugins/tasklist/skins/larry/tasklist.css -index 29777e2b..4b47f63a 100644 ---- a/plugins/tasklist/skins/larry/tasklist.css -+++ b/plugins/tasklist/skins/larry/tasklist.css -@@ -159,16 +159,6 @@ ul.toolbarmenu li span.icon.taskadd, - #taskselector li.selected a { - color: #fff; - background: #005d76; -- background: -moz-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#005d76), color-stop(100%,#004558)); -- background: -o-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -ms-linear-gradient(top, #005d76 0%, #004558 100%); -- background: linear-gradient(top, #005d76 0%, #004558 100%); -- box-shadow: inset 0 1px 1px 0 #003645; -- -o-box-shadow: inset 0 1px 1px 0 #003645; -- -webkit-box-shadow: inset 0 1px 1px 0 #003645; -- -moz-box-shadow: inset 0 1px 1px 0 #003645; -- border-color: #003645; - border-radius: 10px; - text-shadow: none; - } -@@ -181,12 +171,6 @@ ul.toolbarmenu li span.icon.taskadd, - min-width: 1.8em; - padding: 2px 4px; - background: #004558; -- background: -moz-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#005d76), color-stop(100%,#004558)); -- background: -o-linear-gradient(top, #005d76 0%, #004558 100%); -- background: -ms-linear-gradient(top, #005d76 0%, #004558 100%); -- background: linear-gradient(top, #005d76 0%, #004558 100%); -- box-shadow: 0 1px 2px 0 rgba(24,24,24,0.6); - color: #fff; - border-radius: 3px; - text-align: center; -@@ -244,19 +228,19 @@ ul.toolbarmenu li span.icon.taskadd, - position: relative; - top: -1px; - margin-left: 5px; -- padding: 0.15em 0.5em; -+ padding: 0.2em 0.5em; - font-size: 80%; - font-weight: bold; - color: #59838e; - background: #c7e3ef; -- box-shadow: inset 0 1px 1px 0 #b0ccd7; -- -o-box-shadow: inset 0 1px 1px 0 #b0ccd7; -- -webkit-box-shadow: inset 0 1px 1px 0 #b0ccd7; -- -moz-box-shadow: inset 0 1px 1px 0 #b0ccd7; -- border-color: #b0ccd7; -+ border: 1px solid #b0ccd7; - border-radius: 8px; - } - -+.tagcloud li.selected .count { -+ border: none; -+} -+ - .tag-draghelper .tag .count, - .tagcloud li.inactive .count { - display: none; -@@ -334,15 +318,9 @@ ul.toolbarmenu li span.icon.taskadd, - #tasklistsbox .treelist div:hover span.actions { - top: 1px; - right: 1px; -- border: 1px solid #c6c6c6; -+ border: 1px solid #ababab; - border-radius: 4px; -- background: #f7f7f7; -- background: -moz-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f9f9f9), color-stop(100%,#e6e6e6)); -- background: -o-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- background: -ms-linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- background: linear-gradient(top, #f9f9f9 0%, #e6e6e6 100%); -- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0); -+ background: #f1f1f1; - } - - #tasklistsbox .treelist div a.remove, -@@ -499,7 +477,7 @@ ul.toolbarmenu li span.icon.taskadd, - - #quickaddbox .button { - margin-left: 5px; -- padding: 3px 10px; -+ padding: 4px 10px; - font-weight: bold; - } - -@@ -509,7 +487,7 @@ ul.toolbarmenu li span.icon.taskadd, - left: 0; - right: 0; - bottom: 0; -- background: rgba(255, 255, 255, 0.2); -+ background: rgba(255, 255, 255, 0.25); - overflow: visible; - } - -@@ -534,12 +512,7 @@ ul.toolbarmenu li span.icon.taskadd, - - #tasksview .buttonbar { - color: #777; -- background: #eee; -- background: -moz-linear-gradient(top, #eee 0%, #dfdfdf 100%); -- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#eee), color-stop(100%,#dfdfdf)); -- background: -o-linear-gradient(top, #eee 0%, #dfdfdf 100%); -- background: -ms-linear-gradient(top, #eee 0%, #dfdfdf 100%); -- background: linear-gradient(top, #eee 0%, #dfdfdf 100%); -+ background: #eaeaea; - border-bottom: 1px solid #ccc; - position: relative; - line-height: 13px; -@@ -578,7 +551,6 @@ ul.toolbarmenu li span.icon.taskadd, - font-size: 14px; - color: #666; - margin: 1.5em; -- text-shadow: 0px 1px 1px #fff; - text-align:center; - } - -@@ -627,9 +599,9 @@ ul.toolbarmenu li span.icon.taskadd, - border: 1px solid #fff; - border-radius: 5px; - background: #fff; -- -webkit-box-shadow: 0 1px 1px 0 rgba(50, 50, 50, 0.5); -- -moz-box-shadow: 0 1px 1px 0 rgba(50, 50, 50, 0.5); -- box-shadow: 0 1px 1px 0 rgba(50, 50, 50, 0.5); -+ -webkit-box-shadow: 0 1px 1px 0 rgba(50, 50, 50, 0.4); -+ -moz-box-shadow: 0 1px 1px 0 rgba(50, 50, 50, 0.4); -+ box-shadow: 0 1px 1px 0 rgba(50, 50, 50, 0.4); - padding-right: 26em; - white-space: nowrap; - overflow: hidden; --- -2.13.2 -
View file
0008-T2561-Fix-recognizing-event-organizer-on-event-move-.patch
Deleted
@@ -1,59 +0,0 @@ -From 40e0fa9155b5f971b802f57e32abbac18c9e45aa Mon Sep 17 00:00:00 2001 -From: Aleksander Machniak <machniak@kolabsys.com> -Date: Tue, 18 Jul 2017 14:04:18 +0000 -Subject: [PATCH 8/8] T2561: Fix recognizing event organizer on event - move/delete - ---- - plugins/calendar/calendar_ui.js | 12 +++++++----- - 1 file changed, 7 insertions(+), 5 deletions(-) - -diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js -index 7da1f594..7aaf98b6 100644 ---- a/plugins/calendar/calendar_ui.js -+++ b/plugins/calendar/calendar_ui.js -@@ -2511,13 +2511,15 @@ function rcube_calendar_ui(settings) - - if (!data) data = event; - var decline = false, notify = false, html = '', cal = me.calendars[event.calendar], -- _has_attendees = me.has_attendees(event), _is_organizer = me.is_organizer(event); -+ _has_attendees = me.has_attendees(event), -+ _is_attendee = _has_attendees && me.is_attendee(event), -+ _is_organizer = me.is_organizer(event); - - // event has attendees, ask whether to notify them - if (_has_attendees) { - var checked = (settings.itip_notify & 1 ? ' checked="checked"' : ''); - -- if (action == 'remove' && cal.group != 'shared' && !_is_organizer && me.is_attendee(event)) { -+ if (action == 'remove' && cal.group != 'shared' && !_is_organizer && _is_attendee) { - decline = true; - checked = event.status != 'CANCELLED' ? checked : ''; - html += '<div class="message">' + -@@ -2525,12 +2527,12 @@ function rcube_calendar_ui(settings) - rcmail.gettext('itipdeclineevent', 'calendar') + - '</label></div>'; - } -- else { -+ else if (_is_organizer) { - notify = true; - if (settings.itip_notify & 2) { - html += '<div class="message">' + - '<label><input class="confirm-attendees-donotify" type="checkbox"' + checked + ' value="1" name="notify" /> ' + -- rcmail.gettext((action == 'remove' ? 'sendcancellation' : 'sendnotifications'), 'calendar') + -+ rcmail.gettext((action == 'remove' ? 'sendcancellation' : 'sendnotifications'), 'calendar') + - '</label></div>'; - } - else { -@@ -2545,7 +2547,7 @@ function rcube_calendar_ui(settings) - - // disable the 'future' savemode if I'm an attendee - // reason: no calendaring system supports the thisandfuture range parameter in iTip REPLY -- if (action == 'remove' && _has_attendees && !_is_organizer && me.is_attendee(event)) { -+ if (action == 'remove' && !_is_organizer && _is_attendee) { - future_disabled = ' disabled'; - } - --- -2.13.2 -
View file
debian.series
Changed
@@ -1,9 +1,1 @@ roundcubemail-plugins-kolab-3.3-kolab-files-manticore-api.patch -p1 -0001-Move-more-common-methods-used-by-tasklist-and-calend.patch -p1 -0002-T2504-Fix-DTSTAMP-in-iTip-replies.patch -p1 -0003-Add-missing-status-tentative-label.patch -p1 -0004-T2531-Support-SCHEDULE-AGENT-in-iTip.patch -p1 -0005-Don-t-ignore-global-userlogins-sendmail-logging-in-p.patch -p1 -0006-Add-missing-type-link-for-template-buttons-for-compa.patch -p1 -0007-Update-calendar-and-tasklist-styles-sprites-to-new-L.patch -p1 -0008-T2561-Fix-recognizing-event-organizer-on-event-move-.patch -p1
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.