Files
MYPOM/5.0/общее/150.Состояние.js

73 lines
2.2 KiB
JavaScript

function Состояние()
{
this.создать = function()
{
this.обработчик = null;
this.значения = {};
};
this.выпрямить = function(obj)
{
// https://stackoverflow.com/a/42121920
var newObj = {};
for (var key in obj)
{
if (typeof obj[key] === 'object' && obj[key] !== null)
{
var temp = this.выпрямить(obj[key])
for (var key2 in temp)
{
newObj[key + "." + key2] = temp[key2];
}
}
else
{
newObj[key] = obj[key];
}
}
return newObj;
};
this.лишьНовыеЗначения = function(значения)
{
var новые = {};
for (var ключ in значения)
{
var было = this.значения[ключ];
var стало = значения[ключ];
if (!(было != null && было == стало))
{
новые[ключ] = стало;
}
}
return новые;
};
this.разобрать = function(словарь)
{
this.разобратьВыпрямленный(this.выпрямить(словарь));
};
this.разобратьВыпрямленный = function(выпрямленныйСловарь)
{
for (var ключ in выпрямленныйСловарь)
{
let путь = ключ.split(".");
let значение = выпрямленныйСловарь[ключ];
if (this.обработчик)
{
this.обработчик(ключ, путь, значение);
}
this.значения[ключ] = значение;
}
};
this.разобратьЛишьНовое = function(словарь)
{
this.разобратьВыпрямленный(this.лишьНовыеЗначения(this.выпрямить(словарь)));
};
// Конструктор.
this.создать();
}