Fix #5536
parent
1028327f0a
commit
30b47d39f3
@ -0,0 +1,83 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks localStorage and provides a fallback if it doesn't exist or is disabled
|
||||||
|
*/
|
||||||
|
define('storage', function () {
|
||||||
|
function Storage() {
|
||||||
|
this._store = {};
|
||||||
|
this._keys = [];
|
||||||
|
}
|
||||||
|
Storage.prototype.setItem = function (key, val) {
|
||||||
|
key = String(key);
|
||||||
|
if (this._keys.indexOf(key) === -1) {
|
||||||
|
this._keys.push(key);
|
||||||
|
}
|
||||||
|
this._store[key] = val;
|
||||||
|
};
|
||||||
|
Storage.prototype.getItem = function (key) {
|
||||||
|
key = String(key);
|
||||||
|
if (this._keys.indexOf(key) === -1) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._store[key];
|
||||||
|
};
|
||||||
|
Storage.prototype.removeItem = function (key) {
|
||||||
|
key = String(key);
|
||||||
|
this._keys = this._keys.filter(function (x) {
|
||||||
|
return x !== key;
|
||||||
|
});
|
||||||
|
this._store[key] = null;
|
||||||
|
};
|
||||||
|
Storage.prototype.clear = function () {
|
||||||
|
this._keys = [];
|
||||||
|
this._store = {};
|
||||||
|
};
|
||||||
|
Storage.prototype.key = function (n) {
|
||||||
|
n = parseInt(n, 10) || 0;
|
||||||
|
return this._keys[n];
|
||||||
|
};
|
||||||
|
if (Object.defineProperty) {
|
||||||
|
Object.defineProperty(Storage.prototype, 'length', {
|
||||||
|
get: function () {
|
||||||
|
return this._keys.length;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var storage;
|
||||||
|
var item = Date.now();
|
||||||
|
|
||||||
|
try {
|
||||||
|
storage = window.localStorage;
|
||||||
|
storage.setItem(item, item);
|
||||||
|
if (storage.getItem(item) !== item) {
|
||||||
|
throw Error('localStorage behaved unexpectedly');
|
||||||
|
}
|
||||||
|
storage.removeItem(item);
|
||||||
|
|
||||||
|
return storage;
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(e);
|
||||||
|
console.warn('localStorage failed, falling back on sessionStorage');
|
||||||
|
|
||||||
|
// see if sessionStorage works, and if so, return that
|
||||||
|
try {
|
||||||
|
storage = window.sessionStorage;
|
||||||
|
storage.setItem(item, item);
|
||||||
|
if (storage.getItem(item) !== item) {
|
||||||
|
throw Error('sessionStorage behaved unexpectedly');
|
||||||
|
}
|
||||||
|
storage.removeItem(item);
|
||||||
|
|
||||||
|
return storage;
|
||||||
|
} catch (e) {
|
||||||
|
console.warn(e);
|
||||||
|
console.warn('sessionStorage failed, falling back on memory storage');
|
||||||
|
|
||||||
|
// return an object implementing mock methods
|
||||||
|
return new Storage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
Loading…
Reference in New Issue