Compare commits

..

10 Commits

21 changed files with 577 additions and 401 deletions

149
murom_1.2.0.html Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
муром_2.0.0.html

View File

@@ -1 +0,0 @@
муром_2.0.1.html

View File

@@ -6,7 +6,7 @@ function добавитьЭкранЗаставки()
заставка.style.cssText = "position: absolute; left: 0; right: 0; top: 0; bottom: 0; pointer-events: none;";
заставка.innerHTML =
`
<h1 id = "заголовок">Заставка</h1>
<h1 id = "заголовок">МУРОМ</h1>
`;
var вид = document.createElement("style");
@@ -18,13 +18,12 @@ function добавитьЭкранЗаставки()
position: absolute;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
}
#заставка
{
opacity: 1;
background-color: grey;
animation: fadeOut 1s ease;
animation: fadeOut 2s ease;
animation-fill-mode: forwards;
}
@keyframes fadeOut
@@ -42,5 +41,4 @@ function добавитьЭкранЗаставки()
};
муром.пуск.подписать(добавитьЭкранЗаставки);
муром.старт.подписать(добавитьЭкранЗаставки);

View 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);
};

View 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);
}
);
};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,6 @@
муром.пуск = new Уведомитель();
муром.старт = муром.пуск;
murom.start = function()
{
муром.пуск.уведомить();
};

View 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(){
муром.модулевед.сохранили.уведомить();
});
};

View 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>
`;

171
муром_1.2.0.html Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,20 +0,0 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<body>
<script>
var MM = [
[
"HelloWorld",
"dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CmRpdi5pbm5lckhUTUwgPSAiPHA+SGVsbG8sIFdvcmxkITwvcD4iOw==",
],
];
var module = MM[0];
var code = atob(module[1]);
eval(code);
</script>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

View File

@@ -1,3 +0,0 @@
<div>
<p>Hello, World!</p>
</div>

View File

@@ -1,3 +0,0 @@
var div = document.createElement("div");
document.body.appendChild(div);
div.innerHTML = "<p>Hello, World!</p>";

View File

@@ -1,30 +0,0 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<body>
<script>
var MM = [
[
"Loader",
"ZnVuY3Rpb24gTXVyb20oKQp7Cn0KTXVyb20ucHJvdG90eXBlLmxvYWRNb2R1bGVzID0gZnVuY3Rpb24oKQp7CiAgICAvLyBTa2lwIGAwYCBtb2R1bGUgYmVjYXVzZSBpdCdzIHVzLgogICAgZm9yICh2YXIgaSA9IDE7IGkgPCBNTS5sZW5ndGg7ICsraSkKICAgIHsKICAgICAgICB2YXIgbW9kdWxlID0gTU1baV07CiAgICAgICAgdmFyIG5hbWUgPSBtb2R1bGVbMF07CiAgICAgICAgdmFyIGNvZGUgPSBhdG9iKG1vZHVsZVsxXSk7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICBldmFsKGNvZGUpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoZSkKICAgICAgICB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBsb2FkICciICsgbmFtZSArICInIG1vZHVsZTogJyIgKyBlICsgIiciKTsKICAgICAgICB9CiAgICB9Cn07CnZhciBNID0gbmV3IE11cm9tKCk7Ck0ubG9hZE1vZHVsZXMoKTsK",
],
[
"HelloWorld",
"dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CmRpdi5pbm5lckhUTUwgPSAiPHA+SGVsbG8sIFdvcmxkITwvcD4iOw==",
],
[
"NoBorders",
"dmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CmRpdi5pbm5lckhUTUwgPSAiPHA+TGV0IDxzdHJvbmc+TVVST008L3N0cm9uZz4gc2hvdyB5b3Ugbm8gYm9yZGVyczwvcD4iOwo=",
],
];
var module = MM[0];
var code = atob(module[1]);
eval(code);
</script>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -1,23 +0,0 @@
function Murom()
{
}
Murom.prototype.loadModules = function()
{
// Skip `0` module because it's us.
for (var i = 1; i < MM.length; ++i)
{
var module = MM[i];
var name = module[0];
var code = atob(module[1]);
try
{
eval(code);
}
catch (e)
{
console.error("Could not load '" + name + "' module: '" + e + "'");
}
}
};
var M = new Murom();
M.loadModules();

View File

@@ -1,3 +0,0 @@
var div = document.createElement("div");
document.body.appendChild(div);
div.innerHTML = "<p>Let <strong>MUROM</strong> show you no borders</p>";