| Current Path : /proc/thread-self/cwd/static/frontend/Magento/indaco/it_IT/Magento_Ui/js/lib/core/storage/ |
| Current File : //proc/thread-self/cwd/static/frontend/Magento/indaco/it_IT/Magento_Ui/js/lib/core/storage/local.js |
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'underscore',
'uiRegistry',
'mageUtils',
'uiEvents'
], function (_, registry, utils, EventsBus) {
'use strict';
var root = 'appData',
localStorage,
hasSupport,
storage;
/**
* Flag which indicates whether localStorage is supported.
*/
hasSupport = (function () {
var key = '_storageSupported';
try {
localStorage = window.localStorage;
localStorage.setItem(key, 'true');
if (localStorage.getItem(key) === 'true') {
localStorage.removeItem(key);
return true;
}
return false;
} catch (e) {
return false;
}
})();
if (!hasSupport) {
localStorage = {
_data: {},
/**
* Sets value of the specified item.
*
* @param {String} key - Key of the property.
* @param {*} value - Properties' value.
*/
setItem: function (key, value) {
this._data[key] = value + '';
},
/**
* Retrieves specified item.
*
* @param {String} key - Key of the property to be retrieved.
*/
getItem: function (key) {
return this._data[key];
},
/**
* Removes specified item.
*
* @param {String} key - Key of the property to be removed.
*/
removeItem: function (key) {
delete this._data[key];
},
/**
* Removes all items.
*/
clear: function () {
this._data = {};
}
};
}
/**
* Extracts and parses data stored in localStorage by the
* key specified in 'root' variable.
*
* @returns {Object}
*/
function getRoot() {
var data = localStorage.getItem(root),
result = {};
if (!_.isNull(data) && typeof data != 'undefined') {
result = JSON.parse(data);
}
return result;
}
/**
* Writes provided data to the localStorage.
*
* @param {*} data - Data to be stored.
*/
function setRoot(data) {
localStorage.setItem(root, JSON.stringify(data));
}
/**
* Provides methods to work with a localStorage
* as a single nested structure.
*/
storage = _.extend({
/**
* Retrieves value of the specified property.
*
* @param {String} path - Path to the property.
*
* @example Retrieving data.
* localStorage =>
* 'appData' => '
* "one": {"two": "three"}
* '
* storage.get('one.two')
* => "three"
*
* storage.get('one')
* => {"two": "three"}
*/
get: function (path) {
var data = getRoot();
return utils.nested(data, path);
},
/**
* Sets specified data to the localStorage.
*
* @param {String} path - Path of the property.
* @param {*} value - Value of the property.
*
* @example Setting data.
* storage.set('one.two', 'four');
* => localStorage =>
* 'appData' => '
* "one": {"two": "four"}
* '
*/
set: function (path, value) {
var data = getRoot();
utils.nested(data, path, value);
setRoot(data);
},
/**
* Removes specified data from the localStorage.
*
* @param {String} path - Path to the property that should be removed.
*
* @example Removing data.
* storage.remove('one.two', 'four');
* => localStorage =>
* 'appData' => '
* "one": {}
* '
*/
remove: function (path) {
var data = getRoot();
utils.nestedRemove(data, path);
setRoot(data);
}
}, EventsBus);
registry.set('localStorage', storage);
return storage;
});