PageSourceSearch

https://www.trimax.ro/wp-content/plugins/full-picture-analytics-co…/modules/fbp1/fupi-fbp-footer.js?ver=9.1.2

js trimax.ro collected 2026-10-04 01:41:10 UTC 8,839 bytes, 322 lines download raw bytes

1// WOO EVENTS
2
3FP.fns.fbp_woo_events = () => {
4
5	// TRACK IMPRESSIONS
6
7	function track_woo_impress() {
8		
9		if ( ! fpdata.woo.lists.single ) return;
10		if ( ! fp.woo.fbp ) fp.woo.fbp = { 'single' : [] };
11		
12		let items_a = [],
13			value = 0,
14			item_ids = fpdata.woo.lists.single.filter( id => ! fp.woo.fbp.single.includes(id) ); // track only items that were not tracked before
15
16		item_ids.forEach( id => {
17			
18			let prod = fpdata.woo.products[id],
19				item = { 
20				'id' : FP.fns.get_woo_prod_id(prod),
21				'quantity' : 1,
22			};
23
24			value += prod.price;
25			items_a.push( item );
26		});
27
28		// prevent double tracking in case the next prods are added dynamically
29		fp.woo.fbp.single.push(...item_ids);
30
31		if ( items_a.length > 0 ) {
32
33			let payload_o = { 
34				'contents' : items_a, 
35				'currency' : fpdata.woo.currency, 
36				'value' : value, 
37				'content_type' : 'product'
38			};
39
40			FP.track_fbp_evt( false, 'ViewContent', false, payload_o );
41		}
42	};
43
44	if ( ! ( fp.woo.dont_track_views_after_refresh && fpdata.refreshed ) ){
45		track_woo_impress();
46		FP.addAction( ['woo_impress'], track_woo_impress );
47	}
48
49	// TRACK DEFAULT VARIANT VIEW
50	// TRACK VARIANT VIEWS
51
52	function woo_variant_view( variant_id ){
53
54		let prod = fpdata.woo.products[variant_id];
55
56		let payload_o = {
57			'contents' : [ {
58				'id' : FP.fns.get_woo_prod_id(prod),
59				'quantity' : 1,
60			} ],
61			'currency' : fpdata.woo.currency,
62			'value' : prod.price,
63			'content_type' : 'product'
64		};
65
66		FP.track_fbp_evt( false, 'ViewContent', false, payload_o );
67	}
68
69	FP.addAction( ['woo_variant_view'], woo_variant_view );
70	FP.addAction( ['woo_def_variant_view'], woo_variant_view );
71
72	// TRACK ADD TO CART
73	// TRACK ADD TO WISHLIST
74
75	function track_items( data, event_name ){
76		
77		let products_data = data.products,
78			event_value = data.value,
79			items_a = [];
80		
81		products_data.forEach( prod_a => {
82
83			let prod = prod_a[0],
84				qty = prod_a[1] || prod.qty || 1,
85				item = {
86				'id' : FP.fns.get_woo_prod_id( prod ),
87				'item_price' : prod.price,
88				'quantity' : parseInt(qty),
89			};
90
91			items_a.push( item );
92		} );
93
94		if ( items_a.length == 0 ) return false;
95
96		let payload_o = {
97			'contents' : items_a, 
98			'value' : event_value, 
99			'currency' : fpdata.woo.currency,
100			'content_type' : 'product'
101		};
102
103		FP.track_fbp_evt( false, event_name, false, payload_o );
104	};
105
106	FP.addAction( ['woo_add_to_cart'], data =>{
107		track_items( data, 'AddToCart' );
108	} );
109
110	FP.addAction( ['woo_add_to_wishlist'], data => {
111		track_items( data, 'AddToWishlist');
112	} );
113
114	// TRACK CHECKOUT
115	// TRACK ORDER
116
117	function track_cart( type ){ // type can be either "checkout" or "order"
118
119		let items_type = fp.woo.variable_tracking_method == 'track_parents' ? 'joined_items' : 'items',
120			items_a = [],
121			cart = type == 'checkout' ? fpdata.woo.cart : fpdata.woo.order,
122			event_name = type == 'checkout' ? 'InitiateCheckout' : 'Purchase';
123
124		for ( const id in cart[items_type] ) {
125
126			let prod = cart[items_type][id],
127				item = {
128				'id' : FP.fns.get_woo_prod_id(prod),
129				'item_price' : prod.price,
130				'quantity' : prod.qty,
131			};
132
133			items_a.push( item );
134		}
135
136		if ( items_a.length == 0 ) return false;
137
138		let payload_o = {
139			'contents' : items_a, 
140			'value' : cart.value, 
141			'num_items': items_a.length,
142			'currency' : fpdata.woo.currency,
143			'content_type' : 'product',
144		};
145
146		FP.track_fbp_evt( false, event_name, false, payload_o );
147	}
148	
149	// track order
150	// unless we already do it through server with advanced order tracking
151	if ( fp.woo.order_data_ready ) {
152		if ( ! fp.main.is_pro || ! ( fp.fbp.server_side && fp.fbp.adv_orders ) ) {
153			track_cart('order');
154		} else {
155			if ( fp.main.debug ) console.log( '[FP] Meta Pixel purchase event is tracked by the server-side script' );
156		}
157	};
158
159	// track the start of checkout (except when the whole page or its part is refreshed)
160	if ( ! fpdata.refreshed ) {
161		if ( fp.woo.checkout_data_ready ) {
162			fp.fbp.woo_checkout_tracked = true;
163			track_cart('checkout')
164		} else {
165			document.addEventListener( 'fupi_woo_checkout_data_ready', ()=>{
166				if ( ! fp.fbp.woo_checkout_tracked ) {
167					fp.fbp.woo_checkout_tracked = true;
168					track_cart('checkout');
169				}
170			})
171		};
172	}
173};
174
175// STANDARD EVENTS
176
177FP.fns.fbp_standard_events = () => {
178		
179	// TRACK OUTBOUND LINKS
180
181	if ( fp.fbp.track_outbound ) {
182		FP.addAction( ['click'], function(){
183			if ( fpdata.clicked.link && fpdata.clicked.link.is_outbound ) {
184				var data = {
185					'url' : fpdata.clicked.link.href,
186					'time on page' : fpdata.activity.total,
187				};
188				FP.track_fbp_evt( true, 'outbound', false, data, !! fp.fbp.track_outbound_capi );
189			}
190		} );
191	}
192
193	// TRACK CLICKS ON EMAIL & TEL LINKS
194
195	if ( fp.fbp.track_email_tel ) {
196		FP.addAction( ['click'], function(){
197			if ( fpdata.clicked.link && ( fpdata.clicked.link.is_email || fpdata.clicked.link.is_tel ) ) {
198				var data = {
199					'target' : fpdata.clicked.link.safe_email || fpdata.clicked.link.safe_tel,
200					'type' : fpdata.clicked.link.is_email ? 'email' : 'tel',
201					'time on page' : fpdata.activity.total,
202				};
203				FP.track_fbp_evt( true, 'Contact', false, data, !! fp.fbp.track_email_tel_capi );
204			}
205		} );
206	}
207
208	// TRACK AFFILIATE LINKS
209
210	if ( fp.fbp.track_affiliate ) {
211		FP.addAction( ['click'], function(){
212			var trackedAffLink = FP.getTrackedAffiliateLink( fp.fbp.track_affiliate );
213			if ( trackedAffLink ) {
214				var data = {
215					'target' : trackedAffLink,
216					'time on page' : fpdata.activity.total,
217				};
218				FP.track_fbp_evt( true, 'affiliate', false, data, !! fp.fbp.track_affiliate_capi );
219			}
220		} );
221	}
222
223	// TRACK FILE DOWNLOADS
224
225	if ( fp.fbp.track_file_downl ) {
226		FP.addAction( ['click'], function(){
227			var filename = FP.getTrackedFilename( fp.fbp.track_file_downl );
228			if ( filename ) {
229				var data = {
230					'file' : filename,
231					'time on page' : fpdata.activity.total,
232				};
233				FP.track_fbp_evt( true, 'file download', false, data, !! fp.fbp.track_file_downl_capi );
234			}
235		} );
236	};
237
238	// TRACK FORMS
239
240	if ( fp.fbp.track_forms ) {
241		FP.addAction( ['form_submit'], function(){
242			var submittedForm = FP.getSubmittedForm( fp.fbp.track_forms );
243			if ( submittedForm ){
244				var data = {
245					'form' : submittedForm,
246					'time on page' : fpdata.activity.total,
247				};
248				FP.track_fbp_evt( true, 'form submit', false, data, !! fp.fbp.track_forms_capi );
249			}
250		})
251	}
252
253	// TRACK SCROLLS
254
255	if ( fp.fbp.track_scroll ){
256		fp.fbp.track_scroll = FP.formatScrollPoints( fp.fbp.track_scroll );
257		FP.addAction( ['scroll', 'active_time_tick'], function(){
258			// check if the window was scrolled
259			if ( fp.fbp.track_scroll.length > 0 && fpdata.activity.total >= fp.track.track_scroll_time && fpdata.scrolled.current_px >= fp.track.track_scroll_min ) {
260				var reachedPoint = FP.isScrollTracked( fp.fbp.track_scroll );
261				if ( reachedPoint ) {
262					// remove from array the scroll points that were already reached
263					fp.fbp.track_scroll = fp.fbp.track_scroll.filter( function( point ){ return point > reachedPoint } );
264					// track scroll
265					var data = {
266						'scroll height' : reachedPoint,
267						'time on page' : fpdata.activity.total,
268					};
269					FP.track_fbp_evt( true, 'scroll', false, data, !! fp.fbp.track_scroll_capi );
270				}
271			}
272		} );
273	}
274
275	// TRACK VIEWS OF ELEMENTS
276	// for performance: waits 250ms for dynamically generated content to finish
277
278	FP.fns.fbp_observe_inters = ( newly_added_els = false ) => {
279
280		let send_el_view_evt = el => {
281
282			var data = {
283				'element' : el.dataset['fbp_view'],
284				'el' : el.dataset['fbp_view'], // for compat. with FP ver < 2.3
285				'time on page' : fpdata.activity.total,
286			};
287			FP.track_fbp_evt( true, 'user viewed', false, data, !! fp.fbp.track_views_capi );
288		};
289		
290		FP.intersectionObserver( newly_added_els, fp.fbp.track_views, 'fbp', send_el_view_evt, true);
291	}
292	
293	if ( fp.fbp.track_views ) setTimeout( ()=>{
294		FP.fns.fbp_observe_inters();
295		FP.addAction( ['dom_modified'], FP.fns.fbp_observe_inters );
296	}, 250 );
297
298	
299
300	// TRACK SPECIFIC ELEMENTS
301
302	if ( fp.fbp.track_elems ) {
303		FP.addAction( ['click'], function(){
304			var trackedElName  = FP.getClickTarget( fp.fbp.track_elems );
305			if ( trackedElName ) {
306				var data = {
307					'name' : trackedElName,
308					'time on page' : fpdata.activity.total,
309				};
310				FP.track_fbp_evt( true, 'click on element', false, data, !! fp.fbp.track_elems_capi );
311			}
312		})
313	}
314};
315
316FP.fns.load_fbp_footer = function() {
317	FP.fns.fbp_standard_events();
318	if ( fp.loaded.includes('woo') ) FP.fns.fbp_woo_events();
319}
320
321// INIT FOOTER SCRIPTS
322FP.enqueueFn( 'FP.fns.load_fbp_footer' );

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.