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, "", путь); var воспроизведение = document.getElementById("воспроизведение"); var адрес = "../проигрыватель/index.html?z64=" + z64; воспроизведение.src = адрес; }; 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.создать(); }