@nathanfaucett/storage
Version:
local storage polyfill
97 lines (79 loc) • 2.31 kB
JavaScript
var has = require("@nathanfaucett/has"),
emptyFunction = require("@nathanfaucett/empty_function"),
isNullOrUndefined = require("@nathanfaucett/is_null_or_undefined"),
environment = require("@nathanfaucett/environment");
var storage = exports,
window = environment.window,
supportsStorage = (function() {
try {
return (
"localStorage" in window &&
!isNullOrUndefined(window.localStorage)
);
} catch (e) {
return false;
}
})(),
localStorage,
storageGet,
storageHas,
storageSet,
storageRemove,
storageClear,
storageIsNative;
if (supportsStorage) {
localStorage = window.localStorage;
storageHas = function(key) {
return !isNullOrUndefined(localStorage.getItem(key));
};
storageGet = function(key) {
return localStorage.getItem(key);
};
storageSet = function(key, value) {
localStorage.setItem(key, value);
};
storageRemove = function(key) {
return localStorage.removeItem(key);
};
storageClear = function() {
return localStorage.clear();
};
storageIsNative = emptyFunction.thatReturnsTrue;
} else {
localStorage =
global.__LOCAL_STORAGE_POLYFILL__ ||
(global.__LOCAL_STORAGE_POLYFILL__ = {});
storageHas = function(key) {
return !isNullOrUndefined(localStorage[key]);
};
storageGet = function(key) {
var item = localStorage[key];
if (isNullOrUndefined(item)) {
return null;
} else {
return item;
}
};
storageSet = function(key, value) {
localStorage[key] =
value && value.toString ? value.toString() : value + "";
};
storageRemove = function(key) {
return delete localStorage[key];
};
storageClear = function() {
var key;
for (key in localStorage) {
if (has(localStorage, key)) {
delete localStorage[key];
}
}
};
storageIsNative = emptyFunction.thatReturnsFalse;
}
storage.has = storageHas;
storage.get = storageGet;
storage.set = storageSet;
storage.remove = storageRemove;
storage.clear = storageClear;
storage.isNative = storageIsNative;