Compare commits
2 Commits
28660eca14
...
5adb24c8c0
| Author | SHA1 | Date | |
|---|---|---|---|
| 5adb24c8c0 | |||
| a4024587a3 |
@@ -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>
|
||||
Reference in New Issue
Block a user