PageSourceSearch

https://havit.blazor.eu/_content/Havit.Blazor.GoogleTagManager/HxGoogleTagManager.qtrfb7k65a.js

js blazor.eu collected 2026-09-24 23:00:07 UTC 2,757 bytes, 78 lines download raw bytes

1// Lives on window because the inline snippet rendered by HxGoogleTagManagerPageViewTracker during
2// static SSR is a plain <script> and cannot reach this module's scope. Both have to agree on whether
3// GTM is already running and which page-view was tracked last.
4const state = window.hxGoogleTagManager = window.hxGoogleTagManager || { initialized: false, config: null, lastPageViewUrl: null, initialPageViewHandled: false };
5
6export function initialize(gtmId, pageViewEventName, pageViewUrlVariableName, enableInitialPageViewTracking) {
7	state.config = {
8		gtmId: gtmId,
9		pageViewEventName: pageViewEventName,
10		pageViewUrlVariableName: pageViewUrlVariableName,
11		enableInitialPageViewTracking: enableInitialPageViewTracking
12	};
13
14	if (state.initialized) {
15		return;
16	}
17	state.initialized = true;
18
19	(function (w, d, s, l, i) {
20		w[l] = w[l] || [];
21		w[l].push({
22			"gtm.start": new Date().getTime(),
23			event: "gtm.js",
24		});
25		const f = d.getElementsByTagName("head")[0],
26			j = d.createElement(s),
27			dl = l !== "dataLayer" ? "&l=" + l : "";
28		j.async = true;
29		j.src = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
30		f.appendChild(j);
31		dataLayer.push({ event: "pageview" });
32		window.isGTM = true;
33	})(window, document, "script", "dataLayer", gtmId);
34}
35
36export function push(data) {
37	dataLayer.push(data);
38	console.debug("GTM:" + JSON.stringify(data));
39}
40
41export function pushEvent(eventName, eventData) {
42	if (eventData === null) {
43		eventData = new Object();
44	}
45	eventData['event'] = eventName;
46	push(eventData);
47}
48
49export function pushPageViewEvent(eventName, urlVariableName, url, eventData) {
50	if (eventData === null) {
51		eventData = new Object();
52	}
53	eventData[urlVariableName] = url;
54	eventData['event'] = eventName;
55	state.lastPageViewUrl = url;
56	push(eventData);
57}
58
59// One navigation reaches automatic tracking more than once: enhancedload is raised for every enhanced
60// page update including streaming ones, and an interactive HxGoogleTagManagerPageViewTracker reacts to
61// the same navigation. Explicit IHxGoogleTagManager.PushPageViewAsync() calls do not come through here.
62export function pushPageViewEventOnce(eventName, urlVariableName, url, eventData, trackInitialPageView) {
63	const isInitialPageView = !state.initialPageViewHandled;
64	state.initialPageViewHandled = true;
65
66	if (url === state.lastPageViewUrl) {
67		return;
68	}
69
70	if (isInitialPageView && (trackInitialPageView === false)) {
71		// Suppressed but still remembered, otherwise the next enhancedload for the same URL would look
72		// like a navigation and push it after all.
73		state.lastPageViewUrl = url;
74		return;
75	}
76
77	pushPageViewEvent(eventName, urlVariableName, url, eventData);
78}

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.