Event Calendar

Basic usage

The following example will create an event calendar with the default options.

Example
$('#eventcalendar').mobiscroll().eventcalendar();

For many more examples - simple and complex use-cases - check out the event calendar demos for jquery.

Data binding

The event calendar accepts an array of event objects through the data option of the component. The event array can be either a local static array, or populated on demand with remote requests.

Local data

To bind local data to the event calendar, you can simply assign a JavaScript array of objects to the data option of the component.

Example
$('#eventcalendar').mobiscroll().eventcalendar({
  data: [{
    start: new Date(2020, 2, 18, 8, 0),
    end: new Date(2020, 2, 18, 17, 0),
    title: 'My First Event'
  }, {
    start: new Date(2020, 2, 18, 9, 0),
    end: new Date(2020, 2, 20, 13, 0),
    title: 'My Second Event'
  }]
});

Remote data

You can load the data through an external request and use the setEvents method to pass the data to the component.

Example
$('#eventcalendar').mobiscroll().eventcalendar();

var inst = $('#eventcalendar').mobiscroll('getInst');

$.getJSON('https://example.com/events/', function (events) {
  inst.setEvents(events);
});

Load on demand

Use the onPageLoading event to load the data relevant to the currently active view. The event fires every time the date range of the view changes, for example when someone navigates the event calendar. Getting the events in real time as the user interacts with the UI improves load performance and always serves the most recent data.

You can pass the view variables - like month and year - in the URL and handle the filtering inside the API implmentation.

Example
$('#eventcalendar').mobiscroll().eventcalendar({
  data: [],
  onPageLoading: function (event, inst) {
    var year = event.firstDay.getFullYear();
    var month = event.firstDay.getMonth();

    $.getJSON('https://example.com/events?year=' + year + '&month=' + month), function (events) {
      inst.setEvents(events);
    });
  }
});

Recurrence

For the data, colors, labels, marked, invalid and valid options it's possible to specify recurrence rules. The rule can be an object or a string in RRULE format.

Supported properties:

In string format the specified properties are separated by the ';' character.

Examples:

As object
recurring: {
  repeat: 'daily',
  count: 5,
  interval: 2
}
As string
recurring: 'FREQ=DAILY;COUNT=5;INTERVAL=2'

Recurring events

You can create recurring events as well, by specifying the recurring property of the event. This can be an object, or a string in RRULE format. Yearly, monthly, weekly and daily repeats are supported.

Example
$('#eventcalendar').mobiscroll().eventcalendar({
  data: [{
    start: new Date(2020, 2, 18, 9, 0),
    end: new Date(2020, 2, 18, 17, 0),
    title: 'Repeat every 2 days 5 times',
    recurring: {
      repeat: 'daily',
      count: 5,
      interval: 2
    }
  }, {
    start: new Date(2020, 2, 17, 20, 0),
    end: new Date(2020, 2, 17, 22, 0),
    title: 'Football training every Monday and Wednesday',
    recurring: 'FREQ=WEEKLY;UNTIL=2020-06-17;BYDAY=MO,WE'
  }]
});

For more details on the supported recurrence rules see the recurrence section.

Recurring exceptions

In case you would like to skip some dates from your rule, that's when the recurring exception come in handy. You can either set specific dates and/or a whole recurring rule as an exception.

Example
$('#eventcalendar').mobiscroll().eventcalendar({
    data: [{
        start: '2021-06-01',
        allDay: true,
        title: 'Repeat every day until the end of 2021, except every month\'s 15th',
        recurring: {
            repeat: 'daily',
            until: '2021-12-31'
        },
        // exact dates as exceptions
        recurringException: ['2021-07-10', '2021-07-11'],
        // recurring rule as an exception
        recurringExceptionRule: {
            repeat: 'monthly',
            day: 15
        }
    }, {
        start: '08:30',
        end: '10:00',
        title: 'Meeting every Monday and Friday, except every second month\'s 3rd',
        recurring: 'FREQ=WEEKLY;UNTIL=2021-06-01;BYDAY=MO,FR',
        recurringExceptionRule: 'FREQ=MONTHLY;BYMONTHDAY=3;INTERVAL=2'
    }]
});
In case you drag & drop an event from the calendar which belongs to a recurring event, the moved event will be handled as a recurring exception.

For more details on the supported recurrence exception rules see the recurrence section.

CRUD actions

You can use the addEvent, removeEvent and updateEvent methods for CRUD operations.

Here's an example for adding, removing, and updating an event.

Example
var guid = 3;
var events = [{
  id: 1,
  start: new Date(2020, 2, 18, 8, 0),
  end: new Date(2020, 2, 18, 17, 0),
  title: 'My First Event'
}, {
  id: 2,
  start: new Date(2020, 2, 18, 9, 0),
  end: new Date(2020, 2, 20, 13, 0),
  title: 'My Second Event'
}];

$('#eventcalendar').mobiscroll().eventcalendar({
  data: events;
});

var inst = $('#eventcalendar').mobiscroll('getInst');

// Add an event
inst.addEvent({
  id: guid++,
  start: new Date(2020, 2, 18, 9, 0),
  end: new Date(2020, 2, 20, 13, 0),
  title: 'My New Event
});

// Remove an event
inst.removeEvent(2);

// Update an event
var eventToUpdate = events[0];
eventToUpdate.title = 'Updated title';

inst.updateEvent(eventToUpdate);

Views

The event calendar support three different views for three different jobs: the calendar view, schedule view and agenda view. These three can be combined and configured in a couple different ways.

Calendar view

Use the event calendar as a traditional month view or combine it with an agenda as a week view. The events can be rendered as labels or in a pop-over that is shown on day click.

Desktop calendar view

Desktop calendar with labels and popover, iOS light theme

Mobile calendar view

Mobile calendar with labels and popover, iOS dark theme

Schedule view

The scheduler displays a time grid with its related events. It can be configured as a daily or weekly schedule. Work hours and work days along with disabled time-spans, breaks can be added. Use it to for advanced scheduling tasks with built-in drag & drop.

Desktop schedule view

Desktop weekly schedule, Windows light theme

Mobile schedule view

Mobile daily schedule, Windows dark theme

Agenda view

The agenda calendar displays a list of events for a given period of time (year, month, week or day). It can be used as a stand-alon component or in combination with the calendar.

Desktop agenda view

Desktop agenda, Material light theme

Mobile agenda view

Mobile agenda, Material dark theme

The three views can be used alone or combined with each-other. e.g. a week calendar combined with a daily agenda, listing the events for the selected day.

For the available configuration options see the view setting.

Daily agenda example

Weekly calendar view with daily agenda

Example
$('#eventcalendar').mobiscroll().eventcalendar({
  data: [/*...*/],
  view: {
    calendar: { type: 'week' },
    agenda: { type: 'day' }
  }
});

Changing the day

To set the initial date of the event calendar, you can use the selectedDate option. If not specified, it will default to today's date.

To change the selected date later, use the navigate method.

Example
$('#eventcalendar').mobiscroll().eventcalendar({
  data: [/*...*/],
  selectedDate: new Date(2020, 2, 18)
});

