iflrandevu/assets/js/pages/backend_calendar.js

128 lines
4.8 KiB
JavaScript
Executable file

/* ----------------------------------------------------------------------------
* Easy!Appointments - Open Source Web Scheduler
*
* @package EasyAppointments
* @author A.Tselegidis <alextselegidis@gmail.com>
* @copyright Copyright (c) Alex Tselegidis
* @license https://opensource.org/licenses/GPL-3.0 - GPLv3
* @link https://easyappointments.org
* @since v1.0.0
* ---------------------------------------------------------------------------- */
/**
* Backend Calendar
*
* This module contains functions that are used by the backend calendar page.
*
* @module BackendCalendar
*/
window.BackendCalendar = window.BackendCalendar || {};
(function (exports) {
'use strict';
/**
* Bind common event handlers.
*/
function bindEventHandlers() {
var $calendarPage = $('#calendar-page');
$calendarPage.on('click', '#toggle-fullscreen', function () {
var $toggleFullscreen = $(this);
var element = document.documentElement;
var isFullScreen = document.fullScreenElement || document.mozFullScreen || document.webkitIsFullScreen;
if (isFullScreen) {
// Exit fullscreen mode.
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
}
$toggleFullscreen.removeClass('btn-success').addClass('btn-light');
} else {
// Switch to fullscreen mode.
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
}
$toggleFullscreen.removeClass('btn-light').addClass('btn-success');
}
});
$('#insert-working-plan-exception').on('click', function () {
var providerId = $('#select-filter-item').val();
var provider = GlobalVariables.availableProviders.find(function (availableProvider) {
return Number(availableProvider.id) === Number(providerId);
});
if (!provider) {
throw new Error('Provider could not be found: ' + providerId);
}
App.Components.WorkingPlanExceptionsModal.add().done(function (date, workingPlanException) {
var successCallback = function () {
Backend.displayNotification(App.Lang.working_plan_exception_saved);
var workingPlanExceptions = JSON.parse(provider.settings.working_plan_exceptions) || {};
workingPlanExceptions[date] = workingPlanException;
for (var index in GlobalVariables.availableProviders) {
var availableProvider = GlobalVariables.availableProviders[index];
if (Number(availableProvider.id) === Number(providerId)) {
GlobalVariables.availableProviders[index].settings.working_plan_exceptions =
JSON.stringify(workingPlanExceptions);
break;
}
}
$('#select-filter-item').trigger('change'); // Update the calendar.
};
BackendCalendarApi.saveWorkingPlanException(
date,
workingPlanException,
providerId,
successCallback,
null
);
});
});
}
/**
* Initialize Module
*
* This function makes the necessary initialization for the default backend calendar page. If this module
* is used in another page then this function might not be needed.
*
* @param {String} view Optional (default), the calendar view to be loaded.
*/
exports.initialize = function (view) {
BackendCalendarGoogleSync.initialize();
BackendCalendarAppointmentsModal.initialize();
BackendCalendarUnavailabilityEventsModal.initialize();
// Load and initialize the calendar view.
if (view === 'table') {
BackendCalendarTableView.initialize();
} else {
BackendCalendarDefaultView.initialize();
}
bindEventHandlers();
};
})(window.BackendCalendar);