|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- function Редактор(события, имяРедактора)
- {
- this.создать = function()
- {
- this.установитьAce();
- this.улавливатьЗавершениеРедактирования();
- this.пз = new ПараметрыЗапуска();
- this.задатьКодПриЗапуске();
- события.подписать(this);
- };
-
- this.задатьКодПриЗапуске = function()
- {
- var z64 = this.пз.параметры["z64"];
- if (z64)
- {
- var код = изZ64(z64);
- this.ace.session.setValue(код);
- }
- };
-
- this.исполнитьКод = function()
- {
- var содержимое = this.ace.session.getValue();
- var z64 = вZ64(содержимое);
- var путь = window.location.pathname + "?z64=" + z64;
- history.pushState(null, "", путь);
- document.title = `M-3.0 ${z64.length}:${z64.slice(z64.length - 5)}`;
-
- // Исполняем явно код лишь первый раз.
- var проигрыватель = document.getElementById("проигрыватель");
- if (!проигрыватель.src)
- {
- проигрыватель.src = "../проигрыватель/index.html?z64=" + z64;
- }
- // После запуска уведомляем iframe о новом коде без перезагрузки.
- else
- {
- window.frames.проигрыватель.postMessage(z64, "*");
- }
- };
-
- this.обработатьСобытие = function(событие)
- {
- if (событие == "завершили редактирование")
- {
- this.проверитьКорректностьКода();
- }
- else if (событие == "код корректен")
- {
- this.исполнитьКод();
- }
- };
-
-
- this.установитьAce = function()
- {
- var область = document.getElementById(имяРедактора);
- this.ace = window.ace.edit(имяРедактора);
- this.ace.session.setMode("ace/mode/javascript");
- this.ace.session.setUseWrapMode(true);
- }
-
- this.улавливатьЗавершениеРедактирования = function()
- {
- var тут = this;
- this.ace.session.on("change", function(дельта) {
- const билет = uuid();
- тут.билет = билет;
- setTimeout(
- function()
- {
- if (билет == тут.билет)
- {
- события.уведомить("завершили редактирование");
- }
- },
- 1000
- );
- });
- };
-
- this.проверитьКорректностьКода = function()
- {
- try
- {
- eval(this.ace.session.getValue());
- события.уведомить("код корректен");
- }
- catch (ошибка)
- {
- события.уведомить("код некорректен");
- }
- };
-
- // Конструктор.
- this.создать();
- }
|