var inst = $('#eventcalendar').mobiscroll('getInst);

inst.navigate(new Date(2020, 3, 19));

Events drag/resize/create

The calendar and schedule view events can be moved and resized with mouse/touch interactions. The dragToMove and dragToResize options enable the events drag and drop and resize functionality. With the dragTimeStep option the minimum amount of drag/resize step can be specified in minutes.

With the dragToCreate option enabled events can be created by dragging on the empty areas of the calendar and schedule view. On a desktop environment a new event can also be created with the clickToCreate option.

To customize the newly created event use the extendDefaultEvent option.

External drag & drop

There is a possibility to drag & drop any external element into your calendar.
In order to achieve this, first you need to grant permission to your calendar to accept this behavior. You can do that easily by setting the externalDrop option to true.
As a second step, you'll have to create your external draggable element and pass a skeleton event definition through the dragData option which will be added to the event calendar on drop. If omitted, a default event will be created.

You can initialize the draggable containers with two different methods. You either use manual or auto-initialization. In case you're working with dynamic values, it is recommended to use the manual initialization. Here's an example:

Manual initialization
<div id="mydiv">Drag me to the calendar</div>
var now = new Date();
$('#mydiv').mobiscroll().draggable({
    dragData: {
        title: 'My new event',
        // this event will be 3 hours long
        start: new Date(now.getFullYear(), now.getMonth(), 10, 12),
        end: new Date(now.getFullYear(), now.getMonth(), 10, 15),
        color: 'green'
    };
});

For the auto-init you only need to add the mbsc-draggable attribute to your container element and optionally pass a skeleton event definition through the data-drag-data attribute as a JSON string. If omitted, a default event will be created.

Auto-initialization
<div id="mydiv" mbsc-draggable data-drag-data='{"title": "My new event", "start": "2021-03-10T12:00", "end": "2021-03-10T15:00", "color": "green"}'>Drag me to the calendar</div>
Please note that when dragging the external element, we create a clone of it for a better illustration of the movement.

Schedule week & hours customization

The displayed week days can be modified with the startDay and endDay properties of the schedule view option. It supports consecutive date ranges.

The displayed hours can be modified with the startTime and endTime properties of the schedule view option. With these properties both hours and minutes can be specified.

The above properties are only available in the schedule view at the moment.

Example to display a work-week
view: {
  schedule: {
    type: 'week',
    startDay: 1, // Monday
    endDay: 5, // Friday
    startTime: '07:30',
    endTime: '18:30',
  }
}

Schedule resources

Resources grouped by date

Schedule resources grouped by date

Resources grouped by resource

Schedule resources grouped by resource

The scheduler view can display multiple resources inside a single instance. By default the displayed resources will be grouped by the given resources and the grouping can be changed with the groupBy option, which also supports date grouping.

Example to a resource and groupBy settings
  resources: [{
    id: 1,
    name: 'Ryan',
    color: '#f7c4b4'
  }, {
    id: 2,
    name: 'Kate',
    color: '#c6f1c9'
  }, {
    id: 3,
    name: 'John',
    color: '#e8d0ef'
  }],
  groupBy: 'date'

The color property controls the default event color of the resource. If an event doesn't have a specified color it will inherit from the resource. The agenda and calendar view events and labels will also inherit the resource color.

Events, colors, invalids can be tied to a single or multiple resources. This can be done with the resource property of the objects, where the id of the resource should be passed. It can be a single value and the element would be linked to a single resource or in case of an array the element will show up at the specified resources. If no resource property is specified to the color/event/invalid object then the element will show up in every resource group.

Example to color/invalid/event objects with resource property
  invalid: [{ 
    start: '13:00',
    end: '12:00',
    resource: 1, // this invalid will be displayed only in resource group where id is 1
    recurring: { repeat: 'weekly', weekDays: 'MO,TU,WE,TH,FR' },
    title: 'Lunch break'
  }],
  data: [{
    start: new Date(2021, 5, 23),
    end: new Date(2021, 5, 30),
    title: 'Conference',
    allDay: true,
    resource: [2, 3] // this event will be displayed in resource groups where id is 2 and 3
  }],
  colors: [{
    // this color will display at every resource group
    start: new Date(2021, 5, 12, 16),
    end: new Date(2021, 5, 12, 17),
    color: 'green'
  }]

Blocked out dates

You can show blocked out time ranges with the invalid option. By default the events and the blocked out dates will be displayed on the view even if there is collision.

The invalid option supports the following formats: JavaScript Date objects, 8601 strings , or moment object. These formats can be passed directly to the array in this case the whole day will be disabled or as an object where the blocked out ranges can be customized with the following properties: allDay/start/end/title/recurring.
Custom properties can also be passed to the invalid object which will also be passed to the life-cycle events and this can help with the identification/validation of the invalids.

If an event interacts with an invalid range the event will be reverted to it's original position and the onEventUpdateFailed event will be fired. (If the dragToMove or the dragToResize options were used.)

If a newly created event collide with a blocked out date the event won't be created and the onEventCreateFailed event will be fired. (If the dragToCreate option was used)

Example to an invalid array and it's properties
invalid: [
    /* Passing exact dates will block out the entire day */
     new Date(2021, 1, 7), // Date object
    '2021-10-15T12:00', // string
     moment("2020-12-25"), // moment object

    /* Block out date range passed as an object */
    { 
      // multi day range with date string
      start: '2021-10-15T12:00',
      end: '2021-10-18T13:00', 
      title: 'Company 10th anniversary',
      type: 'day-off' // custom property
    },
    { 
     // multi day range with date object
      allDay: true,
      start: new Date(2021, 2, 7, 10, 10),
      end: new Date(2021, 2, 9, 20, 20),
      title: 'Conference for the whole team',
      type: 'conference' // custom property
    },
    { 
      // multi day time range with recurring and time string
      start: '13:00',
      end: '12:00',
      recurring: { repeat: 'weekly', weekDays: 'MO,TU,WE,TH,FR' },
      title: 'Lunch break',
      type: 'lunch' // custom property
    }
];

Customizing the events

You can customize the events by writing custom rendering functions. Depending on what your goal is, you have two options:

Customize the full event

Whenever there is an event (in the agenda, scheduler, labels or popover) your custom rendering function will be used for instead the default render. Mobiscroll will position your component to the right place, but anything else you want to show is up to you... like a title, description, color the background or show any content.

Customize the event content

In most cases you only want to customize the content section of the event. In this case your render function will be used for rendering the content of the event. Mobiscroll will position the event to the right place and will render essential information like the color of the event, the time and if it's an all day event or not. The title, description and any other fields you want to show (like participants, an avatar...) will be coming from your custom function.

Examples

Custom Event
$('#eventcalendar').mobiscroll().eventcalendar({
    data: [/*...*/],
    renderEvent: function (data) {
        return '' +
          '<div class="my-start">' + data.start + '</div>' +
          '<div class="my-end">' + data.end + '</div>' +
          '<div class="my-title">' + data.title + '</div>' +
          '<div class="my-custom-field">' + data.original.description + '</div>' +
          '<div class="my-custom-field">' + data.original.location + '</div>';
    }
});
Custom Event Content
$('#eventcalendar').mobiscroll().eventcalendar({
    data: [/*...*/],
    renderEventContent: function (data) {
        return '' +
          '<div class="my-title">' + data.title + '</div>' +
          '<div class="my-custom-field">' + data.original.description + '</div>' +
          '<div class="my-custom-field">' + data.original.location + '</div>';
    }
});

Taking over the listing

When the agenda view is displayed, you can take full control of the rendering, using the renderAgenda option. The renderer function will receive the event data as parameter, grouped by days.

If you'd like to keep the scroll to day functionality, when clicking a day on the calendar, make sure to add mbsc-timestamp attribute on the element containing the events for a day, with the timestamp of the day as value.

Example
$('#eventcalendar').mobiscroll().eventcalendar({
  data: [/*...*/],
  renderAgenda: function (events) {
    let html = '<div class="custom-event-list">';
    events.forEach(function (day) {
      html += '<ul class="custom-event-group" mbsc-timestamp="' + day.timestamp + '">' +
        '<li class="custom-event-day">' + day.date + '</li>';
      day.events.forEach(function (event) {
        html += '<li class="custom-event">' + event.title + '</li>';
      });
      html += '</ul>';
    });
    html += '</div>';
    return html;
  }
});

Customizing the header

The header of the calendar can be fully customized to one's needs. This can be achieved by passing a function that returns the custom header markup to the renderHeader option.

Fully custom header
$('#eventcalendar').mobiscroll().eventcalendar({
    data: [/*...*/],
    renderHeader: function () {
        return '<div class="my-custom-title">My <strong>Awesome</strong> Title</div>';
    }
});

While fully customizing the header is very usefull, sometimes it's desireable to customize only parts of it. In this case you can take advantage of the default header's building blocks. These components let you put toghether the header you want, while you don't have to worry about the functionality behind them.
For example you can leave out parts from the default header, change the order the default buttons appearance or add custom markup between them.

The built in header components can be initialized with their respective attributes as follows:

The above built in components can be used inside of the custom header. The following example will render the prev and next buttons and then a custom title that is set from a custom variable (myTitle variable).

Custom header with default buttons
var myTitle = 'My Awesome title';
$('#eventcalendar).mobiscroll().eventcalendar({
    renderHeader: function () {
        return `<button mbsc-calendar-prev></button>
                <button mbsc-calendar-next></button>
                <div className="my-custom-title">${myTitle}</div>`;
    }
});

