sigd/public/assets/js/pages/calendar.init.js

209 lines
6.4 KiB
JavaScript
Executable File

/*
Template Name: webadmin - Admin & Dashboard Template
Author: Themesdesign
Website: https://Themesdesign.com/
Contact: Themesdesign@gmail.com
File: Calendar init js
*/
document.addEventListener("DOMContentLoaded", function () {
var addEvent = new bootstrap.Modal(document.getElementById('event-modal'), {
keyboard: false
})
document.getElementById('event-modal');
var modalTitle = document.getElementById('modal-title');
var formEvent = document.getElementById('form-event');
var selectedEvent = null;
var newEventData = null;
var forms = document.getElementsByClassName('needs-validation');
var selectedEvent = null;
var newEventData = null;
var eventObject = null;
/* initialize the calendar */
var date = new Date();
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
var Draggable = FullCalendar.Draggable;
var externalEventContainerEl = document.getElementById('external-events');
// init dragable
new Draggable(externalEventContainerEl, {
itemSelector: '.external-event',
eventData: function (eventEl) {
return {
title: eventEl.innerText,
start: new Date(),
className: eventEl.getAttribute('data-class')
};
}
});
var defaultEvents = [{
title: 'All Day Event',
start: new Date(y, m, 1),
className: 'bg-primary'
},
{
title: 'Long Event',
start: new Date(y, m, d - 5),
end: new Date(y, m, d - 2),
className: 'bg-warning'
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d - 3, 16, 0),
allDay: false,
className: 'bg-info'
},
{
id: 999,
title: 'Repeating Event',
start: new Date(y, m, d + 4, 16, 0),
allDay: false,
className: 'bg-primary'
},
{
title: 'Meeting',
start: new Date(y, m, d, 10, 30),
allDay: false,
className: 'bg-success'
},
{
title: 'Lunch',
start: new Date(y, m, d, 12, 0),
end: new Date(y, m, d, 14, 0),
allDay: false,
className: 'bg-danger'
},
{
title: 'Birthday Party',
start: new Date(y, m, d + 1, 19, 0),
end: new Date(y, m, d + 1, 22, 30),
allDay: false,
className: 'bg-success'
},
{
title: 'Click for Google',
start: new Date(y, m, 28),
end: new Date(y, m, 29),
url: 'http://google.com/',
className: 'bg-dark'
}];
var draggableEl = document.getElementById('external-events');
var calendarEl = document.getElementById('calendar');
function addNewEvent(info) {
addEvent.show();
formEvent.classList.remove("was-validated");
formEvent.reset();
selectedEvent = null;
modalTitle.innerText = 'Add Event';
newEventData = info;
}
function getInitialView() {
if (window.innerWidth >= 768 && window.innerWidth < 1200) {
return 'timeGridWeek';
} else if (window.innerWidth <= 768) {
return 'listMonth';
} else {
return 'dayGridMonth';
}
}
var calendar = new FullCalendar.Calendar(calendarEl, {
timeZone: 'local',
editable: true,
droppable: true,
selectable: true,
initialView: getInitialView(),
themeSystem: 'bootstrap',
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
},
// responsive
windowResize: function (view) {
var newView = getInitialView();
calendar.changeView(newView);
},
eventDidMount: function (info) {
if (info.event.extendedProps.status === 'done') {
// Change background color of row
info.el.style.backgroundColor = 'red';
// Change color of dot marker
var dotEl = info.el.getElementsByClassName('fc-event-dot')[0];
if (dotEl) {
dotEl.style.backgroundColor = 'white';
}
}
},
eventClick: function (info) {
document.getElementById("btn-delete-event").style.display = "block";
addEvent.show();
formEvent.reset();
document.getElementById("event-title").value[0] = "";
selectedEvent = info.event;
document.getElementById("event-title").value = selectedEvent.title;
document.getElementById('event-category').value = selectedEvent.classNames[0];
newEventData = null;
modalTitle.innerText = 'Edit Event';
newEventData = null;
},
dateClick: function (info) {
document.getElementById("btn-delete-event").style.display = "none";
addNewEvent(info);
},
events: defaultEvents
});
calendar.render();
/*Add new event*/
// Form to add new event
formEvent.addEventListener('submit', function (ev) {
ev.preventDefault();
var updatedTitle = document.getElementById("event-title").value;
var updatedCategory = document.getElementById('event-category').value;
// validation
if (forms[0].checkValidity() === false) {
forms[0].classList.add('was-validated');
} else {
if (selectedEvent) {
selectedEvent.setProp("title", updatedTitle);
selectedEvent.setProp("classNames", [updatedCategory]);
} else {
var newEvent = {
title: updatedTitle,
start: newEventData.date,
allDay: newEventData.allDay,
className: updatedCategory
}
calendar.addEvent(newEvent);
}
addEvent.hide();
}
});
document.getElementById("btn-delete-event").addEventListener("click", function (e) {
if (selectedEvent) {
selectedEvent.remove();
selectedEvent = null;
selectedEvent.hide();
}
});
document.getElementById("btn-new-event").addEventListener("click", function (e) {
document.getElementById("btn-delete-event").style.display = "none";
addNewEvent({ date: new Date(), allDay: true });
});
});