|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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.создать();
- }
|