For many more examples - simple and complex use-cases - check out the event calendar demos for jquery.

Typescript Types

When using with typescript, the following types are available for the Eventcalendar:

Type Description
Eventcalendar Type of the Eventcalendar instance
MbscEventcalendarOptions Type of the settings object that is used to initialize the component

Options

Name Type Default value Description
actionableEvents Boolean true Defines if the events on the agenda and inside the calendar popover are actionable or not. If actionable, the event items will have hover and active states, and pointer cursor. Set to false when custom event rendering is used and the event list items contain other actionable elements, e.g. buttons.
calendarSystem Object undefined Specify the calendar system to be used. Supported calendar systems:
  • Gregorian - This is the default calendar system, no setting needs to be passed.
  • Jalali - Default system of the Persian calendar. The Farsi language needs to be included to the package.
    $('#mycalendar').mobiscroll().eventcalendar({
      calendarSystem: mobiscroll.jalaliCalendar
    });
    
  • Hijri - Arabic language needs to be included to the package.
    $('#mycalendar').mobiscroll().eventcalendar({
      calendarSystem: mobiscroll.hijriCalendar
    });
    
clickToCreate Boolean, String undefined Enable new event creation on click. If true or 'double' a new event will be created only with a double click and with the 'single' value the event will be created instantly with a single click. This option will only work on desktop environment where mouse events are fired.
In touch environment a long tap should be used to create a new event and it is controlled with the dragToCreate option.

Using the extendDefaultEvent option extra properties can be set for the created event.

colors Array undefined Change the color of certain dates on the calendar. Must be an array of objects with the following properties:
  • allDay Boolean - Specifies whether the date you want to color is all day or not.
  • date Date, String, Object - Date of the calendar day which should be colored.
  • start Date, String, Object - Start date/time of the calendar days/cells which should be colored.
  • end Date, String, Object - End date/time of the calendar days/cells which should be colored.
  • background: String - Background color of the cell, can be any valid CSS color ('red', '#ff0000', 'rgb(255,0,0)', etc.).
  • highlight: String - Highlight color of the day, can be any valid CSS color ('red', '#ff0000', 'rgb(255,0,0)', etc.).
  • recurring String, Object - Recurrence rule for coloring recurring days.
  • cellCssClass: String - CSS class for the day cell.
  • resource: String, Number, Array of String | Number - specify resource ids for the color. The color will display only in the specified resource group. If there is no resource id defined the color will be displayed at every resource group.
The colored range will be considered all-day if:
  • allDay is explicitly set.
  • start/end is not specified, only the date.
