From 83869428c3a54c4e21fdec2b585612b80aded96e Mon Sep 17 00:00:00 2001 From: Thomas Bruederli Date: Tue, 14 Jun 2011 20:07:17 -0600 Subject: [PATCH] Fullcalendar: define different modes for list subdivision --- plugins/calendar/calendar.js | 6 +- plugins/calendar/lib/js/fullcalendar.js | 112 +++++++++++------- .../calendar/skins/default/fullcalendar.css | 8 +- 3 files changed, 74 insertions(+), 52 deletions(-) diff --git a/plugins/calendar/calendar.js b/plugins/calendar/calendar.js index 297c76d9..351ac6a3 100644 --- a/plugins/calendar/calendar.js +++ b/plugins/calendar/calendar.js @@ -730,7 +730,7 @@ function rcube_calendar(settings) editable: false }; - fc.fullCalendar('option', 'smartSections', false); + fc.fullCalendar('option', 'listSections', 'day'); fc.fullCalendar('addEventSource', this.search_source); fc.fullCalendar('changeView', 'table'); } @@ -750,7 +750,7 @@ function rcube_calendar(settings) if (this.search_request) { // restore original event sources and view mode from fullcalendar var fc = $(fcselector); - fc.fullCalendar('option', 'smartSections', true); + fc.fullCalendar('option', 'listSections', 'smart'); fc.fullCalendar('removeEventSource', this.search_source); for (var sid in this.calendars) { if (this.calendars[sid] && this.calendars[sid].active) @@ -870,7 +870,7 @@ function rcube_calendar(settings) list: settings['date_long'], table: settings['date_long'] }, - smartSections: true, + listSections: 'smart', defaultView: settings['default_view'], allDayText: rcmail.gettext('all-day', 'calendar'), buttonText: { diff --git a/plugins/calendar/lib/js/fullcalendar.js b/plugins/calendar/lib/js/fullcalendar.js index ab14d202..2dcf33d1 100644 --- a/plugins/calendar/lib/js/fullcalendar.js +++ b/plugins/calendar/lib/js/fullcalendar.js @@ -91,11 +91,12 @@ var defaults = { nextWeek: 'Next week', thisMonth: 'This month', nextMonth: 'Next month', - future: 'Future events' + future: 'Future events', + week: 'W' }, // list options - smartSections: false, + listSections: 'month', // false|'day'|'week'|'month'|'smart' // jquery-ui theming theme: false, @@ -1533,8 +1534,8 @@ function formatDates(date1, date2, format, options) { for (i2=i+1; i2' + htmlEscape(seg.title) + '').appendTo(getListContainer()); + if (seg.title) + segHeader = $('
' + htmlEscape(seg.title) + '
').appendTo(getListContainer()); segContainer = $('
').addClass('fc-list-section ' + contentClass).appendTo(getListContainer()); s = ''; @@ -5408,28 +5428,31 @@ function ListEventRenderer() { function renderEventTime(event, seg) { var timeFormat = opt('timeFormat'); var dateFormat = opt('columnFormat'); + var segmode = opt('listSections'); var duration = event.end.getTime() - event.start.getTime(); var datestr = '', timestr = ''; - if (!opt('smartSections')) { - // no date display if grouped by day - } else if (event.start < seg.start) { - datestr = opt('listTexts', 'until') + ' ' + formatDate(event.end, (event.allDay || event.end.getDate() != seg.start.getDate()) ? dateFormat : timeFormat); - } else if (duration > DAY_MS) { - datestr = formatDates(event.start, event.end, dateFormat + '[ - ' + dateFormat + ']'); - } else if (seg.daydiff == 0) { - datestr = opt('listTexts', 'today'); - } else if (seg.daydiff == 1) { - datestr = opt('listTexts', 'tomorrow'); - } else if (seg.weekdiff == 0 || seg.weekdiff == 1) { - datestr = formatDate(event.start, 'dddd'); - } else if (seg.daydiff > 1 || seg.daydiff < 0) { - datestr = formatDate(event.start, dateFormat); + if (segmode == 'smart') { + if (event.start < seg.start) { + datestr = opt('listTexts', 'until') + ' ' + formatDate(event.end, (event.allDay || event.end.getDate() != seg.start.getDate()) ? dateFormat : timeFormat); + } else if (duration > DAY_MS) { + datestr = formatDates(event.start, event.end, dateFormat + '[ - ' + dateFormat + ']'); + } else if (seg.daydiff == 0) { + datestr = opt('listTexts', 'today'); + } else if (seg.daydiff == 1) { + datestr = opt('listTexts', 'tomorrow'); + } else if (seg.weekdiff == 0 || seg.weekdiff == 1) { + datestr = formatDate(event.start, 'dddd'); + } else if (seg.daydiff > 1 || seg.daydiff < 0) { + datestr = formatDate(event.start, dateFormat); + } + } else if (segmode != 'day') { + datestr = formatDates(event.start, event.end, dateFormat + (duration > DAY_MS ? '[ - ' + dateFormat + ']' : '')); } if (!datestr && event.allDay) { timestr = opt('allDayText'); - } else if (duration < DAY_MS && !event.allDay) { + } else if ((duration < DAY_MS || !datestr) && !event.allDay) { timestr = formatDates(event.start, event.end, timeFormat); } @@ -5581,7 +5604,7 @@ function TableEventRenderer() { events.sort(sortCmp); reportEvents(events); renderSegs(compileSegs(events), modifiedEventId); - getListContainer().removeClass('fc-list-smart fc-list-normal').addClass(opt('smartSections') ? 'fc-list-smart' : 'fc-list-normal'); + getListContainer().removeClass('fc-list-smart fc-list-day fc-list-month fc-list-week').addClass('fc-list-' + opt('listSections')); } function renderSegs(segs, modifiedEventId) { @@ -5594,7 +5617,8 @@ function TableEventRenderer() { for (j=0; j < segs.length; j++) { seg = segs[j]; - segHeader = $('' + htmlEscape(seg.title) + '').appendTo(table); + if (seg.title) + segHeader = $('' + htmlEscape(seg.title) + '').appendTo(table); segContainer = $('').addClass('fc-list-section ' + contentClass).appendTo(table); s = ''; @@ -5618,12 +5642,14 @@ function TableEventRenderer() { "
" + "" + "
" + - "" + + "" + htmlEscape(times[0]) + "" + - "" + - htmlEscape(times[1]) + - "" + + (times[1] ? + "" + + htmlEscape(times[1]) + + "" + : "") + "" + htmlEscape(event.title) + "" + diff --git a/plugins/calendar/skins/default/fullcalendar.css b/plugins/calendar/skins/default/fullcalendar.css index 8103fc8f..42df934c 100644 --- a/plugins/calendar/skins/default/fullcalendar.css +++ b/plugins/calendar/skins/default/fullcalendar.css @@ -629,11 +629,7 @@ table.fc-border-separate { .fc-view-table td.fc-list-header { border-width: 0; border-bottom-width: 1px; - padding: 3px; -} - -.fc-view-table .fc-list-smart td.fc-list-header { - text-align: center; + padding: 3px 5px; } .fc-view-table .fc-first td.fc-list-header { @@ -690,7 +686,7 @@ table.fc-border-separate { width: 7em; } -.fc-view-table .fc-list-normal col.fc-event-date { +.fc-view-table .fc-list-day col.fc-event-date { width: 1px; }