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 loadFSBClickListeners() 55 56 jQuery('.more-sponsor').click(function(e) { 57 e.stopPropagation(); 58 jQuery('.sponosor-extended').show(); 59 }); 60 61 jQuery('body').click(function(e) { 62 if (jQuery('.sponosor-extended').is(':visible')) { 63 e.stopPropagation(); 64 jQuery('.sponosor-extended').hide(); 65 } 66 }); 67 68 jQuery('.show-more-btn').click(function(e) { 69 jQuery('.fs-hide-school').removeClass('fs-hide-school'); 70 jQuery('.show-more-btn').hide(); 71 sendEvent("Show More", "Click", "Featured School"); 72 }); 73 74 jQuery('.right').click(function(e) { 75 let iw = jQuery('.item-wrapper').first().width(); 76 let move = jQuery('.carousel').scrollLeft() +iw + 50; 77 jQuery('.carousel').scrollLeft(move); 78 }); 79 80 jQuery('.left').click(function(e) { 81 let iw = jQuery('.item-wrapper').first().width(); 82 let move = jQuery('.carousel').scrollLeft() -iw -50; 83 jQuery('.carousel').scrollLeft(move); 84 }); 85 86} 87 88function loadFSBClickListeners(){ 89 jQuery('.fs-linkout-tr').click(function() { 90 var eventCat = 'fsb'; 91 var eventAction = jQuery(this).attr("data-point"); 92 var eventCode = jQuery(this).attr("data-code"); 93 var eventOrder = jQuery(this).attr("data-order"); 94 if(!eventOrder){ 95 eventOrder = jQuery(this).parent().index(); 96 } 97 98 sendEvent(eventCat, eventAction, eventCode, eventOrder); 99 }); 100} 101 102function reLoadFSBClickListeners(){ 103 loadFSBClickListeners(); 104 clickTrack.trackClickLinks(); 105} 106 107function sendEvent(eventCat, eventAction, eventLabel, eventOrder){ 108 109 //Maybe we have 2 versions of this file one with and one without PPC GA Load 110 //GA 111 var useGA = xyzInfo.useGA == 1; 112 var payload = xyzInfo; 113 if (useGA){ 114 if(typeof gtag === 'function') { 115 gtag('event', eventCat, { 116 component:eventAction, 117 component_value: eventLabel 118 }); 119 }else if (typeof dataLayer === 'object'){ 120 dataLayer.push({ 121 'event':eventCat, 122 'component':eventAction, 123 'component_value': eventLabel 124 }); 125 } 126 } 127 128 if(payload && eventCat === "fsb"){ 129 //let endpoint = xyzInfo.endpoint 130 let endpoint = xyzInfo.endpoint; 131 let action = xyzInfo.event; 132 let advertiser; 133 if(eventLabel){ 134 advertiser = eventLabel; 135 }else{ 136 advertiser = eventLabel.replace(/\s+/g, "-").toLowerCase(); 137 }
138 let payloadJson = {"action":action, "advertiser":advertiser, "pos":eventOrder, "clicktrack": clickTrack.uniqueId, "component": eventAction}; 139 140 jQuery.ajax({ 141 url: endpoint, 142 type: 'POST', 143 data: payloadJson, 144 error: function(error) { 145 console.error('Error:', error); 146 } 147 }); 148 } 149 150 //matomo 151 _paq.push(['trackEvent',eventCat, eventAction, eventLabel]); 152} 153 154function decorateLink(url){ 155 var tracker = ga.getAll()[0]; 156 var linker = new window.gaplugins.Linker(tracker); 157 var destinationUrl = url; 158 if(linker){ 159 destinationUrl = linker.decorate(destinationUrl); 160 } 161 return destinationUrl; 162} 163 164 165 166var widgetListener = false; 167var widgetClickListener = function() { 168 if(!widgetListener && jQuery('#btnSearchSchools')[0]){ 169 170 jQuery('select[name="educationLevelId"]').on('change', function() { 171 var widLoc = getWidgetPosition(jQuery(this)); 172 var eventCat = 'widget_interaction_' + widLoc; 173 var eventAction = 'education level'; 174 var eventCode = this.value; 175 sendEvent(eventCat, eventAction, eventCode,null); 176 }); 177 178 jQuery('select[name="outcomeIdList"]').on('change', function() { 179 var widLoc = getWidgetPosition(jQuery(this)); 180 var eventCat = 'widget_interaction_' + widLoc; 181 var eventAction = 'outcome'; 182 var eventCode = this.value; 183 sendEvent(eventCat, eventAction, eventCode,null); 184 }); 185 186 jQuery('select[name="tags"]').on('change', function() { 187 var widLoc = getWidgetPosition(jQuery(this)); 188 var eventCat = 'widget_interaction_' + widLoc; 189 var eventAction = 'tags'; 190 var eventCode = this.value; 191 sendEvent(eventCat, eventAction, eventCode,null); 192 }); 193 194 //jQuery('form[name="quickSearchWizardForm"]').on('submit', function() { 195 //jQuery('button[name="btnSearchSchools"]').click(function(e) { 196 jQuery('button[name="btnSearchSchools"]').on('click', function() { 197 var widLoc = getWidgetPosition(jQuery(this)); 198 var levelId = jQuery('#educationLevelId').val(); 199 var outcomeId = jQuery('#outcomeIdList').val(); 200 var tags = jQuery('#tags').val(); 201 var eventCode = levelId + "_" + outcomeId + "_" + tags; 202 var eventCat = 'widget_submit_' + widLoc; 203 var eventAction = 'button'; 204 sendEvent(eventCat, eventAction, eventCode,null); 205 }); 206 widgetListener = true; 207 window.removeEventListener('scroll',widgetClickListener); 208 window.removeEventListener('mousemove',widgetClickListener); 209 } 210}; 211window.addEventListener('scroll', widgetClickListener); 212window.addEventListener('mousemove', widgetClickListener); 213 214function getWidgetPosition(elem){ 215 var widLoc = "body"; 216 if (elem.parents('.searchboxleftnav').length || elem.parents('.searchbox-nav').length) { 217 widLoc = "left_nav"; 218 }else if(elem.parents('.searchbox-footer').length){ 219 widLoc = "footer"; 220 } 221 return widLoc; 222}
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.