The dates can be specified as Javascript Date objects, ISO 8601 strings, or moment objects.
The colors can be combined with the labels or marked options.
Example
colors: [
    { date: new Date(2020,2,23), background: 'pink' },
    { date: new Date(2020,2,24), background: 'green' },
    { background: '#ff0000', recurring: { repeat: 'weekly', weekDays: 'SU' },
    { background: 'yellow', recurring: { repeat: 'weekly', weekDays: 'SA' } }
]
context String, HTMLElement 'body' The DOM element in which the popups (event popover, year and month picker) are rendered. Can be a selector string or a DOM element.
data Array undefined Events for the calendar, as an array of event objects. The event object supports the following properties:
  • idString, Number - A unique id for the event. If not specifed, the event will get a generated id.
  • startDate, String, Object - Specifies the start of the event.
  • endDate, String, Object - Specifies the end of the event.
  • titleString - The title of the event.
  • colorString - The color of the event.
  • allDayBoolean - Specifies if the event is all day or not.
  • editable: Boolean - specify if an event is editable or not. If false, drag & drop and resize is not allowed.
  • resource: String, Number, Array - specify resource ids for the events. The event will display only in the specified resource group. If there is no resource id defined the event will be displayed at every resource group.
  • recurring: String, Object - Recurrence rule for the event.
  • recurringException: String, Object, Array - Recurrence exception for the recurring event.
  • recurringExceptionRule: String, Object - Recurrence exception rule for the recurring event.
The dates can be specified as Javascript Date objects, ISO 8601 strings, or moment objects.
The event objects may have additional custom properties as well. The custom properties are not used by the eventcalendar, but they are kept and will be available anywhere the event objects are used. E.g. the onEventClick event will receive the event object as argument, containing the custom properties as well.
Example
data: [{
  start: new Date(2021, 5, 23),
  end: new Date(2021, 5, 30),
  title: 'Conference',
  allDay: true,
  color: 'red'
}, {
  title: 'Work project',
  recurring: {
    repeat: 'daily',
    until: '2021-04-01'
  },
  recurringException: ['2021-03-15', '2021-03-25'],
  recurringExceptionRule: {
    repeat: 'weekly',
    weekDays: 'SA,SU'
  }
}]
dragTimeStep Number 15 Specify the steps in minutes for the schedule events during drag.
dragToCreate Boolean undefined If true, dragging on an empty cell will create a new event. It will also allow deleting of the focused events using the Delete or Backspace key. The title of the new event can be specified with the newEventText option.

Using the extendDefaultEvent option extra properties can be set for the created event.

dragToMove Boolean undefined If true, the events will be move-able.
dragToResize Boolean undefined If true, the events will be resize-able.
eventOrder Function undefined Determines the ordering of the events within the same day. Can be a function that accepts two event objects as arguments and should return -1 or 1.

If not specified, the default order is:
  • all day events
  • rest of events, sorted by start time
extendDefaultEvent Function undefined

Use this option to set properties to the new event created with click or drag. This event creation is handled by the clickToCreate and dragToCreate options. It takes a function that should return the properties for the new event.

Example
function newEventData() {
    return {
        color: 'green',
        title: 'My event',
    };
}
externalDrop Boolean undefined If true, external drag & drop is allowed.
groupBy String 'resource' Groups the given schedule resources based on the specified 'date' or 'resource'.
height Number, String undefined Sets the height of the component. The height of the calendar view impacts the number of labels that fit into a table cell. A show more label will be displayed for events that don't fit.
invalid Array undefined An array containing the invalid values. Must be an array containing dates (Javascript Date objects, ISO 8601 strings, or moment objects), or objects with the following properties:
  • allDay: Boolean - If true the specified date will cover the whole day.
  • start: Date, String, Object - Start date of the calendar days which should be invalid.
  • end: Date, String, Object - End date of the calendar days which should be invalid.
  • recurring: String, Object - Recurrence rule for recurring invalid days.
  • title: String - Text will be displayed as title on the schedule blocked out days
  • resource: String, Number, Array of String | Number - specify resource ids for the invalid. The invalid will display only in the specified resource group. If there is no resource id defined the invalid will be displayed at every resource group.
Invalid array example
invalid: [
    /* Passing exact dates will block out the entire day */
     new Date(2021, 1, 7), // Date object
    '2021-10-15T12:00', // string
     moment("2020-12-25"), // moment object

    /* Passing invalids as an object and defining start/end ranges */
    { 
      // specify invalid date ranges with time string
      start: '2021-10-15T12:00',
      end: '2021-10-18T13:00', 
      title: 'Company 10th anniversary',
    },
    {
      // specify invalid date ranges with Date object
      allDay: true,
      start: new Date(2021, 2, 7, 10, 10),
      end: new Date(2021, 2, 9, 20, 20),
      title: 'Conference for the whole team',
    },
    {
      // specify invalid time ranges only
      start: '13:00',
      end: '12:00',
      recurring: { repeat: 'weekly', weekDays: 'MO,TU,WE,TH,FR' },
      title: 'Lunch break',
    },
    {
      // disable weekends
      recurring: {
          repeat: 'weekly',
          weekDays: 'SA,SU'
      }
    }
];
invalidateEvent String 'strict'

Configures how to validate events against invalid ranges on create/move/resize:

When set to 'strict', event cannot intersect with an invalid range at all.

When set to 'start-end', event start and end cannot be inside an invalid range.

labels Array undefined Specify labels for calendar days. A label object can have the following properties:
  • date Date, String, Object - Date of the calendar label.
  • start Date, String, Object - Start date of the calendar label.
  • end Date, String, Object - End date of the calendar label.
  • color String - The color of the label, can be any valid CSS color ('red', '#ff0000', 'rgb(255,0,0)', etc.).
  • text String - The text of the label.
  • recurring: String, Object - Recurrence rule for recurring labels.
  • cellCssClass: String - CSS class for the day cell.
The dates can be specified as Javascript Date objects, ISO 8601 strings, or moment objects.
The labels can be combined with the colors option.
Example
labels: [{
  start: new Date(2020, 2, 23),
  end: new Date(2020, 2, 24),
  text: 'Conference',
  color: 'red'
}, {
  text: 'Christmas',
  recurring: { repeat: 'yearly', month: 12, day: 24 }
}]
marked Array undefined Mark certain dates on the calendar. Must be an array containing dates (Javascript Date objects, ISO 8601 strings, or moment objects), or objects with the following properties:
  • date Date, String, Object - Date of the day to be marked.
  • start Date, String, Object - Start date of the days to be marked.
  • end Date, String, Object - End date of the days to be marked.
  • color String - The color of the mark, can be any valid CSS color ('red', '#ff0000', 'rgb(255,0,0)', etc.).
  • recurring: String, Object - Recurrence rule for recurring marked days.
  • cellCssClass: String - CSS class for the day cell.
  • markCssClass: String - CSS class for the mark.
The dates can be specified as Javascript Date objects, ISO 8601 strings, or moment objects.
The marked option can be combined with the colors option.
Example
marked: [
  new Date(2020, 2, 15),
  new Date(2020, 2, 22),
  {
    start: new Date(2020, 2, 23),
    end: new Date(2020, 2, 24),
    color: 'red'
  },
  {
    color: 'green',
    recurring: { repeat: 'yearly', month: 12, day: 24 }
  }
]
max Date, String, Object undefined Maximum date and time that can be selected.
Date
$('#mydate').mobiscroll().calendar({
    max: new Date(2015, 7, 14)
});
Date and time
$('#mydatetime').mobiscroll().calendar({
    controls: ['calendar', 'time'],
    max: new Date(2015, 7, 14, 16, 57)
});
min Date, String, Object undefined Minimum date and time that can be selected.
Date
$('#mydate').mobiscroll().calendar({
    min: new Date(2015, 7, 14)
});
Date and time
$('#mydatetime').mobiscroll().calendar({
    controls: ['calendar', 'time'],
    min: new Date(2015, 7, 14, 16, 57)
});
renderAgenda Function undefined A render function to customize the agenda template. Should return the markup of an event list, to be used in the agenda listing. It receives the the following parameters:
  • events: Array - The events of the current view, grouped by day. A day object has the following properties:
    • date: String - The formatted date of the day.
    • events: Array - The list of events for the day. An event object has the following properties:
      • allDay: String - The localized all-day text in case of all day events.
      • end: String - The formatted end time, if the event is not all day.
      • id: String - The id of the event.
      • isMultiDay: Boolean - True if the event spans across multiple days.
      • lastDay: Boolean - True if it's rendered on the last day of a multiple event.
      • original: Object - The original event object.
      • start: String - The formatted start time, if the event is not all day.
      • title: String - The title of the event.
    • timestamp: Number - The timestamp of the day
  • options: Object - The current settings of the component.
renderEvent Function undefined

You can use the renderEvent option to customize the events that appear on the agenda and the popover. It should return the markup of the event. The Eventcalendar will take care of the positioning, but everything else (like background color, hover effect, etc.) is left to you.

If you are looking to customize only the content (ex. add custom elements) and don't want to bother with the styling of the event, you can use the renderEventContent option.

For customizing the events on other part of the Eventcalendar check out the customizing the events section

The render function will receive an event object as parameter. This data can be used to show event specific things on the agenda and popover. The object passed to the function has computed properties, as well as a reference to the original event it comes from:

  • allDay: String - The localized all-day text in case of all day events.
  • end: String - The formatted end time, if the event is not all day.
  • id: String - The id of the event.
  • isMultiDay: Boolean - True if the event spans across multiple days.
  • lastDay: Boolean - True if it's rendered on the last day of a multiple event.
  • original: Object - The original event object.
  • start: String - The formatted start time, if the event is not all day.
  • title: String - The title of the event.
renderEventContent Function undefined

You can use the renderEventContent option to customize the event content that appears on the agenda and the popover. It should return the markup that is added to the event. The Eventcalendar will take care of styling and you can focus on what you show inside of the event a.k.a the content.

If you are looking to fully customize the event (ex. add custom hover effects) you will need to use the renderEvent option. In that case you will only get the positioning done by the Eventcalendar and everything else is up to you.

For customizing the events on other part of the Eventcalendar check out the customizing the events section.

The render function will receive an event object as parameter. This data can be used to show event specific things on the agenda and popover. The object passed to the function has computed properties, as well as a reference to the original event it comes from:

  • allDay: String - The localized all-day text in case of all day events.
  • end: String - The formatted end time, if the event is not all day.
  • id: String - The id of the event.
  • isMultiDay: Boolean - True if the event spans across multiple days.
  • lastDay: Boolean - True if it's rendered on the last day of a multiple event.
  • original: Object - The original event object.
  • start: String - The formatted start time, if the event is not all day.
  • title: String - The title of the event.
renderHeader Function undefined

Use this option to customize the header of the Eventcalendar. It takes a function that should return the desired markup. In the returned markup, you can use custom html as well as the built in header components of the calendar.

Check out the customizing the header section for a more detailed description on built in components.

Example with built in components
function myCustomHeader() {
    return `<button mbsc-calendar-prev></button>
            <button mbsc-calendar-next></button>
            <div mbsc-calendar-nav></div>`;
}
renderLabel Function undefined

You can use the renderLabel option to fully customize the labels that appear on the calendar. It should return the markup of the event. The Eventcalendar will take care of the positioning, but everything else (like background color, hover effect, etc.) is left to you.

If you are looking to customize only the content (ex. add custom elements) and don't want to bother with the styling of the label, you can use the renderLabelContent option.

For customizing the events on other part of the Eventcalendar check out the customizing the events section

The render function will receive an event object as parameter. This data can be used to show event specific things on the calendar. The object passed to the function has computed properties, as well as a reference to the original event it comes from:

  • end: String - Computed property. It holds the formatted end time, if the event is not all day.
  • id: String - It holds the id of the event. If there's no id on the event object, this property is generated.
  • isMultiDay: Boolean - Computed property. It's true if the event spans across multiple days.
  • original: Object - Reference to the original event object. Any custom property on the event can be access through this property.
  • start: String - Computed property. It holds the formatted start time, if the event is not all day.
renderLabelContent Function undefined

You can use the renderLabelContent option to customize the label contents, that appears on the calendar. It should return the markup that is added to the label. The Eventcalendar will take care of styling and you can focus on what you show inside of the label a.k.a the content.

If you are looking to fully customize the label (ex. add custom hover effects) you will need to use the renderLabel option. In that case you will only get the positioning done by the Eventcalendar and everything else is up to you.

For customizing the events on other part of the Eventcalendar check out the customizing the events section

The render function will receive an event object as parameter. This data can be used to show event specific things on the calendar. The object passed to the function has computed properties, as well as a reference to the original event it comes from:

  • end: String - Computed property. It holds the formatted end time, if the event is not all day.
  • id: String - It holds the id of the event. If there's no id on the event object, this property is generated.
  • isMultiDay: Boolean - Computed property. It's true if the event spans across multiple days.
  • original: Object - Reference to the original event object. Any custom property on the event can be access through this property.
  • start: String - Computed property. It holds the formatted start time, if the event is not all day.
renderScheduleEvent Function undefined

You can use the renderScheduleEvent option to customize the events that appear on the scheduler. It should return the markup of the event. The Eventcalendar will take care of the positioning, but everything else (like background color, hover effect, etc.) is left to you.

If you are looking to customize only the content (ex. add custom elements) and don't want to bother with the styling of the event, you can use the renderScheduleEventContent option.

For customizing the events on other part of the Eventcalendar check out the customizing the events section

The render function will receive an event object as parameter. This data can be used to show event specific things on the scheduler. The object passed to the function has computed properties, as well as a reference to the original event it comes from:

  • allDay: String - The localized all-day text in case of all day events.
  • end: String - The formatted end time, if the event is not all day.
  • id: String - The id of the event.
  • isMultiDay: Boolean - True if the event spans across multiple days.
  • lastDay: Boolean - True if it's rendered on the last day of a multiple event.
  • original: Object - The original event object.
  • start: String - The formatted start time, if the event is not all day.
  • title: String - The title of the event.
renderScheduleEventContent Function undefined

You can use the renderScheduleEventContent option to customize the event content that appears on the scheduler. It should return the markup that is added to the event. The Eventcalendar will take care of styling and you can focus on what you show inside of the event a.k.a the content.

If you are looking to fully customize the event (ex. add custom hover effects) you will need to use the renderScheduleEvent option. In that case you will only get the positioning done by the Eventcalendar and everything else is up to you.

For customizing the events on other part of the Eventcalendar check out the customizing the events section

The render function will receive an event object as parameter. This data can be used to show event specific things on the scheduler. The object passed to the function has computed properties, as well as a reference to the original event it comes from:

  • allDay: String - The localized all-day text in case of all day events.
  • end: String - The formatted end time, if the event is not all day.
  • id: String - The id of the event.
  • isMultiDay: Boolean - True if the event spans across multiple days.
  • lastDay: Boolean - True if it's rendered on the last day of a multiple event.
  • original: Object - The original event object.
  • start: String - The formatted start time, if the event is not all day.
  • title: String - The title of the event.
resources Array undefined

The scheduler can handle multiple resources inside a single instance. Resource grouping can be modified with the help of the groupBy option.

If set null or undefined, all events will be displayed, regardless of their resource property. If set to an empty array, only those events will be displayed which are not tied to any resource.

The resource object has the following properties:

  • id: Number, String - This is an id that can be referenced in the events/invalids/colors data.
  • name: String - The name of the resource that will be displayed at the top of the resource column.
  • color: String - The color controls the default event color of the resource. Event colors can be specific above this. If the color is omitted the events of the resource will inherit the default calendar color.
Example of a resource array
resources: [{
  id: 1,
  name: 'Flatiron Room',
  color: '#f7c4b4'
}, {
  id: 2,
  name: 'The Capital City',
  color: '#c6f1c9'
}, {
  id: 3,
  name: 'Heroes Square',
  color: '#e8d0ef'
}]
responsive Object undefined Specify different settings for different viewport widths, in a form of an object, where the keys are the name of the breakpoints, and the values are objects containing the settings for the given breakpoint.

There are five predefined breakpoints:
  • xsmall - min-width: 0px
  • small - min-width: 576px
  • medium - min-width: 768px
  • large - min-width: 992px
  • xlarge - min-width: 1200px
Custom breakpoints can be defined by passing an object containing the breakpoint property specifying the min-width in pixels. Example:
responsive: {
    xsmall: {
        view: {
            calendar: {
                type: 'week'
            },
            agenda: {
                type: 'day'
            }
        }
    },
    custom: { // Custom breakpoint
        breakpoint: 600,
        view: {
            calendar: {
                labels: true
            }
        }
    }
}
selectedDate Date, String, Object undefined Specifies the selected date on the calendar.
showControls Boolean true Shows or hides the calendar header controls: the previous and next buttons, and the current view button together with the year and month picker.
theme String undefined

Sets the visual appearance of the component.

If it is 'auto' or undefined, the theme will automatically be chosen based on the platform. If custom themes are also present, they will take precedence over the built in themes, e.g. if there's an iOS based custom theme, it will be chosen on the iOS platform instead of the default iOS theme.

Supplied themes:
  • 'ios' - iOS theme
  • 'material' - Material theme
  • 'windows' - Windows theme
It's possible to modify theme colors or create custom themes.
Make sure that the theme you set is included in the downloaded package.
themeVariant String undefined

Controls which variant of the theme will be used (light or dark).

Possible values:
  • 'light' - Use the light variant of the theme.
  • 'dark' - Use the dark variant of the theme.
  • 'auto' or undefined - Detect the preferred system theme on devices where this is supported.

To use the option with custom themes, make sure to create two custom themes, where the dark version has the same name as the light one, suffixed with '-dark', e.g.: 'my-theme' and 'my-theme-dark'.

valid Object null Can be used to override invalid dates and times. E.g. if every Thursday is set to invalid, but you want May 15th, 2014 to be valid, you can do it using the valid option. The syntax is the same as for the invalid option.
It's important if you want to use the valid setting together with invalid make sure to set: invalid day with valid day, invalid time with valid time or both invalid date and time with valid date and time. So in case you use an invalid day and a valid time, this will not override the invalid setting.
A sample configuration
invalid: [
    { start: '00:00', end: '23:59' }, // Invalid time
    { start: new Date(2018, 11, 21), end: new Date(2018, 11, 31) } // Invalid date
],
valid: [
    { start: '09:00', end: '20:00' }, // Valid time
    { start: new Date(2018, 11, 26), end: new Date(2018, 11, 30) } // Valid date
]
view Object { calendar: { type: 'month', popover: true } } Configures the event calendar view elements.

Properties

  • calendar: Object - Configures the calendar view. If omitted, no calendar will be displayed.
    Properties:
    • type: String (default 'month') - Sets the calendar type. Possible values: 'month', 'week'.
    • size: Number - Specifies the number of displayed weeks.
    • count: Boolean (default false) - If true, it will display the number of events on days with events.
    • outerDays: Boolean (default false) - Show or hide days from previous and next months. Hiding only works for type: 'month'.
    • labels: Boolean (default false) - Enable displaying events as labels on calendar days. To display multiple events on a day, set the calendar height to an appropriate value, using the calendarHeight setting, The events will be displayed in the available space. If there are more events for a day, than the available space, a label with "x more" text will be displayed, which opens the popover showing all the events for the given day.
    • popover: Boolean (default undefined) - Enable popover for event listing on days containing events. If not explicitly defined, the popover will not show up if event listing is used. If event labels are used, popover will only show up for days where all labels do not fit on the calendar, and a "more" label is present.
    • popoverClass: String (default undefined) - A CSS class that's added to the popover element. Can be used to customize the styling of the popover on a calendar basis.
    • scroll: String (default 'horizontal') - Specifies the direction of the calendar scroll. Can be 'horizontal' or 'vertical'.
    • weekNumbers: Boolean (default false) - Show or hide week numbers.
  • agenda: Object - Configures the event list. If omitted, no event list will be displayed.
    Properties:
    • type: String (default undefined) - Sets the list type. Possible values: 'year', 'month', 'week', 'day'.
      If calendar is also displayed, only month, week and day values are supported.
      In case of month and week, the type and size should match the calendar type and size.
      In case of day type events on the selected calendar day will be displayed, so size will always be 1.
    • size: Number (default 1) - Specifies the number of years, months, weeks or days included in the list (depending on the specified type).
    • scrollable: Boolean (default false) - Setting this to true makes the event listing independently scrollable. There are two prerequisites for making this work:

      1 - The calendar needs to be to placed inside a container which has a height. This can be either a fixed height, a height in percentage, or a flex height. When the calendar is placed directly in a container with a fixed height, it will work out of the box.
      If the height of the container is specified in percentage, e.g. you'd like to fill the full page height, you need to make sure that all parent elements also have height: 100% specified, up until the body and html elements, or until the closest parent which has a fixed height.
      If the container is inside a parent with flex layout, it will also work out of the box.

      2 - The event list has a minimum calculated height of 200px - the result of the container height minus the height of the calendar header minus the height of the displayed calendar rows. If the calculated height is less then 200px, the event list will not be scrollable.
  • schedule: Object - Configures the schedule view. If omitted, no schedule will be displayed.
    Properties:
    • type: String (default 'week') - Sets the schedule type. Possible values: 'day', 'week'.
    • allDay: Boolean (default true) - Show or hide the all day events.
    • days: Boolean (default true) - Show or hide week days above the schedule grid.
    • startDay: Number (default 0) - Set the first day of the week: Friday is 5, Saturday is 6, etc.
    • endDay: Number (default 6) - Set the last day of the week: Sunday is 0, Monday is 1, etc.
    • startTime: String (default 00:00) - Set the start time of schedule column. Hours and minutes can be specified in the string, example: '09:30'.
    • endTime: String (default 24:00) - Set the end time of schedule column. Hours and minutes can be specified in the same string, example: '18:30'.
    • timeCellStep: Number (default 60) - Set the step of the grid cells in minutes.
    • timeLabelStep: Number (default 60) - Set the step of the time labels in minutes.

Example

view: {
  calendar: {
    type: 'week',
    size: 2
  },
  agenda: {
    type: 'week',
    size: 2
  }
}
width Number, String undefined Sets the width of the component.

Setting options dynamically

To change one or more options on the component after initialization, use the setOptions method. This will update the component without losing it's internal state.

$('#elm').mobiscroll().eventcalendar({
  theme: 'ios'
});
// Changes the theme to Material
$('#elm').mobiscroll('setOptions', { theme: 'material' });

Events

Name Description
onCellClick(event, inst) Triggered when a cell is clicked on the calendar or on the schedule grid.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The date of the clicked cell.
    • domEvent: Event The DOM event of the click.
    • events: Array - The events for the clicked date.
    • resource: String, Number - The id of the resource where the cell was clicked, if resources are set.
    • selected: Boolean - Specifies if the day is currently selected or not (before it was clicked).
    • source: String - The view where the cell was clicked, 'calendar' or 'schedule'.
    • target: HTMLElement - The DOM element of the clicked cell.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onCellClick: function (event, inst) {
    }
});
onCellDoubleClick(event, inst) Triggered when a cell is double-clicked on the calendar or on the schedule grid.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The date of the clicked cell.
    • domEvent: Event The DOM event of the double click.
    • events: Array - The events for the clicked date.
    • resource: String, Number - The id of the resource where the cell was clicked, if resources are set.
    • selected: Boolean - Specifies if the day is currently selected or not (before it was clicked).
    • source: String - The view where the cell was clicked, 'calendar' or 'schedule'.
    • target: HTMLElement - The DOM element of the clicked cell.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onCellDoubleClick: function (event, inst) {
    }
});
onCellHoverIn(event, inst) Triggered when the mouse pointer hovers a day on the calendar.

