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') {
|
if (view.name == 'month') {
|
||||||
// limit the number of events displayed
|
// limit the number of events displayed
|
||||||
var sday = event.start.getMonth()*120 + event.start.getDate();
|
var sday = event.start.getMonth()*100 + event.start.getDate();
|
||||||
var eday = event.end ? event.end.getMonth()*120 + event.end.getDate() : sday;
|
var eday = event.end ? event.end.getMonth()*100 + event.end.getDate() : sday;
|
||||||
if (!view._eventcount[sday]) view._eventcount[sday] = 1;
|
|
||||||
else view._eventcount[sday]++;
|
// increase counter for every day
|
||||||
if (!view._eventcount[eday]) view._eventcount[eday] = 1;
|
for (var d = sday; d <= eday; d++) {
|
||||||
else if (eday != sday) view._eventcount[eday]++;
|
if (!view._eventcount[d]) view._eventcount[d] = 1;
|
||||||
|
else view._eventcount[d]++;
|
||||||
|
}
|
||||||
|
|
||||||
if (view._eventcount[sday] >= view._maxevents) {
|
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]) {
|
if (!view._morelink[sday]) {
|
||||||
view._morelink[sday] = view._morelink[event.id] = $('<div>')
|
view._morelink[sday] = 1;
|
||||||
.addClass('fc-event-more')
|
view._morelink['e'+event.id] = sday;
|
||||||
.css({ position:'absolute', left:element.css('left'), width:element.css('width') })
|
|
||||||
.appendTo(element.parent())
|
|
||||||
.data('overflow', 1);
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
view._morelink[sday].data('overflow', view._eventcount[sday] - view._maxevents + 1);
|
view._morelink[sday]++;
|
||||||
return false;
|
return false; // suppress event
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (view._eventcount[eday] >= view._maxevents || view._morelink[event.id]) {
|
else if (view._suppressed[event.id]) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2076,17 +2078,17 @@ function rcube_calendar_ui(settings)
|
||||||
// event rendering
|
// event rendering
|
||||||
eventRender: fc_event_render,
|
eventRender: fc_event_render,
|
||||||
eventAfterRender: function(event, element, view) {
|
eventAfterRender: function(event, element, view) {
|
||||||
// adjust position of the more... element
|
// replace event element with more... link
|
||||||
var link;
|
var sday, overflow, link;
|
||||||
if (view.name == 'month' && (link = view._morelink[event.id]) && !link.data('date') && link.data('overflow') > 1) {
|
if (view.name == 'month' && (sday = view._morelink['e'+event.id]) && (overflow = view._morelink[sday]) > 1) {
|
||||||
link.html(rcmail.gettext('andnmore', 'calendar').replace('$nr', link.data('overflow')))
|
link = $('<div>')
|
||||||
.css({ left:element.css('left'), top:element.css('top') })
|
.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()))
|
.data('date', new Date(event.start.getTime()))
|
||||||
.click(function(e){ me.fisheye_view($(this).data('date')); });
|
.click(function(e){ me.fisheye_view($(this).data('date')); });
|
||||||
element.remove();
|
element.replaceWith(link);
|
||||||
}
|
}
|
||||||
else if (link)
|
|
||||||
link.remove();
|
|
||||||
},
|
},
|
||||||
// callback for date range selection
|
// callback for date range selection
|
||||||
select: function(start, end, allDay, e, view) {
|
select: function(start, end, allDay, e, view) {
|
||||||
|
@ -2173,6 +2175,7 @@ function rcube_calendar_ui(settings)
|
||||||
viewRender: function(view) {
|
viewRender: function(view) {
|
||||||
view._maxevents = Math.floor((view.element.parent().height()-18) / 108) - 1;
|
view._maxevents = Math.floor((view.element.parent().height()-18) / 108) - 1;
|
||||||
view._eventcount = [];
|
view._eventcount = [];
|
||||||
|
view._suppressed = [];
|
||||||
view._morelink = [];
|
view._morelink = [];
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue