1/** 2 * WCMSI - Patch di compatibilità con WooCommerce Bookings 3.7+ 3 * 4 * Contesto: con l'aggiornamento di Bookings (3.0.x -> 3.7.x) l'inizializzazione 5 * del form di prenotazione è cambiata: 6 * 1) il contenitore #wc-bookings-booking-form può restare nascosto 7 * (style="display:none"), impedendo di vedere il calendario; 8 * 2) i pulsanti vengono disabilitati con classe "disabled" + attributo 9 * aria-disabled="true" + attributo disabled. Il codice custom originale 10 * rimuove solo la classe, quindi il pulsante "Regala" restava grigio. 11 * 12 * Questa patch, in modo consapevole della scheda attiva (Prenota / Regala): 13 * - forza la visibilità del form di prenotazione; 14 * - PRENOTA: mostra il calendario (con fallback ai campi Mese/Giorno/Anno) e 15 * il relativo pulsante; lascia che sia Bookings ad abilitarlo dopo la scelta 16 * della data (comportamento corretto); 17 * - REGALA: nasconde la data e ABILITA davvero il pulsante regalo rimuovendo 18 * classe "disabled" + aria-disabled + attributo disabled. 19 * 20 * Non modifica i file originali del plugin custom. Aggiunta il 2026-07-04. 21 */ 22(function ($) { 23 'use strict'; 24 25 function activeTabType() { 26 var $t = $('#wcmsi-tab .wcmsi-tablinks.active'); 27 return ($t.length && $t.data('type')) ? $t.data('type') : 'booking'; 28 } 29 30 // Abilita completamente un pulsante secondo la logica di Bookings 3.7. 31 function enableButton($btn) { 32 $btn.removeClass('disabled') 33 .removeAttr('aria-disabled') 34 .removeAttr('disabled') 35 .prop('disabled', false); 36 } 37 38 function forceBookingFormVisible() { 39 var $form = $('#wc-bookings-booking-form'); 40 if ($form.length && $form.is(':hidden')) { 41 $form.css('display', 'block'); 42 } 43 } 44 45 function applyView() { 46 forceBookingFormVisible(); 47 48 var $allButtons = $('form.cart .wc-bookings-booking-form-button.single_add_to_cart_button'); 49 var $giftButton = $allButtons.filter('.ywgc-add-gift-product-to-cart'); 50 var $bookButton = $allButtons.not('.ywgc-add-gift-product-to-cart'); 51 var $datePicker = $('#wc-bookings-booking-form .wc-bookings-date-picker'); 52 53 if (activeTabType() === 'booking') { 54 // PRENOTA: mostra data + pulsante prenotazione, nasconde pulsante regalo. 55 $datePicker.show(); 56 57 // Fallback: se il calendario inline non è stato costruito, mostra i campi data. 58 if ($datePicker.find('.picker').find('.ui-datepicker-calendar, table').length === 0) { 59 $datePicker.find('.wc-bookings-date-picker-date-fields').show(); 60 } 61 62 $bookButton.css('display', ''); 63 $giftButton.hide(); 64 // Nota: NON forziamo l'abilitazione del pulsante Prenota: resta grigio 65 // finché non si sceglie una data (lo abilita Bookings), com'è corretto. 66 } else { 67 // REGALA: data ignorata, pulsante regalo attivo. 68 $datePicker.hide(); 69 $('#wc-bookings-booking-form div.form-field-wide').hide(); 70 $('#wc-bookings-booking-form div.timezone-details').hide(); 71 $('#wc-bookings-booking-form .block-picker').hide(); 72 73 $bookButton.hide(); 74 if ($giftButton.length) { 75 enableButton($giftButton); 76 $giftButton.css('display', ''); 77 } else { 78 // Se il pulsante regalo dedicato non esiste, abilita comunque 79 // il pulsante di acquisto così la scheda Regala è utilizzabile. 80 enableButton($bookButton); 81 $bookButton.css('display', ''); 82 } 83 } 84 } 85 86 $(function () { 87 // Bookings inizializza in modo asincrono: riproviamo qualche volta. 88 var runs = 0; 89 var timer = setInterval(function () { 90 applyView(); 91 if (++runs >= 10) { 92 clearInterval(timer); 93 } 94 }, 400); 95 96 // Riapplica quando si cambia scheda Prenota/Regala. 97 $(document).on('click', '#wcmsi-tab .wcmsi-tablinks', function () { 98 setTimeout(applyView, 60); 99 }); 100 101 // Riapplica dopo eventi tipici di Bookings/gift. 102 $(document).on( 103 'wc_bookings_calculate_costs found_new_bookable updated_wc_div yith_ywgc_after_click_give_as_present', 104 function () { setTimeout(applyView, 60); } 105 ); 106 }); 107})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.