1var SITE_VISIT_LOG = function(){ 2 3 var getDeviceUUID = function(){ 4 let du = new DeviceUUID().parse(); 5 let dua = [ 6 du.language, 7 du.platform, 8 du.os, 9 du.browser, 10 du.version, 11 du.isDesktop, 12 du.isMobile, 13 du.isTablet, 14 du.isWindows, 15 du.isLinux, 16 du.isLinux64, 17 du.isMac, 18 du.isiPad, 19 du.isiPhone, 20 du.isiPod, 21 du.isSmartTV, 22 ]; 23 24 return dua; 25 } 26 27 var getStatSidData = function(){ 28 var storageKey = 'IMWEB_SITE_STAT_SID'; 29 30 var getTomorrowExpireAt = function(){ 31 var tomorrow = new Date(); 32 tomorrow.setDate(tomorrow.getDate() + 1); 33 tomorrow.setHours(0, 0, 0, 0); 34 return tomorrow.getTime(); 35 }; 36 37 var saveStatSidData = function(sid, expireAt){ 38 try { 39 localStorage.setItem(storageKey, JSON.stringify({ 40 sid: sid, 41 expireAt: expireAt 42 })); 43 } catch (e) {} 44 }; 45 46 var sanitizeStatSid = function(sid){ 47 sid = String(sid || '').replace(/[^a-zA-Z0-9_.:\-]/g, ''); 48 return sid.slice(0, 80); 49 }; 50 51 var getCookieValue = function(name){ 52 try { 53 var cookies = document.cookie ? document.cookie.split(';') : []; 54 for (var i = 0; i < cookies.length; i++) { 55 var cookie = cookies[i].replace(/^\s+|\s+$/g, ''); 56 if (cookie.indexOf(name + '=') !== 0) continue; 57 return decodeURIComponent(cookie.slice(name.length + 1)); 58 } 59 } catch (e) {} 60 return ''; 61 }; 62 63 var getCookieStatSidData = function(){ 64 var sid = sanitizeStatSid(getCookieValue('SITE_STAT_SID')); 65 if (!sid) return null; 66 saveStatSidData(sid, getTomorrowExpireAt()); 67 return { 68 sid: sid, 69 isNew: false 70 }; 71 }; 72 73 var makeStatSidData = function(now){ 74 var sid = 'ls' + now + Math.random().toString(36).slice(2, 14); 75 saveStatSidData(sid, getTomorrowExpireAt()); 76 return { 77 sid: sid, 78 isNew: true 79 }; 80 }; 81 82 try { 83 var now = new Date().getTime(); 84 var cookieStatSidData = getCookieStatSidData(); 85 if (cookieStatSidData) return cookieStatSidData; 86 87 var saved = localStorage.getItem(storageKey); 88 if (saved) { 89 var savedData = null; 90 try { 91 savedData = JSON.parse(saved); 92 } catch (e) { 93 localStorage.removeItem(storageKey); 94 } 95 if (savedData && savedData.sid && savedData.expireAt && savedData.expireAt > now) { 96 return { 97 sid: savedData.sid, 98 isNew: false 99 }; 100 } 101 } 102 103 return makeStatSidData(now); 104 } catch (e) { 105 var fallbackCookieStatSidData = getCookieStatSidData(); 106 if (fallbackCookieStatSidData) return fallbackCookieStatSidData; 107 return makeStatSidData(new Date().getTime()); 108 } 109 } 110 111 var appendEdgeStatelessToken = function(data, edgeStatelessToken){ 112 if (edgeStatelessToken) { 113 data.edge_stateless_token = edgeStatelessToken; 114 } 115 return data; 116 } 117 118 var addVisitLog = function(referer, token, token_key, menu_code, first_visit, edgeStatelessLog, edgeStatelessToken, retry){ 119 edgeStatelessLog = edgeStatelessLog === true; 120 if (retry === undefined) retry = edgeStatelessLog; 121 122 var data = {'referer' : referer, 'token' : token, 'token_key':token_key, 'menu_code':menu_code, 'dua': getDeviceUUID().join(':'),'first_visit':first_visit?'Y':'N'}; 123 if (edgeStatelessLog) { 124 var statSidData = getStatSidData(); 125 data.stat_sid = statSidData.sid; 126 data.stat_sid_new = statSidData.isNew ? 'Y' : 'N'; 127 appendEdgeStatelessToken(data, edgeStatelessToken); 128 } 129 130 $.ajax({ 131 type : 'POST', 132 data : data, 133 url : ('/backpg/add_visit_log.cm'), 134 dataType : 'json', 135 success : function(res){ 136 if (edgeStatelessLog && retry && res && String(res.msg) === '-100') { 137 getToken(function(newToken, newTokenKey){ 138 addVisitLog(referer, newToken, newTokenKey, menu_code, first_visit, true, edgeStatelessToken, false); 139 }, edgeStatelessToken); 140 } 141 } 142 }); 143 }; 144 145 var addProdViewLog = function(prodCode, token, token_key, edgeStatelessLog, edgeStatelessToken, retry){ 146 edgeStatelessLog = edgeStatelessLog === true; 147 if (retry === undefined) retry = edgeStatelessLog; 148 var data = {'prod_code' : prodCode, 'token' : token, 'token_key':token_key, 'dua': getDeviceUUID().join(':')}; 149 if (edgeStatelessLog) { 150 appendEdgeStatelessToken(data, edgeStatelessToken); 151 } 152 153 $.ajax({ 154 type : 'POST', 155 data : data, 156 url : ('/backpg/add_prod_view_log.cm'), 157 dataType : 'json', 158 success : function(res){ 159 if (edgeStatelessLog && retry && res && String(res.msg) === '-100') { 160 getToken(function(newToken, newTokenKey){ 161 addProdViewLog(prodCode, newToken, newTokenKey, true, edgeStatelessToken, false); 162 }, edgeStatelessToken); 163 } 164 } 165 }); 166 }; 167 168 var getToken = function(callback, edgeStatelessToken){ 169 var data = {}; 170 appendEdgeStatelessToken(data, edgeStatelessToken); 171 $.ajax({ 172 type : 'POST', 173 data : data, 174 url : ('/backpg/get_visit_token.cm'), 175 dataType : 'json', 176 success : function(res){ 177 if(res.msg == 'SUCCESS'){ 178 callback(res.log_token, res.log_token_key, res.reffrer); 179 } 180 } 181 }); 182 }; 183 184 return { 185 'addVisitLog' : function(referer, token, token_key, menu_code, first_visit, edgeStatelessLog, edgeStatelessToken){ 186 addVisitLog(referer, token, token_key, menu_code, first_visit, edgeStatelessLog, edgeStatelessToken); 187 }, 188 'addProdViewLog' : function(prodCode, token, token_key, edgeStatelessLog, edgeStatelessToken){ 189 addProdViewLog(prodCode, token, token_key, edgeStatelessLog, edgeStatelessToken); 190 }, 191 'getToken' : function(callback, edgeStatelessToken){ 192 getToken(callback, edgeStatelessToken); 193 } 194 } 195}();
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.