Parameters

  • event: Object - The event object has the following properties:
    • date: The selected date as a Date object.
    • events: The events for the hovered day.
    • labels: If the day has labels, contains the label objects for the hovered day.
    • marked: If the day is marked, contains the marked objects for the hovered day.
    • selected: Specifies if the day is currently selected or not.
    • target: The table cell HTML DOM element.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onCellHoverIn: function (event, inst) {
    }
});
onCellHoverOut(event, inst) Triggered when the mouse pointer leaves a day on the calendar.

Parameters

  • event: Object - The event object has the following properties:
    • date: The selected date as a Date object.
    • events: The events for the hovered day.
    • labels: If the day has labels, contains the label objects for the hovered day.
    • marked: If the day is marked, contains the marked objects for the hovered day.
    • selected: Specifies if the day is currently selected or not.
    • target: The table cell HTML DOM element.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onCellHoverOut: function (event, inst) {
    }
});
onCellRightClick(event, inst) Triggered when a cell is right-clicked on the calendar or on the schedule grid.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The date of the clicked cell.
    • domEvent: Event The DOM event of the right click.
    • events: Array - The events for the clicked date.
    • resource: String, Number - The id of the resource where the cell was clicked, if resources are set.
    • selected: Boolean - Specifies if the day is currently selected or not (before it was clicked).
    • source: String - The view where the cell was clicked, 'calendar' or 'schedule'.
    • target: HTMLElement - The DOM element of the clicked cell.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onCellRightClick: function (event, inst) {
    }
});
onDestroy(event, inst) Triggered when the component is destroyed.

