Logo Logo v2.0
Image Description Image Description

No Results

  • Get Support
  • Preview Demo
Logo Logo v2.0
  • Documentation
  • Introduction
  • Getting started
  • Getting Started
  • Gulp
  • Dark Mode New
  • Customization
  • Credits
  • Changelog
  • Design & Graphics
  • Bootstrap Icons
  • Illustrations
  • Components
  • Accordion
  • Alerts
  • Avatars
  • Badge
  • Breadcrumb
  • Buttons
  • Button Group
  • Cards
  • Collapse
  • Column Divider
  • Devices
  • Divider
  • Dropdowns
  • Icons
  • List Group
  • Lists
  • Legend Indicator
  • Modal
  • Offcanvas
  • Page Header
  • Pagination
  • Popovers
  • Progress
  • Profile
  • Shapes
  • Sliding Image
  • Spinners
  • Steps
  • Tab
  • Toasts
  • Tooltips
  • Typography
  • Navbars
  • Navbar
  • Navs
  • Mega Menu
  • Navbar Vertical Aside
  • Scrollspy
  • Tables
  • Tables
  • Datatables
  • Sticky Header
  • Basic forms
  • Basic Forms
  • Checks & Switches
  • Input Group
  • Advanced Forms
  • Advanced Select
  • Datepicker (Flatpickr)
  • Date Range Picker
  • Calendar (Fullcalendar)
  • File Attachments
  • Drag’ n’ Drop File Uploads
  • WYSIWYG Editor
  • Quantity Counter
  • Copy to Clipboard
  • Input Mask
  • Step Forms (Wizards)
  • Add Field
  • Toggle Password
  • Count Characters
  • Form Search
  • Toggle Switch
  • Google reCAPTCHA
  • Charts
  • Chart.js
  • Counter
  • Circles.js (Pie Chart)
  • Others
  • Fullscreen Lightbox
  • Leaflet
  • JSVectorMap
  • SortableJS
  • Sticky Block
  • Go To
  • Utilities
  • Backgrounds
  • Borders
  • Colors
  • Links
  • Position
  • Shadows
  • Sizing
  • Spacing
  • Z-index
  • Opacity

Calendar (Fullcalendar)

The most popular full-sized JavaScript Calendar.

Fullcalendar documentation

How to use

Copy-paste the stylesheet <link> into your <head> to load the CSS.

				
        	<link rel="stylesheet" href="./assets/vendor/fullcalendar/main.min.css">
      	
			

Copy-paste the following <script> near the end of your pages under JS Implementing Plugins to enable it.

				
        	<script src="./assets/vendor/fullcalendar/main.min.js"></script>
      	
			

Copy-paste the following <script> near the end of your pages under JS Implementing Plugins to enable it.

				
      	
			

Copy-paste the init function under JS Plugins Init. , before the closing </body> tag, to enable it.

				
        	<script>
	          (function() {
	            // INITIALIZATION OF FULLCALENDAR
	            // =======================================================
			 				HSCore.components.HSFullCalendar.init(selector, options);
	          });
	        </script>
      	
			

Basic example

  • Preview
  • HTML
							
								<!-- Fullcalendar-->
								<div class="js-fullcalendar fullcalendar-custom"
									 data-hs-fullscreen-options='{
									   "initialDate": "2020-09-10"
								     }'>
								</div>
								<!-- End Fullcalendar -->
							
						

Drag-n-drop events

  • Preview
  • HTML
  • JS

