PageSourceSearch

https://careersinpsychology.org/wp-content/plugins/xyz-schools/public/js/xyz-schools-public.js?ver=1.4.39

js careersinpsychology.org collected 2026-10-02 05:34:33 UTC 6,864 bytes, 213 lines download raw bytes

1var clickTrack = {
2	uniqueId: "",
3	rfc3986EncodeURIComponent: function(n) {
4		return encodeURIComponent(n).replace(/[!'()*]/g, escape)
5	},
6	isNullOrEmpty: function(n) {
7		return n == null || typeof n == "string" && n.trim() === "" || Array.isArray(n) && n.filter(Boolean).length === 0
8	},
9    generateUUID: function() {
10        // Fallback-safe UUID v4 generation
11        return "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".replace(/x/g, function() {
12            var r;
13            try {
14                // Try crypto.getRandomValues first
15                r = (crypto.getRandomValues(new Uint8Array(1))[0] & 15);
16            } catch(e) {
17                // Fallback to Math.random for old WebViews
18                r = Math.random() * 16 | 0;
19            }
20            return r.toString(16);
21        });
22    },
23	getUniqueId: function() {
24        if (clickTrack.isNullOrEmpty(clickTrack.uniqueId)) {
25            clickTrack.uniqueId = clickTrack.generateUUID();
26        }
27        return clickTrack.uniqueId;
28	},
29	trackClickLinks: function(n) {
30		var t = clickTrack.getUniqueId(), r = clickTrack.isNullOrEmpty(n) ? clickTrack.rfc3986EncodeURIComponent(window.location.href) : clickTrack.rfc3986EncodeURIComponent(n), u = clickTrack.rfc3986EncodeURIComponent(navigator.userAgent), i;
31		jQuery(".fs-linkout-tr, .school-container a, .feat-school-list a, .fs-row-e a").each(function() {
32			var n = jQuery(this).attr("href"), i, r;
33			n && !n.match(/s2sId/) && (i = `s2sId=${t}`,
34				r = n + (n.match(/\?/) ? "&" : "?") + i,
35				jQuery(this).attr("href", r))
36		});
37		i = `https://tracking.xyzmedia.net/ClickTracker?uniqueId=${t}&pageUrl=${r}&userAgent=${u}`;
38		jQuery.ajax({
39			url: i,
40			method: "GET"
41		}).fail(function(n) {
42			console.error(n)
43		})
44	}
45};
46
47window.addEventListener('load', function() {
48	loadXYZSchoolListeners();
49	clickTrack.trackClickLinks();
50});
51
52
53function loadXYZSchoolListeners(){
54	jQuery('.fs-linkout-tr').click(function() {
55		var eventCat = 'fsb';
56		var eventAction = jQuery(this).attr("data-point");
57		var eventCode = jQuery(this).attr("data-code");
58		var eventOrder = jQuery(this).attr("data-order");
59		if(!eventOrder){
60			eventOrder = jQuery(this).parent().index();
61		}
62
63		sendEvent(eventCat, eventAction, eventCode, eventOrder);
64	});
65
66	jQuery('.more-sponsor').click(function(e) {
67		e.stopPropagation();
68		jQuery('.sponosor-extended').show();
69	});
70
71	jQuery('body').click(function(e) {
72		if (jQuery('.sponosor-extended').is(':visible')) {
73			e.stopPropagation();
74			jQuery('.sponosor-extended').hide();
75		}
76	});
77
78	jQuery('.show-more-btn').click(function(e) {
79		jQuery('.fs-hide-school').removeClass('fs-hide-school');
80		jQuery('.show-more-btn').hide();
81		sendEvent("Show More", "Click", "Featured School");
82	});
83
84	jQuery('.right').click(function(e) {
85		let iw = jQuery('.item-wrapper').first().width();
86		let move = jQuery('.carousel').scrollLeft() +iw + 50;
87		jQuery('.carousel').scrollLeft(move);
88	});
89
90	jQuery('.left').click(function(e) {
91		let iw = jQuery('.item-wrapper').first().width();
92		let move = jQuery('.carousel').scrollLeft() -iw -50;
93		jQuery('.carousel').scrollLeft(move);
94	});
95
96}
97
98function sendEvent(eventCat, eventAction, eventLabel, eventOrder){
99
100	//Maybe we have 2 versions of this file one with and one without PPC GA Load
101	//GA
102	var useGA = xyzInfo.useGA == 1;
103	var payload = xyzInfo;
104	if (useGA){
105		if(typeof gtag === 'function') {
106			gtag('event', eventCat, {
107				component:eventAction,
108				component_value: eventLabel
109			});
110		}else if (typeof dataLayer === 'object'){
111			dataLayer.push({
112				'event':eventCat,
113				'component':eventAction,
114				'component_value': eventLabel
115			});
116		}
117	}
118
119	if(payload && eventCat === "fsb"){
120		//let endpoint = xyzInfo.endpoint
121		let endpoint = xyzInfo.endpoint;
122		let action = xyzInfo.event;
123		let advertiser;
124		if(eventLabel){
125			advertiser = eventLabel;
126		}else{
127			advertiser = eventLabel.replace(/\s+/g, "-").toLowerCase();
128		}
129		let payloadJson = {"action":action, "advertiser":advertiser, "pos":eventOrder, "clicktrack": clickTrack.uniqueId, "component": eventAction};
130
131		jQuery.ajax({
132				url: endpoint,
133				type: 'POST',
134				data: payloadJson,
135				error: function(error) {
136					console.error('Error:', error);
137				}
138			});
139	}
140
141	//matomo
142	_paq.push(['trackEvent',eventCat, eventAction, eventLabel]);
143}
144
145function decorateLink(url){
146	var tracker = ga.getAll()[0];
147	var linker = new window.gaplugins.Linker(tracker);
148	var destinationUrl = url;
149	if(linker){
150		destinationUrl = linker.decorate(destinationUrl);
151	}
152	return destinationUrl;
153}
154
155
156
157var widgetListener = false;
158var widgetClickListener = function() {
159	if(!widgetListener &&  jQuery('#btnSearchSchools')[0]){
160
161        jQuery('select[name="educationLevelId"]').on('change', function() {
162			var widLoc = getWidgetPosition(jQuery(this));
163            var eventCat =  'widget_interaction_' + widLoc;
164            var eventAction = 'education level';
165            var eventCode = this.value;
166            sendEvent(eventCat, eventAction, eventCode,null);
167        });
168
169        jQuery('select[name="outcomeIdList"]').on('change', function() {
170			var widLoc = getWidgetPosition(jQuery(this));
171            var eventCat =  'widget_interaction_' + widLoc;
172            var eventAction = 'outcome';
173            var eventCode = this.value;
174            sendEvent(eventCat, eventAction, eventCode,null);
175        });
176
177        jQuery('select[name="tags"]').on('change', function() {
178			var widLoc = getWidgetPosition(jQuery(this));
179            var eventCat =  'widget_interaction_' + widLoc;
180            var eventAction = 'tags';
181            var eventCode = this.value;
182            sendEvent(eventCat, eventAction, eventCode,null);
183        });
184
185		//jQuery('form[name="quickSearchWizardForm"]').on('submit', function() {
186        //jQuery('button[name="btnSearchSchools"]').click(function(e) {
187		jQuery('button[name="btnSearchSchools"]').on('click', function() {
188			var widLoc = getWidgetPosition(jQuery(this));
189            var levelId = jQuery('#educationLevelId').val();
190            var outcomeId = jQuery('#outcomeIdList').val();
191            var tags = jQuery('#tags').val();
192			var eventCode = levelId + "_" + outcomeId + "_" + tags;
193            var eventCat =  'widget_submit_' + widLoc;
194            var eventAction = 'button';
195            sendEvent(eventCat, eventAction, eventCode,null);
196        });
197        widgetListener = true;
198        window.removeEventListener('scroll',widgetClickListener);
199        window.removeEventListener('mousemove',widgetClickListener);
200    }
201};
202window.addEventListener('scroll', widgetClickListener);
203window.addEventListener('mousemove', widgetClickListener);
204
205function getWidgetPosition(elem){
206	var widLoc = "body";
207	if (elem.parents('.searchboxleftnav').length || elem.parents('.searchbox-nav').length) {
208		widLoc = "left_nav";
209	}else if(elem.parents('.searchbox-footer').length){
210		widLoc = "footer";
211	}
212	return widLoc;
213}

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.