Parameters

  • event: Object - The event object.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onDestroy: function (event, inst) {
    }
});
onEventClick(event, inst) Triggered when an event is clicked.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The date of the day on which the event was clicked.
    • domEvent: Event - The DOM event of the click.
    • event: Object - The clicked calendar event.
    • resource: String, Number - The id of the resource where the event was clicked, if resources are set.
    • source: String - The view where the event was clicked, 'agenda', 'calendar', 'schedule' or 'popover'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventClick: function (event, inst) {
    }
});
onEventCreate(event, inst) Triggered when an event is about to create. Event creation can be prevented by returning false from the handler function.

Parameters

  • event: Object - The event object has the following properties:
    • action: String - The action which created the event ('click', 'drag' or 'externalDrop').
    • domEvent: Event - The DOM event from the end of the gesture (mouseup or touchend).
    • event: Object - The newly created event object.
    • source: String - The view where the event was created, 'calendar', or 'schedule'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventCreate: function (event, inst) {
    }
});
onEventCreated(event, inst) Triggered when an event is created is rendered in its position.

Parameters

  • event: Object - The event object has the following properties:
    • action: String - The action which created the event ('click', 'drag' or 'externalDrop').
    • event: Object - The newly created event object.
    • source: String - The view where the event was created, 'calendar', or 'schedule'.
    • target: HTMLElement - The DOM element of the created event.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventCreated: function (event, inst) {
    }
});
onEventCreateFailed(event, inst) Triggered when an event is interacted with a blocked out date during the creation.

Parameters

  • event: Object - The event object has the following properties:
    • action: String - The action which created the event ('click', 'drag' or 'externalDrop').
    • event: Object - The newly created event object.
    • invalid: Object - The invalid object which the event interacted with.
    • source: String - The view where the event was created, 'calendar', or 'schedule'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventCreateFailed: function (event, inst) {
    }
});
onEventDelete(event, inst) Triggered when an event is about to be deleted. Event deletion can be performed with delete and backspace button on an active event. Deletion can be prevented by returning false from the handler function.

Parameters

  • event: Object - The event object has the following properties:
    • domEvent: Event - The DOM event from the onKeyDown action.
    • event: Object - The deleted event's data object.
    • source: String - The view where the event was created, 'calendar', or 'schedule'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventDelete: function (event, inst) {
    }
});
onEventDeleted(event, inst) Triggered when an event is deleted and it is removed from it's position.

Parameters

  • event: Object - The event object has the following properties:
    • event: Object - The deleted event's data object.
    • source: String - The view where the event was created, 'calendar', or 'schedule'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventDeleted: function (event, inst) {
    }
});
onEventDoubleClick(event, inst) Triggered when an event is double-clicked.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The date of the day on which the event was clicked.
    • domEvent: Event - The DOM event of the double click.
    • event: Object - The clicked calendar event.
    • resource: String, Number - The id of the resource where the event was clicked, if resources are set.
    • source: String - The view where the event was clicked, 'agenda', 'calendar', 'schedule' or 'popover'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventDoubleClick: function (event, inst) {
    }
});
onEventRightClick(event, inst) Triggered when an event is right-clicked.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The date of the day on which the event was clicked.
    • domEvent: Event - The DOM event of the right click.
    • event: Object - The clicked calendar event.
    • resource: String, Number - The id of the resource where the event was clicked, if resources are set.
    • source: String - The view where the event was clicked, 'agenda', 'calendar', 'schedule' or 'popover'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventRightClick: function (event, inst) {
    }
});
onEventUpdate(event, inst) Triggered when an event is about to update. Update can be prevented by returning false from the handler function.

