167 lines
3.4 KiB
JavaScript
167 lines
3.4 KiB
JavaScript
/*
|
|
*
|
|
* Скачиваемый файл / Downloaded file
|
|
*
|
|
*/
|
|
|
|
муром.файл = {};
|
|
муром.файл.начало =
|
|
`
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<body>
|
|
<script>
|
|
var муром = {};
|
|
var murom = муром;
|
|
муром.модули = [
|
|
`;
|
|
муром.файл.конец =
|
|
`
|
|
];
|
|
|
|
Object.defineProperty(murom, "modules", {
|
|
get: function()
|
|
{
|
|
return муром.модули;
|
|
},
|
|
set: function(значения)
|
|
{
|
|
муром.модули = значения;
|
|
}
|
|
});
|
|
|
|
var загрузочныйМодуль = муром.модули[0];
|
|
var код = atob(загрузочныйМодуль[1]);
|
|
eval(код);
|
|
</script>
|
|
</body>
|
|
</html>
|
|
`;
|
|
|
|
/*
|
|
*
|
|
* UUID
|
|
*
|
|
*/
|
|
|
|
// Create GUID / UUID in JavaScript?
|
|
// https://stackoverflow.com/a/2117523
|
|
муром.uuid = function()
|
|
{
|
|
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);
|
|
}
|
|
);
|
|
};
|
|
|
|
/*
|
|
*
|
|
* Уведомитель / Reporter
|
|
*
|
|
*/
|
|
|
|
// 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 = murom.uuid();
|
|
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);
|
|
};
|
|
|
|
/*
|
|
*
|
|
* Пуск / Start
|
|
*
|
|
*/
|
|
|
|
муром.пуск = new Уведомитель();
|
|
// Can also be accessed as 'murom.run'.
|
|
Object.defineProperty(murom, "run", {
|
|
get: function()
|
|
{
|
|
return муром.пуск;
|
|
}
|
|
});
|
|
murom.start = function()
|
|
{
|
|
муром.пуск.уведомить();
|
|
};
|
|
|
|
/*
|
|
*
|
|
* Левая и правая области / Left and right regions
|
|
*
|
|
*/
|
|
|
|
муром.создатьЛевуюПравуюОбласти = function()
|
|
{
|
|
// Левая область.
|
|
var ло = document.createElement("div");
|
|
ло.id="левая-область";
|
|
ло.style.cssText =
|
|
"position: fixed; left: 0; top: 0; bottom: 0; width: 50%;";
|
|
document.body.appendChild(ло);
|
|
|
|
// Правая область.
|
|
var по = document.createElement("div");
|
|
по.id="правая-область";
|
|
по.style.cssText =
|
|
"position: fixed; right: 0; top: 0; bottom: 0; width: 50%;";
|
|
document.body.appendChild(по);
|
|
|
|
return [ло, по];
|
|
};
|