Drag these onto the calendar:

  • Image Description Open a new task on Jira
  • Image Description Send weekly invoice to John
  • Image Description Shoot a message to Christina on Slack
							
								<h4>Drag these onto the calendar:</h4>

								<!-- External Events -->
								<ul id="external-events" class="fullcalendar-custom list-unstyled list-unstyled-py-2 w-sm-50 mb-5">
									<li>
										<!-- Event -->
										<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event fc-daygrid-inline-block-event'
												 data-event='{
													 "title": "Open a new task on Jira",
													 "image": "../assets/svg/brands/jira-icon.svg",
													 "className": ""
												 }'>
											<div class='fc-event-title'>
												<div class='d-flex align-items-center'>
													<img class="avatar avatar-xss me-2" src="../assets/svg/brands/jira-icon.svg" alt="Image Description">
													<span>Open a new task on Jira</span>
												</div>
											</div>
										</div>
										<!-- End Event -->
									</li>

									<li>
										<!-- Event -->
										<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event fc-daygrid-inline-block-event fc-event-success'
												 data-event='{
													 "title": "Send weekly invoice to John",
													 "image": "../assets/svg/brands/excel-icon.svg",
													 "className": "fc-event-success"
												 }'>
											<div class='fc-event-title'>
												<div class='d-flex align-items-center'>
													<img class="avatar avatar-xss me-2" src="../assets/svg/brands/excel-icon.svg" alt="Image Description">
													<span>Send weekly invoice to John</span>
												</div>
											</div>
										</div>
										<!-- End Event -->
									</li>

									<li>
										<!-- Event -->
										<div class='fc-event fc-h-event fc-daygrid-event fc-daygrid-block-event fc-daygrid-inline-block-event'
												 data-event='{
													 "title": "Shoot a message to Christina on Slack",
													 "image": "../assets/svg/brands/slack-icon.svg",
													 "className": ""
												 }'
										>
											<div class='fc-event-title'>
												<div class='d-flex align-items-center'>
													<img class="avatar avatar-xss me-2" src="../assets/svg/brands/slack-icon.svg" alt="Image Description">
													<span>Shoot a message to Christina on Slack</span>
												</div>
											</div>
										</div>
										<!-- End Event -->
									</li>
								</ul>
								<!-- End External Events -->

								<!-- Fullcalendar -->
								<div id="js-fullcalendar-draggable" class="fullcalendar-custom"></div>
								<!-- End Fullcalendar -->
							
						
							
								<script>
									// ADD DRAGGABLE CLASS FOR CALENDAR
									// =======================================================
									const Draggable = FullCalendar.Draggable

									new Draggable(document.querySelector('#external-events'), {
										itemSelector: '.fc-event'
									})

									(function () {
										const eventContent = function(data) {
											return `
												<div class="d-flex align-items-center px-2">
													${data && data.extendedProps.image ? `<img class="avatar avatar-xss" src="${data.extendedProps.image}" alt="Image Description">` : ''}
													<span class="fc-event-title fc-sticky">${data.title}</span>
												</div>
											`;
										};

										HSCore.components.HSFullCalendar.init('#js-fullcalendar-draggable', {
											events: [
												{
													"title": "English Lesson",
													"start": "2020-09-03T01:00:00",
													"end": "2020-09-03T02:30:00"
												},
												{
													"title": "Spanish Lesson",
													"start": "2020-09-03T04:00:00",
													"end": "2020-09-03T05:30:00"
												},
												{
													"title": "Javascript Lesson",
													"start": "2020-09-14T01:00:00",
													"end": "2020-09-16T02:30:00"
												},
												{
													"title": "PHP Lesson",
													"start": "2020-09-06T04:00:00",
													"end": "2020-09-09T05:30:00"
												}
											],
											initialDate: "2020-09-10",
											headerToolbar: {
												left: "prev,next today",
												center: "title",
												right: "",
											},
											editable: true,
											eventContent({event}) {
												return {
													html: eventContent(event),
												}
											},
											drop({draggedEl}) {
												draggedEl.remove();
											}
										})
									})()
							 	</script>
							
						

Date Clicking & Selecting

  • Preview
  • HTML
  • JS
