Compare commits

..

5 Commits

21 changed files with 401 additions and 577 deletions

File diff suppressed because one or more lines are too long

1
murom_2.0.0.html Symbolic link
View File

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

1
murom_2.0.1.html Symbolic link
View File

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

View File

@@ -1,54 +0,0 @@
// 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

@@ -1,13 +0,0 @@
// 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

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

View File

@@ -1,50 +0,0 @@
муром.модулевед.сохранить = 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

@@ -1,34 +0,0 @@
муром.файл = {};
муром.файл.начало =
`
<!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>
`;

File diff suppressed because one or more lines are too long

156
муром_2.0.0.html Normal file

File diff suppressed because one or more lines are too long

156
муром_2.0.1.html Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,20 @@
<!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.

After

Width:  |  Height:  |  Size: 51 KiB

View File

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

View File

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

View File

@@ -0,0 +1,30 @@
<!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.

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,23 @@
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

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

View File

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