Parameters

  • event: Object - The event object has the following properties:
    • domEvent: Event - The DOM event from the end of the gesture (mouseup or touchend).
    • event: Object - The updated event object.
    • oldEvent: Object - The original event object before the update.
    • source: String - The view where the event is being updated, 'calendar', or 'schedule'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventUpdate: function (event, inst) {
    }
});
onEventUpdated(event, inst) Triggered when an event is updated and is rendered in its new position.

Parameters

  • event: Object - The event object has the following properties:
    • event: Object - The updated event object.
    • oldEvent: Object - The original event object before the update.
    • source: String - The view where the event was updated, 'calendar', or 'schedule'.
    • target: HTMLElement - The DOM element of the created event.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventUpdated: function (event, inst) {
    }
});
onEventUpdateFailed(event, inst) Triggered when an event is interacted with a blocked out date at drop or resize.

Parameters

  • event: Object - The event object has the following properties:
    • event: Object - The updated event object.
    • oldEvent: Object - The original event object before the update.
    • invalid: Object - The invalid object which the event interacted with.
    • source: String - The view where the event was updated, 'calendar', or 'schedule'.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onEventUpdateFailed: function (event, inst) {
    }
});
onInit(event, inst) Triggered when the component is initialized.

Parameters

  • event: Object - The event object.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onInit: function (event, inst) {
    }
});
onLabelClick(event, inst) Triggered when a label on the calendar is clicked.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The date of the day on which the label was clicked.
    • domEvent: Event - The DOM event of the click.
    • label: Object - The original object of the label which was clicked, undefined in case of the "more" label.
    • labels: Array - An array containing each label object for the given day.
    • target: HTMLElement - The DOM element of the label.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onLabelClick: function (event, inst) {
    }
});
onPageChange(event, inst) Triggered when the calendar page is changed (month or week, with buttons or swipe).

Parameters

  • event: Object - The event object has the following property:
    • firstDay: Date - The first day of the displayed page.
    • lastDay: Date - The last day of the displayed page.
    • month: Date - The first day of the visible month in case of month view.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onPageChange: function (event, inst) {
    }
});
onPageLoaded(event, inst) Triggered when the calendar page is changed (month or week, with buttons or swipe) and the animation has finished.

Parameters

  • event: Object - The event object has the following property:
    • firstDay: Date - The first day of the displayed page.
    • lastDay: Date - The last day of the displayed page.
    • month: Date - The first day of the visible month in case of month view.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onPageLoaded: function (event, inst) {
    }
});
onPageLoading(event, inst) Triggered before the markup of a calendar page (month or week) is starting to render.

Parameters

  • event: Object - The event object has the following property:
    • firstDay: Date - The first day of the displayed page.
    • lastDay: Date - The last day of the displayed page.
    • month: Date - The first day of the visible month in case of month view.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onPageLoading: function (event, inst) {
    }
});
onSelectedDateChange(event, inst) Triggered when the selected date is changed.

Parameters

  • event: Object - The event object has the following properties:
    • date: Date - The selected date.
  • inst: Object - The instance object of the eventcalendar.

Example

$('#mobiscroll').mobiscroll().eventcalendar({
    onSelectedDateChange: function (event, inst) {
    }
});

Methods

Name Description
addEvent(events) Adds one or more events to the event list.

Parameters

  • events: Object or Array - The javascript event object(s) to add.

Returns: Array

  • An array containing the list of IDs generated for the events.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('addEvent', {
    start: new Date(2016, 1, 1),
    end: new Date(2016, 1, 2),
    title: 'Conference',
    color: 'red'
});

// With instance
mobiscrollInstance.addEvent({
    start: new Date(2016, 1, 1),
    end: new Date(2016, 1, 2),
    title: 'Conference',
    color: 'red'
});
destroy() Destroys the component. This will return the element back to its pre-init state.

Returns: Object

  • Returns the element back to its pre-init state.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('destroy');

// With instance
mobiscrollInstance.destroy();
getEvents() Returns the list of events.

Returns: Array

  • An array containing the event objects.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('getEvents');

// With instance
mobiscrollInstance.getEvents();
getInst() Returns the object instance.

Returns: Object

  • The object instance.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('getInst');

// With instance
mobiscrollInstance.getInst();
navigate(date) Navigates to the specified date on the calendar and optionally opens the event popover (only if popover is enabled and events exists for the specified date).

Parameters

  • date: Date, String, Object - Date to navigate to. Can be a Date object, ISO8601 date string, or moment object.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('navigate', new Date(2016, 1, 1));

// With instance
mobiscrollInstance.navigate(new Date(2016, 1, 1));
removeEvent(eventIDs) Removes one or more events from the event list based on IDs. For events without IDs, the IDs are generated internally. The generated ids are returned by the addEvent or getEvents methods.

Parameters

  • eventIDs: Array - An array containing the ID of one or more list events.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('removeEvent', [1, 3]);

// With instance
mobiscrollInstance.removeEvent([1, 3]);
setEvents(events) Set the events for the calendar. The actual list is overwritten. Returns the list of IDs generated for the events.

Parameters

  • events: Array - An array containing the events.

Returns: Array

  • An array containing the event IDs.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('setEvents', [{
    start: new Date(2016, 1, 1),
    end: new Date(2016, 1, 2),
    title: 'Conference',
    color: 'red'
}]);

// With instance
mobiscrollInstance.setEvents([{
    start: new Date(2016, 1, 1),
    end: new Date(2016, 1, 2),
    title: 'Conference',
    color: 'red'
}]);
setOptions(options) Update options for the component.

Parameters

  • options: Object - A map of option-value pairs to set.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('setOptions', {
    display: 'bottom'
});

// With instancee
mobiscrollInstance.setOptions({
    display: 'bottom'
});
updateEvent(event) Updates an event from the event list.

Parameters

  • event: Object - The event object to update.

Example

Methods can be called on an instance. For more details see calling methods
// With selector
$('#mobiscroll').mobiscroll('updateEvent', updatedEvent);

// With instance
mobiscrollInstance.updateEvent(updatedEvent);

Localization

Name Type Default value Description
allDayText String 'All-day' Text for all day events.
amText String 'am' Text for AM.
dateFormat String 'MM/DD/YYYY' The format for parsed and displayed dates.
  • M - month of year (no leading zero)
  • MM - month of year (two digit)
  • MMM - month name short
  • MMMM - month name long
  • D - day of month (no leading zero)
  • DD - day of month (two digit)
  • DDD - day of week (short)
  • DDDD - day of week (long)
  • YY - year (two digit)
  • YYYY - year (four digit)
  • '...' - literal text
  • '' - single quote
  • anything else - literal text
dateFormatLong String 'D DDD MMM YYYY' Long date format, used by the agenda view day headers. Characters have the same meaning as in the dateFormat option.
dayNames Array ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] The list of long day names, starting from Sunday, for use as requested via the dateFormat setting.
dayNamesMin Array ['S', 'M', 'T', 'W', 'T', 'F', 'S'] The list of minimal day names, starting from Sunday, for use as requested via the dateFormat setting.
dayNamesShort Array ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] The list of abbreviated day names, starting from Sunday, for use as requested via the dateFormat setting.
eventsText String 'events' Text for the events word (plural).
eventText String 'event' Text for the event word.
firstDay Number 0 Set the first day of the week: Sunday is 0, Monday is 1, etc.
locale Object undefined Sets the language of the component. The locale option is an object containing all the translations for a given language. Mobiscroll supports a number of languages listed below. If a language is missing from the list, it can also be provided by the user. Here's a guide on how to write language modules.
Supported languages:
  • Arabic: localeAr
  • Bulgarian: localeBg
  • Catalan: localeCa
  • Czech: localeCs
  • Chinese: localeZh
  • Croatian: localeHr
  • Danish: localeDa
  • Dutch: localeNl
  • English: localeEn or undefined
  • English (UK): localeEnGB
  • Farsi: localeFa
  • German: localeDe
  • Greek: localeEl
  • Spanish: localeEs
  • Finnish: localeFi
  • French: localeFr
  • Hebrew: localeHe
  • Hindi: localeHi
  • Hungarian: localeHu
  • Italian: localeIt
  • Japanese: localeJa
  • Korean: localeKo
  • Lithuanian: localeLt
  • Norwegian: localeNo
  • Polish: localePl
  • Portuguese (Brazilian): localePtBR
  • Portuguese (European): localePtPT
  • Romanian: localeRo
  • Russian: localeRu
  • Russian (UA): localeRuUA
  • Slovak: localeSk
  • Serbian: localeSr
  • Thai: localeTh
  • Swedish:localeSv
  • Turkish: localeTr
  • Ukrainian: localeUa
  • Vietnamese: localeVi
