PluginProbe
Booking Calendar / 11.9
Booking Calendar v11.9
11.9 11.8.4 11.8.3 11.8.2 11.8.1 11.8 11.7 11.6.1 11.6 11.5 11.4.3 11.4.2 11.4.1 11.4 11.3 11.2.1 11.2 11.1 11.0 10.15.7 10.15.6 10.1.3 10.10 10.10.1 10.10.2 All 205 releases
booking / includes / page-setup-wizard / booking-pages / _src / booking-pages-dialog.js

booking-pages-dialog.js in Booking Calendar 11.9, at includes/page-setup-wizard/booking-pages/_src/booking-pages-dialog.js

114 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Published booking-pages dialog adapter.
3 *
4 * @package Booking Calendar
5 */
6 ( function( window, document, $ ) {
7 'use strict';
8
9 var config = window.wpbc_setup_wizard_booking_pages_vars || {};
10 var dismissal_request = null;
11 var dialog_started = false;
12 var previous_focus = null;
13
14 /**
15 * Restore focus after the dialog is removed.
16 *
17 * @return {void}
18 */
19 function restore_focus() {
20 var fallback_focus;
21
22 if ( previous_focus && document.body !== previous_focus && document.contains( previous_focus ) ) {
23 previous_focus.focus();
24 return;
25 }
26 fallback_focus = document.querySelector( '[data-wpbc-booking-pages-open-dialog], #wpbc_booking_listing_add_booking_button, .wpbc_ui_el__top_nav a, #wpbody-content h1' );
27 if ( fallback_focus && 'function' === typeof fallback_focus.focus ) {
28 fallback_focus.focus();
29 }
30 }
31
32 /**
33 * Persist automatic prompt consumption once.
34 *
35 * @return {jqXHR|null} Active request, or null without an AJAX contract.
36 */
37 function persist_dismissal() {
38 if ( dismissal_request ) {
39 return dismissal_request;
40 }
41 if ( ! config.ajax_url || ! config.action || ! config.nonce ) {
42 return null;
43 }
44 dismissal_request = $.post( config.ajax_url, { action: config.action, nonce: config.nonce } );
45 return dismissal_request;
46 }
47
48 /**
49 * Open the dialog with authorized localized card data.
50 *
51 * @param {boolean} should_consume_prompt Whether closing consumes automatic display.
52 * @param {Element|null} return_focus Control that should regain focus.
53 * @return {void}
54 */
55 function show_dialog( should_consume_prompt, return_focus ) {
56 var template;
57 var $modal;
58 var dismissal_started = false;
59
60 if ( dialog_started || ! Array.isArray( config.booking_pages ) || ! config.booking_pages.length || ! window.wp || 'function' !== typeof window.wp.template || 'function' !== typeof $.fn.wpbc_my_modal || ! document.getElementById( 'tmpl-wpbc-setup-wizard-booking-pages-popup' ) ) {
61 return;
62 }
63
64 previous_focus = return_focus || document.activeElement;
65 dialog_started = true;
66 template = window.wp.template( 'wpbc-setup-wizard-booking-pages-popup' );
67 $( document.body ).append( template( {
68 booking_pages: config.booking_pages,
69 description: config.description || '',
70 dismiss_label: config.dismiss_label || ''
71 } ) );
72 $modal = $( '#wpbc_setup_wizard_booking_pages_popup' );
73 $modal.find( '.wpbc_setup_wizard_booking_pages_popup__image img' ).on( 'error.wpbcSetupBookingPages', function() {
74 $( this ).closest( '.wpbc_setup_wizard_booking_pages_popup__image' ).remove();
75 } );
76
77 $modal.on( 'shown.wpbc.modal.wpbcSetupBookingPages', function() {
78 $modal.attr( 'aria-hidden', 'false' );
79 $( '.modal-backdrop' ).last().addClass( 'wpbc_setup_wizard_booking_pages_popup__backdrop' );
80 $modal.find( '[data-wpbc-booking-pages-open]' ).first().trigger( 'focus' );
81 } );
82 $modal.on( 'hide.wpbc.modal.wpbcSetupBookingPages', function() {
83 if ( should_consume_prompt && ! dismissal_started ) {
84 dismissal_started = true;
85 persist_dismissal();
86 }
87 } );
88 $modal.on( 'hidden.wpbc.modal.wpbcSetupBookingPages', function() {
89 $modal.attr( 'aria-hidden', 'true' ).remove();
90 dialog_started = false;
91 restore_focus();
92 } );
93 $modal.on( 'click.wpbcSetupBookingPages', '[data-wpbc-booking-pages-dismiss]', function( event ) {
94 event.preventDefault();
95 $modal.wpbc_my_modal( 'hide' );
96 } );
97 $modal.wpbc_my_modal( { backdrop: 'static', keyboard: true, show: true } );
98 }
99
100 $( document ).on( 'click.wpbcSetupBookingPagesLauncher', '[data-wpbc-booking-pages-open-dialog]', function( event ) {
101 event.preventDefault();
102 show_dialog( false, event.currentTarget );
103 } );
104 $( document ).on( 'wpbc:setup-booking-pages-open', function( event, options ) {
105 options = options || {};
106 show_dialog( !! options.consume_prompt, options.return_focus || null );
107 } );
108 $( function() {
109 if ( config.show ) {
110 show_dialog( true, document.activeElement );
111 }
112 } );
113 }( window, document, window.jQuery ) );
114