1(function ( $ ) { 2 'use strict'; 3 4 $( document ).ready( function () { 5 bookneticHooks.addAction( 'loaded_step_confirm_details', function( booknetic ) 6 { 7 $('.booknetic_panel_footer').append(` 8 <div class="booknetic_add_coupon"> 9 <input type="text" id="booknetic_coupon" placeholder="${BookneticData.localization.coupon}"> 10 <div style="display: flex;"> 11 <button type="button" class="booknetic_btn_success booknetic_coupon_ok_btn">${BookneticData.localization.coupon_ok_btn}</button> 12 <button type="button" class="booknetic_btn_cancel booknetic_coupon_cancel_btn" style="display: none;">${BookneticData.localization.coupon_cancel_btn}</button> 13 </div> 14 </div> 15 `); 16 }); 17 18 bookneticHooks.addAction( 'loaded_step_confirm_details', function( booknetic ) 19 { 20 let booking_panel_js = booknetic.panel_js; 21 const coupon_ok_btn = booking_panel_js.find('.booknetic_btn_success.booknetic_coupon_ok_btn'); 22 const coupon_cancel_btn = booking_panel_js.find('.booknetic_btn_cancel.booknetic_coupon_cancel_btn'); 23 const button_anim_timeout = 250; 24 const full_discount_anim_timeout = 300; 25 const extra_delay = 50; 26 27 const remove_full_discount = function () 28 { 29 const hidden_local_payment= booking_panel_js.find('.booknetic_payment_method.booknetic_payment_method_selected[data-payment-type="local"][style*="display: none"]') 30 31 if (hidden_local_payment.length === 0) 32 return; 33 34 hidden_local_payment.removeClass('booknetic_payment_method_selected'); 35 36 booking_panel_js.find('.booknetic_payment_method:first').addClass('booknetic_payment_method_selected'); 37 coupon_ok_btn.removeClass('after-pseudo'); 38 39 if( $( window ).width() > 1000 ) 40 { 41 booking_panel_js.find('.booknetic_confirm_sum_body') 42 .animate({ width: '378px' }, full_discount_anim_timeout) 43 .removeAttr('style'); 44 } 45 setTimeout(function () { 46 booking_panel_js.find('.booknetic_confirm_deposit_body').fadeIn(full_discount_anim_timeout); 47 }, full_discount_anim_timeout); 48 } 49 50 const show_cancel_btn = function() { 51 if( coupon_cancel_btn.attr('style') !== '') 52 { 53 coupon_ok_btn.animate({ 'margin-right': '62px' }, button_anim_timeout); 54 } 55 56 setTimeout(function (){ 57 coupon_ok_btn.removeAttr('style'); 58 coupon_cancel_btn.fadeIn(button_anim_timeout); 59 }, button_anim_timeout + extra_delay); 60 61 booking_panel_js.find('.booknetic_add_coupon input, .booknetic_add_giftcard input') 62 .css('width', '50%'); 63 } 64 65 const hide_cancel_btn = function () { 66 if( coupon_cancel_btn.css('display') === 'none' ) 67 return; 68 69 coupon_cancel_btn.fadeOut(button_anim_timeout, function () { 70 coupon_ok_btn 71 .css('margin-right', '62px') 72 .animate({'margin-right': '0'}, button_anim_timeout); 73 }); 74 75 setTimeout(function() { 76 coupon_ok_btn.removeAttr('style'); 77 }, button_anim_timeout + extra_delay); 78 79 booking_panel_js.find('.booknetic_add_coupon input, .booknetic_add_giftcard input') 80 .removeAttr('style'); 81 } 82 83 const update_prices = function (result) { 84 booking_panel_js.find('.booknetic_prices_box').html(result['prices_html']); 85 booking_panel_js.find('.booknetic_sum_price').text(result['sum_price_txt']); 86 booking_panel_js.find('.booknetic_deposit_amount_txt').text(result['deposit_txt']); 87 } 88 89 booking_panel_js.off('click', '.booknetic_coupon_ok_btn' ); 90 booking_panel_js.on('click', '.booknetic_coupon_ok_btn', function () 91 { 92 booknetic.ajax('summary_with_coupon', booknetic.ajaxParameters( { current_step: 'confirm_details' } ), function ( result ) 93 { 94 if( booking_panel_js.find('#booknetic_coupon').val() === '' ) 95 { 96 booking_panel_js.find('.booknetic_add_coupon').removeClass('booknetic_coupon_ok'); 97 98 remove_full_discount();
99 hide_cancel_btn(); 100 } 101 else 102 { 103 booking_panel_js.find('.booknetic_add_coupon').addClass('booknetic_coupon_ok'); 104 105 show_cancel_btn(); 106 107 if (result['sum_price'] <= 0) { 108 109 // Creating local_payment element for if someone tries to replace or remove 100%+ coupon. 110 // Because if service price after a coupon drops to 0 then payment method becomes local. 111 const local_payment = ` 112 <div class="booknetic_payment_method booknetic_payment_method_selected" data-payment-type="local" style="display: none;"></div> 113 `; 114 115 booking_panel_js.find('.booknetic_payment_method_selected').removeClass('booknetic_payment_method_selected'); 116 booking_panel_js.find('.booknetic_payment_methods').append(local_payment); 117 booking_panel_js.find('.booknetic_confirm_deposit_body').fadeOut(full_discount_anim_timeout, function () { 118 booking_panel_js.find('.booknetic_confirm_sum_body').animate({ width: '100%' }, full_discount_anim_timeout); 119 }); 120 booking_panel_js.find('.booknetic_add_coupon input, .booknetic_add_giftcard input') 121 .css('width', '70%'); 122 } 123 else 124 { 125 remove_full_discount(); 126 } 127 } 128 129 update_prices(result); 130 }, true, function () 131 { 132 booking_panel_js.find('.booknetic_add_coupon').removeClass('booknetic_coupon_ok'); 133 }); 134 135 }); 136 137 booking_panel_js.on('click', '.booknetic_coupon_cancel_btn', function() { 138 booking_panel_js.find('#booknetic_coupon').val(''); 139 140 booknetic.ajax('summary_with_coupon', booknetic.ajaxParameters( { current_step: 'confirm_details' } ), function ( result ) 141 { 142 booking_panel_js.find('.booknetic_add_coupon').removeClass('booknetic_coupon_ok'); 143 144 remove_full_discount(); 145 hide_cancel_btn(); 146 update_prices(result); 147 }); 148 }); 149 }); 150 151 152 bookneticHooks.addFilter('appointment_ajax_data', function ( data, booknetic ) { 153 let booking_panel_js = booknetic.panel_js; 154 data.append( 'coupon', booking_panel_js.find('#booknetic_coupon').val() || '' ); 155 return data; 156 }); 157 158 } ); 159})( 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.