1var XA = XA || (function ($, document) { 2 var api = {}, onPreInitHandlers, onPostInitHandlers, modules = {}; 3 onPreInitHandlers = new Array(); 4 onPostInitHandlers = new Array(); 5 api.register = function (name, api, init) { 6 modules[name] = { 7 name: name, 8 api: api, 9 init: init || api.init || (function () { }) 10 }; 11 }; 12 api.hasPageModes = function () { return !!(window.Sitecore && window.Sitecore.PageModes); }; 13 api.registerOnPreInitHandler = function (handler) { onPreInitHandlers.push(handler); }; 14 api.registerOnPostInitHandler = function (handler) { onPostInitHandlers.push(handler); }; 15 var initScheduled = false; 16 api.init = function () { 17 if (!initScheduled) { 18 initScheduled = true; 19 XA.ready(function () { 20 try { 21 for (var name in modules) 22 if (modules.hasOwnProperty(name)) { 23 $xa.each(onPreInitHandlers, function (i, h) { h.process(name, modules[name]); }); 24 modules[name].init(); 25 $xa.each(onPostInitHandlers, function (i, h) { h.process(name, modules[name]); }); 26 } 27 } 28 finally { 29 initScheduled = false; 30 } 31 }); 32 } 33 }; 34 api.ready = function (fn) { 35 $(document).ready(fn); 36 }; 37 api.component = {}; 38 api.connector = {}; 39 api.cookies = { 40 shouldSendSameSiteNone: function (useragent) { 41 return !this.isSameSiteNoneIncompatible(useragent); 42 }, 43 isSameSiteNoneIncompatible: function (useragent) { 44 return this.hasWebKitSameSiteBug(useragent) || 45 this.dropsUnrecognizedSameSiteCookies(useragent); 46 }, 47 hasWebKitSameSiteBug: function (useragent) { 48 return this.isIosVersion(12, useragent) || 49 (this.isMacosxVersion(10, 14, useragent) && 50 (this.isSafari(useragent) || this.isMacEmbeddedBrowser(useragent))); 51 }, 52 dropsUnrecognizedSameSiteCookies: function (useragent) { 53 if (this.isUcBrowser(useragent)) { 54 return !this.isUcBrowserVersionAtLeast(12, 13, 2, useragent); 55 } 56 return this.isChromiumBased(useragent) && 57 this.isChromiumVersionAtLeast(51, useragent) && 58 !this.isChromiumVersionAtLeast(67, useragent); 59 }, 60 isIosVersion: function (major, useragent) { 61 var regex = /\(iP.+; CPU .*OS (\d+)[_\d]*.*\) AppleWebKit\//; 62 return useragent.match(regex) !== null && useragent.match(regex)[0] == major.toString(); 63 }, 64 isMacosxVersion: function (major, minor, useragent) { 65 var regex = /\(Macintosh;.*Mac OS X (\d+)_(\d+)[_\d]*.*\) AppleWebKit\//; 66 return useragent.match(regex) !== null && 67 ((useragent.match(regex)[0] == major.toString()) && 68 useragent.match(regex)[1] == minor.toString()); 69 }, 70 isSafari: function (useragent) { 71 var safari_regex = /Version\/.* Safari\//; 72 return useragent.match(safari_regex) !== null && 73 !this.isChromiumBased(useragent); 74 }, 75 isMacEmbeddedBrowser: function (useragent) { 76 var regex = /^Mozilla\/[\.\d]+ \(Macintosh;.*Mac OS X [_\d]+\) AppleWebKit\/[\.\d]+ \(KHTML, like Gecko\)$/; 77 return useragent.match(regex) !== null; 78 }, 79 isChromiumBased: function (useragent) { 80 var regex = /Chrom(e|ium)/; 81 return useragent.match(regex) !== null; 82 }, 83 isChromiumVersionAtLeast: function (major, useragent) { 84 var regex = /Chrom[^ \/]+\/(\d+)[\.\d]* /; 85 var version = parseInt(useragent.match(regex)[1]); 86 return version >= major; 87 }, 88 isUcBrowser: function (useragent) { 89 var regex = /UCBrowser\//; 90 return useragent.match(regex) !== null; 91 }, 92 isUcBrowserVersionAtLeast: function (major, minor, build, useragent) { 93 var regex = /UCBrowser\/(\d+)\.(\d+)\.(\d+)[\.\d]* /; 94 var major_version = parseInt(useragent.match(regex)[0]); 95 var minor_version = parseInt(useragent.match(regex)[1]); 96 var build_version = parseInt(useragent.match(regex)[2]); 97 if (major_version != major) { 98 return major_version > major; 99 } 100 if (minor_version != minor) { 101 return minor_version > minor; 102 } 103 return build_version >= build; 104 },
105 createCookie: function (name, value, days, sameSite, sameSiteForce) { 106 var cookieValue = "", sameSiteValue = "", secureFlag = ""; 107 if (days) { 108 var date = new Date(); 109 date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 110 var expires = "; expires=" + date.toUTCString(); 111 } 112 else { 113 expires = ""; 114 } 115 if (sameSite && sameSite.length > 0 && (sameSiteForce || this.shouldSendSameSiteNone(window.navigator.userAgent))) { 116 sameSiteValue = "SameSite=" + sameSite + ";"; 117 } 118 if (location.protocol === 'https:') { 119 secureFlag = "; secure"; 120 } 121 document.cookie = name + "=" + value + expires + ";" + sameSiteValue + " path=/" + secureFlag; 122 }, 123 readCookie: function (name) { 124 var nameEQ = name + "="; 125 var ca = document.cookie.split(';'); 126 for (var i = 0; i < ca.length; i++) { 127 var c = ca[i]; 128 while (c.charAt(0) == ' ') { 129 c = c.substring(1, c.length); 130 } 131 if (c.indexOf(nameEQ) == 0) { 132 return c.substring(nameEQ.length, c.length); 133 } 134 } 135 return null; 136 }, 137 removeCookieWarning: function () { 138 var cookieWarning = $xa(".privacy-warning"); 139 cookieWarning.remove(); 140 } 141 }; 142 api.queryString = { 143 getQueryParam: function (variable) { 144 if (variable != null) { 145 variable = variable.toLocaleLowerCase(); 146 } 147 var query = window.location.search.substring(1); 148 var vars = query.split("&"); 149 for (var i = 0; i < vars.length; i++) { 150 var pair = vars[i].split("="); 151 if (decodeURIComponent(pair[0].toLocaleLowerCase()) === variable) { 152 return decodeURIComponent(pair[1]); 153 } 154 } 155 return null; 156 } 157 }; 158 var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; 159 var eventListenerSupported = window.addEventListener; 160 api.dom = { 161 observeDOM: function (obj, callback) { 162 if (MutationObserver) { 163 var obs = new MutationObserver(function (mutations) { 164 if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) 165 callback(); 166 }); 167 var options = { 168 childList: true, 169 subtree: true 170 }; 171 obs.observe(obj, options); 172 } 173 else if (eventListenerSupported) { 174 obj.addEventListener('DOMNodeInserted', callback, false); 175 obj.addEventListener('DOMNodeRemoved', callback, false); 176 } 177 } 178 }; 179 return api; 180})($, document); 181XA.init();
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.