diff --git a/plugins/calendar/calendar_ui.js b/plugins/calendar/calendar_ui.js
index 170b75e8..58a2c4ee 100644
--- a/plugins/calendar/calendar_ui.js
+++ b/plugins/calendar/calendar_ui.js
@@ -49,7 +49,6 @@ function rcube_calendar_ui(settings)
var attendees_list;
var freebusy_ui = { workinhoursonly:false, needsupdate:false };
var freebusy_data = {};
- var event_resizing = false;
var current_view = null;
var exec_deferred = bw.ie6 ? 5 : 1;
var sensitivitylabels = { 0:rcmail.gettext('public','calendar'), 1:rcmail.gettext('private','calendar'), 2:rcmail.gettext('confidential','calendar') };
@@ -1686,37 +1685,7 @@ function rcube_calendar_ui(settings)
var prefix = event.sensitivity != 0 ? String(sensitivitylabels[event.sensitivity]).toUpperCase()+': ' : '';
element.attr('title', prefix + event.title);
}
- if (view.name == 'month') {
- if (event_resizing)
- return true;
- else if (view._suppressed[event.id])
- return false;
-
- // limit the number of events displayed
- var sday = event.start.getMonth()*100 + event.start.getDate();
- var eday = event.end ? event.end.getMonth()*100 + event.end.getDate() : sday;
-
- // increase counter for every day
- for (var d = sday; d <= eday; d++) {
- if (!view._eventcount[d]) view._eventcount[d] = 1;
- else view._eventcount[d]++;
- }
-
- if (view._eventcount[sday] >= view._maxevents) {
- view._suppressed[event.id] = true;
-
- // register this event to be the last of this day segment
- if (!view._morelink[sday]) {
- view._morelink[sday] = 1;
- view._morelink['e'+event.id] = sday;
- }
- else {
- view._morelink[sday]++;
- return false; // suppress event
- }
- }
- }
- else {
+ if (view.name != 'month') {
if (event.location) {
element.find('div.fc-event-title').after('
@ ' + Q(event.location) + '
');
}
@@ -2314,24 +2283,10 @@ function rcube_calendar_ui(settings)
},
// event rendering
eventRender: fc_event_render,
- eventAfterRender: function(event, element, view) {
- // replace event element with more... link
- var sday, overflow, link;
- if (view.name == 'month' && (sday = view._morelink['e'+event.id]) && (overflow = view._morelink[sday]) > 1) {
- link = $('')
- .addClass('fc-event-more')
- .html(rcmail.gettext('andnmore', 'calendar').replace('$nr', overflow))
- .css({ position:'absolute', left:element.css('left'), top:element.css('top'), width:element.css('width') })
- .data('date', new Date(event.start.getTime()))
- .click(function(e){ me.fisheye_view($(this).data('date')); });
- element.replaceWith(link);
- }
- },
- eventResizeStart: function(event, jsEvent, ui, view) {
- event_resizing = event.id;
- },
- eventResizeStop: function(event, jsEvent, ui, view) {
- event_resizing = false;
+ // render element indicating more (invisible) events
+ overflowRender: function(data, element) {
+ element.html(rcmail.gettext('andnmore', 'calendar').replace('$nr', data.count))
+ .click(function(e){ me.fisheye_view(data.date); });
},
// callback for date range selection
select: function(start, end, allDay, e, view) {
@@ -2427,10 +2382,8 @@ function rcube_calendar_ui(settings)
}
},
viewRender: function(view) {
- view._maxevents = Math.floor((view.element.parent().height()-18) / 108) - 1;
- view._eventcount = [];
- view._suppressed = [];
- view._morelink = [];
+ if (view.name == 'month')
+ fc.fullCalendar('option', 'maxHeight', Math.floor((view.element.parent().height()-18) / 6) - 35);
}
});
diff --git a/plugins/calendar/lib/js/fullcalendar.js b/plugins/calendar/lib/js/fullcalendar.js
index 4e618247..b04c86ef 100644
--- a/plugins/calendar/lib/js/fullcalendar.js
+++ b/plugins/calendar/lib/js/fullcalendar.js
@@ -663,6 +663,9 @@ function Calendar(element, options, eventSources) {
options[name] = value;
currentView.start = null; // force re-render
}
+ else if (name == 'maxHeight') {
+ options[name] = value;
+ }
}
@@ -4614,6 +4617,9 @@ function DayEventRenderer() {
var seg;
var top;
var k;
+ var overflows;
+ var overflowLinks;
+ var maxHeight = opt('maxHeight');
segmentContainer[0].innerHTML = daySegHTML(segs); // faster than .html()
daySegElementResolve(segs, segmentContainer.children());
daySegElementReport(segs);
@@ -4625,26 +4631,69 @@ function DayEventRenderer() {
// set row heights, calculate event tops (in relation to row top)
for (rowI=0; rowI
maxHeight) {
+ seg.overflow = true;
+ }
+ else {
+ seg.top = top;
+ top += seg.outerHeight;
+ }
for (k=seg.startCol; k 1) {
+ element = $('').addClass('fc-more-link').html('+'+link.count).appendTo(container);
+ element[0].style.position = 'absolute';
+ element[0].style.left = link.seg.left + 'px';
+ element[0].style.top = (link.top + rowDiv[0].offsetTop) + 'px';
+ triggerRes = trigger('overflowRender', link, { count:link.count, date:link.date }, element);
+ if (triggerRes === false)
+ element.remove();
+ }
+ else {
+ link.seg.top = link.top;
+ link.seg.overflow = false;
+ }
+ }
+ }
+ }
+
+
function renderTempDaySegs(segs, adjustRow, adjustTop) {
var tempContainer = $("");
var elements;
@@ -4930,11 +4979,13 @@ function DayEventRenderer() {
for (i=0; i