Files
stat_partner/public/assets/js/app-calendar.js
2025-12-28 13:49:00 +01:00

206 lines
6.5 KiB
JavaScript
Executable File

$(function(){
'use strict'
// Datepicker found in left sidebar of the page
var highlightedDays = ['2018-5-10','2018-5-11','2018-5-12','2018-5-13','2018-5-14','2018-5-15','2018-5-16'];
var date = new Date();
$('.fc-datepicker').datepicker({
showOtherMonths: true,
selectOtherMonths: true,
dateFormat: 'yy-mm-dd',
beforeShowDay: function(date) {
var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
for (var i = 0; i < highlightedDays.length; i++) {
if($.inArray(y + '-' + (m+1) + '-' + d,highlightedDays) != -1) {
return [true, 'ui-date-highlighted', ''];
}
}
return [true];
}
});
var generateTime = function(element) {
var n = 0,
min = 30,
periods = [' AM', ' PM'],
times = [],
hours = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
for (var i = 0; i < hours.length; i++) {
times.push(hours[i] + ':' + n + n + periods[0]);
while (n < 60 - min) {
times.push(hours[i] + ':' + ((n += min) < 10 ? 'O' + n : n) + periods[0])
}
n = 0;
}
times = times.concat(times.slice(0).map(function(time) {
return time.replace(periods[0], periods[1])
}));
//console.log(times);
$.each(times, function(index, val){
$(element).append('<option value="'+val+'">'+val+'</option>');
});
}
generateTime('.az-event-time');
// Initialize fullCalendar
$('#calendar').fullCalendar({
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay,listWeek'
},
navLinks: true,
selectable: true,
selectLongPressDelay: 100,
editable: true,
nowIndicator: true,
defaultView: 'listMonth',
views: {
agenda: {
columnHeaderHtml: function(mom) {
return '<span>' + mom.format('ddd') + '</span>' +
'<span>' + mom.format('DD') + '</span>';
}
},
day: { columnHeader: false },
listMonth: {
listDayFormat: 'ddd DD',
listDayAltFormat: false
},
listWeek: {
listDayFormat: 'ddd DD',
listDayAltFormat: false
},
agendaThreeDay: {
type: 'agenda',
duration: { days: 3 },
titleFormat: 'MMMM YYYY'
}
},
eventSources: [azCalendarEvents, azBirthdayEvents, azHolidayEvents, azOtherEvents],
eventAfterAllRender: function(view) {
if(view.name === 'listMonth' || view.name === 'listWeek') {
var dates = view.el.find('.fc-list-heading-main');
dates.each(function(){
var text = $(this).text().split(' ');
var now = moment().format('DD');
$(this).html(text[0]+'<span>'+text[1]+'</span>');
if(now === text[1]) { $(this).addClass('now'); }
});
}
console.log(view.el);
},
eventRender: function(event, element) {
if(event.description) {
element.find('.fc-list-item-title').append('<span class="fc-desc">' + event.description + '</span>');
element.find('.fc-content').append('<span class="fc-desc">' + event.description + '</span>');
}
var eBorderColor = (event.source.borderColor)? event.source.borderColor : event.borderColor;
element.find('.fc-list-item-time').css({
color: eBorderColor,
borderColor: eBorderColor
});
element.find('.fc-list-item-title').css({
borderColor: eBorderColor
});
element.css('borderLeftColor', eBorderColor);
},
});
var azCalendar = $('#calendar').fullCalendar('getCalendar');
// change view to week when in tablet
if(window.matchMedia('(min-width: 576px)').matches) {
azCalendar.changeView('agendaWeek');
}
// change view to month when in desktop
if(window.matchMedia('(min-width: 992px)').matches) {
azCalendar.changeView('month');
}
// change view based in viewport width when resize is detected
azCalendar.option('windowResize', function(view) {
if(view.name === 'listWeek') {
if(window.matchMedia('(min-width: 992px)').matches) {
azCalendar.changeView('month');
} else {
azCalendar.changeView('listWeek');
}
}
});
// display current date
var azDateNow = azCalendar.getDate();
azCalendar.option('select', function(startDate, endDate){
$('#modalSetSchedule').modal('show');
$('#azEventStartDate').val(startDate.format('LL'));
$('#azEventEndDate').val(endDate.format('LL'));
$('#azEventStartTime').val(startDate.format('LT')).trigger('change');
$('#azEventEndTime').val(endDate.format('LT')).trigger('change');
});
// Display calendar event modal
azCalendar.on('eventClick', function(calEvent, jsEvent, view){
var modal = $('#modalCalendarEvent');
modal.modal('show');
modal.find('.event-title').text(calEvent.title);
if(calEvent.description) {
modal.find('.event-desc').text(calEvent.description);
modal.find('.event-desc').prev().removeClass('d-none');
} else {
modal.find('.event-desc').text('');
modal.find('.event-desc').prev().addClass('d-none');
}
modal.find('.event-start-date').text(moment(calEvent.start).format('LLL'));
modal.find('.event-end-date').text(moment(calEvent.end).format('LLL'));
//styling
modal.find('.modal-header').css('backgroundColor', (calEvent.source.borderColor)? calEvent.source.borderColor : calEvent.borderColor);
});
// Enable/disable calendar events from displaying in calendar
$('.az-nav-calendar-event a').on('click', function(e){
e.preventDefault();
if($(this).hasClass('exclude')) {
$(this).removeClass('exclude');
$(this).is(':first-child')? azCalendar.addEventSource(azCalendarEvents) : '';
$(this).is(':nth-child(2)')? azCalendar.addEventSource(azBirthdayEvents) : '';
$(this).is(':nth-child(3)')? azCalendar.addEventSource(azHolidayEvents) : '';
$(this).is(':nth-child(4)')? azCalendar.addEventSource(azOtherEvents) : '';
} else {
$(this).addClass('exclude');
$(this).is(':first-child')? azCalendar.removeEventSource(1) : '';
$(this).is(':nth-child(2)')? azCalendar.removeEventSource(2) : '';
$(this).is(':nth-child(3)')? azCalendar.removeEventSource(3) : '';
$(this).is(':nth-child(4)')? azCalendar.removeEventSource(4) : '';
}
azCalendar.render();
if(window.matchMedia('(max-width: 575px)').matches) {
$('body').removeClass('az-content-left-show');
}
});
})