PageSourceSearch

https://www.lojaintt.com.br/common/js/datalayer-events.js?v=1790170509

js lojaintt.com.br collected 2026-09-26 10:09:57 UTC 12,316 bytes, 485 lines download raw bytes

1var dataLayerEvent = [];
2var clickTracker = [];
3
4dataLayerEvent.pendingCartEvents = [];
5
6dataLayerEvent.useGA4 = $('#google-ga4-enable').val().toLocaleLowerCase() == 's' ? true : false;
7dataLayerEvent.advancedEcommerce = $('#google-ecommerce-enable').val().toLocaleLowerCase() == 's' ? true : false;
8
9dataLayerEvent.addPendingCartEvent = function (item, eventName) {
10	dataLayerEvent.pendingCartEvents.push({
11		item: item,
12		name: eventName
13	});
14};
15
16dataLayerEvent.clearPendingCartEvent = function () {
17	dataLayerEvent.pendingCartEvents = [];
18}
19
20dataLayerEvent.sendPendingCartEvents = function () {
21	for (var event of dataLayerEvent.pendingCartEvents) {
22		dataLayerEvent.makeGACartEvent(event.item, event.name);
23	}
24
25	dataLayerEvent.clearPendingCartEvent();
26};
27
28dataLayerEvent.getProduct = function (productId) {
29	if (typeof(dataLayer) !== "object" || !dataLayer instanceof Array) {
30		return;
31	}
32
33	var data = dataLayer.filter(function (property) {
34		return property.ecommerce && property.ecommerce.impressions;
35	}).shift();
36
37	if (!data) {
38		return;
39	}
40
41	var impressions = data.ecommerce.impressions;
42
43	return impressions.filter(function (product) {
44		return product.id == productId;
45	}).shift();
46};
47
48dataLayerEvent.makeGAProductClickEvent = function (productId) {
49	if (typeof(dataLayer) === "undefined") {
50		return;
51	}
52
53	var product = dataLayerEvent.getProduct(productId);
54	if (!product) {
55		return;
56	}
57
58	product.list = product.list || 'produto';
59
60	var eventData = {
61		'event': 'productClick',
62		'ecommerce': {
63			'currencyCode': 'BRL',
64			'click': {
65				'actionField': { 'list': product.list },
66				'products': [product]
67			}
68		}
69	}
70
71	dataLayer.push(eventData);
72};
73
74clickTracker.productClick = function () {
75	$(document).on('click','a[href*="/produto/"]', function (ev) {
76		var parents = $(this).parents();
77
78		for (var key in parents) {
79			var $element = $(parents[key]);
80			if ($element.prop("tagName") == 'BODY') {
81				return true;
82			}
83			if (!$element.attr('class') || !$element.attr('class').match(/product/)) {
84				continue;
85			}
86
87			if ($element.find('input[value="comprarapida"]').length) {
88				var productId = $element.find('input[name="id"]').val();
89				dataLayerEvent.makeGAProductClickEvent(productId);
90				return true;
91			}
92
93			var $link = $element.find('a[data-href*="avisodisponiveltodasunidades"]');
94			if ($link.length) {
95				var productId = helper.strstr($link.attr('data-href'), 'id=').replace('id=', '');
96				dataLayerEvent.makeGAProductClickEvent(productId);
97				return true;
98			}
99		}
100
101		return true;
102	});
103
104	$('a[data-href*="avisodisponiveltodasunidades"]').on('click', function (ev) {
105		$this = $(this);
106		if (!$this.attr('data-href').match(/avisodisponiveltodasunidades/)) {
107			return true;
108		}
109		
110		var productId = helper.strstr($this.attr('data-href'), 'id=').replace('id=', '');
111		dataLayerEvent.makeGAProductClickEvent(productId);
112		return true;
113	});
114
115	$(document).on('submit','.ajaxform, form[data-action]', function () {
116		var $this = $(this);
117		if (!$this.find('input[value="comprarapida"]').length) {
118			return true;
119		}
120
121		var productId = $this.find('input[name="id"]').val();
122
123		dataLayerEvent.makeGAProductClickEvent(productId);
124	});
125};
126
127dataLayerEvent.makeGACheckoutStepEvent = function (step) {
128	if (typeof(dataLayer) === "undefined") {
129		return;
130	}
131
132	var eventData = {
133		'event': 'checkout',
134		'ecommerce': {
135			'checkout': {
136				'actionField': { 'step': step || 1 },
137			}
138		}
139	}
140
141	dataLayer.push(eventData);
142};
143
144dataLayerEvent.makeGACheckoutOptionEvent = function (step, checkoutOption) {
145	if (dataLayerEvent.useGA4) {
146		return;
147	}
148
149	if (typeof(dataLayer) === "undefined") {
150		return;
151	}
152
153	var eventData = {
154		'event': 'checkoutOption',
155		'ecommerce': {
156			'checkout_option': {
157				'actionField': { 'step': step, 'option': checkoutOption }
158			}
159		}
160	}
161
162	dataLayer.push(eventData);
163};
164
165dataLayerEvent.cartEvents = {
166	'addToCart': 'add',
167	'removeFromCart': 'remove'
168};
169
170dataLayerEvent.makeGACartEvent = function (item, eventName) {
171	if (typeof(dataLayer) === "undefined") {
172		return;
173	}
174
175	if (!dataLayerEvent.useGA4) {
176		var eventAction = dataLayerEvent.cartEvents[eventName] || 'none';
177		var eventData = {
178			'event': eventName,
179			'ecommerce': {
180				'currencyCode': 'BRL',
181				eventAction: {
182					'products': [item],
183				}
184			}
185		}
186	
187		dataLayer.push(eventData);
188		return;
189	}
190
191	dataLayerEvent.buildEventData(eventName, dataLayerEvent.buildItems([item]));
192};
193
194dataLayerEvent.buildEventData = function(eventName, items, additionalData) {
195	let value = 0;
196
197	if (cart.subtotalValue) {
198		value = cart.subtotalValue - cart.couponValue;
199	}
200
201	if (checkout.order.total) {
202		value = checkout.order.total;
203	}
204
205	if (!dataLayerEvent.advancedEcommerce) {
206		gtag("event", eventName, {
207			currency: value ? "BRL": null,
208			value: is_null(value) ? 0 : value,
209			coupon: orderCoupon.appliedCoupon.reference ? orderCoupon.appliedCoupon.reference : null,
210			items: items,
211			...additionalData
212		});
213
214		return;
215	}
216
217	dataLayer.push({
218		event: eventName,
219		value: value,
220		coupon: orderCoupon.appliedCoupon.reference ? orderCoupon.appliedCoupon.reference : null,
221		...additionalData,
222		ecommerce: {
223			items: items
224		}
225	});
226}
227
228dataLayerEvent.buildLoginEventData = function(eventName, method) {
229	if (!dataLayerEvent.advancedEcommerce) {
230		gtag("event", eventName, {
231			method: method
232		});
233
234		return;
235	}
236
237	dataLayer.push({
238		event: eventName,
239		method: method
240	});
241}
242
243dataLayerEvent.buildItems = function(items) {
244	let itemsData = items.map(item => {
245		return {
246			item_id: item.id ? item.id : null,
247			item_name: item.name ? item.name : null,
248			price: item.price ? item.price : null,
249			quantity: item.quantity ? item.quantity : 1,
250			item_variant: item.variant ? item.variant : null
251		}
252	});
253
254	return itemsData;
255}
256
257dataLayerEvent.translateCartToDataLayerItems = function() {
258	if (!cart.items) {
259		return null;
260	}
261
262	const items = cart.items.map(item => {
263		let variant = null;
264		if (item.tamanho && item.opcao) {
265			variant = `${item.produto.id}-${item.opcao.id}-${item.tamanho.id}`;
266		}
267
268		return {
269			item_id: item.produto.id ? item.produto.id : null,
270			item_name: item.produto.nome ? item.produto.nome : null,
271			price: item.preco ? item.preco : null,
272			quantity: item.quantidade ? item.quantidade : 1,
273			item_variant: variant
274		}
275	});
276
277	return items;
278}
279
280clickTracker.cartEvents = function () {
281	var selector = 'a[data-add-action]';
282	var quantitySelector = 'input[data-quantity]';
283	var removeSelector = 'a[data-ask-action="excluirUnidade"]';
284
285	$(document).on('click', selector, function (ev) {
286		dataLayerEvent.clearPendingCartEvent()
287
288		var action = $(this).data('add-action');
289		var $quantityUnit = $(this).parent('[data-quantity-unit]');
290
291		var itemSku = $quantityUnit.data('quantity-unit');
292		var productId = itemSku.split('-')[0];
293		var item = {
294			'id': productId,
295			'variant': itemSku,
296			'quantity': 1
297		};
298
299		var eventName = dataLayerEvent.useGA4 ? 'add_to_cart' : 'addToCart';
300		if (action == 'down') {
301			eventName = dataLayerEvent.useGA4 ? 'remove_from_cart' : 'removeFromCart';
302
303			var quantity = $quantityUnit.find(quantitySelector).val();
304			// O envio é executado após a confirmação do usuário
305			if (quantity == 1) {
306				dataLayerEvent.addPendingCartEvent(item, eventName);
307				return true;
308			}
309		}
310
311		dataLayerEvent.makeGACartEvent(item, eventName);
312	});
313
314	$(document).on('focus', quantitySelector, function () {
315		if (!this.previousValue) {
316			this.previousValue = this.value;
317		}
318	}).on('change', quantitySelector, function (ev) {
319		dataLayerEvent.clearPendingCartEvent()
320
321		var diffQuantity = this.value - this.previousValue;
322
323		var eventName = dataLayerEvent.useGA4 ? 'add_to_cart' : 'addToCart';
324		if (diffQuantity < 0) {
325			eventName = dataLayerEvent.useGA4 ? 'remove_from_cart' : 'removeFromCart';
326		}
327
328		var itemSku = $(this).parent('[data-quantity-unit]').data('quantity-unit');
329		var productId = itemSku.split('-')[0];
330		var item = {
331			'id': productId,
332			'variant': itemSku,
333			'quantity': Math.abs(diffQuantity)
334		};
335
336		this.previousValue = this.value;
337
338		// O envio é executado após a confirmação do usuário
339		if (this.value == 0) {
340			dataLayerEvent.addPendingCartEvent(item, eventName);
341			return true;
342		}
343
344		dataLayerEvent.makeGACartEvent(item, eventName);
345	});
346
347	$(document).on('click', removeSelector, function () {
348		dataLayerEvent.clearPendingCartEvent()
349
350		var itemSku = $(this).siblings('[data-quantity-unit]').data('quantity-unit');
351		if (!itemSku) {
352			itemSku = $(this).data('itemsku');
353		}
354
355		var productId = itemSku.split('-')[0];
356		var item = {
357			'id': productId,
358			'variant': itemSku
359		};
360
361		dataLayerEvent.addPendingCartEvent(item, dataLayerEvent.useGA4 ? 'remove_from_cart' : 'removeFromCart');
362	})
363};
364
365clickTracker.stepsEvents = function() {
366	$(document).on('checkout.stepevent', function(ev, step, stepsName) {
367		clickTracker.buildGA4Event(step, stepsName);
368	});
369}
370
371clickTracker.buildGA4Event = function(step, stepsName, additionalData = {}) {
372	const stepsNameContent = {
373		0: 'begin_checkout',
374		1: 'sign_up',
375		2: 'login',
376		3: 'create_address',
377		4: 'add_address_info',
378		5: 'add_billing_info',
379		6: 'add_shipping_info',
380		7: 'add_coupon',
381		8: 'add_payment_info'
382	};
383
384	if (dataLayerEvent.useGA4) {
385		if (step == 1 || step == 2) {
386			dataLayerEvent.buildLoginEventData(
387				stepsNameContent[step],
388				'Guest'
389			);
390
391			return;
392		}
393
394		dataLayerEvent.buildEventData(
395			stepsNameContent[step],
396			dataLayerEvent.translateCartToDataLayerItems(),
397			additionalData
398		);
399	}
400}
401
402clickTracker.eventTriggered = {
403	login: false,
404	signUp: false,
405	addAddress: false,
406	createAddress: false,
407	addShipping: false,
408	addBilling: false
409};
410
411clickTracker.checkoutEvents = function () {
412	$(document).on('checkout.step', function (ev, step, stepName) {
413		if (!helper.isEmpty(step)) {
414			dataLayerEvent.makeGACheckoutStepEvent(step);
415		}
416	});
417
418	$(document).on('checkout.login', function (ev, option) {
419		if (!helper.isEmpty(option) && !clickTracker.eventTriggered.login) {
420			clickTracker.eventTriggered.login = true;
421			clickTracker.buildGA4Event(2, 'login');
422			dataLayerEvent.makeGACheckoutOptionEvent(1, option);
423		}
424	});
425
426	$(document).on('checkout.address.selected', function (ev, option) {
427		if (!helper.isEmpty(option) && !clickTracker.eventTriggered.addAddress) {
428			clickTracker.eventTriggered.addAddress = true;
429			clickTracker.buildGA4Event(4, 'add_address_info');
430			dataLayerEvent.makeGACheckoutOptionEvent(2, 'selecionado');
431		}
432	});
433
434	$(document).on('checkout.address.created', function (ev, option) {
435		if (!helper.isEmpty(option) && !clickTracker.eventTriggered.createAddress) {
436			clickTracker.eventTriggered.createAddress = true;
437			clickTracker.buildGA4Event(3, 'create_address');
438			dataLayerEvent.makeGACheckoutOptionEvent(2, 'cadastro');
439		}
440	});
441
442	$(document).on('checkout.delivery.selected', function (ev, option) {
443		if (!helper.isEmpty(option) && 'nome' in option && !clickTracker.eventTriggered.addShipping) {
444			clickTracker.eventTriggered.addShipping = true;
445			clickTracker.buildGA4Event(6, 'add_shipping_info');
446			dataLayerEvent.makeGACheckoutOptionEvent(3, option.nome);
447		}
448	});
449
450	$(document).on('checkout.billingaddress.selected', function (ev, option) {
451		if (!helper.isEmpty(option) && !clickTracker.eventTriggered.addBilling) {
452			clickTracker.eventTriggered.addBilling = true;
453			clickTracker.buildGA4Event(5, 'add_billing_info');
454			dataLayerEvent.makeGACheckoutOptionEvent(4, 'selecionado');
455		}
456	});
457
458	$(document).on('checkout.billingaddress.created', function (ev, option) {
459		if (!helper.isEmpty(option) && !clickTracker.eventTriggered.addBilling) {
460			clickTracker.eventTriggered.addBilling = true;
461			clickTracker.buildGA4Event(5, 'add_billing_info');
462			dataLayerEvent.makeGACheckoutOptionEvent(4, 'cadastro');
463		}
464	});
465
466	$(document).on('checkout.payment.selected', function (ev, option) {
467		if (!helper.isEmpty(option) && 'nomeExibicao' in option) {
468			const data = {payment_type: option.nomeExibicao};
469
470			clickTracker.buildGA4Event(8, 'add_payment_info', data);
471			dataLayerEvent.makeGACheckoutOptionEvent(4, option.nomeExibicao);
472		}
473	});
474
475	$(document).on('checkout.coupon.applied', (ev, coupon) => {
476		clickTracker.buildGA4Event(7, 'add_coupon');
477	});
478};
479
480$(function () {
481	clickTracker.productClick();
482	clickTracker.cartEvents();
483	clickTracker.checkoutEvents();
484	clickTracker.stepsEvents();
485});

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.