$('#myexample').mobiscroll().eventcalendar({
  locale: mobiscroll.localeDe
});
monthNames Array ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] The list of full month names, for use as requested via the dateFormat setting.
monthNamesShort Array ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] The list of abbreviated month names, for use as requested via the dateFormat setting.
moreEventsPluralText String undefined Text for the "more" label on the calendar, when there's not enough space to display all the labels for the day, and there are more than one extra labels. The {count} inside the string will be replaced with the number of extra labels. When not specified, the moreEventsText setting is used for both plural and singular form.
moreEventsText String '{count} more' Text for the "more" label on the calendar, when there's not enough space to display all the labels for the day. The {count} inside the string will be replaced with the number of extra labels. Use the moreEventsPluralText as well, if the plural form is different.
newEventText String New Event Title text for the newly created event with the dragToCreate action.
noEventsText String 'No events' Text for empty event list.
pmText String 'pm' Text for PM.
rtl Boolean false Right to left display.
timeFormat String 'hh:mm A' The format for parsed and displayed dates
  • h - 12 hour format (no leading zero)
  • hh - 12 hour format (leading zero)
  • H - 24 hour format (no leading zero)
  • HH - 24 hour format (leading zero)
  • m - minutes (no leading zero)
  • mm - minutes (leading zero)
  • s - seconds (no leading zero)
  • ss - seconds (leading zero)
  • a - lowercase am/pm
  • A - uppercase AM/PM
  • '...' - literal text
  • '' - single quote
  • anything else - literal text

Customizing the appearance

While the provided pre-built themes are enough in many use cases, most of the times on top of adapting to a specific platform, you'd also like to match a brand or color scheme. Mobiscroll provides various ways to achieve this:

Override the Sass Color Variables

A convenient way to customize the colors of the Mobiscroll components is to override the Sass color variables.

Let's say your branding uses a nice red accent color, and you'd like that color to appear on the Mobiscroll components as well, while still using platform specific themes (e.g. ios on iOS devices, material on Android devices, and mobiscroll on desktop). You can override the accent color for every theme:

$mbsc-ios-accent: #e61d2a;
$mbsc-material-accent: #e61d2a;
$mbsc-mobiscroll-accent: #e61d2a;

@import "~@mobiscroll/JQuery/dist/css/mobiscroll.jquery.scss"
It's important that you override the variables BEFORE the scss file import, otherwise it won't make any difference.
Here's a complete guide on how to set up Mobiscroll with SASS support

You can also customize the colors on many levels:

  1. Theme specific variables (ex. $mbsc-material-background, $mbsc-ios-dark-text) are applied to all components in a theme. Complete list of variables here.
  2. Component specific global variables (ex. $mbsc-card-background-light, $mbsc-listview-text-dark) are applied to all themes for a specific component.
  3. Component and theme specific variables (ex. $mbsc-ios-dark-form-background, $mbsc-material-input-text) are applied to a specific theme and a specific component.

Hereinafter you will see all the variables that are specific to the Eventcalendar component or affect its look:

Global variables

These variables are applied to all base themes: iOS, material, windows and mobiscroll.
They all come in pairs. One for the light and one for the dark variant in each theme.

Variable name Description
$mbsc-calendar-background-light Sets the background color of the Eventcalendar
$mbsc-calendar-background-dark
$mbsc-calendar-text-light Sets the text color of the Eventcalendar
$mbsc-calendar-text-dark
$mbsc-calendar-accent-light Sets the accent color of the Eventcalendar
$mbsc-calendar-accent-dark
$mbsc-calendar-border-light Sets the color of the border
$mbsc-calendar-border-dark
$mbsc-calendar-mark-light Sets the default color of the mark on marked days
$mbsc-calendar-mark-dark

If you really want to get sophisticated or if a color doesn't look good on a specific theme and you want to overwrite it, you can fine tune all of the above variables individually for each theme. Below are the complete list of variables broken down to themes:

iOS theme

Variable name Default value Description
$mbsc-ios-calendar-background
#f7f7f7
The Eventcalendar background color
$mbsc-ios-calendar-text
#000000
The Eventcalendar text color
$mbsc-ios-calendar-accent
#007bff
The Eventcalendar accent color
$mbsc-ios-calendar-border
#cccccc
Sets the color of the border
$mbsc-ios-calendar-mark
#cccccc
Sets the default color of the mark on marked days

iOS Dark theme

$mbsc-ios-dark-calendar-background
##000000
The Eventcalendar background color
$mbsc-ios-dark-calendar-text
#ffffff
The Eventcalendar text color
$mbsc-ios-dark-calendar-accent
#ff8400
The Eventcalendar accent color
$mbsc-ios-dark-calendar-border
#333333
Sets the color of the border
$mbsc-ios-dark-calendar-mark
#333333
Sets the default color of the mark on marked days

Calendar view

Indication on what the color variables affect

Agenda view

Indication on what the color variables affect

Schedule view

Indication on what the color variables affect

Windows theme

Variable name Default value Description
$mbsc-windows-calendar-background
#ffffff
The Eventcalendar background color
$mbsc-windows-calendar-text
#333333
The Eventcalendar text color
$mbsc-windows-calendar-accent
#0078d7
The Eventcalendar accent color
$mbsc-windows-calendar-border
#e6e6e6
Sets the color of the border
$mbsc-windows-calendar-mark
rgba(51, 51, 51, 0.5);
Sets the default color of the mark on marked days

Windows Dark theme

Variable name Default value Description
$mbsc-windows-dark-calendar-background
#1a1a1a
The Eventcalendar background color
$mbsc-windows-dark-calendar-text
#ffffff
The Eventcalendar text color
$mbsc-windows-dark-calendar-accent
#0078d7
The Eventcalendar accent color
$mbsc-windows-dark-calendar-border
#343434
Sets the color of the border
$mbsc-windows-dark-calendar-mark
rgba(255, 255, 255, 0.5);
Sets the default color of the mark on marked days

Calendar view

Indication on what the color variables affect

Agenda view

Indication on what the color variables affect

Schedule view

Indication on what the color variables affect

Material theme

Variable name Default value Description
$mbsc-material-calendar-background
#ffffff
The Eventcalendar background color
$mbsc-material-calendar-text
#303030
The Eventcalendar text color
$mbsc-material-calendar-accent
#1a73e8
The Eventcalendar accent color
$mbsc-material-calendar-border
#cfcfcf
Sets the color of the border
$mbsc-material-calendar-mark
##1a73e8
Sets the default color of the mark on marked days

Material Dark theme

Variable name Default value Description
$mbsc-material-dark-calendar-background
#000000
The Eventcalendar background color
$mbsc-material-dark-calendar-text
#ffffff
The Eventcalendar text color
$mbsc-material-dark-calendar-accent
#87b0f3
The Eventcalendar accent color
$mbsc-material-dark-calendar-border
#2b2b2b
Sets the color of the border
$mbsc-material-dark-calendar-mark
#87b0f3
Sets the default color of the mark on marked days

Calendar view

Indication on what the color variables affect

Agenda view

Indication on what the color variables affect

Schedule view

Indication on what the color variables affect