Compare commits

...

2 Commits

Author SHA1 Message Date
5adb24c8c0 Получать код компоненты из базы 2019-09-24 12:39:40 +03:00
a4024587a3 ls 2019-09-24 12:39:10 +03:00

View File

@@ -45,29 +45,130 @@ function base64Decode(str)
}
</script>
<script>
var компоненты = {
// Create GUID / UUID in JavaScript?
// https://stackoverflow.com/a/2117523
function generateUUID()
{
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);
}
);
}
"пуск":
"Y29uc29sZS5sb2coItCX0LDQv9GD0YHQuiDQvtGB0YPRidC10YHRgtCy0LvRkdC9Iik7",
// ReporterSubscription class.
function ReporterSubscription(id, callback, reporter)
{
this.id = id;
this.callback = callback;
this.reporter = reporter;
}
// Reporter class.
function Reporter(name)
{
this.name =
(typeof name !== "undefined") ?
name :
"";
this.subscriptions = [];
}
Reporter.prototype.report = function()
{
for (var id in this.subscriptions)
{
var subscription = this.subscriptions[id];
subscription.callback();
}
}
Reporter.prototype.subscribe = function(callback)
{
var id = generateUUID();
var subscription = new ReporterSubscription(id, callback, this);
this.subscriptions.push(subscription);
return subscription;
}
Reporter.prototype.subscribeMany = function(funcs)
{
for (var i = 0; i < funcs.length; ++i)
{
var func = funcs[i];
this.subscribe(func);
}
}
var Уведомитель = Reporter;
Reporter.prototype.уведомить = function()
{
this.report();
};
Reporter.prototype.подписать = function(функция)
{
this.subscribe(функция);
};
Reporter.prototype.подписатьМного = function(funcs)
{
this.subscribeMany(funcs);
};
</script>
<script>
var муром = {};
муром.старт = new Уведомитель();
var murom = муром;
murom.start = муром.старт;
</script>
<script>
var компоненты = [
[
"пуск",
"ZnVuY3Rpb24g0LzRg9GA0L7QvNCh0YLQsNGA0YIoKQp7CiAgICDQvNGD0YDQvtC8LtGB0YLQsNGA0YIuc3Vic2NyaWJlKGZ1bmN0aW9uKCl7CiAgICAgICAgY29uc29sZS5sb2coItCf0KPQodCaINCX0LDQv9GD0YnQtdC9Iik7CiAgICB9KTsKICAgIGNvbnNvbGUubG9nKCLQn9Cj0KHQmiDQl9Cw0LPRgNGD0LbQtdC9Iik7Cn07",
],
[
"start",
"ZnVuY3Rpb24g0LzRg9GA0L7QvNCh0YLQsNGA0YIoKQp7CiAgICBtdXJvbS5zdGFydC5zdWJzY3JpYmUoZnVuY3Rpb24oKXsKICAgICAgICBjb25zb2xlLmxvZygiU1RBUlQgU3RhcnRlZCIpOwogICAgfSk7CiAgICBjb25zb2xlLmxvZygiU1RBUlQgTG9hZGVkIik7Cn07",
],
];
// Загрузка переопределений компонент.
localforage.config({ name: "murom" });
var обработанаКомпонента = new Уведомитель();
for (var номер in компоненты)
{
const компонент = компоненты[номер];
const имя = компонент[0];
localforage.getItem(имя, function(ошибка, значение) {
if (значение)
{
компонент[1] = значение;
}
var код = base64Decode(компонент[1]);
eval(код);
муромСтарт();
console.log("обработана компонента");
обработанаКомпонента.уведомить();
});
}
// Уведомление о пуске.
var обработано = 0;
обработанаКомпонента.подписать(function(){
if (++обработано == компоненты.length)
{
console.log("пуск");
муром.старт.уведомить();
}
});
//localforage.setItem("пуск", "Y29uc29sZS5sb2coItCf0LXRgNC10L7Qv9GA0LXQtNC10LvRkdC90L3Ri9C5INC30LDQv9GD0YHQuiDQvtGB0YPRidC10YHRgtCy0LvRkdC9Iik7");
localforage.getItem("пуск", function(ошибка, значение) {
var код = "";
if (значение)
{
var код = base64Decode(значение);
}
else
{
var код = base64Decode(компоненты["пуск"]);
}
eval(код);
});
</script>
</body>
</html>