This example uses Datepicker libraries.
							
								<!-- Button trigger modal -->
								<button type="button" class="btn btn-primary mb-3" data-bs-toggle="modal" data-bs-target="#addEventModal">
								  <i class="bi bi-plus"></i> Add event </button>
								<!-- End Button trigger modal -->

								<div id="js-fullcalendar-editable" class="fullcalendar-custom"></div>
								<!-- End Fullcalendar -->

								<!-- Modal -->
							  <div class="modal fade" id="addEventModal" tabindex="-1" role="dialog" aria-hidden="true">
							    <div class="modal-dialog modal-dialog-centered" role="document">
							      <div class="modal-content">
							        <!-- Header -->
							        <div class="modal-close">
							          <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
							        </div>
							        <!-- End Header -->

							        <!-- Body -->
							        <div class="modal-body">
							          <div class="mb-4">
							            <input type="text" id="eventTitle" class="form-control form-control-lg form-control-flush" placeholder="Add title and time" aria-label="Add title and time">
							          </div>

							          <!-- Media -->
							          <div class="d-flex mb-4">
							            <i class="bi-calendar-week nav-icon mt-2 me-2"></i>

							            <div class="flex-grow-1">
							              <label for="eventDateRangeLabel" class="visually-hidden">Date </label>

							              <!-- Flatpickr -->
							              <input type="text" id="eventDateRangeLabel" class="js-flatpickr form-control flatpickr-custom mb-2" placeholder="Select dates" data-hs-flatpickr-options='{
							                       "dateFormat": "m/d/Y",
							                       "mode": "range",
							                       "minDate": "12/01/2020"
							                     }'>
							              <!-- End Flatpickr -->

							              <label for="eventRepeatLabel" class="text-body me-2 mb-0">Repeat: </label>

							              <!-- Select -->
							              <div class="tom-select-custom">
							                <select id="eventRepeatLabel" class="js-select form-select"
							                      data-hs-tom-select-options='{
							                        "hideSearch": true,
							                        "placeholder": "Add guestse"
							                      }'>
							                  <option value="everyday" selected>Everyday</option>
							                  <option value="weekdays">Weekdays</option>
							                  <option value="never">Never</option>
							                </select>
							              </div>
							              <!-- End Select -->
							            </div>
							          </div>
							          <!-- End Media -->

							          <!-- Media -->
							          <div class="d-flex mb-4">
							            <i class="bi-people nav-icon mt-2 me-2"></i>

							            <div class="flex-grow-1">
							              <label for="eventGuestsLabel" class="visually-hidden">Add guests </label>

							              <!-- Select -->
							              <div class="tom-select-custom">
							                <select id="eventGuestsLabel" class="form-select" multiple data-hs-tom-select-options='{
							                      "placeholder": "Add guestse"
							                    }'></select>
							              </div>
							              <!-- End Select -->
							            </div>
							          </div>
							          <!-- End Media -->

							          <!-- Media -->
							          <div class="d-flex mb-4">
							            <i class="bi-geo-alt nav-icon mt-2 me-2"></i>
							            <div class="flex-grow-1">
							              <label for="eventLocationLabel" class="visually-hidden">Add location </label>
							              <input type="text" class="form-control form-control-light form-control-borderless" id="eventLocationLabel" placeholder="Add location" aria-label="Add location">
							            </div>
							          </div>
							          <!-- End Media -->

							          <!-- Media -->
							          <div class="d-flex mb-4">
							            <i class="bi-text-left nav-icon mt-2 me-2"></i>
							            <div class="flex-grow-1">
							              <label for="eventDescriptionLabel" class="visually-hidden">Add description </label>
							              <textarea id="eventDescriptionLabel" class="form-control form-control-light form-control-borderless" placeholder="Add description"></textarea>
							            </div>
							          </div>
							          <!-- End Media -->

							          <div class="row">
							            <div class="col">
							              <!-- Media -->
							              <a class="d-flex align-items-center" href="../user-profile.html">
							                <div class="avatar avatar-xs avatar-circle me-3">
							                  <img class="avatar-img" src="../assets/img/160x160/img10.jpg" alt="Image Description">
							                </div>
							                <div class="flex-grow-1">
							                  <span class="d-block fs6 text-body">Assignee:</span>
							                  <span class="h5 text-inherit">Amanda Harvey</span>
							                </div>
							              </a>
							              <!-- End Media -->
							            </div>

							            <div class="col-auto">
							              <label for="eventColorLabel" class="visually-hidden">Event color </label>

							              <!-- Select -->
							              <div class="tom-select-custom">
							                <select id="eventColorLabel" class="js-select form-select" data-hs-tom-select-options='{
							                      "hideSearch": true,
							                      "width": "10rem"
							                    }'>
							                  <option value="rgba(55,125,255,.1)" selected data-option-template='<div><span class="legend-indicator bg-primary"></span>Primary</div>'>Primary </option>
							                  <option value="rgba(0,201,167,.1)" data-option-template='<div><span class="legend-indicator bg-success"></span>Green</div>'>Green </option>
							                  <option value="rgba(237,76,120,.1)" data-option-template='<div><span class="legend-indicator bg-danger"></span>Red</div>'>Red </option>
							                  <option value="rgba(245,202,153,.1)" data-option-template='<div><span class="legend-indicator bg-warning"></span>Yellow</div>'>Yellow </option>
							                  <option value="rgba(0,201,219,1)" data-option-template='<div><span class="legend-indicator bg-info"></span>Cyan</div>'>Cyan </option>
							                  <option value="rgba(19,33,68,1)" data-option-template='<div><span class="legend-indicator bg-dark"></span>Navy</div>'>Navy </option>
							                </select>
							              </div>
							            </div>
							          </div>
							        </div>
							        <!-- End Body -->

							        <!-- Footer -->
							        <div class="modal-footer">
							          <button type="button" id="discardFormt" class="btn btn-white" data-dismiss="modal">Discard </button>
							          <button type="button" id="processEvent" class="btn btn-primary">Create event </button>
							        </div>
							        <!-- End Footer -->
							      </div>
							    </div>
							  </div>
							  <!-- End Modal -->
							
						
							
								<script src="../assets/vendor/daterangepicker/moment.min.js"></script>
								<script src="../assets/vendor/flatpickr/dist/flatpickr.min.js"></script>

								<script>
								(function () {
									let $popover;
									let $fullcalendarEditable;
									let $guestsField;
									const popoverContent = function(data) {
										return `
							  				<ul class="list-unstyled">
												<li class="d-flex">Start: ${moment(data.event.start).format('YYYY-MM-DD hh:mm')}</li>
												<li class="d-flex">End: ${moment(data.event.end).format('YYYY-MM-DD hh:mm')}</li>
												<li class="d-flex">Repeat: ${data.event.extendedProps.repeatField}</li>
												<li class="d-flex">Location: ${data.event.extendedProps.eventLocationLabel}</li>
												<li class="d-flex">Description: ${data.event.extendedProps.eventDescriptionLabel}</li>
												<li>Guests: ${getAvatars(data.event.extendedProps.guestsField)}</li>
											</ul>
											<a id="modal-invoker-${data.event.id}" href="javascript:;" class="btn btn-soft-primary btn-sm">Edit</a>
							`
									};

									const $titleField = document.querySelector('#eventTitle');
									const $repeatField = document.querySelector('#eventRepeatLabel');
									const $eventDescriptionLabel = document.querySelector('#eventDescriptionLabel');
									const $eventLocationLabel = document.querySelector('#eventLocationLabel');
									const $eventColorLabel = document.querySelector('#eventColorLabel');
									const $eventGuestsLabel = document.querySelector('#eventGuestsLabel');
									let editableEvent = {};

									const $processEvent = document.querySelector('#processEvent');
									const $addEventModal = document.querySelector('#addEventModal');

									const addEventModal = new bootstrap.Modal($addEventModal);

									// INITIALIZATION OF FLATPICKR
									// =======================================================
									HSCore.components.HSFlatpickr.init('#eventDateRangeLabel');
									const eventDateRange = HSCore.components.HSFlatpickr.getItem('eventDateRangeLabel')

									HSCore.components.HSTomSelect.init('.js-select')

									HSCore.components.HSTomSelect.init('#eventGuestsLabel', {
										valueField: 'id',
										create: false,
										options: [
											{
												id: 1,
												"value": "Amanda Harvey",
												"src": "../assets/img/160x160/img10.jpg"
											},{
												id: 2,
												"value": "David Harrison",
												"src": "../assets/img/160x160/img3.jpg"
											}, {
												id: 3,
												"value": "Finch Hoot",
												"src": "../assets/img/160x160/img5.jpg"
											}, {
												id: 4,
												"value": "Ella Lauda",
												"src": "../assets/img/160x160/img9.jpg"
											}
										],
										render: {
											option: function(data, escape) {
												return `<div class="d-flex align-items-center">

									<div class="flex-shrink-0">
									  <div class="avatar avatar-sm avatar-circle">
										<img class="avatar-img" src="${data.src}" alt="Image Description">
									  </div>
									</div>
									<div class="flex-grow-1 ms-3">
									  <h5 class="text-inherit mb-0">${data.value}</h5>
									</div>
							   	  </div>`
											},
											item: function(data, escape) {
												return '<div title="' + data.src + '">' + data.value + '</div>';
											}
										}
									})

									$guestsField = HSCore.components.HSTomSelect.getItem('eventGuestsLabel');

									// INITIALIZATION OF FULL CALENDAR
									// =======================================================
									HSCore.components.HSFullCalendar.init('#js-fullcalendar-editable', {
										events: [
											{
												id: 1,
												title: "English Lesson",
												start: "2020-12-03T01:00:00",
												end: "2020-12-03T02:30:00",
												color: "rgba(237,76,120,.1)",
												eventDescriptionLabel: "",
												eventLocationLabel: "",
												repeatField: "everyday",
												guestsField: []
											},
											{
												id: 2,
												title: "Spanish Lesson",
												start: "2020-12-03T04:00:00",
												end: "2020-12-03T05:30:00",
												color: "rgba(55,125,255,.1)",
												eventDescriptionLabel: "",
												eventLocationLabel: "",
												repeatField: "everyday",
												guestsField: []
											},
											{
												id: 3,
												title: "Javascript Lesson",
												start: "2020-12-14T01:00:00",
												end: "2020-12-16T02:30:00",
												color: "rgba(237,76,120,.1)",
												eventDescriptionLabel: "",
												eventLocationLabel: "",
												repeatField: "everyday",
												guestsField: []
											},
											{
												id: 4,
												title: "PHP Lesson",
												start: "2020-12-06T04:00:00",
												end: "2020-12-09T05:30:00",
												color: "rgba(55,125,255,.1)",
												eventDescriptionLabel: "",
												eventLocationLabel: "",
												repeatField: "everyday",
												guestsField: []
											}
										],
										initialDate: "2020-12-10",
										headerToolbar: {
											left: "prev,next today",
											center: "title",
											right: ""
										},
										selectable: true,
										editable: true,
										select: function (date) {
											prepareData('', date.startStr, date.endStr);
										},
										eventClick: function (event) {
											const _popoverContent = popoverContent(event);

											if ($popover && $popover._element) {
												$popover.dispose();
											}

											// Open Popover
											$popover = new bootstrap.Popover(event.el, {
												html: true,
												content: _popoverContent,
												template: `
													<div class="popover fullcalendar-event-popover" role="tooltip">
														<div class="arrow"></div>
														<h3 class="popover-header"></h3>
														<div class="popover-body"></div>
													</div>
												`,
											});
											$popover.show();

											// Open Modal For Editing
											event.el.addEventListener('shown.bs.popover', function () {
												const $invoker = document.querySelector(`#modal-invoker-${event.event.id}`);

												$invoker.addEventListener('click', function () {
													if ($popover && $popover._element) {
														$popover.dispose();
													}

													prepareData(
															event.event.title,
															event.event.start,
															event.event.end,
															event.event
													);
												})
											})
										},
									});

									setTimeout(function() {
										$fullcalendarEditable = HSCore.components.HSFullCalendar.getItem('js-fullcalendar-editable');
									});

									// Events
									document.addEventListener('click', function (e) {
										if (
												(e.target && e.target.id === 'closePopover' && $popover && $popover._element)
												|| (e.target && !e.target.closest('.fc-event') && !e.target.closest('.popover') && $popover && $popover._element)
										) {
											$popover.dispose();
										}
									});

									document.addEventListener('scroll', function () {
										if ($popover && $popover._element) {
											$popover.dispose();
										}
									});

									$processEvent.addEventListener('click', function () {
										const date = eventDateRange.selectedDates;

										if (!Object.keys(editableEvent).length) {
											$fullcalendarEditable.addEvent({
												id: new Date().getTime(),
												title: $titleField.value || '(No title)',
												repeatField: $repeatField.value,
												guestsField: $guestsField.getValue().map((id) => {
													return Object.values($guestsField.options).filter(member => parseInt(member.id) === parseInt(id))[0]
												}),
												eventDescriptionLabel: $eventDescriptionLabel.value,
												eventLocationLabel: $eventLocationLabel.value,
												start: moment(date[0]).format('YYYY-MM-DD'),
												end: date.length > 1 ? moment(date[1]).format('YYYY-MM-DD') : moment(date[0]).format('YYYY-MM-DD'),
												color: $eventColorLabel.value,
											});
										} else {
											editableEvent.setProp('title', $titleField.value);
											editableEvent.setExtendedProp('repeatField', $repeatField.getValue());
											editableEvent.setExtendedProp('guestsField', $guestsField.getValue().map((id) => {
												return Object.values($guestsField.options).filter(member => parseInt(member.id) === parseInt(id))[0]
											}));
											editableEvent.setExtendedProp('eventDescriptionLabel', $eventDescriptionLabel.value);
											editableEvent.setExtendedProp('eventLocationLabel', $eventLocationLabel.value);
											editableEvent.setProp('color', $eventColorLabel.getValue());
											editableEvent.setStart(moment(date[0]).format('YYYY-MM-DD'));
											editableEvent.setEnd(date.length > 1 ? moment(date[1]).format('YYYY-MM-DD') : moment(date[0]).format('YYYY-MM-DD'));
										}

										addEventModal.hide();
									})

									$addEventModal.addEventListener('show.bs.modal', function () {
										clearForm();
									});

									// Helpers
									function triggerEvent(el, evt) {
										const newEvt = document.createEvent('HTMLEvents');

										newEvt.initEvent(evt, false, true);

										el.dispatchEvent(newEvt);
									}

									function prepareData(title, start, end, event = {}) {
										addEventModal.show();

										$processEvent.textContent = 'Save';

										$titleField.value = title;

										eventDateRange.setDate([moment(start).format('MM/DD/YYYY'), moment(end).format('MM/DD/YYYY')])
									}

									function getAvatar(data) {
										return `<img class="avatar-img" src="${data.src.toLowerCase()}"  alt="${data.value}" />`;
									}

									function getAvatars(members) {
										const $list = document.createElement('div');
										$list.classList.add(
												'avatar-group',
												'avatar-group-sm',
												'mb-1'
										);

										for (let i = 0; i < members.length; i += 1) {
											const $item = document.createElement('span');
											$item.classList.add(
													'avatar',
													'avatar-circle'
											);
											$item.innerHTML = `
												${getAvatar(members[i])}
											`;

											$list.appendChild($item);
										}

										return members.length > 0 ? $list.outerHTML : false
									}

									function clearForm() {
										$titleField.value = '';
										$eventDescriptionLabel.value = '';
										$eventLocationLabel.value = '';
										$repeatField.value = 'everyday';
										$eventColorLabel.value = 'rgba(55,125,255,.1)';
										editableEvent = {};

										$guestsField.clear();
										triggerEvent($repeatField, 'change');
										triggerEvent($eventColorLabel, 'change');

										$processEvent.textContent = 'Create Event';
									}
								})();
							 	</script>
							
						

