(function(i){function e(a,c){if(null===c)return localStorage.removeItem(a),!0;c="function"==typeof c?"-"+c.toString().replace(/\s+/g," ").match(/function.*{(.*)}/)[1]:JSON.stringify(c);try{return localStorage.setItem(a,c),!0}catch(b){if(b==QUOTA_EXCEEDED_ERR)return console.log("Local storage overflowing"),!1}}function f(a,c){c=localStorage.getItem(a);return"-"===c[0]?(c=c.slice(1),Function(c)):JSON.parse(c)}function h(a,c){if(c)for(b in a){if(b in localStorage)break;e(b,a[b])}else for(var b in a)e(b,
a[b])}if(!localStorage)return console.log("localStorage not supported"),!1;window[i]=function(a,c){if(0==arguments.length){var b={},d;for(d in localStorage)b[d]=f(d);return b}if(1==arguments.length){if(null===a)return localStorage.clear(),!0;if("object"==typeof a)return h(a),!0;b=!1}else if(2==arguments.length){if("object"==typeof a)return h(a,c),!0;b=!0}var g=a.indexOf(".");if(-1==g)if(b)e(a,c);else return f(a);else if(0==g)if(b)for(d in localStorage)-1!=d.indexOf(a)&&d.indexOf(a)+a.length==d.length&&
e(d,c);else{b=[];for(d in localStorage)-1!=d.indexOf(a)&&d.indexOf(a)+a.length==d.length&&b.push(f(d));return b}else if(g==a.length-1)if(b)for(d in localStorage)0==d.indexOf(a)&&e(d,c);else{b=[];for(d in localStorage)0==d.indexOf(a)&&b.push(f(d));return b}else if(b)e(a,c);else return f(a);return!0}})
('storge') //сюда вводим имя функции которое нам приятнее юзать
/*
* storge('keyName', value) установить значение
* storge('keyName') получить значение
* storge('keyName', null) удалить ключ
* storge(null) очистить хранилище
*/
storge('keyName', function(){alert('няяяя!')})
var func = storge('keyName')
func()//няяяя!
сохраняет строки, числа, функции, массивы, булины, объекты возвращает все в соответствии с типами. юзайте на здоровье)
ИСПОЛЬЗОВАНИЕ:
storge('keyName', value) // установить ключ
storge('keyName') // получить значение
storge('keyName', null) // удалить ключ
storge(null) // очистить хранилище
var dump = storge() // получить дамп хранилища
storge(dump) //слить обьект с хранилещем
с заменой ключей которые уже имеются
storge(dump, true) //слить обьект с хранилещем без замены уже существующих значений, щадящий режим включен
ПРОСТРАНСТВО ИМЕН:
storge('name', 200) //установить ключ name в 200
storge('name') //получить ключ name
storge('name.q', 40) //установить name.q в 40
storge('name.w', 30) //установить name.w в 30
//при этом name по прежнему жива и равна 200 потому что её мы не трогали
storge('name.q') //получить значение name.q, все как обычно
теперь интереснее
storge('name.') //получить массив ПОДключей name, то есть массив [name.q, name.w] НЕ включая саму name
еще интересней
storge('name.', 'ня') //установить все ПОДключи name в 'ня'
совсем интересно
storge('name.', null) //удалить все ПОДключи name, при том сама name останется нетронутой
god mode
storge('.qq', null) //удалить все ПОДключи с именем qq, родители их останутся не тронутыми