This commit is contained in:
Oleg Mokhov
2015-06-20 12:26:08 +03:00
committed by mokhov
parent a716969f4e
commit f3546ef3a5
85 changed files with 16682 additions and 1 deletions

View File

@@ -0,0 +1,97 @@
modules.define(
'storage',
[
'y-block',
'jquery',
'y-extend',
'inherit'
],
function (
provide,
YBlock,
$,
extend,
inherit
) {
var localStorage = window.localStorage;
var Storage = inherit(YBlock, {
__constructor: function (storageId) {
this.__base.apply(this, arguments);
this._id = storageId;
this._restore();
},
/**
* Возвращает значение из хранилища
*
* @param {String} key ключ хранилища
*
* @returns {String} значение
*/
get: function (key) {
return this._data && this._data[key];
},
/**
* Удаляет ключ из хранилища
*
* @param {String} key
*/
remove: function (key) {
delete this._data[key];
this._save();
},
/**
* Сохранить данные в хранилище
*
* @param {String|Object} key ключ сохраняемого или же объект с данными для хранения
* @param {String} [value] значение параметра для хранения
*/
save: function (key, value) {
if (!value && typeof key === 'object') {
extend(this._data, key);
} else {
this._data[key] = value;
}
this._save();
},
/**
* Взять данные из storage и наполнить ими текущий объект
*/
_restore: function () {
this._data = localStorage.getItem(this._id) || {};
if (typeof this._data === 'string') {
try {
this._data = JSON.parse(this._data);
} catch (e) {
this._data = {};
}
}
if (typeof this._data !== 'object') {
this._data = {};
}
},
/**
* Выполнить сохранение всех данных в localStoarage
*/
_save: function () {
localStorage.setItem(this._id, JSON.stringify(this._data));
}
}, {
getBlockName: function () {
return 'storage';
}
});
provide(Storage);
});