| if (typeof window.localStorage == 'undefined' || typeof window.sessionStorage == 'undefined') (function () { | |
| var Storage = function (type) { | |
| 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=/"; | |
| } | |
| function readCookie(name) { | |
| var nameEQ = name + "=", | |
| ca = document.cookie.split(';'), | |
| i, 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; | |
| } | |
| function setData(data) { | |
| data = JSON.stringify(data); | |
| if (type == 'session') { | |
| window.name = data; | |
| } else { | |
| createCookie('localStorage', data, 365); | |
| } | |
| } | |
| function clearData() { | |
| if (type == 'session') { | |
| window.name = ''; | |
| } else { | |
| createCookie('localStorage', '', 365); | |
| } | |
| } | |
| function getData() { | |
| var data = type == 'session' ? window.name : readCookie('localStorage'); | |
| return data ? JSON.parse(data) : {}; | |
| } | |
| // initialise if there's already data | |
| var data = getData(); | |
| return { | |
| length: 0, | |
| clear: function () { | |
| data = {}; | |
| this.length = 0; | |
| clearData(); | |
| }, | |
| getItem: function (key) { | |
| return data[key] === undefined ? null : data[key]; | |
| }, | |
| key: function (i) { | |
| // not perfect, but works | |
| var ctr = 0; | |
| for (var k in data) { | |
| if (ctr == i) return k; | |
| else ctr++; | |
| } | |
| return null; | |
| }, | |
| removeItem: function (key) { | |
| delete data[key]; | |
| this.length--; | |
| setData(data); | |
| }, | |
| setItem: function (key, value) { | |
| data[key] = value+''; // forces the value to a string | |
| this.length++; | |
| setData(data); | |
| } | |
| }; | |
| }; | |
| if (typeof window.localStorage == 'undefined') window.localStorage = new Storage('local'); | |
| if (typeof window.sessionStorage == 'undefined') window.sessionStorage = new Storage('session'); | |
| })(); |