With search

  • Preview
  • HTML
  • JS
							
          			<!-- Input Group -->
								<div class="input-group input-group-merge input-group-flush mb-4">
									<div class="input-group-prepend input-group-text">
										<i class="bi-search"></i>
									</div>
									<input id="filter-by-title" type="search" class="form-control" placeholder="Search by title" aria-label="Search by title">
								</div>
          			<!-- End Input Group -->

								<div id="js-fullcalendar-with-search" class="fullcalendar-custom"></div>
							
						
							
								<script>
									(function () {
										HSCore.components.HSFullCalendar.init('#js-fullcalendar-with-search', {
											events: [
												{
													"title": "English Lesson",
													"start": "2020-09-03T01:00:00",
													"end": "2020-09-03T02:30:00"
												},
												{
													"title": "Spanish Lesson",
													"start": "2020-09-03T04:00:00",
													"end": "2020-09-03T05:30:00"
												},
												{
													"title": "Javascript Lesson",
													"start": "2020-09-14T01:00:00",
													"end": "2020-09-16T02:30:00"
												},
												{
													"title": "PHP Lesson",
													"start": "2020-09-06T04:00:00",
													"end": "2020-09-09T05:30:00"
												}
											],
											initialDate: "2020-09-10",
											headerToolbar: {
												left: "prev,next today",
												center: "title",
												right: ""
											},
											editable: true,
										})

										const filterSearchExample = new HSFullcalendarFilter(HSCore.components.HSFullCalendar.getItem('js-fullcalendar-with-search'))

										filterSearchExample.addFilter('byTitle', function (event) {
											return event.title.toLowerCase().indexOf($('#filter-by-title').val().toLowerCase()) !== -1
										})

										$('#filter-by-title').on('input', function () {
											filterSearchExample.filter()
										})

										filterSearchExample.filter()
									})();
								</script>
							
						

