PageSourceSearch

https://www.tcf-uk.org/wp-content/themes/tcf-v2/js/event-tags.js?ver=1791452154

js tcf-uk.org collected 2026-10-08 09:37:01 UTC 6,612 bytes, 197 lines download raw bytes

1(function ($) {
2    $(document).ready(function () {
3
4        let eventTagTimeout;
5        window.tcfEventsTags = new TcfTagsEvents();
6        eventTagTimeout = setTimeout(() => {
7            window.tcfEventsTags.init();
8        }, 4000);
9        
10    });
11
12    class TcfTagsEvents {
13        constructor() {
14            this.eventName = '';
15            this.paymentMethod = '';
16        }
17
18        init() {
19            this.attachPaymentListener();
20            this.passEventNameOnPageLoad();
21            this.attachAddToCartListener();
22            this.attachBillingEmailListener();
23            // this.getUTMParameters();
24        }
25
26        passEventNameOnPageLoad() {
27            this.eventName = this.getEventName();
28
29            if (this.eventName) {
30                console.log('Passing event name on page load: ' + this.eventName);
31                // const formAttrs = this.getEventNameAttributes();
32                const utmParams = this.getUTMParams();
33                
34                let data = {
35                    eventName: this.eventName,
36                    ...utmParams
37                }
38
39                this.passEventToGA('EventView', data);
40                console.log('hitted')
41            } else {
42                console.log('No event name available to pass.');
43            }
44        }
45
46        attachAddToCartListener() {
47            let self = this;
48            $('#order_now').on('click', (event) => {
49                event.preventDefault();
50                const formAttrs = this.gatherTicketInfo();
51
52                if ( formAttrs.eventTicketQuantities > 0 ) {
53
54                    const existingEventData = self.getEventsDataFromLocalStorage('eventData');
55                     if (!existingEventData){
56
57                         self.setEventDataWithExpiry('eventData', formAttrs, 2);
58                         self.passEventToGA('EventAddToCart', formAttrs);
59                        console.log('EventAddToCart', formAttrs)
60                     }
61                    else {
62                        console.log('EventAddToCart exists:', existingEventData);
63                    }  
64                }
65                
66            });
67        }
68
69        attachBillingEmailListener() {
70            let self = this;
71            let billingEmailTimeout;
72
73            $('#billing_email').on('input', () => {
74                clearTimeout(billingEmailTimeout);
75
76                billingEmailTimeout = setTimeout(() => {
77                    
78                    const eventData = self.getEventsDataFromLocalStorage('eventData');
79                    const paymentMethod = $('input[name="payment_method"]:checked').val() || 'Not selected';
80                    
81                    if (eventData) {
82
83                        self.passEventToGA('EventAddedPaymentInfo', eventData);
84                        console.log('EventAddedPaymentInfo', eventData);
85                    } else {
86                        console.log('EventAddedPaymentInfo expired');
87                    }
88
89                }, 3000);
90            });
91        }
92
93
94        attachPaymentListener() {
95            let self = this;
96
97            $(document).on('woocommerce_thankyou_page_init', function (e, data) {
98                const eventData = self.getEventsDataFromLocalStorage();
99
100                if ( eventData ) {
101                    eventData.eventOrderId  = data.order_id;
102                    self.passEventToGA('EventTicketPurchased', eventData);
103                    localStorage.removeItem('eventData');
104                    console.log('Removed event data from local storage')
105                }
106                
107            });
108        }
109
110        passEventToGA(event, attrs = {}) {
111            if (typeof window.dataLayer !== 'undefined') {
112                attrs.event = event;
113                window.dataLayer.push(attrs);
114                console.log('Firing GA event: ', attrs);
115            } else {
116                console.log('GA event not fired, dataLayer not found: ', event);
117            }
118        }
119
120        getEventName() {
121            return $('.wpem-event-title h3').html() || '';
122        }
123
124        setEventDataWithExpiry(key, data, expiryInDays) {
125            const now = new Date();
126            const expiryTime = now.getTime() + expiryInDays * 24 * 60 * 60 * 1000;
127            const item = {
128                data: data,
129                expiry: expiryTime
130            };
131            localStorage.setItem(key, JSON.stringify(item));
132        }
133
134        getEventsDataFromLocalStorage(key = 'eventData') {
135            const itemStr = localStorage.getItem(key);
136            
137            if (!itemStr) {
138                return null;
139            }
140            const item = JSON.parse(itemStr);
141            const now = new Date();
142
143            if (item.expiry && now.getTime() > item.expiry) {
144                localStorage.removeItem(key);
145                return null;
146            }
147
148            return item.data;
149        }
150
151        gatherTicketInfo() {
152            const ticketsInfo = [];
153            const quantityDropdowns = $('[id^="quantity-"]');
154
155            let eventTicketName = [];
156            let eventTicketPrice = 0
157            let eventTicketQuantities = 0;
158            let eventTicketCurrency = '';
159
160            $(quantityDropdowns).each(function (index) {
161
162                if ( $(this).val() > 0 ) {
163                    eventTicketName.push($(this).data('ticket-name'));
164                    eventTicketQuantities += parseInt($(this).val());
165                    eventTicketPrice += parseInt($(this).data('amount')) * $(this).val();
166                }
167                
168                eventTicketCurrency = $(this).data('currency');
169            });
170
171            const utmParams = this.getUTMParams();
172
173            let data = {
174                eventName: this.eventName,
175                eventTicketName: eventTicketName.join(", "),
176                eventTicketPrice: eventTicketPrice,
177                eventTicketQuantities: eventTicketQuantities,
178                eventTicketCurrency: eventTicketCurrency,
179                ...utmParams
180            };
181
182            return data;
183        }
184
185        getUTMParams() {
186            const urlParams = new URLSearchParams(window.location.search);
187            return {
188                eventTicketsource: urlParams.get('utm_source') || null,
189                eventTicketmedium: urlParams.get('utm_medium') || null,
190                eventTicketcampaign: urlParams.get('utm_campaign') || null,
191                eventTicketterm: urlParams.get('utm_term') || null,
192                eventTicketcontent: urlParams.get('utm_content') || null
193            };
194        }
195
196    }
197})(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.