состояние
This commit is contained in:
61
3.2/общее/150.Состояние.js
Normal file
61
3.2/общее/150.Состояние.js
Normal file
@@ -0,0 +1,61 @@
|
||||
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 && было == стало))
|
||||
{
|
||||
новые[ключ] = стало;
|
||||
this.значения[ключ] = стало;
|
||||
}
|
||||
}
|
||||
return новые;
|
||||
};
|
||||
|
||||
this.разобрать = function(словарь) {
|
||||
var значения = this.лишьНовыеЗначения(this.выпрямить(словарь));
|
||||
for (var ключ in значения)
|
||||
{
|
||||
var путь = ключ.split(".");
|
||||
var значение = значения[ключ];
|
||||
if (this.обработчик)
|
||||
{
|
||||
this.обработчик(ключ, путь, значение);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
@@ -1,5 +1,18 @@
|
||||
var мир = {};
|
||||
|
||||
мир.uuid = function()
|
||||
{
|
||||
// https://stackoverflow.com/a/2117523
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
|
||||
/[xy]/g,
|
||||
function(c)
|
||||
{
|
||||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
мир.вZ64 = function(строка)
|
||||
{
|
||||
var байты = new TextEncoder("utf-8").encode(строка);
|
||||
@@ -14,19 +27,6 @@ var мир = {};
|
||||
return new TextDecoder("utf-8").decode(байты);
|
||||
};
|
||||
|
||||
мир.uuid = function()
|
||||
{
|
||||
// https://stackoverflow.com/a/2117523
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
|
||||
/[xy]/g,
|
||||
function(c)
|
||||
{
|
||||
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
мир.назначитьКнопкамСобытия = function(события, список)
|
||||
{
|
||||
for (var номер in список)
|
||||
@@ -66,3 +66,8 @@ var мир = {};
|
||||
}
|
||||
return параметры;
|
||||
};
|
||||
|
||||
мир.разобрать = function(словарь)
|
||||
{
|
||||
мир.состояние.разобрать(словарь);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user