Logo Logo Nue Package
Getting Started Introduction
Getting Started Gulp
Getting Started Customization
Getting Started Credits
Getting Started Changelog
Design & Graphics Bootstrap Icons
Design & Graphics Illustrations
Components Accordion
Components Alerts
Components Avatars
Components Badge
Components Breadcrumb
Components Buttons
Components Button group
Components Cards
Components Collapse
Components Column divider
Components Devices
Components Divider
Components Dropdowns
Components Icons
Components List Group
Components Lists
Components Legend Indicator
Components Modal
Components Offcanvas
Components Page Header
Components Pagination
Components Popovers
Components Progress
Components Profile
Components Shapes
Components Sliding Image
Components Spinners
Components Steps
Components Tab
Components Toasts
Components Tooltips
Components Typography
Navbars Navbar
Navbars Navs
Navbars Mega Menu
Navbars Navbar Vertical Aside
Navbars Scrollspy
Tables Tables
Tables Datatables
Tables Sticky Header
Basic forms Basic forms
Basic forms Checks and switches
Basic forms Input group
Utilities Backgrounds
Utilities Borders
Utilities Colors
Utilities Links
Utilities Position
Utilities Rotations
Utilities Shadows
Utilities Sizing
Utilities Spacing
Utilities Z-index
Utilities Opacity
Advanced forms Advanced select
Advanced forms Datepicker
Advanced forms Date Range Picker
Advanced forms Calendar (Fullcalendar)
Advanced forms File attachments
Advanced forms Drag’ n’ drop file uploads
Advanced forms WYSIWYG Editor
Advanced forms Quantity counter
Advanced forms Copy to Clipboard
Advanced forms Input mask
Advanced forms Step forms (Wizards)
Advanced forms Wizards
Advanced forms Add field
Advanced forms Toggle password
Advanced forms Count characters
Advanced forms Form Search
Advanced forms Toggle switch
Advanced forms Google reCAPTCHA
Others Chart.js
Others Counter
Others Circles.js (Pie Chart)
Others Fullscreen Lightbox
Others Leaflet
Others JSVectorMap
Others SortableJS
Others Sticky block
Others Go To

No Results

  • Preview Demo
Logo Nµe
  • Nue
  • UI (HTML)
  • Getting Started
  • Introduction
  • Credits
  • Design & Graphics
  • Bootstrap Icons
  • Iconify Design
  • 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 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
  • Utility
  • Backgrounds
  • Borders
  • Colors
  • Links
  • Position
  • Shadows
  • Sizing
  • Spacing
  • Z-Index
  • Opacity

Calendar (Fullcalendar)

The most popular full-sized JavaScript Calendar.

Dokumentasi Fullcalendar

Cara Pakai

Copy-paste script berikut sebelum tag penutup <body>:

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

Basic example

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

Drag-n-drop events

  • Preview
  • HTML
  • JS

Drag these onto the calendar:

  • ... Open a new task on Jira
  • ... Send weekly invoice to John
  • ... 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": "https://cdn.btekno.id/templates/nue/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="https://cdn.btekno.id/templates/nue/svg/brands/jira-icon.svg" alt="...">
                    <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": "https://cdn.btekno.id/templates/nue/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="https://cdn.btekno.id/templates/nue/svg/brands/excel-icon.svg" alt="...">
                    <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": "https://cdn.btekno.id/templates/nue/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="https://cdn.btekno.id/templates/nue/svg/brands/slack-icon.svg" alt="...">
                    <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="...">` : ''}
                    <span class="fc-event-title fc-sticky">${data.title}</span>
                  </div>
                `;
              };

              Nue.components.NueFullCalendar.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
        
          <!-- 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-nue-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-nue-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-nue-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="https://cdn.btekno.id/templates/nue/img/160x160/img10.jpg" alt="...">
                        </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-nue-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="../node_modules/daterangepicker/moment.min.js"></script>
          <script src="../node_modules/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
            // =======================================================
            Nue.components.NueFlatpickr.init('#eventDateRangeLabel');
            const eventDateRange = Nue.components.NueFlatpickr.getItem('eventDateRangeLabel')

            Nue.components.NueSelect.init('.js-select')

            Nue.components.NueSelect.init('#eventGuestsLabel', {
              valueField: 'id',
              create: false,
              options: [
                {
                  id: 1,
                  "value": "Amanda Harvey",
                  "src": "https://cdn.btekno.id/templates/nue/img/160x160/img10.jpg"
                },{
                  id: 2,
                  "value": "David Harrison",
                  "src": "https://cdn.btekno.id/templates/nue/img/160x160/img3.jpg"
                }, {
                  id: 3,
                  "value": "Finch Hoot",
                  "src": "https://cdn.btekno.id/templates/nue/img/160x160/img5.jpg"
                }, {
                  id: 4,
                  "value": "Ella Lauda",
                  "src": "https://cdn.btekno.id/templates/nue/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="...">
              </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 = Nue.components.NueSelect.getItem('eventGuestsLabel');

            // INITIALIZATION OF FULL CALENDAR
            // =======================================================
            Nue.components.NueFullCalendar.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 = Nue.components.NueFullCalendar.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 () {
              Nue.components.NueFullCalendar.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 NueFullcalendarFilter(Nue.components.NueFullCalendar.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 () {
              Nue.components.NueFullCalendar.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 NueFullcalendarFilter(Nue.components.NueFullCalendar.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
        
          <div id="js-fullcalendar-tom-select" class="fullcalendar-custom"></div>
        
      
        
          <script>
            (function () {
              Nue.components.NueFullCalendar.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 = Nue.components.NueFullCalendar.getItem('js-fullcalendar-tom-select')

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

              const selectInstance = Nue.components.NueSelect.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="https://cdn.btekno.id/templates/nue/img/160x160/img10.jpg" alt="...">
                    </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="https://cdn.btekno.id/templates/nue/img/160x160/img3.jpg" alt="...">
                    </span>
                    <span class="avatar avatar-primary avatar-circle">
                      <span class="avatar-initials">2+</span>
                    </span>
                  </div>
                </div>
              `;
            };

            Nue.components.NueFullCalendar.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

        
          <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-nue-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]')

              Nue.components.NueFullCalendar.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 = Nue.components.NueFullCalendar.getItem('js-fullcalendar-custom-header')

              Nue.components.NueSelect.init(gridViewSelect)
              gridViewSelect = Nue.components.NueSelect.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>
        
      
...
Assignee: Amanda Harvey
Event Modal