98 lines
2.5 KiB
JavaScript
98 lines
2.5 KiB
JavaScript
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);
|
||
});
|