With filters

  • Preview
  • HTML
  • JS
							
								<!-- Form Check -->
	              <div class="form-check form-check-inline">
	                <input type="checkbox" id="customInlineCheck1" class="form-check-input" value="1" checked>
	                <label class="form-check-label" for="customInlineCheck1">category 1 </label>
	              </div>
	              <!-- End Form Check -->

	              <!-- Form Check -->
	              <div class="form-check form-check-inline">
	                <input type="checkbox" id="customInlineCheck2" class="form-check-input indeterminate-checkbox" value="2" checked>
	                <label class="form-check-label" for="customInlineCheck2">category 2 </label>
	              </div>
	              <!-- End Form Check -->

	              <!-- Form Check -->
	              <div class="form-check form-check-inline">
	                <input type="checkbox" id="customInlineCheck3" class="form-check-input" value="3" checked>
	                <label class="form-check-label" for="customInlineCheck3">category 3 </label>
	              </div>
	              <!-- End Form Check -->

		            <div id="js-fullcalendar-with-filters" class="fullcalendar-custom"></div>
							
						
							
								<script>
									(function () {
										HSCore.components.HSFullCalendar.init('#js-fullcalendar-with-filters', {
											events: [
												{
													"title": "English Lesson",
													"start": "2020-09-03T01:00:00",
													"end": "2020-09-03T02:30:00",
													category_id: 1
												},
												{
													"title": "Spanish Lesson",
													"start": "2020-09-03T04:00:00",
													"end": "2020-09-03T05:30:00",
													category_id: 3
												},
												{
													"title": "Javascript Lesson",
													"start": "2020-09-14T01:00:00",
													"end": "2020-09-16T02:30:00",
													category_id: 2
												},
												{
													"title": "PHP Lesson",
													"start": "2020-09-06T04:00:00",
													"end": "2020-09-09T05:30:00",
													category_id: 1
												}
											],
											initialDate: "2020-09-10",
											headerToolbar: {
												left: "prev,next today",
												center: "title",
												right: ""
											},
											editable: true,
										})

										const filterCheckboxExample = new HSFullcalendarFilter(HSCore.components.HSFullCalendar.getItem('js-fullcalendar-with-filters'))

										filterCheckboxExample.addFilter('byCategory', function (event) {
											const selectedCategories = $('[data-filter] input:checked')
											if (!selectedCategories.length) return false
											let show = false

											selectedCategories.each(key => {
												if (event.extendedProps.category_id == $($(selectedCategories)[key]).val()) {
													show = true
													return false
												}
											})

											return show
										})

										$('[data-filter]').on('change', function () {
											filterCheckboxExample.filter()
										})

										filterCheckboxExample.filter()
									})();
								</script>
							
						

