PageSourceSearch

https://www.naffco.com/static/frontend/Nf/naffco/en_US/mage/polyfill.js

js naffco.com collected 2026-09-24 11:42:53 UTC 5,203 bytes, 176 lines download raw bytes

1try {
2    if (!window.localStorage || !window.sessionStorage) {
3        throw new Error();
4    }
5
6    localStorage.setItem('storage_test', 1);
7    localStorage.removeItem('storage_test');
8} catch (e) {
9    (function () {
10        'use strict';
11
12        /**
13         * Returns a storage object to shim local or sessionStorage
14         * @param {String} type - either 'local' or 'session'
15         */
16        var Storage = function (type) {
17            var data;
18
19            /**
20             * Creates a cookie
21             * @param {String} name
22             * @param {String} value
23             * @param {Integer} days
24             */
25            function createCookie(name, value, days) {
26                var date, expires;
27
28                if (days) {
29                    date = new Date();
30                    date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
31                    expires = '; expires=' + date.toGMTString();
32                } else {
33                    expires = '';
34                }
35                document.cookie = name + '=' + value + expires + '; path=/';
36            }
37
38            /**
39             * Reads value of a cookie
40             * @param {String} name
41             */
42            function readCookie(name) {
43                var nameEQ = name + '=',
44                    ca = document.cookie.split(';'),
45                    i = 0,
46                    c;
47
48                for (i = 0; i < ca.length; i++) {
49                    c = ca[i];
50
51                    while (c.charAt(0) === ' ') {
52                        c = c.substring(1, c.length);
53                    }
54
55                    if (c.indexOf(nameEQ) === 0) {
56                        return c.substring(nameEQ.length, c.length);
57                    }
58                }
59
60                return null;
61            }
62
63            /**
64             * Returns cookie name based upon the storage type.
65             * If this is session storage, the function returns a unique cookie per tab
66             */
67            function getCookieName() {
68
69                if (type !== 'session') {
70                    return 'localstorage';
71                }
72
73                if (!window.name) {
74                    window.name = new Date().getTime();
75                }
76
77                return 'sessionStorage' + window.name;
78            }
79
80            /**
81             * Sets storage cookie to a data object
82             * @param {Object} dataObject
83             */
84            function setData(dataObject) {
85                data = encodeURIComponent(JSON.stringify(dataObject));
86                createCookie(getCookieName(), data, 365);
87            }
88
89            /**
90             * Clears value of cookie data
91             */
92            function clearData() {
93                createCookie(getCookieName(), '', 365);
94            }
95
96            /**
97             * @returns value of cookie data
98             */
99            function getData() {
100                var dataResponse = readCookie(getCookieName());
101
102                return dataResponse ? JSON.parse(decodeURIComponent(dataResponse)) : {};
103            }
104
105            data = getData();
106
107            return {
108                length: 0,
109
110                /**
111                 * Clears data from storage
112                 */
113                clear: function () {
114                    data = {};
115                    this.length = 0;
116                    clearData();
117                },
118
119                /**
120                 * Gets an item from storage
121                 * @param {String} key
122                 */
123                getItem: function (key) {
124                    return data[key] === undefined ? null : data[key];
125                },
126
127                /**
128                 * Gets an item by index from storage
129                 * @param {Integer} i
130                 */
131                key: function (i) {
132                    var ctr = 0,
133                        k;
134
135                    for (k in data) {
136
137                        if (data.hasOwnProperty(k)) {
138
139                            // eslint-disable-next-line max-depth
140                            if (ctr.toString() === i.toString()) {
141                                return k;
142                            }
143                            ctr++;
144                        }
145                    }
146
147                    return null;
148                },
149
150                /**
151                 * Removes an item from storage
152                 * @param {String} key
153                 */
154                removeItem: function (key) {
155                    delete data[key];
156                    this.length--;
157                    setData(data);
158                },
159
160                /**
161                 * Sets an item from storage
162                 * @param {String} key
163                 * @param {String} value
164                 */
165                setItem: function (key, value) {
166                    data[key] = value.toString();
167                    this.length++;
168                    setData(data);
169                }
170            };
171        };
172
173        window.localStorage.prototype = window.localStorage = new Storage('local');
174        window.sessionStorage.prototype = window.sessionStorage = new Storage('session');
175    })();
176}

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.