felix cheruiyot
felix cheruiyot

Reputation: 311

FullCalendar to display detailed information

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

Answers (1)

ganeshk
ganeshk

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

Related Questions