Header with Tom Select

  • Preview
  • HTML
  • JS
This example uses tom select library.
							
								<div id="js-fullcalendar-tom-select" class="fullcalendar-custom"></div>
							
						
							
								<script>
									(function () {
										HSCore.components.HSFullCalendar.init('#js-fullcalendar-tom-select', {
											initialDate: "2020-09-10",
											headerToolbar: {
												left: "prev,next today",
												center: "title",
												right: ""
											},
											editable: true,
											events: [
												{
													"title": "English Lesson",
													"start": "2020-09-03T01:00:00",
													"end": "2020-09-03T02:30:00"
												},
												{
													"title": "Spanish Lesson",
													"start": "2020-09-03T04:00:00",
													"end": "2020-09-03T05:30:00"
												},
												{
													"title": "Javascript Lesson",
													"start": "2020-09-14T01:00:00",
													"end": "2020-09-16T02:30:00"
												},
												{
													"title": "PHP Lesson",
													"start": "2020-09-06T04:00:00",
													"end": "2020-09-09T05:30:00"
												}
											]
										})


										// APPEND SELECT CONSTROL IN TOOLBAR TO CHANGE CALENDAR VIEW
										// =======================================================
										const $select = document.createElement('div')
										$select.innerHTML = "<select id=\"changeView\">" +
												"<option value='dayGridMonth'>Month</option>" +
												"<option value='dayGridWeek'>Week</option>" +
												"<option value='dayGridDay'>Day</option>" +
												"</select>"

										document.querySelector('#js-fullcalendar-tom-select .fc-toolbar-chunk:last-child').appendChild($select)

										const fullcalendarWithSelect = HSCore.components.HSFullCalendar.getItem('js-fullcalendar-tom-select')

										// INITIALIZATION OF SELECT
										// =======================================================
										HSCore.components.HSTomSelect.init('#changeView', {
											hideSearch: true
										})

										const selectInstance = HSCore.components.HSTomSelect.getItem('changeView')

										selectInstance.on('change', (val) => {
											fullcalendarWithSelect.changeView(val)
										})
									})()
							 	</script>
							
						

