Improve month view rendering with more... links for fish-eye view
This commit is contained in:
parent
383838538d
commit
4f76d3d35e
1 changed files with 25 additions and 22 deletions
|
@ -1572,27 +1572,29 @@ function rcube_calendar_ui(settings)
|
|||
}
|
||||
if (view.name == 'month') {
|
||||
// limit the number of events displayed
|
||||
var sday = event.start.getMonth()*120 + event.start.getDate();
|
||||
var eday = event.end ? event.end.getMonth()*120 + event.end.getDate() : sday;
|
||||
if (!view._eventcount[sday]) view._eventcount[sday] = 1;
|
||||
else view._eventcount[sday]++;
|
||||
if (!view._eventcount[eday]) view._eventcount[eday] = 1;
|
||||
else if (eday != sday) view._eventcount[eday]++;
|
||||
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] = view._morelink[event.id] = $('<div>')
|
||||
.addClass('fc-event-more')
|
||||
.css({ position:'absolute', left:element.css('left'), width:element.css('width') })
|
||||
.appendTo(element.parent())
|
||||
.data('overflow', 1);
|
||||
view._morelink[sday] = 1;
|
||||
view._morelink['e'+event.id] = sday;
|
||||
}
|
||||
else {
|
||||
view._morelink[sday].data('overflow', view._eventcount[sday] - view._maxevents + 1);
|
||||
return false;
|
||||
view._morelink[sday]++;
|
||||
return false; // suppress event
|
||||
}
|
||||
}
|
||||
else if (view._eventcount[eday] >= view._maxevents || view._morelink[event.id]) {
|
||||
else if (view._suppressed[event.id]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -2076,17 +2078,17 @@ function rcube_calendar_ui(settings)
|
|||
// event rendering
|
||||
eventRender: fc_event_render,
|
||||
eventAfterRender: function(event, element, view) {
|
||||
// adjust position of the more... element
|
||||
var link;
|
||||
if (view.name == 'month' && (link = view._morelink[event.id]) && !link.data('date') && link.data('overflow') > 1) {
|
||||
link.html(rcmail.gettext('andnmore', 'calendar').replace('$nr', link.data('overflow')))
|
||||
.css({ left:element.css('left'), top:element.css('top') })
|
||||
// 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 = $('<div>')
|
||||
.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.remove();
|
||||
element.replaceWith(link);
|
||||
}
|
||||
else if (link)
|
||||
link.remove();
|
||||
},
|
||||
// callback for date range selection
|
||||
select: function(start, end, allDay, e, view) {
|
||||
|
@ -2173,6 +2175,7 @@ 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 = [];
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Add table
Reference in a new issue