PluginProbe
Booking Calendar / 11.8.2
Booking Calendar v11.8.2
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 10.11.2 All 203 releases
← All changes | js/client.js +270 -231 11.011.8.2 View file →
@@ -1,237 +1,264 @@
1 -
2 -// Hint labels inside of input boxes.
3 -jQuery( document ).ready(
4 - function () {
5 -
6 - jQuery( 'div.inside_hint' ).on(
7 - 'click',
8 - function () {
9 - jQuery( this ).css( 'visibility', 'hidden' ).siblings( '.has-inside-hint' ).trigger( 'focus' ); // FixIn: 8.7.11.12.
10 - }
11 - );
12 -
13 - jQuery( 'input.has-inside-hint' ).on(
14 - 'blur',
15 - function () {
16 - if ( '' === this.value ) {
17 - jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', '' ); // FixIn: 8.7.11.12.
18 - }
19 - }
20 - ).on(
21 - 'focus',
22 - function () {
23 - jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', 'hidden' ); // FixIn: 8.7.11.12.
24 - }
25 - );
26 -
27 - jQuery( '.booking_form_div input[type=button]' ).prop( "disabled", false );
28 - }
29 -);
30 -
31 -
32 -// FixIn: 8.4.0.2.
33 1 /**
34 2 * Check errors in booking form fields, and show warnings if some errors exist.
35 3 * Check errors, like not selected dates or not filled requred form fields, or not correct entering email or phone
36 4 * fields, etc...
37 5 *
38 - * @param bk_type int (ID of booking resource)
6 + * @param resource_id int (ID of booking resource)
39 7 */
40 -function wpbc_check_errors_in_booking_form( bk_type ) {
8 +function wpbc_check_errors_in_booking_form( resource_id ) {
9 + var $form = jQuery( '#booking_form' + resource_id );
10 + var fields_with_errors_arr = [];
11 + var is_error_in_field = false;
12 + var skip_element_types = [ 'hidden', 'button' ];
41 13
42 - var is_error_in_field = false; // By default, all is good - no error.
14 + if ( ! $form.length ) {
15 + return false;
16 + }
43 17
44 - var my_form = jQuery( '#booking_form' + bk_type );
18 + /**
19 + * Show a validation warning and register the related field as invalid.
20 + *
21 + * @param {HTMLElement|null} field Field to focus after validation.
22 + * @param {HTMLElement|jQuery|string} target Warning message target.
23 + * @param {string} message Warning message.
24 + */
25 + function add_validation_error( field, target, message ) {
26 + wpbc_front_end__show_message__warning( target, message, 'text' );
27 + is_error_in_field = true;
45 28
46 - if ( my_form.length ) {
29 + if ( field ) {
30 + fields_with_errors_arr.push( field );
31 + }
32 + }
47 33
48 - var fields_with_errors_arr = [];
34 + /**
35 + * Validate a required field.
36 + *
37 + * @param {HTMLElement} field Form field.
38 + * @param {jQuery} $field Cached jQuery field.
39 + * @param {string} field_type Field type.
40 + */
41 + function validate_required_field( field, $field, field_type ) {
42 + var warning_target;
49 43
50 - // Pseudo-selector that get form elements <input , <textarea , <select, <button...
51 - my_form.find( ':input' ).each( function( index, el ) {
44 + if ( ! $field.hasClass( 'wpdev-validates-as-required' ) ) {
45 + return;
46 + }
52 47
53 - // Skip some elements
54 - var skip_elements = [ 'hidden', 'button' ];
48 + if ( 'checkbox' === field_type ) {
49 + if ( ! $field.is( ':checked' ) && ! jQuery( ':checkbox[name="' + field.name + '"]', $form ).is( ':checked' ) ) {
50 + warning_target = $field.parents( '.wpdev-form-control-wrap' ).last();
55 51
56 - if ( -1 == skip_elements.indexOf( jQuery( el ).attr( 'type' ) ) ){
52 + if ( ! warning_target.length ) {
53 + warning_target = $field.parents( '.controls' ).last();
54 + }
55 + if ( ! warning_target.length ) {
56 + warning_target = $field;
57 + }
57 58
58 - // Check Calendar Dates Selection
59 - if ( ( 'date_booking' + bk_type ) == jQuery( el ).attr( 'name' ) ) {
59 + add_validation_error( field, warning_target, _wpbc.get_message( 'message_check_required_for_check_box' ) );
60 + }
61 + return;
62 + }
60 63
61 - // Show Warning only if the calendar visible ( we are at step with calendar)
62 - if (
63 - ( ( jQuery( '#calendar_booking' + bk_type ).is( ':visible' ) ) && ( '' == jQuery( el ).val() ) )
64 - && ( wpbc_get_arr_of_selected_additional_calendars( bk_type ).length == 0 ) // FixIn: 8.5.2.26.
65 - ){ // FixIn: 8.4.4.5.
64 + if ( 'radio' === field_type ) {
65 + if ( ! jQuery( ':radio[name="' + field.name + '"]', $form ).is( ':checked' ) ) {
66 + add_validation_error( field, $field.parents( '.wpdev-form-control-wrap' ), _wpbc.get_message( 'message_check_required_for_radio_box' ) );
67 + }
68 + return;
69 + }
66 70
67 - var notice_message_id = wpbc_front_end__show_message__error_under_element( '#booking_form_div' + bk_type + ' .bk_calendar_frame', _wpbc.get_message( 'message_check_no_selected_dates' ) , 3000 );
71 + if ( '' === wpbc_trim( $field.val() ) ) {
72 + add_validation_error( field, field, _wpbc.get_message( 'message_check_required' ) );
73 + }
74 + }
68 75
69 - //wpbc_do_scroll('#calendar_booking' + bk_type); // Scroll to the calendar // FixIn: 8.5.1.3.
70 - is_error_in_field = true; // Error
71 - }
72 - }
76 + /**
77 + * Validate an email field and return its trimmed value.
78 + *
79 + * @param {HTMLElement} field Form field.
80 + * @param {jQuery} $field Cached jQuery field.
81 + * @returns {string}
82 + */
83 + function validate_email_field( field, $field ) {
84 + var email_value = String( $field.val() || '' ).replace( /^\s+|\s+$/gm, '' );
85 + var email_regex = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,})$/;
73 86
74 - // Check only visible elements at this step
75 - if ( jQuery( el ).is( ':visible' ) ){
76 -// console.log( '|id, type, val, visible|::', jQuery( el ).attr( 'name' ), '|' + jQuery( el ).attr( 'type' ) + '|', jQuery( el ).val(), jQuery( el ).is( ':visible' ) );
87 + if ( '' !== email_value && ! email_regex.test( email_value ) ) {
88 + add_validation_error( field, field, _wpbc.get_message( 'message_check_email' ) );
89 + }
77 90
78 - // Is Required
79 - if ( jQuery( el ).hasClass( 'wpdev-validates-as-required' ) ){
91 + return email_value;
92 + }
80 93
81 - // Checkboxes
82 - if ( 'checkbox' == jQuery( el ).attr( 'type' ) ){
94 + /**
95 + * Validate a confirmation email field using its same_as_NAME class.
96 + *
97 + * @param {HTMLElement} field Form field.
98 + * @param {string} email_value Trimmed confirmation email value.
99 + */
100 + function validate_confirmation_email_field( field, email_value ) {
101 + var primary_email_match;
102 + var primary_email_name;
103 + var $primary_email_field;
83 104
84 - if (
85 - ( ! jQuery( el ).is( ':checked' ))
86 - && ( ! jQuery( ':checkbox[name="' + el.name + '"]', my_form ).is( ":checked" ) ) // FixIn: 8.5.2.12.
87 - ){
88 - var checkbox_parent_element;
105 + if ( field.className.indexOf( 'same_as_' ) === -1 ) {
106 + return;
107 + }
89 108
90 - if ( jQuery( el ).parents( '.wpdev-form-control-wrap' ).length > 0 ){
109 + primary_email_match = field.className.match( /same_as_([^\s])+/gi );
110 + if ( null === primary_email_match ) {
111 + return;
112 + }
91 113
92 - checkbox_parent_element = jQuery( el ).parents( '.wpdev-form-control-wrap' );
114 + primary_email_name = primary_email_match[ 0 ].substr( 8 );
115 + $primary_email_field = $form.find( '[name="' + primary_email_name + resource_id + '"]' );
93 116
94 - } else if ( jQuery( el ).parents( '.controls' ).length > 0 ){
117 + if ( $primary_email_field.length && $primary_email_field.val() !== email_value ) {
118 + add_validation_error( field, field, _wpbc.get_message( 'message_check_same_email' ) );
119 + }
120 + }
95 121
96 - checkbox_parent_element = jQuery( el ).parents( '.controls' );
122 + /**
123 + * Validate fields using the validate_as_date, validate_as_digit, or validate_digit_N classes.
124 + *
125 + * @param {HTMLElement} field Form field.
126 + * @param {jQuery} $field Cached jQuery field.
127 + */
128 + function validate_custom_field_classes( field, $field ) {
129 + var class_list = $field.attr( 'class' );
130 + var field_value;
97 131
98 - } else {
132 + if ( ! class_list ) {
133 + return;
134 + }
99 135
100 - checkbox_parent_element = jQuery( el );
101 - }
102 - var notice_message_id = wpbc_front_end__show_message__warning( checkbox_parent_element, _wpbc.get_message( 'message_check_required_for_check_box' ) );
136 + field_value = $field.val();
103 137
104 - fields_with_errors_arr.push( el );
105 - is_error_in_field = true; // Error
106 - }
138 + jQuery.each( class_list.split( /\s+/ ), function ( class_index, class_name ) {
139 + var digits_to_check;
140 + var message;
141 + var validation_regex;
107 142
108 - // Radio boxes
109 - } else if ( 'radio' == jQuery( el ).attr( 'type' ) ){
143 + if ( 'validate_as_date' === class_name ) {
144 + validation_regex = new RegExp( '^[0-3]?\\d{1}[\\/\\.\\-]+[0-3]?\\d{1}[\\/\\.\\-]+[0-2]+\\d{3}$' );
145 + message = _wpbc.get_message( 'message_check_valid_date' ).replace( '{date_example}', '09/25/2018' );
110 146
111 - if ( !jQuery( ':radio[name="' + jQuery( el ).attr( 'name' ) + '"]', my_form ).is( ':checked' ) ){
112 - var notice_message_id = wpbc_front_end__show_message__warning( jQuery( el ).parents('.wpdev-form-control-wrap'), _wpbc.get_message( 'message_check_required_for_radio_box' ) );
113 - fields_with_errors_arr.push( el );
114 - is_error_in_field = true; // Error
115 - }
147 + if ( '' !== field_value && ! validation_regex.test( field_value ) ) {
148 + add_validation_error( field, field, message );
149 + }
150 + return;
151 + }
116 152
117 - // Other elements
118 - } else {
153 + if ( 'validate_as_digit' === class_name ) {
154 + validation_regex = new RegExp( '^[0-9]+\\.?[0-9]*$' );
119 155
120 - var inp_value = jQuery( el ).val();
156 + if ( '' !== field_value && ! validation_regex.test( field_value ) ) {
157 + add_validation_error( field, field, _wpbc.get_message( 'message_check_digits_only' ) );
158 + }
159 + return;
160 + }
121 161
122 - if ( '' === wpbc_trim( inp_value ) ){ //FixIn: 8.8.1.3 // FixIn: 8.7.11.12.
162 + if ( 'validate_digit_' !== class_name.substring( 0, 15 ) ) {
163 + return;
164 + }
123 165
124 - var notice_message_id = wpbc_front_end__show_message__warning( el, _wpbc.get_message( 'message_check_required' ) );
166 + digits_to_check = parseInt( class_name.substring( 15 ), 10 );
167 + if ( isNaN( digits_to_check ) ) {
168 + return;
169 + }
125 170
126 - fields_with_errors_arr.push( el );
127 - is_error_in_field = true; // Error
128 - }
129 - }
130 - }
171 + validation_regex = new RegExp( '^\\d{' + digits_to_check + '}$' );
172 + message = _wpbc.get_message( 'message_check_digits_count' ).replace( '{digits}', digits_to_check );
131 173
132 - // Validate Email
133 - if ( jQuery( el ).hasClass( 'wpdev-validates-as-email' ) ){
134 - var inp_value = jQuery( el ).val();
135 - inp_value = inp_value.replace( /^\s+|\s+$/gm, '' ); // Trim white space //FixIn: 5.4.5
136 - var reg = /^([A-Za-z0-9_\-\.\+])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,})$/;
137 - if ( (inp_value != '') && (reg.test( inp_value ) == false) ){
174 + if ( '' !== field_value && ! validation_regex.test( field_value ) ) {
175 + add_validation_error( field, field, message );
176 + }
177 + } );
178 + }
138 179
139 - var notice_message_id = wpbc_front_end__show_message__warning( el, _wpbc.get_message( 'message_check_email' ) );
140 - fields_with_errors_arr.push( el );
141 - is_error_in_field = true; // Error
142 - }
143 - }
180 + $form.find( ':input' ).each( function () {
181 + var field = this;
182 + var $field = jQuery( field );
183 + var field_type = $field.attr( 'type' );
184 + var email_value;
144 185
145 - // Validate For digit entering - for example for - Phone
146 - // <p>Digit Field:<br />[text* dig_field class:validate_as_digit] </p>
147 - // <p>Phone:<br />[text* phone class:validate_digit_8] </p>
186 + if ( -1 !== skip_element_types.indexOf( field_type ) ) {
187 + return;
188 + }
148 189
149 - var classList = jQuery( el ).attr( 'class' );
190 + if ( '1' === String( $field.attr( 'data-wpbc-booking-submit-ignore' ) || '' ) ) {
191 + return;
192 + }
150 193
151 - if ( classList ){
194 + if (
195 + ( 'date_booking' + resource_id === $field.attr( 'name' ) ) &&
196 + jQuery( '#calendar_booking' + resource_id ).is( ':visible' ) &&
197 + ( '' === $field.val() ) &&
198 + ( 0 === wpbc_get_arr_of_selected_additional_calendars( resource_id ).length )
199 + ) {
200 + add_validation_error(
201 + null,
202 + '#booking_form_div' + resource_id + ' .bk_calendar_frame',
203 + _wpbc.get_message( 'message_check_no_selected_dates' )
204 + );
205 + }
152 206
153 - classList = classList.split( /\s+/ );
207 + if ( ! $field.is( ':visible' ) ) {
208 + return;
209 + }
154 210
155 - jQuery.each( classList, function ( cl_index, cl_item ){
211 + validate_required_field( field, $field, field_type );
156 212
157 - ////////////////////////////////////////////////////////////////////////////////////////////
213 + if ( $field.hasClass( 'wpdev-validates-as-email' ) ) {
214 + email_value = validate_email_field( field, $field );
215 + validate_confirmation_email_field( field, email_value );
216 + }
158 217
159 - // Validate field value as "Date" [CSS class - 'validate_as_digit']
160 - if ( 'validate_as_date' === cl_item ) {
218 + validate_custom_field_classes( field, $field );
219 + } );
161 220
162 - // Valid values: 09-25-2018, 09/25/2018, 09-25-2018, 31-9-1918 --- m/d/Y, m.d.Y, m-d-Y, d/m/Y, d.m.Y, d-m-Y
163 - var regex = new RegExp( '^[0-3]?\\d{1}[\\/\\.\\-]+[0-3]?\\d{1}[\\/\\.\\-]+[0-2]+\\d{3}$' ); // Check for Date 09/25/2018
164 - var message_verif_phone = 'This field must be valid date like this ' + '09/25/2018';
165 - var inp_value = jQuery( el ).val();
221 + if ( fields_with_errors_arr.length ) {
222 + jQuery( fields_with_errors_arr[ 0 ] ).trigger( 'focus' );
223 + }
166 224
167 - if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
168 - wpbc_front_end__show_message__warning( el, message_verif_phone );
169 - fields_with_errors_arr.push( el );
170 - is_error_in_field = true; // Error
171 - }
172 - }
225 + return is_error_in_field;
226 +}
173 227
174 - ////////////////////////////////////////////////////////////////////////////////////////////
228 +/**
229 + * Hint labels inside of input boxes.
230 + */
231 +jQuery( document ).ready(
232 + function () {
175 233
176 - // Validate field value as "DIGIT" [CSS class - 'validate_as_digit']
177 - if ( 'validate_as_digit' === cl_item ) {
234 + jQuery( 'div.inside_hint' ).on(
235 + 'click',
236 + function () {
237 + jQuery( this ).css( 'visibility', 'hidden' ).siblings( '.has-inside-hint' ).trigger( 'focus' );
238 + }
239 + );
178 240
179 - var regex = new RegExp( '^[0-9]+\\.?[0-9]*$' ); // Check for digits
180 - var message_verif_phone = 'This field must contain only digits';
181 - var inp_value = jQuery( el ).val();
182 -
183 - if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
184 - wpbc_front_end__show_message__warning( el, message_verif_phone );
185 - fields_with_errors_arr.push( el );
186 - is_error_in_field = true; // Error
187 - }
188 - }
189 -
190 - ////////////////////////////////////////////////////////////////////////////////////////////
191 -
192 - // Validate field value as "Phone" number or any other valid number wth specific number of digits [CSS class - 'validate_digit_8' || 'validate_digit_10' ]
193 - var is_validate_digit = cl_item.substring( 0, 15 );
194 -
195 - // Check if class start with 'validate_digit_'
196 - if ( 'validate_digit_' === is_validate_digit ){
197 -
198 - // Get number of digit in class: validate_digit_8 => 8 or validate_digit_10 => 10
199 - var digits_to_check = parseInt( cl_item.substring( 15 ) );
200 -
201 - // Check about any errors in
202 - if ( !isNaN( digits_to_check ) ){
203 -
204 - var regex = new RegExp( '^\\d{' + digits_to_check + '}$' ); // We was valid it as parseInt - only integer variable - digits_to_check
205 - var message_verif_phone = 'This field must contain ' + digits_to_check + ' digits';
206 - var inp_value = jQuery( el ).val();
207 -
208 - if ( ( inp_value != '' ) && ( regex.test( inp_value ) == false ) ){
209 - wpbc_front_end__show_message__warning( el, message_verif_phone );
210 - fields_with_errors_arr.push( el );
211 - is_error_in_field = true; // Error
212 - }
213 - }
214 - }
215 -
216 - ////////////////////////////////////////////////////////////////////////////////////////////
217 -
218 - });
219 - }
220 - }
241 + jQuery( 'input.has-inside-hint' ).on(
242 + 'blur',
243 + function () {
244 + if ( '' === this.value ) {
245 + jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', '' );
246 + }
221 247 }
222 - } );
248 + ).on(
249 + 'focus',
250 + function () {
251 + jQuery( this ).siblings( '.inside_hint' ).css( 'visibility', 'hidden' );
252 + }
253 + );
223 254
224 - if ( fields_with_errors_arr.length > 0 ){
225 - jQuery( fields_with_errors_arr[ 0 ] ).trigger( 'focus' ); // FixIn: 9.3.1.9.
226 - }
255 + jQuery( '.booking_form_div input[type=button]' ).prop( "disabled", false );
227 256 }
257 +);
228 258
229 - return is_error_in_field;
230 -}
259 +// == WIZARD ===========================================================================================================
231 260
232 -
233 -// FixIn: 8.6.1.15.
234 261 /**
235 262 * Go to next specific step in Wizard style booking form, with
236 263 * check all required elements specific step, otherwise show warning message!
237 264 *
@@ -239,8 +266,9 @@
239 266 * @param step_num
240 267 * @returns {boolean}
241 268 */
242 269 function wpbc_wizard_step(el, step_num, step_from) {
270 +
243 271 var br_id = jQuery( el ).closest( 'form' ).find( 'input[name^="bk_type"]' ).val();
244 272
245 273 // FixIn: 8.8.1.5.
246 274 if ( (undefined == step_from) || (step_num > step_from) ) {
@@ -258,9 +286,10 @@
258 286 }
259 287 }
260 288
261 289 if ( br_id != undefined ) {
262 - jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" ).css( { "display": "none" } ).removeClass( 'wpbc_wizard_step_hidden' );
290 + jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" ).css( { "display": "none" } )
291 + .removeClass( 'wpbc_wizard_step_hidden' );
263 292 jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" + step_num ).css( { "display": "block" } );
264 293 return jQuery( "#booking_form" + br_id + " .wpbc_wizard_step" + step_num );
265 294 }
266 295 }
@@ -305,58 +334,63 @@
305 334 }
306 335 );
307 336 }
308 337
309 -// FixIn: 10.1.3.2.
310 -jQuery( document ).ready( function (){
311 - wpbc_hook__init_booking_form_wizard_buttons();
312 -} );
313 338
314 -
315 -// FixIn: 8.6.1.15.
316 339 /**
317 340 * Check if at least one element from array of elements names in booking form visible or not.
318 341 * Usage Example: if ( wpbc_is_some_elements_visible( br_id, ['rangetime', 'durationtime', 'starttime', 'endtime'] )
319 342 * ){ ... }
320 343 *
321 - * @param bk_type
344 + * @param resource_id
322 345 * @param elements_names
323 346 * @returns {boolean}
324 347 */
325 -function wpbc_is_some_elements_visible( bk_type, elements_names ){
348 +function wpbc_is_some_elements_visible(resource_id, elements_names) {
326 349
327 - var is_some_elements_visible = false;
350 + var my_form = jQuery( '#booking_form' + resource_id );
328 351
329 - var my_form = jQuery( '#booking_form' + bk_type );
352 + if ( ! my_form.length ) {
353 + return false;
354 + }
330 355
331 - if ( my_form.length ){
356 + var is_some_elements_visible = false;
357 + // Pseudo-selector that get form elements <input , <textarea , <select, <button...
358 + my_form.find( ':input' ).each(
359 + function (index, el) {
332 360
333 - // Pseudo-selector that get form elements <input , <textarea , <select, <button...
334 - my_form.find( ':input' ).each( function ( index, el ){
361 + // Skip some elements.
362 + var skip_elements = [ 'hidden', 'button' ];
335 363
336 - // Skip some elements
337 - var skip_elements = ['hidden', 'button'];
364 + if ( -1 == skip_elements.indexOf( jQuery( el ).attr( 'type' ) ) ) {
338 365
339 - if ( -1 == skip_elements.indexOf( jQuery( el ).attr( 'type' ) ) ){
366 + for ( var ei = 0; ei < (elements_names.length - 1); ei++ ) {
340 367
341 - for ( var ei = 0; ei < ( elements_names.length - 1) ; ei++ ){
368 + // Check Calendar Dates Selection.
369 + if ( (elements_names[ei] + resource_id) == jQuery( el ).attr( 'name' ) ) {
342 370
343 - // Check Calendar Dates Selection
344 - if ( (elements_names[ ei ] + bk_type) == jQuery( el ).attr( 'name' ) ){
371 + if ( jQuery( el ).is( ':visible' ) ) {
372 + is_some_elements_visible = true;
373 + }
374 + }
375 + }
376 + }
377 + }
378 + );
345 379
346 - if ( jQuery( el ).is( ':visible' ) ){
347 - is_some_elements_visible = true;
348 - }
349 - }
350 - }
351 - }
352 - } );
353 - }
354 - return is_some_elements_visible;
380 + return is_some_elements_visible;
355 381 }
356 382
357 -// == Days Selections - support functions ==============================================================================
358 383
384 +jQuery( document ).ready(
385 + function () {
386 + wpbc_hook__init_booking_form_wizard_buttons();
387 + }
388 +);
389 +
390 +
391 +// == DAYS_SELECTIONS ==================================================================================================
392 +
359 393 /**
360 394 * Get first day of selection
361 395 *
362 396 * @param dates
@@ -393,9 +427,15 @@
393 427 // Single day selection
394 428 return dates; //20.12.2013
395 429 }
396 430
397 -// Get last day of selection
431 +
432 +/**
433 + * Get last day of selection.
434 + *
435 + * @param dates
436 + * @returns {*|string}
437 + */
398 438 function get_last_day_of_selection(dates) {
399 439
400 440 // Multiple days selections
401 441 if ( dates.indexOf(',') != -1 ){
@@ -443,10 +483,8 @@
443 483
444 484 var id_additional_str = document.getElementById( 'additional_calendars' + bk_type ).value;
445 485 var id_additional_arr = id_additional_str.split( ',' );
446 486
447 - var is_all_additional_days_unselected = true;
448 -
449 487 for ( var ia = 0; ia < id_additional_arr.length; ia++ ){
450 488 if ( document.getElementById( 'date_booking' + id_additional_arr[ ia ] ).value != '' ){
451 489 selected_additionl_calendars.push( id_additional_arr[ ia ] );
452 490 }
@@ -454,11 +492,11 @@
454 492 }
455 493 return selected_additionl_calendars;
456 494 }
457 495
458 -// ---------------------------------------------------------------------------------------------------------------------
459 -// Elementor Ready Widget Update.
460 -// ---------------------------------------------------------------------------------------------------------------------
496 +
497 +// == ELEMENTOR Ready Widget Update ====================================================================================
498 +
461 499 jQuery( function ($) {
462 500 // FixIn: 10.14.15.1.
463 501 if ( (window.elementorFrontend) && ('undefined' !== typeof (elementorFrontend.hooks)) ) {
464 502
@@ -474,24 +512,25 @@
474 512 }
475 513 } );
476 514
477 515 // Elementor widget reinit. So we need to reinit all "jQuery( document ).ready( ...) " again with custom 'wpbc_elementor_ready' event.
478 -jQuery( document ).on( 'wpbc_elementor_ready', function () {
516 +jQuery( document ).on(
517 + 'wpbc_elementor_ready',
518 + function () {
479 519
480 - wpbc_hook__init_booking_form_wizard_buttons();
520 + wpbc_hook__init_booking_form_wizard_buttons();
481 521
482 - if ( 'function' === typeof (wpbc_hook__init_timeselector) ) {
483 - wpbc_hook__init_timeselector();
484 - }
522 + if ( 'function' === typeof (wpbc_hook__init_timeselector) ) {
523 + wpbc_hook__init_timeselector();
524 + }
485 525
486 - if ( 'function' === typeof (wpbc_update_capacity_hint) ) {
487 - jQuery( '.booking_form_div' ).on( 'wpbc_booking_date_or_option_selected', function (event, resource_id) {
488 - wpbc_update_capacity_hint( resource_id );
489 - } );
526 + if ( 'function' === typeof (wpbc_update_capacity_hint) ) {
527 + jQuery( '.booking_form_div' ).on(
528 + 'wpbc_booking_date_or_option_selected',
529 + function (event, resource_id) {
530 + wpbc_update_capacity_hint( resource_id );
531 + }
532 + );
533 + }
534 +
490 535 }
491 -
492 - // TODO:
493 - // <?php if ('wpbc_theme_dark_1' === get_bk_option( 'booking_form_theme' ) ){ ?>
494 - // jQuery( '.wpbc_widget_preview_booking_form .wpbc_center_preview,.wpbc_widget_preview_booking_form .wpbc_container.wpbc_container_booking_form,.wpbc_widget_preview_booking_form .wpbc_widget_content' ).addClass( 'wpbc_theme_dark_1' );
495 - // <?php } ?>
496 -
497 -} );
536 +);