Time Grid

  • Preview
  • HTML
  • JS
							
								<div id="js-fullcalendar-custom-render" class="fullcalendar-custom"></div>
							
						
							
								<script>
								(function () {
									const $eventTimeGridModal = document.querySelector('#eventTimeGridModal');
									const eventContent = function(data) {
										return `
											<div class="d-flex fc-custom-event align-items-center p-2">
												<span class="icon icon-primary me-3">
													<i class="${data.event._def.extendedProps.icon}"></i>
												</span>

												<div class="flex-grow-1">
													<h4 class="mb-1">${data.event.title}</h4>
													<span class="text-body fw-semi-bold">${data.timeText}</span>
												</div>

												<div class="avatar-group avatar-group-sm ms-auto">
													<span class="avatar avatar-circle">
														<img class="avatar-img" src="../assets/img/160x160/img10.jpg" alt="Image Description">
													</span>
													<span class="avatar avatar-dark avatar-circle">
														<span class="avatar-initials">A</span>
													</span>
													<span class="avatar avatar-circle">
														<img class="avatar-img" src="../assets/img/160x160/img3.jpg" alt="Image Description">
													</span>
													<span class="avatar avatar-primary avatar-circle">
														<span class="avatar-initials">2+</span>
													</span>
												</div>
											</div>
										`;
									};

									HSCore.components.HSFullCalendar.init('#js-fullcalendar-custom-render', {
										events: [
											{
												"title": "SOLID in JavaScript Lesson",
												"start": "2020-09-03T07:00:00",
												"end": "2020-09-03T08:30:00",
												icon: "bi-tv"
											},
											{
												"title": "Vue Patterns",
												"start": "2020-09-03T11:00:00",
												"end": "2020-09-03T12:30:00",
												icon: "bi-tv"
											},
										],
										initialDate: "2020-09-03",
										initialView: "timeGrid",
										editable: true,
										eventClick: function () {
											$eventTimeGridModal.show();
										},
										eventContent: function (evt) {
											return {
												html: eventContent(evt),
											}
										},
									});
								})();
							 	</script>
							
						

