PageSourceSearch

https://puwa-apnee.fr/wp-content/plugins/booknetic-coupons/assets/frontend/js/init.js?v=1.2.9&ver=7.1.2

js puwa-apnee.fr collected 2026-10-04 17:42:18 UTC 7,727 bytes, 159 lines download raw bytes

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.