Files
Reservair/includes/RsvAssetsDefinition.php
T

98 lines
4.3 KiB
PHP
Raw Normal View History

2026-06-11 19:03:29 +02:00
<?php
/**
* Defines assets that must be included to the client. Separated into assets for
* admin and the default user.
*/
function rsv_asset_url(string $relative): string {
return plugin_dir_url(__FILE__) . '../assets/' . $relative;
}
function rsv_asset_file(string $relative): string {
return plugin_dir_path(__FILE__) . '../assets/' . $relative;
}
function rsv_js(string $handle, string $relative, array $deps = []): void {
wp_enqueue_script($handle, rsv_asset_url($relative), $deps, filemtime(rsv_asset_file($relative)));
}
function rsv_css(string $handle, string $relative): void {
wp_enqueue_style($handle, rsv_asset_url($relative), [], filemtime(rsv_asset_file($relative)));
}
// --- Shared between frontend and admin ---
function rsv_enqueue_shared_assets(): void {
rsv_js('rsv_calendar', 'js/elements/RsvCalendar.js');
rsv_js('rsv_timeline', 'js/elements/RsvTimeline.js');
rsv_js('rsv_api', 'js/RsvApi.js');
rsv_js('reservation_selector', 'js/elements/RsvReservationSelector.js');
rsv_js('rsv_reservation_summary', 'js/elements/RsvReservationSummary.js');
rsv_js('rsv_data_source', 'js/datasource/RsvDataSource.js');
rsv_js('rsv_reservation_resource', 'js/datasource/RsvReservationResource.js');
rsv_js('rsv_form_definition_resource', 'js/datasource/RsvFormDefinitionResource.js');
rsv_js('rsv_timetable_resource', 'js/datasource/RsvTimetableResource.js');
rsv_js('rsv_timetable_capacity_resource', 'js/datasource/RsvTimetableCapacityResource.js');
rsv_js('rsv_timetable_reservation_resource', 'js/datasource/RsvTimetableReservationResource.js');
rsv_js('rsv_reservation_client', 'js/datasource/RsvReservationClient.js');
wp_localize_script('rsv_api', 'ReservairServiceAPI', [
'restUrl' => rest_url('reservations/v1'),
'nonce' => wp_create_nonce('wp_rest'),
]);
wp_localize_script('rsv_api', 'ReservairStrings', [
'timeline' => [
'not_reservable' => 'Tento objekt nelze rezervovat.',
'no_blocks' => 'Tento den není dostupný žádný blok. Vyberte jiné datum.',
'seats' => 'míst',
],
'summary' => [
'title' => 'Vybrané termíny',
'clear_all' => 'Smazat vše',
'count_one' => '1 termín',
'count_few' => '%d termíny',
'count_many' => '%d termínů',
'currency' => 'Kč',
],
'form' => [
'success_title' => 'Rezervace potvrzena!',
'success_subtitle' => 'Potvrzení jsme zaslali na váš email.',
'new_reservation' => 'Nová rezervace',
'error_generic' => 'Něco se pokazilo. Zkuste to prosím znovu.',
],
]);
rsv_css('reservations-styles', 'css/RsvMainStyle.css');
rsv_css('rsv-form-summary-styles', 'css/components/RsvFormSummaryStyles.css');
rsv_css('rsv-calendar-styles', 'css/components/RsvCalendarStyles.css');
rsv_css('rsv-form-styles', 'css/components/RsvFormStyles.css');
rsv_css('rsv-time-slot-styles', 'css/components/RsvTimeSlotsStyles.css');
}
// --- Public hooks ---
function rsv_enqueue_assets(): void {
rsv_enqueue_shared_assets();
rsv_js('rsv_timetable_service', 'js/services/RsvTimetableService.js');
rsv_js('rsv_form_sender', 'js/forms/RsvFormSender.js');
rsv_js('rsv_form_encoder', 'js/forms/RsvFormEncoder.js');
}
function rsv_enqueue_admin_assets(): void {
rsv_enqueue_shared_assets();
$admin_js = plugin_dir_path(__FILE__) . '../src/components/admin.js';
wp_enqueue_script('admin', plugin_dir_url(__FILE__) . '../src/components/admin.js', [], filemtime($admin_js));
rsv_js('rsv_inline_form_builder', 'js/forms/RsvInlineFormBuilder.js');
rsv_js('datagrid', 'js/elements/RsvDatagrid.js');
rsv_js('rsv_form_encoder', 'js/forms/RsvFormEncoder.js');
// RsvAdminForm needs the encoder, the localized nonce (rsv_api), and
// show_notice() (admin) — declare them as deps so load order is correct.
rsv_js('rsv_admin_form', 'js/forms/RsvAdminForm.js', ['rsv_form_encoder', 'rsv_api', 'admin']);
rsv_css('rsv-admin-style', 'css/RsvAdminStyle.css');
}