Custom Header

  • Preview
  • HTML
  • JS
This example uses tom select library.

							
								<div class="row align-items-sm-center mb-4">
		              <div class="col mb-2 mb-sm-0 me-2">
		                <div class="d-sm-flex align-items-sm-center">
		                  <button type="button" class="btn btn-white me-3" data-bs-toggle="tooltip" data-placement="top" title="" data-fc-today>Today </button>
		                  <button type="button" class="btn btn-icon btn-sm btn-ghost-secondary btn-no-focus rounded-circle me-1" data-fc-prev-month data-bs-toggle="tooltip" data-placement="top" title="Previous month">
		                    <i class="bi bi-chevron-left"></i>
		                  </button>

		                  <button type="button" class="btn btn-icon btn-sm btn-ghost-secondary btn-no-focus rounded-circle ms-1" data-fc-next-month data-bs-toggle="tooltip" data-placement="top" title="Next month">
		                    <i class="bi bi-chevron-right"></i>
		                  </button>

		                  <div class="ms-3">
		                    <h4 class="h3 mb-0" data-fc-title></h4>
		                  </div>
		                </div>
		              </div>
		              <!-- End Col -->

		              <div class="col-auto">
		                <!-- Select -->
		                <div class="tom-select-custom">
		                  <select id="customHeaderSelect" class="form-select" size="1" style="opacity: 0;"
		                  			data-fc-grid-view data-hs-tom-select-options='{
		                            "hideSearch": true,
		                            "width": "10rem"
		                          }'>
		                    <option value="dayGridMonth">Month</option>
		                    <option value="dayGridWeek">Week</option>
		                    <option value="dayGridDay">Day</option>
		                  </select>
		                </div>
		                <!-- End Select -->
		              </div>
		              <!-- End Col -->
		            </div>
		            <!-- End Row -->

								<!-- FullCalendar -->
								<div id="js-fullcalendar-custom-header" class="fullcalendar-custom"></div>
								<!-- End FullCalendar -->
							
						
							
								<script>
									(function () {
										const prevMonthBtn = document.querySelector('[data-fc-prev-month]')
										const nextMonthBtn = document.querySelector('[data-fc-next-month]')
										const todayBtn = document.querySelector('[data-fc-today]')
										const dateTitle = document.querySelector('[data-fc-title]')
										let gridViewSelect = document.querySelector('[data-fc-grid-view]')

										HSCore.components.HSFullCalendar.init('#js-fullcalendar-custom-header', {
											initialDate: "2020-09-10",
											headerToolbar: false,
											editable: true,
											datesSet(dateSet) {
												dateTitle.textContent = dateSet.view.title
											},
											events: [
												{
													"title": "English Lesson",
													"start": "2020-09-03T01:00:00",
													"end": "2020-09-03T02:30:00"
												},
												{
													"title": "Spanish Lesson",
													"start": "2020-09-03T04:00:00",
													"end": "2020-09-03T05:30:00"
												},
												{
													"title": "Javascript Lesson",
													"start": "2020-09-14T01:00:00",
													"end": "2020-09-16T02:30:00"
												},
												{
													"title": "PHP Lesson",
													"start": "2020-09-06T04:00:00",
													"end": "2020-09-09T05:30:00"
												}
											]
										})
										const fullcalendarCustomHeader = HSCore.components.HSFullCalendar.getItem('js-fullcalendar-custom-header')

										HSCore.components.HSTomSelect.init(gridViewSelect)
										gridViewSelect = HSCore.components.HSTomSelect.getItem('customHeaderSelect')

										prevMonthBtn.addEventListener('click', function () {
											fullcalendarCustomHeader.prev()
											const tooltip = document.querySelector('.tooltip')
											if (tooltip) {
												tooltip.remove()
											}
										})

										nextMonthBtn.addEventListener('click', function () {
											fullcalendarCustomHeader.next()
											const tooltip = document.querySelector('.tooltip')
											if (tooltip) {
												tooltip.remove()
											}
										})

										todayBtn.addEventListener('click', function () {
											fullcalendarCustomHeader.today()
										})

										gridViewSelect.on('change', (val) => {
											fullcalendarCustomHeader.changeView(val)
										})

										todayBtn.setAttribute('title', new Date().toDateString())
									})()
							 	</script>
							
						
Image Description
Assignee: Amanda Harvey
Event Modal