1'use strict'; 2 3function cancelEvent (event) { 4 event = event || window.event; 5 if (event) { 6 event = event.originalEvent || event; 7 8 if (event.stopPropagation) event.stopPropagation(); 9 if (event.preventDefault) event.preventDefault(); 10 } 11 12 return false; 13} 14 15function getGuid() { 16 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 17 var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 18 return v.toString(16); 19 }); 20} 21 22//ConfigStorage 23(function(window) 24{ 25 var keyPrefix = ''; 26 var noPrefix = false; 27 var cache = {}; 28 var useCs = !!(window.chrome && chrome.storage && chrome.storage.local); 29 var useLs = !useCs && !!window.localStorage; 30 31 function storageSetPrefix(newPrefix) 32 { 33 keyPrefix = newPrefix; 34 } 35 36 function storageSetNoPrefix() 37 { 38 noPrefix = true; 39 } 40 41 function storageGetPrefix() 42 { 43 if (noPrefix) 44 { 45 noPrefix = false; 46 return ''; 47 } 48 return keyPrefix; 49 } 50 51 function storageGetValue() 52 { 53 var keys = Array.prototype.slice.call(arguments), 54 callback = keys.pop(), 55 result = [],
56 single = keys.length == 1, 57 value, 58 allFound = true, 59 prefix = storageGetPrefix(), 60 i, key; 61 62 for (i = 0; i < keys.length; i++) 63 { 64 key = keys[i] = prefix + keys[i]; 65 if (key.substr(0, 3) != 'xt_' && cache[key] !== undefined) 66 { 67 result.push(cache[key]); 68 } 69 else if (useLs) 70 { 71 try 72 { 73 value = localStorage.getItem(key); 74 } 75 catch (e) 76 { 77 useLs = false; 78 } 79 try 80 { 81 value = (value === undefined || value === null) ? false : JSON.parse(value); 82 } 83 catch (e) 84 { 85 value = false; 86 } 87 result.push(cache[key] = value); 88 } 89 else if (!useCs) 90 { 91 result.push(cache[key] = false); 92 } 93 else 94 { 95 allFound = false; 96 } 97 } 98 99 if (allFound) 100 { 101 return callback(single ? result[0] : result); 102 } 103 104 chrome.storage.local.get(keys, function(resultObj) 105 { 106 var value; 107 result = []; 108 for (i = 0; i < keys.length; i++) 109 { 110 key = keys[i]; 111 value = resultObj[key]; 112 value = value === undefined || value === null ? false : JSON.parse(value); 113 result.push(cache[key] = value); 114 } 115 116 callback(single ? result[0] : result); 117 }); 118 }; 119 120 function storageSetValue(obj, callback) 121 { 122 var keyValues = {}, 123 prefix = storageGetPrefix(), 124 key, value; 125 126 for (key in obj) 127 { 128 if (obj.hasOwnProperty(key)) 129 { 130 value = obj[key]; 131 key = prefix + key; 132 cache[key] = value; 133 value = JSON.stringify(value); 134 if (useLs) 135 { 136 try 137 { 138 localStorage.setItem(key, value); 139 } 140 catch (e) 141 { 142 useLs = false; 143 } 144 } 145 else 146 { 147 keyValues[key] = value; 148 } 149 } 150 } 151 152 if (useLs || !useCs) 153 { 154 if (callback) 155 { 156 callback(); 157 } 158 return; 159 } 160 161 chrome.storage.local.set(keyValues, callback); 162 }; 163 164 function storageRemoveValue() 165 { 166 var keys = Array.prototype.slice.call(arguments), 167 prefix = storageGetPrefix(), 168 i, key, callback; 169 170 if (typeof keys[keys.length - 1] === 'function') 171 { 172 callback = keys.pop(); 173 } 174 175 for (i = 0; i < keys.length; i++) 176 { 177 key = keys[i] = prefix + keys[i]; 178 delete cache[key]; 179 if (useLs) 180 { 181 try 182 { 183 localStorage.removeItem(key); 184 } 185 catch (e) 186 { 187 useLs = false; 188 } 189 } 190 } 191 if (useCs) 192 { 193 chrome.storage.local.remove(keys, callback); 194 } 195 else if (callback) 196 { 197 callback(); 198 } 199 }; 200 201 window.ConfigStorage = { 202 prefix: storageSetPrefix, 203 noPrefix: storageSetNoPrefix, 204 get: storageGetValue, 205 set: storageSetValue, 206 remove: storageRemoveValue 207 }; 208})(this); 209 210// Pollyfill for IE 9 support of CustomEvent 211(function () { 212 213 if ( typeof window.CustomEvent === "function" ) return false; 214 215 function CustomEvent ( event, params ) { 216 params = params || { bubbles: false, cancelable: false, detail: undefined }; 217 var evt = document.createEvent( 'CustomEvent' ); 218 evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); 219 return evt; 220 } 221 222 CustomEvent.prototype = window.Event.prototype; 223 224 window.CustomEvent = CustomEvent; 225})();
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.