Skip to content

Instantly share code, notes, and snippets.

@erikfried
Forked from remy/gist:350433
Created July 6, 2011 11:05

Revisions

  1. erikfried revised this gist Jul 6, 2011. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -78,13 +78,13 @@ var Storage = function (type) {
    return null;
    },
    removeItem: function (key) {
    data[key] && this.length--;
    delete data[key];
    this.length--;
    setData(data);
    },
    setItem: function (key, value) {
    !data[key] && this.length++;
    data[key] = value+''; // forces the value to a string
    this.length++;
    setData(data);
    }
    };
  2. @remy remy revised this gist Feb 1, 2011. 1 changed file with 7 additions and 3 deletions.
    10 changes: 7 additions & 3 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,4 @@
    if (!window.localStorage || !window.sessionStorage) (function () {
    if (typeof window.localStorage == 'undefined' || typeof window.sessionStorage == 'undefined') (function () {

    var Storage = function (type) {
    function createCookie(name, value, days) {
    @@ -59,8 +59,10 @@ var Storage = function (type) {
    var data = getData();

    return {
    length: 0,
    clear: function () {
    data = {};
    this.length = 0;
    clearData();
    },
    getItem: function (key) {
    @@ -77,16 +79,18 @@ var Storage = function (type) {
    },
    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 (!window.localStorage) window.localStorage = new Storage('local');
    if (!window.sessionStorage) window.sessionStorage = new Storage('session');
    if (typeof window.localStorage == 'undefined') window.localStorage = new Storage('local');
    if (typeof window.sessionStorage == 'undefined') window.sessionStorage = new Storage('session');

    })();
  3. @remy remy revised this gist Dec 3, 2010. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -35,22 +35,22 @@ var Storage = function (type) {
    function setData(data) {
    data = JSON.stringify(data);
    if (type == 'session') {
    window.top.name = data;
    window.name = data;
    } else {
    createCookie('localStorage', data, 365);
    }
    }

    function clearData() {
    if (type == 'session') {
    window.top.name = '';
    window.name = '';
    } else {
    createCookie('localStorage', '', 365);
    }
    }

    function getData() {
    var data = type == 'session' ? window.top.name : readCookie('localStorage');
    var data = type == 'session' ? window.name : readCookie('localStorage');
    return data ? JSON.parse(data) : {};
    }

  4. @remy remy revised this gist Dec 3, 2010. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -64,7 +64,7 @@ var Storage = function (type) {
    clearData();
    },
    getItem: function (key) {
    return data[key] || null;
    return data[key] === undefined ? null : data[key];
    },
    key: function (i) {
    // not perfect, but works
  5. @remy remy created this gist Mar 31, 2010.
    92 changes: 92 additions & 0 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,92 @@
    if (!window.localStorage || !window.sessionStorage) (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.top.name = data;
    } else {
    createCookie('localStorage', data, 365);
    }
    }

    function clearData() {
    if (type == 'session') {
    window.top.name = '';
    } else {
    createCookie('localStorage', '', 365);
    }
    }

    function getData() {
    var data = type == 'session' ? window.top.name : readCookie('localStorage');
    return data ? JSON.parse(data) : {};
    }


    // initialise if there's already data
    var data = getData();

    return {
    clear: function () {
    data = {};
    clearData();
    },
    getItem: function (key) {
    return data[key] || null;
    },
    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];
    setData(data);
    },
    setItem: function (key, value) {
    data[key] = value+''; // forces the value to a string
    setData(data);
    }
    };
    };

    if (!window.localStorage) window.localStorage = new Storage('local');
    if (!window.sessionStorage) window.sessionStorage = new Storage('session');

    })();