mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2026-06-25 20:55:03 +00:00
87 lines
2.3 KiB
JavaScript
87 lines
2.3 KiB
JavaScript
/*
|
|
* Copyright 2014-2025 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
|
|
*/
|
|
/** When Dokka is viewed via iframe, local storage could be inaccessible (see https://github.com/Kotlin/dokka/issues/3323)
|
|
* This is a wrapper around local storage to prevent errors in such cases
|
|
* */
|
|
const safeLocalStorage = (() => {
|
|
let isLocalStorageAvailable = false;
|
|
try {
|
|
const testKey = '__testLocalStorageKey__';
|
|
localStorage.setItem(testKey, testKey);
|
|
localStorage.removeItem(testKey);
|
|
isLocalStorageAvailable = true;
|
|
} catch (e) {
|
|
console.error('Local storage is not available', e);
|
|
}
|
|
|
|
return {
|
|
getItem: (key) => {
|
|
if (!isLocalStorageAvailable) {
|
|
return null;
|
|
}
|
|
return localStorage.getItem(key);
|
|
},
|
|
setItem: (key, value) => {
|
|
if (!isLocalStorageAvailable) {
|
|
return;
|
|
}
|
|
localStorage.setItem(key, value);
|
|
},
|
|
removeItem: (key) => {
|
|
if (!isLocalStorageAvailable) {
|
|
return;
|
|
}
|
|
localStorage.removeItem(key);
|
|
},
|
|
getKeys: () => {
|
|
if (!isLocalStorageAvailable) {
|
|
return [];
|
|
}
|
|
return Object.keys(localStorage);
|
|
},
|
|
};
|
|
})();
|
|
|
|
/** When Dokka is viewed via iframe, session storage could be inaccessible (see https://github.com/Kotlin/dokka/issues/3323)
|
|
* This is a wrapper around session storage to prevent errors in such cases
|
|
* */
|
|
const safeSessionStorage = (() => {
|
|
let isSessionStorageAvailable = false;
|
|
try {
|
|
const testKey = '__testSessionStorageKey__';
|
|
sessionStorage.setItem(testKey, testKey);
|
|
sessionStorage.removeItem(testKey);
|
|
isSessionStorageAvailable = true;
|
|
} catch (e) {
|
|
console.error('Session storage is not available', e);
|
|
}
|
|
|
|
return {
|
|
getItem: (key) => {
|
|
if (!isSessionStorageAvailable) {
|
|
return null;
|
|
}
|
|
return sessionStorage.getItem(key);
|
|
},
|
|
setItem: (key, value) => {
|
|
if (!isSessionStorageAvailable) {
|
|
return;
|
|
}
|
|
sessionStorage.setItem(key, value);
|
|
},
|
|
removeItem: (key) => {
|
|
if (!isSessionStorageAvailable) {
|
|
return;
|
|
}
|
|
sessionStorage.removeItem(key);
|
|
},
|
|
getKeys: () => {
|
|
if (!isSessionStorageAvailable) {
|
|
return [];
|
|
}
|
|
return Object.keys(sessionStorage);
|
|
},
|
|
};
|
|
})();
|