Reputation: 311
I really like the fullcalendar and the variety of functionality it provides. I would like to use it to display more/customized information for each event when view is on agendaWeek or agendaMonth. Checking these is not a problem. I can comfortable filter the view form using
eventRender: function(event, element,view) {
if(view.name!="month"){
//my code to come here
}
Here is the problem: I am building a system to track activities of users. For example a day might contain 3 activities the users should perform. maybe activity 1 starts at 9am,activity 2 at 11:30am and lastly activity 3 at 3pm. Therefore the event is in one block spanning from 9am-3pm. I would like to customize this block and show each activity when they start and maybe to indicate how long an activity take, I might have to include different background colors for each.
Note: I would like to create only one event, and style in to show this activities.Just like in a meeting in real life, you have one meeting(event) and several agendas.
Upvotes: 0
Views: 193
Reputation: 5621
Take a look at the following code (fiddle available). This shows you how you can edit the event DOM before and after it is rendered.
<div style="border:solid 2px red;">
<div id='calendar'></div>
</div>
<script>
$(document).ready(function() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultView: 'agendaDay',
editable: true,
events: [
{
id: 1,
title: "Meeting",
start: new Date(y, m, d, 9, 0),
end: new Date(y, m, d, 15, 0),
allDay: false}
],
eventRender: function(event, element, view) {
element.find('.fc-event-content').append('<div class="fc-sub-event">9am - 11:30am</div>');
element.find('.fc-event-content').append('<div class="fc-sub-event">11:30am - 1pm</div>');
element.find('.fc-event-content').append('<div class="fc-sub-event">1pm - 3pm</div>');
},
eventAfterRender: function(event, element, view) {
var eleHgt = element.height()/3.5;
$('.fc-sub-event').height(eleHgt);
}
});
});
</script>
Then, check this code (fiddle). This shows how you can format your event data to generalize this concept.
<div style="border:solid 2px red;">
<div id='calendar'></div>
</div>
<script>
$(document).ready(function() {
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
defaultView: 'agendaDay',
editable: true,
events: [
{
id: 1,
title: '<div class="fc-event-title">Meeting</div><div class="fc-sub-event">9am - 11:30am</div><div class="fc-sub-event">11:30am - 1pm</div><div class="fc-sub-event">1pm - 3pm</div>',
start: new Date(y, m, d, 9, 0),
end: new Date(y, m, d, 15, 0),
allDay: false}
],
eventRender: function(event, element, view) {
element.find('.fc-event-content').html(element.find('.fc-event-content').text());
},
eventAfterRender: function(event, element, view) {
var eleHgt = element.height()/3.5;
$('.fc-sub-event').height(eleHgt);
}
});
});
</script>
Upvotes: 1