PageSourceSearch

https://www.ikea.is/webroot/baltics/js/CommonFunctions.js?v=36d6995c

js ikea.is collected 2026-10-01 12:04:19 UTC 9,932 bytes, 257 lines download raw bytes

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.