139 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
/*
 | 
						|
Template Name: Attex - Responsive 5 Admin Dashboard
 | 
						|
Author: CoderThemes
 | 
						|
Website: https://coderthemes.com/
 | 
						|
Contact: support@coderthemes.com
 | 
						|
File: Calendar js
 | 
						|
*/
 | 
						|
 | 
						|
class Calendar {
 | 
						|
 | 
						|
    constructor() {
 | 
						|
        this.body = document.body;
 | 
						|
        this.calendar = document.getElementById('calendar');
 | 
						|
        this.formEvent = document.getElementById('forms-event');
 | 
						|
        this.btnNewEvent = document.getElementById('btn-new-event');
 | 
						|
        this.btnDeleteEvent = document.getElementById('btn-delete-event');
 | 
						|
        this.btnSaveEvent = document.getElementById('btn-save-event');
 | 
						|
        this.calendarObj = null;
 | 
						|
        this.selectedEvent = null;
 | 
						|
        this.newEventData = null;
 | 
						|
    }
 | 
						|
 | 
						|
    onEventClick(info) {
 | 
						|
        this.formEvent?.reset();
 | 
						|
        this.formEvent.classList.remove('was-validated');
 | 
						|
        this.newEventData = null;
 | 
						|
        this.btnDeleteEvent.style.display = "block";
 | 
						|
        this.selectedEvent = info.event;
 | 
						|
        document.getElementById('event-title').value = this.selectedEvent.title;
 | 
						|
        document.getElementById('event-category').value = (this.selectedEvent.classNames[0]);
 | 
						|
    }
 | 
						|
 | 
						|
    init() {
 | 
						|
        /*  Initialize the calendar  */
 | 
						|
        const today = new Date();
 | 
						|
        const self = this;
 | 
						|
        const externalEventContainerEl = document.getElementById('external-events');
 | 
						|
 | 
						|
        new FullCalendar.Draggable(externalEventContainerEl, {
 | 
						|
            itemSelector: '.external-event',
 | 
						|
            eventData: function (eventEl) {
 | 
						|
                return {
 | 
						|
                    title: eventEl.innerText,
 | 
						|
                    classNames: eventEl.getAttribute('data-class')
 | 
						|
                };
 | 
						|
            }
 | 
						|
        });
 | 
						|
 | 
						|
        const defaultEvents = [{
 | 
						|
            title: 'Interview - Backend Engineer',
 | 
						|
            start: today,
 | 
						|
            end: today,
 | 
						|
            className: 'bg-primary'
 | 
						|
        },
 | 
						|
        {
 | 
						|
            title: 'Meeting with CT Team',
 | 
						|
            start: new Date(Date.now() + 13000000),
 | 
						|
            end: today,
 | 
						|
            className: 'bg-warning'
 | 
						|
        },
 | 
						|
        {
 | 
						|
            title: 'Meeting with Mr. Shield',
 | 
						|
            start: new Date(Date.now() + 308000000),
 | 
						|
            end: new Date(Date.now() + 338000000),
 | 
						|
            className: 'bg-info'
 | 
						|
        },
 | 
						|
        {
 | 
						|
            title: 'Interview - Frontend Engineer',
 | 
						|
            start: new Date(Date.now() + 60570000),
 | 
						|
            end: new Date(Date.now() + 153000000),
 | 
						|
            className: 'bg-secondary'
 | 
						|
        },
 | 
						|
        {
 | 
						|
            title: 'Phone Screen - Frontend Engineer',
 | 
						|
            start: new Date(Date.now() + 168000000),
 | 
						|
            className: 'bg-success'
 | 
						|
        },
 | 
						|
        {
 | 
						|
            title: 'Buy Design Assets',
 | 
						|
            start: new Date(Date.now() + 330000000),
 | 
						|
            end: new Date(Date.now() + 330800000),
 | 
						|
            className: 'bg-primary',
 | 
						|
        },
 | 
						|
        {
 | 
						|
            title: 'Setup Github Repository',
 | 
						|
            start: new Date(Date.now() + 1008000000),
 | 
						|
            end: new Date(Date.now() + 1108000000),
 | 
						|
            className: 'bg-danger'
 | 
						|
        },
 | 
						|
        {
 | 
						|
            title: 'Meeting with Mr. Shreyu',
 | 
						|
            start: new Date(Date.now() + 2508000000),
 | 
						|
            end: new Date(Date.now() + 2508000000),
 | 
						|
            className: 'bg-dark'
 | 
						|
        }];
 | 
						|
 | 
						|
        // cal - init
 | 
						|
        self.calendarObj = new FullCalendar.Calendar(self.calendar, {
 | 
						|
 | 
						|
            plugins: [],
 | 
						|
            slotDuration: '00:30:00', /* If we want to split day time each 15minutes */
 | 
						|
            slotMinTime: '07:00:00',
 | 
						|
            slotMaxTime: '19:00:00',
 | 
						|
            themeSystem: 'default',
 | 
						|
            buttonText: {
 | 
						|
                today: 'Today',
 | 
						|
                month: 'Month',
 | 
						|
                week: 'Week',
 | 
						|
                day: 'Day',
 | 
						|
                list: 'List',
 | 
						|
                prev: 'Prev',
 | 
						|
                next: 'Next'
 | 
						|
            },
 | 
						|
            initialView: 'dayGridMonth',
 | 
						|
            handleWindowResize: true,
 | 
						|
            height: window.innerHeight - 285,
 | 
						|
            headerToolbar: {
 | 
						|
                left: 'prev,next today',
 | 
						|
                center: 'title',
 | 
						|
                right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
 | 
						|
            },
 | 
						|
            initialEvents: defaultEvents,
 | 
						|
            editable: true,
 | 
						|
            droppable: true, // this allows things to be dropped onto the calendar !!!
 | 
						|
            // dayMaxEventRows: false, // allow "more" link when too many events
 | 
						|
            selectable: true,
 | 
						|
          
 | 
						|
            eventClick: function (info) {
 | 
						|
                self.onEventClick(info);
 | 
						|
            }
 | 
						|
        });
 | 
						|
 | 
						|
        self.calendarObj.render();
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
document.addEventListener('DOMContentLoaded', function (e) {
 | 
						|
    new Calendar().init();
 | 
						|
}); |