Создать расширяемую платформу Муром 1.2
This commit is contained in:
149
murom_1.2.0.html
Normal file
149
murom_1.2.0.html
Normal file
File diff suppressed because one or more lines are too long
54
модули/Уведомитель_1.0.0.js
Normal file
54
модули/Уведомитель_1.0.0.js
Normal file
@@ -0,0 +1,54 @@
|
||||
// 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);
|
||||
};
|
||||
13
модули/муром.uuid_1.0.0.js
Normal file
13
модули/муром.uuid_1.0.0.js
Normal file
@@ -0,0 +1,13 @@
|
||||
// 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);
|
||||
}
|
||||
);
|
||||
};
|
||||
97
модули/муром.загрузка_1.0.0.js
Normal file
97
модули/муром.загрузка_1.0.0.js
Normal file
File diff suppressed because one or more lines are too long
6
модули/муром.пуск_1.0.0.js
Normal file
6
модули/муром.пуск_1.0.0.js
Normal file
@@ -0,0 +1,6 @@
|
||||
муром.пуск = new Уведомитель();
|
||||
муром.старт = муром.пуск;
|
||||
murom.start = function()
|
||||
{
|
||||
муром.пуск.уведомить();
|
||||
};
|
||||
50
модули/муром.сохранение_1.0.0.js
Normal file
50
модули/муром.сохранение_1.0.0.js
Normal file
@@ -0,0 +1,50 @@
|
||||
муром.модулевед.сохранить = new Уведомитель();
|
||||
муром.модулевед.сохранили = new Уведомитель();
|
||||
|
||||
муром.модулевед.создатьИнтерфейсСохранения = function()
|
||||
{
|
||||
сохранение = document.createElement("button");
|
||||
муром.модулевед.htmlМодули.appendChild(сохранение);
|
||||
сохранение.innerHTML = "Сохранить всё";
|
||||
сохранение.onclick = function()
|
||||
{
|
||||
муром.модулевед.сохранить.уведомить();
|
||||
};
|
||||
муром.модулевед.htmlСохранение = сохранение;
|
||||
};
|
||||
|
||||
муром.модулевед.сохранитьВыбранныйМодуль = function()
|
||||
{
|
||||
var номер = муром.модулевед.номерМодуля(муром.модулевед.выбранныйМодуль);
|
||||
if (!номер)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var модуль = муром.модули[номер];
|
||||
var код = муром.редактор.session.getValue();
|
||||
модуль[1] = base64Encode(код);
|
||||
};
|
||||
|
||||
муром.модулевед.сохранитьВБазе = function(отклик)
|
||||
{
|
||||
муром.модулевед.htmlСохранение.disabled = true;
|
||||
localforage.setItem("modules", муром.модули, function(ошибка, значение){
|
||||
муром.модулевед.htmlСохранение.disabled = false;
|
||||
if (ошибка)
|
||||
{
|
||||
console.log("ОШИБКА Не удалось сохранить модули: '" + ошибка + "'");
|
||||
}
|
||||
else if (отклик)
|
||||
{
|
||||
отклик();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
муром.модулевед.сохранитьВсё = function()
|
||||
{
|
||||
муром.модулевед.сохранитьВыбранныйМодуль();
|
||||
муром.модулевед.сохранитьВБазе(function(){
|
||||
муром.модулевед.сохранили.уведомить();
|
||||
});
|
||||
};
|
||||
34
модули/муром.файл_1.0.0.js
Normal file
34
модули/муром.файл_1.0.0.js
Normal file
@@ -0,0 +1,34 @@
|
||||
муром.файл = {};
|
||||
муром.файл.начало =
|
||||
`
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<meta charset="utf-8">
|
||||
<body>
|
||||
<script>
|
||||
var муром = {};
|
||||
var murom = муром;
|
||||
муром.модули = [
|
||||
`;
|
||||
муром.файл.конец =
|
||||
`
|
||||
];
|
||||
|
||||
Object.defineProperty(murom, "modules", {
|
||||
get: function()
|
||||
{
|
||||
return муром.модули;
|
||||
},
|
||||
set: function(значения)
|
||||
{
|
||||
муром.модули = значения;
|
||||
}
|
||||
});
|
||||
|
||||
var загрузочныйМодуль = муром.модули[0];
|
||||
var код = atob(загрузочныйМодуль[1]);
|
||||
eval(код);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
`;
|
||||
254
муром_1.2.0.html
254
муром_1.2.0.html
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user