1//let url = null 2/** 3 * Intercepts HTTP calls 4 * @param {*} instance Axios HTTP client 5 */ 6window.intercept = function (instance) { 7 8 instance.CancelToken = axios.CancelToken; 9 instance.isCancel = axios.isCancel; 10 11 12 // Add request config 13 instance.interceptors.request.use( 14 request => { 15 //console.log("request intercepted:", request.url) 16 // Retrieve token from cookie 17 let tokenValue = window.getCookieInformation("token"); 18 if (!request.url.includes('login') && tokenValue !== undefined) { 19 request.headers['Authorization'] = 'Bearer ' + tokenValue; 20 } 21 22 /*if (request.url.includes('checkout')) { 23 url = 'checkout' 24 }*/ 25 26 return request 27 }, 28 error => { 29 return Promise.reject(error); 30 31 } 32 ); 33 34 // Handle response from api 35 instance.interceptors.response.use( 36 (response) => { 37 return response; 38 }, 39 (error) => { 40 /*debugger; */ 41 let errorCode = null; 42 43 if (error.code === 'ECONNABORTED') { 44 errorCode = 500 45 } else { 46 errorCode = error.response.status 47 } 48 49 switch (errorCode) { 50 case 500: 51 case 408: 52 $.busyLoadFull('hide'); 53 let pruebaContainer = window.utilityComponent.generateDynamicContainer('root_utilities', 'error_500'); 54 window.utilityComponent.generatePrompt( 55 { 56 title: Messages.getText("error_title"), 57 visible: true, 58 footer: { 59 compact: true, 60 primaryButton: { 61 text: Messages.getText("error_accept") 62 } 63 }, 64 content: '<p>'+Messages.getText("error_content")+'<p>', 65 event: new Event(Boolean), 66 action: null, 67 prefix: 'skapa_' 68 }, 69 pruebaContainer 70 71 ); 72 return Promise.reject(error); 73 case 401: 74 75 promptProxy = null; 76 let promptContainer = window.utilityComponent.generateDynamicContainer('root_utilities', 'error_401'); 77 promtProxy = window.utilityComponent.generatePrompt( 78 { 79 title: Messages.getText("session_expired"), 80 visible: true, 81 escapable: false, 82 footer: { 83 compact: false, 84 primaryButton: { 85 text: Messages.getText("login_button") 86 }, 87 secondaryButton: { 88 text: Messages.getText("goBack_button"), 89 style: 'auto_expired_back' 90 } 91 }, 92 primaryButtonStyle: 'auto_expired_next', 93 content: sessionExpired_content(), 94 action: () => { 95 window.sessionExpired_action(instance, promtProxy).then((promise) => { 96 if (promise.status === 200) { 97 return Promise.resolve(promise); 98 } 99 }) 100 }, 101 secondaryAction: secondaryAction, 102 prefix: 'skapa_', 103 onModalOpened: () => { 104 105 window.utilityComponent.generateInput( 106 { 107 id: 'email', 108 label: Messages.getText("email_input"), 109 type: "text", 110 className: 'auto_expired_email' 111 }, 112 document.getElementById('input_email') 113 ) 114 window.utilityComponent.generateInput( 115 { 116 id: 'password', 117 label: Messages.getText("password_button"), 118 type: "password", 119 className: 'auto_expired_password' 120 }, 121 document.getElementById('input_password') 122 ) 123 124 } 125 }, 126 promptContainer 127 ); 128 document.querySelector('body').classList.remove('skapa_prevent-scroll-y'); 129 $.busyLoadFull('hide'); 130 return Promise.reject(error); 131 break; 132 case 403: 133 if (error.config.url.includes('checkout')) { 134 135 baseURL = '/clientapi/v1'; 136 return instance.post(baseURL + '/checkout/token').then((response) => { 137 window.setJsonCookieInformation("checkout-token", response.data); 138 error.config.headers['Checkout-Token'] = response.data["checkout-token"]; 139 //error.config.baseURL = undefined; 140 if (error.config.method == "get") { 141 return instance.request(error.config); 142 } else if (error.config.method == "post") { 143 return instance.request(error.config); 144 } 145 }).catch((error) => { 146 return Promise.reject(error); 147 }) 148 } 149 150 151 default: 152 return error; 153 154 } 155 } 156 ); 157} 158 159 160window.setJsonCookieInformation = function (name, value) { 161 window.setCookieInformation(name, btoa(JSON.stringify(value))); 162} 163 164window.getJsonCookieInformation = function (name) { 165 let raw = window.getCookieInformation(name); 166 return raw ? JSON.parse(atob(raw)) : null; 167} 168 169window.setCookieInformation = function (name, value) { 170 document.cookie = name + "=" + value + '; path=/'; 171} 172 173window.getCookieInformation = function (name) { 174 const cookie = document.cookie.split(';').find(el => el.trim().startsWith(name+'=')); 175 let value; 176 if (cookie !== undefined && cookie !== null) { 177 value = cookie.split("=")[1] 178 } 179 return value; 180} 181 182sessionExpired_content = function(){
183 let content = "" 184 $.ajax({ 185 async: false, 186 type: "GET", 187 dataType: "html", 188 url: '/client/modalLoginForm', 189 success: function (data) { 190 content = data; 191 }, 192 timeout: 10000 193 }); 194 return content; 195} 196 197secondaryAction = function(){ 198 window.location.href = "/shoppingcart/shoppingcart"; 199} 200 201window.sessionExpired_action = function(instance, promtProxy){ 202 baseURL = '/clientapi/v1'; 203 let email = document.getElementById('email').value; 204 let password = document.getElementById('password').value; 205 const encodedUserData = btoa(`${email}:${password}`); 206 window.intercept(instance) 207 return instance.get (baseURL + '/users/login', 208 {headers: 209 { 'Authorization': 'Basic ' + encodedUserData } 210 }).then((promise) => { 211 if (promise.status === 200) { 212 $.busyLoadFull('hide'); 213 document.cookie = "token=" + promise.data.jwt.token + ";path=/"; 214 promtProxy.visible = false; 215 return promise; 216 } else { 217 if (promise.response.status === 400) { 218 $.busyLoadFull('hide') 219 return promise.response.data.error; 220 } else if (promise.response.status === 401) { 221 $.busyLoadFull('hide') 222 if (promise.response.data !== "" && promise.response.data.error !== undefined) { 223 return promise.response.data.error; 224 } else { 225 return promise; 226 } 227 228 } 229 } 230 }); 231} 232 233 234// Cookie POLL 235window.listenTokenChange = function(callback, interval = 1000) { 236 let lastCookie = document.cookie.replace(/(?:(?:^|.*;\s*)token\s*\=\s*([^;]*).*$)|^.*$/, "$1"); 237 setInterval(()=> { 238 let cookie = document.cookie.replace(/(?:(?:^|.*;\s*)token\s*\=\s*([^;]*).*$)|^.*$/, "$1"); 239 if (lastCookie != undefined && cookie != undefined && cookie !== lastCookie) { 240 try { 241 callback(); 242 } finally { 243 lastCookie = cookie; 244 } 245 } 246 }, interval); 247} 248 249// PartNumber selector (without dots) 250$(document).ready(function () { 251 //Remove the image search icon 252 // $("#imageSearchButton").remove(); 253 $(document).on('dblclick', '.skapa__product-identifier__value, .product-identifier__value', function () { 254 navigator.clipboard.writeText($(this).text().replace(/\./g, '').trim()); 255 document.getSelection().removeAllRanges(); 256 }); 257});
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.