Выгрузить модули

This commit is contained in:
2019-10-16 14:43:38 +03:00
parent 0fc9d3020e
commit 0bb9e77495
9 changed files with 911 additions and 77 deletions

View File

@@ -0,0 +1,99 @@
/*
*
* 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()
{
муром.пуск.уведомить();
};