начать 5.0
This commit is contained in:
127
5.0/редактор/100.Редактор.js
Normal file
127
5.0/редактор/100.Редактор.js
Normal file
@@ -0,0 +1,127 @@
|
||||
function Редактор(события, имяРедактора)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
this.первоначальныйЗаголовок = document.title;
|
||||
this.установитьAce();
|
||||
this.улавливатьЗавершениеРедактирования();
|
||||
this.задатьКодПриЗапуске();
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.задатьКодПриЗапуске = function()
|
||||
{
|
||||
var z64 = мир.параметрыЗапуска()["z64"];
|
||||
if (z64)
|
||||
{
|
||||
var код = мир.изZ64(z64);
|
||||
this.ace.session.setValue(код);
|
||||
}
|
||||
};
|
||||
|
||||
this.запуститьОтдельно = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
var путь = window.location.pathname + "/../игра.html?z64=" + z64;
|
||||
window.open(путь);
|
||||
};
|
||||
|
||||
this.исполнитьКод = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
// Исполняем явно код лишь первый раз.
|
||||
var проигрыватель = document.getElementById("проигрыватель");
|
||||
if (!проигрыватель.src)
|
||||
{
|
||||
проигрыватель.src = "игра.html?z64=" + z64;
|
||||
}
|
||||
// После запуска уведомляем iframe о новом коде без перезагрузки.
|
||||
else
|
||||
{
|
||||
window.frames.проигрыватель.postMessage(z64, "*");
|
||||
}
|
||||
};
|
||||
|
||||
this.обновитьАдреснуюСтрокуИЗаголовок = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
var путь = window.location.pathname + "?z64=" + z64;
|
||||
history.pushState(null, "", путь);
|
||||
document.title = `${this.первоначальныйЗаголовок} ${z64.length}:${z64.slice(z64.length - 5)}`;
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "завершили редактирование")
|
||||
{
|
||||
this.обновитьАдреснуюСтрокуИЗаголовок();
|
||||
this.проверитьКорректностьКода();
|
||||
}
|
||||
else if (событие == "код корректен")
|
||||
{
|
||||
this.исполнитьКод();
|
||||
}
|
||||
else if (событие == "перезапустить")
|
||||
{
|
||||
this.перезапуститьКод();
|
||||
}
|
||||
else if (событие == "запустить отдельно")
|
||||
{
|
||||
this.запуститьОтдельно();
|
||||
}
|
||||
};
|
||||
|
||||
this.перезапуститьКод = function()
|
||||
{
|
||||
var содержимое = this.ace.session.getValue();
|
||||
var z64 = мир.вZ64(содержимое);
|
||||
var проигрыватель = document.getElementById("проигрыватель");
|
||||
проигрыватель.src = "игра.html?z64=" + z64;
|
||||
};
|
||||
|
||||
this.проверитьКорректностьКода = function()
|
||||
{
|
||||
try
|
||||
{
|
||||
eval(this.ace.session.getValue());
|
||||
события.уведомить("код корректен");
|
||||
}
|
||||
catch (ошибка)
|
||||
{
|
||||
события.уведомить("код некорректен");
|
||||
}
|
||||
};
|
||||
|
||||
this.улавливатьЗавершениеРедактирования = function()
|
||||
{
|
||||
var тут = this;
|
||||
this.ace.session.on("change", function(дельта) {
|
||||
const билет = мир.uuid();
|
||||
тут.билет = билет;
|
||||
setTimeout(
|
||||
function()
|
||||
{
|
||||
if (билет == тут.билет)
|
||||
{
|
||||
события.уведомить("завершили редактирование");
|
||||
}
|
||||
},
|
||||
300
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
this.установитьAce = function()
|
||||
{
|
||||
var область = document.getElementById(имяРедактора);
|
||||
this.ace = window.ace.edit(имяРедактора);
|
||||
this.ace.session.setMode("ace/mode/javascript");
|
||||
this.ace.session.setUseWrapMode(true);
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
53
5.0/редактор/200.Пульт.js
Normal file
53
5.0/редактор/200.Пульт.js
Normal file
@@ -0,0 +1,53 @@
|
||||
function Пульт(события, имяОшибки, имяПерезапуска, имяОтдельно, имяСсылки, имяДокументации)
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
var ошибка = document.getElementById(имяОшибки);
|
||||
мир.назначитьКнопкамСобытия(
|
||||
события,
|
||||
[
|
||||
[имяПерезапуска, "перезапустить"],
|
||||
[имяОтдельно, "запустить отдельно"],
|
||||
[имяСсылки, "скопировать ссылку"],
|
||||
[имяДокументации, "открыть документацию"],
|
||||
]
|
||||
);
|
||||
события.подписать(this);
|
||||
};
|
||||
|
||||
this.обработатьСобытие = function(событие)
|
||||
{
|
||||
if (событие == "код корректен")
|
||||
{
|
||||
this.показатьОшибку(false);
|
||||
}
|
||||
else if (событие == "код некорректен")
|
||||
{
|
||||
this.показатьОшибку(true);
|
||||
}
|
||||
else if (событие == "скопировать ссылку")
|
||||
{
|
||||
navigator.clipboard.writeText(window.location)
|
||||
.then(() => {
|
||||
UIkit.notification("Скопировали ссылку", { status: "success", timeout: 1000 });
|
||||
})
|
||||
.catch(err => {
|
||||
UIkit.notification("Не удалось скопировать ссылку :(", { status: "danger", timeout: 5000 });
|
||||
});
|
||||
}
|
||||
else if (событие == "открыть документацию")
|
||||
{
|
||||
var путь = window.location.pathname + "/../../doc/ru/index.html";
|
||||
window.open(путь);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
this.показатьОшибку = function(показать)
|
||||
{
|
||||
ошибка.innerHTML = показать ? "<span uk-icon=\"icon: warning\"></span>" : " ";
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
13
5.0/редактор/700.Муром.js
Normal file
13
5.0/редактор/700.Муром.js
Normal file
@@ -0,0 +1,13 @@
|
||||
function Муром()
|
||||
{
|
||||
this.создать = function()
|
||||
{
|
||||
мир.события = new События();
|
||||
мир.состояние = new Состояние();
|
||||
мир.редактор = new Редактор(мир.события, "редактор");
|
||||
мир.пульт = new Пульт(мир.события, "ошибка", "перезапустить", "отдельно", "ссылка", "документация");
|
||||
};
|
||||
|
||||
// Конструктор.
|
||||
this.создать();
|
||||
}
|
||||
1
5.0/редактор/ace
Symbolic link
1
5.0/редактор/ace
Symbolic link
@@ -0,0 +1 @@
|
||||
../../стороннее/ace
|
||||
1
5.0/редактор/uikit
Symbolic link
1
5.0/редактор/uikit
Symbolic link
@@ -0,0 +1 @@
|
||||
../../стороннее/uikit
|
||||
Reference in New Issue
Block a user