123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- try {
- if (!window.localStorage || !window.sessionStorage) {
- throw new Error();
- }
- localStorage.setItem('storage_test', 1);
- localStorage.removeItem('storage_test');
- } catch (e) {
- (function () {
- 'use strict';
- /**
- * Returns a storage object to shim local or sessionStorage
- * @param {String} type - either 'local' or 'session'
- */
- var Storage = function (type) {
- var data;
- /**
- * Creates a cookie
- * @param {String} name
- * @param {String} value
- * @param {Integer} days
- */
- function createCookie(name, value, days) {
- var date, expires;
- if (days) {
- date = new Date();
- date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
- expires = '; expires=' + date.toGMTString();
- } else {
- expires = '';
- }
- document.cookie = name + '=' + value + expires + '; path=/';
- }
- /**
- * Reads value of a cookie
- * @param {String} name
- */
- function readCookie(name) {
- var nameEQ = name + '=',
- ca = document.cookie.split(';'),
- i = 0,
- c;
- for (i = 0; i < ca.length; i++) {
- c = ca[i];
- while (c.charAt(0) === ' ') {
- c = c.substring(1, c.length);
- }
- if (c.indexOf(nameEQ) === 0) {
- return c.substring(nameEQ.length, c.length);
- }
- }
- return null;
- }
- /**
- * Returns cookie name based upon the storage type.
- * If this is session storage, the function returns a unique cookie per tab
- */
- function getCookieName() {
- if (type !== 'session') {
- return 'localstorage';
- }
- if (!window.name) {
- window.name = new Date().getTime();
- }
- return 'sessionStorage' + window.name;
- }
- /**
- * Sets storage cookie to a data object
- * @param {Object} dataObject
- */
- function setData(dataObject) {
- data = encodeURIComponent(JSON.stringify(dataObject));
- createCookie(getCookieName(), data, 365);
- }
- /**
- * Clears value of cookie data
- */
- function clearData() {
- createCookie(getCookieName(), '', 365);
- }
- /**
- * @returns value of cookie data
- */
- function getData() {
- var dataResponse = readCookie(getCookieName());
- return dataResponse ? JSON.parse(decodeURIComponent(dataResponse)) : {};
- }
- data = getData();
- return {
- length: 0,
- /**
- * Clears data from storage
- */
- clear: function () {
- data = {};
- this.length = 0;
- clearData();
- },
- /**
- * Gets an item from storage
- * @param {String} key
- */
- getItem: function (key) {
- return data[key] === undefined ? null : data[key];
- },
- /**
- * Gets an item by index from storage
- * @param {Integer} i
- */
- key: function (i) {
- var ctr = 0,
- k;
- for (k in data) {
- if (data.hasOwnProperty(k)) {
- // eslint-disable-next-line max-depth
- if (ctr.toString() === i.toString()) {
- return k;
- }
- ctr++;
- }
- }
- return null;
- },
- /**
- * Removes an item from storage
- * @param {String} key
- */
- removeItem: function (key) {
- delete data[key];
- this.length--;
- setData(data);
- },
- /**
- * Sets an item from storage
- * @param {String} key
- * @param {String} value
- */
- setItem: function (key, value) {
- data[key] = value.toString();
- this.length++;
- setData(data);
- }
- };
- };
- window.localStorage.prototype = window.localStorage = new Storage('local');
- window.sessionStorage.prototype = window.sessionStorage = new Storage('session');
- })();
- }
|