PluginProbe
Booking Calendar / 11.8.4
Booking Calendar v11.8.4
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 10.11 All 204 releases
← All changes | includes/page-setup/_src/setup_show.js +132 -13 10.15.611.8.4 View file →
@@ -1,10 +1,10 @@
1 1 "use strict";
2 2
3 3 /**
4 4 * Parameters usually defined in Ajax Response or Front-End for == _wpbc_settings.get_all_params__setup_wizard():
5 5 *
6 - * In Front-End side as JavaScript :: wpbc_ajx__setup_wizard_page__send_request_with_params( { 'current_step': 'optional_other_settings', 'do_action': 'none', 'ui_clicked_element_id': 'btn__toolbar__buttons_prior' } );
6 + * In Front-End side as JavaScript :: wpbc_ajx__setup_wizard_page__send_request_with_params( { 'current_step': 'date_availability', 'do_action': 'none', 'ui_clicked_element_id': 'btn__toolbar__buttons_prior' } );
7 7 *
8 8 * After Ajax response in setup_ajax.js as :: _wpbc_settings.set_params_arr__setup_wizard( response_data[ 'ajx_data' ] );
9 9 *
10 10 */
@@ -39,9 +39,9 @@
39 39 // Send Ajax Request
40 40 wpbc_ajx__setup_wizard_page__send_request();
41 41 }
42 42 // Example 1: wpbc_ajx__setup_wizard_page__send_request_with_params( { 'page_num': page_number } );
43 -// Example 2: wpbc_ajx__setup_wizard_page__send_request_with_params( { 'current_step': 'optional_other_settings', 'do_action': 'none', 'ui_clicked_element_id': 'btn__toolbar__buttons_prior' } );
43 +// Example 2: wpbc_ajx__setup_wizard_page__send_request_with_params( { 'current_step': 'date_availability', 'do_action': 'none', 'ui_clicked_element_id': 'btn__toolbar__buttons_prior' } );
44 44
45 45
46 46 // =====================================================================================================================
47 47 // == Show / Hide Content ==
@@ -108,16 +108,23 @@
108 108 }
109 109
110 110 function wpbc_setup_wizard_page__get_actual_step_number() {
111 111
112 - var params_arr = _wpbc_settings.get_all_params__setup_wizard().steps
113 - var steps_finished = 1
112 + var setup_params = _wpbc_settings.get_all_params__setup_wizard();
113 + var params_arr = setup_params.steps;
114 + var current_step = setup_params.current_step;
115 + var step_number = 1;
116 + var found_step = false;
117 +
114 118 _.each( params_arr, function ( p_val, p_key, p_data ) {
115 - if ( p_val.is_done ){
116 - steps_finished++;
119 + if ( p_key === current_step ) {
120 + found_step = true;
121 + return false;
117 122 }
123 + step_number++;
118 124 } );
119 - return steps_finished;
125 +
126 + return found_step ? step_number : 1;
120 127 }
121 128
122 129 function wpbc_setup_wizard_page__update_steps_status( steps_is_done_arr ){
123 130
@@ -133,9 +140,9 @@
133 140
134 141 }
135 142
136 143
137 -function wpbc_setup_wizard_page__is_all_steps_completed(){
144 +function wpbc_setup_wizard_page__is_all_steps_completed(){
138 145
139 146 var params_arr = _wpbc_settings.get_all_params__setup_wizard().steps
140 147 var status = true;
141 148
@@ -145,9 +152,106 @@
145 152 }
146 153 } );
147 154
148 155 return status;
149 -}
156 +}
157 +
158 +/**
159 + * Show the configuration controls belonging to the selected booking behavior.
160 + *
161 + * @return {void}
162 + */
163 +function wpbc_setup_wizard_page__refresh_booking_type_details() {
164 +
165 + var booking_type = jQuery( '[name="wpbc_swp_booking_types"]:checked' ).val() || '';
166 + var fixed_appointment_type = jQuery( '[name="wpbc_swp_booking_mode"]:checked' )
167 + .closest( '.wpbc_setup_mode_choice' )
168 + .attr( 'data-wpbc-setup-fixed-appointment-type' ) || '';
169 + var is_fixed_appointment_mode = 'durationtime' === fixed_appointment_type;
170 + var $canonical_times_picker = jQuery( '[name="wpbc_swp_booking_timeslot_picker"]' );
171 + var $appointment_times_picker = jQuery( '[name="wpbc_swp_booking_timeslot_picker_appointment"]' );
172 +
173 + jQuery( '.wpbc_in_radio_container_selectbox' ).hide();
174 + jQuery( '.wpbc_setup_appointment_mode_configuration' ).hide();
175 +
176 + if ( is_fixed_appointment_mode ) {
177 + if ( $canonical_times_picker.length && $appointment_times_picker.length ) {
178 + $appointment_times_picker.val( $canonical_times_picker.val() );
179 + }
180 + jQuery( '.wpbc_setup_appointment_mode_configuration' ).show();
181 + } else if ( 'time_slots_appointments' === booking_type ) {
182 + jQuery( '.wpbc_ui_booking_timeslot_picker__get_on_off__div' ).show();
183 + } else if ( 'changeover_multi_dates_bookings' === booking_type ) {
184 + jQuery( '.wpbc_ui_booking_change_over__get_on_off__div' ).show();
185 + }
186 +}
187 +
188 +/**
189 + * Apply the selected presentation mode to the Step 4 behavior choices.
190 + *
191 + * The presentation mode and booking behavior are intentionally independent
192 + * values. This function limits the visible behaviors to valid combinations
193 + * without coupling mode switching to any QuickStart content mutation.
194 + *
195 + * @return {void}
196 + */
197 +function wpbc_setup_wizard_page__refresh_booking_mode_choices() {
198 +
199 + var $mode_input = jQuery( '[name="wpbc_swp_booking_mode"]:checked' ).first();
200 + var $mode_choice;
201 + var allowed_booking_types;
202 + var default_booking_type;
203 + var fixed_appointment_type;
204 + var is_fixed_appointment_mode;
205 + var $selected_booking_type;
206 +
207 + if ( ! $mode_input.length ) {
208 + $mode_input = jQuery( '[name="wpbc_swp_booking_mode"]' ).first().prop( 'checked', true );
209 + }
210 +
211 + $mode_choice = $mode_input.closest( '.wpbc_setup_mode_choice' );
212 + if ( ! $mode_choice.length ) {
213 + wpbc_setup_wizard_page__refresh_booking_type_details();
214 + return;
215 + }
216 +
217 + allowed_booking_types = String( $mode_choice.attr( 'data-wpbc-setup-booking-types' ) || '' ).split( ',' );
218 + default_booking_type = String( $mode_choice.attr( 'data-wpbc-setup-default-booking-type' ) || '' );
219 + fixed_appointment_type = String( $mode_choice.attr( 'data-wpbc-setup-fixed-appointment-type' ) || '' );
220 + is_fixed_appointment_mode = 'durationtime' === fixed_appointment_type;
221 +
222 + jQuery( '.wpbc_setup_preferences_heading' ).text( $mode_choice.attr( 'data-wpbc-setup-preference-title' ) || '' );
223 + jQuery( '.wpbc_setup_booking_type_choice' ).each( function() {
224 + var booking_type = String( jQuery( this ).attr( 'data-wpbc-setup-booking-type' ) || '' );
225 + jQuery( this ).toggle( -1 !== jQuery.inArray( booking_type, allowed_booking_types ) );
226 + } );
227 +
228 + $selected_booking_type = jQuery( '[name="wpbc_swp_booking_types"]:checked' );
229 + if (
230 + ! $selected_booking_type.length
231 + || -1 === jQuery.inArray( String( $selected_booking_type.val() || '' ), allowed_booking_types )
232 + || $selected_booking_type.is( ':disabled' )
233 + ) {
234 + $selected_booking_type = jQuery( '[name="wpbc_swp_booking_types"][value="' + default_booking_type + '"]:not(:disabled)' ).first();
235 + if ( ! $selected_booking_type.length ) {
236 + $selected_booking_type = jQuery( '.wpbc_setup_booking_type_choice:visible [name="wpbc_swp_booking_types"]:not(:disabled)' ).first();
237 + }
238 + $selected_booking_type.prop( 'checked', true );
239 + }
240 +
241 + if ( is_fixed_appointment_mode ) {
242 + jQuery( '[name="wpbc_swp_booking_appointments_type"][value="' + fixed_appointment_type + '"]' ).prop( 'checked', true );
243 + }
244 +
245 + jQuery( '.wpbc_setup_preferences_heading_row' ).toggle( ! is_fixed_appointment_mode );
246 + jQuery( '.wpbc_setup_booking_type_choices' ).toggle( ! is_fixed_appointment_mode );
247 +
248 + jQuery( '[name="wpbc_swp_booking_mode"], [name="wpbc_swp_booking_types"]' ).each( function() {
249 + wpbc_ui_el__radio_container_selection( this );
250 + } );
251 +
252 + wpbc_setup_wizard_page__refresh_booking_type_details();
253 +}
150 254
151 255
152 256 /**
153 257 * Define UI hooks for elements, after showing in Ajax.
@@ -153,9 +257,9 @@
153 257 * Define UI hooks for elements, after showing in Ajax.
154 258 *
155 259 * Because each time, when we show content in Ajax, all Hooks needs re-defined.
156 260 */
157 -function wpbc_setup_wizard_page__define_ui_hooks(){
261 +function wpbc_setup_wizard_page__define_ui_hooks(){
158 262
159 263 // -----------------------------------------------------------------------------------------------------------------
160 264 // Tooltips
161 265 if ( 'function' === typeof( wpbc_define_tippy_tooltips ) ) {
@@ -176,11 +280,26 @@
176 280 wpbc_ui_el__radio_container_selection( this );
177 281 });
178 282
179 283 // Define ability to click on Radio Containers (not only radio-buttons)
180 - jQuery( '.wpbc_ui_radio_container' ).on( 'click', function( event ){
181 - wpbc_ui_el__radio_container_click( this );
182 - } );
284 + jQuery( '.wpbc_ui_radio_container' ).on( 'click', function( event ){
285 + wpbc_ui_el__radio_container_click( this );
286 + } );
287 +
288 + jQuery( '[name="wpbc_swp_booking_mode"]' ).on( 'change', function() {
289 + wpbc_setup_wizard_page__refresh_booking_mode_choices();
290 + } );
291 +
292 + jQuery( '[name="wpbc_swp_booking_types"]' ).on( 'change', function() {
293 + wpbc_setup_wizard_page__refresh_booking_type_details();
294 + } );
295 +
296 + // Save the Appointment-only presentation control through the historical canonical field.
297 + jQuery( '[name="wpbc_swp_booking_timeslot_picker_appointment"]' ).on( 'change', function() {
298 + jQuery( '[name="wpbc_swp_booking_timeslot_picker"]' ).val( jQuery( this ).val() );
299 + } );
300 +
301 + wpbc_setup_wizard_page__refresh_booking_mode_choices();
183 302
184 303 // -----------------------------------------------------------------------------------------------------------------
185 304
186 305