diff --git a/3.0/редактор/040.события.js b/3.0/редактор/040.события.js new file mode 100644 index 0000000..7ba82e8 --- /dev/null +++ b/3.0/редактор/040.события.js @@ -0,0 +1,31 @@ +function События() +{ + this.создать = function() + { + this.обработчики = []; + }; + + this.подписать = function(обработчик) + { + this.обработчики.push(обработчик); + }; + + this.отписать = function(обработчик) { + var номер = this.обработчики.indexOf(обработчик); + if (номер != -1) + { + this.обработчики.splice(номер, 1); + } + }; + + this.уведомить = function(событие) { + for (var номер in this.обработчики) + { + var обработчик = this.обработчики[номер]; + обработчик.обработатьСобытие(событие); + } + }; + + // Конструктор. + this.создать(); +} diff --git a/3.0/редактор/100.редактор.js b/3.0/редактор/100.редактор.js index 2a0771e..15153a2 100644 --- a/3.0/редактор/100.редактор.js +++ b/3.0/редактор/100.редактор.js @@ -1,9 +1,18 @@ -function Редактор(имяОбласти) +function Редактор(события, имяОбласти) { this.создать = function() { this.установитьAce(); - this.улавливатьРедактирование(); + this.улавливатьЗавершениеРедактирования(); + события.подписать(this); + }; + + this.обработатьСобытие = function(событие) + { + if (событие == "завершили редактирование") + { + this.проверитьКорректностьКода(); + } }; this.установитьAce = function() @@ -13,7 +22,7 @@ function Редактор(имяОбласти) this.ace.session.setMode("ace/mode/javascript"); } - this.улавливатьРедактирование = function() + this.улавливатьЗавершениеРедактирования = function() { var тут = this; this.ace.session.on("change", function(дельта) { @@ -24,7 +33,7 @@ function Редактор(имяОбласти) { if (билет == тут.билет) { - тут.проверитьКорректностьКода(); + события.уведомить("завершили редактирование"); } }, 1000 @@ -37,11 +46,11 @@ function Редактор(имяОбласти) try { eval(this.ace.session.getValue()); -/**/console.debug("ИГР Редактор.проверитьКК OK"); + события.уведомить("код корректен"); } catch (ошибка) { -/**/console.debug("ИГР Редактор.проверитьКК ОШИБКА: ", ошибка); + события.уведомить("код некорректен"); } }; diff --git a/3.0/редактор/200.пульт.js b/3.0/редактор/200.пульт.js index cee9e6c..7e2778c 100644 --- a/3.0/редактор/200.пульт.js +++ b/3.0/редактор/200.пульт.js @@ -1,16 +1,33 @@ -function Пульт(имяОбласти, имяПуска) +function Пульт(события, имяОшибки, имяПуска) { this.создать = function() { - this.настроитьКнопкуПуска(); - }; + var ошибка = document.getElementById(имяОшибки); - this.настроитьКнопкуПуска = function() - { var пуск = document.getElementById(имяПуска); пуск.addEventListener("click", function(событие) { /**/console.debug("НАДО запустить"); }); + + события.подписать(this); + }; + + this.обработатьСобытие = function(событие) + { + if (событие == "код корректен") + { + this.показатьОшибку(false); + } + else if (событие == "код некорректен") + { + this.показатьОшибку(true); + } + }; + + + this.показатьОшибку = function(показать) + { + ошибка.innerHTML = показать ? "⚠" : " "; }; // Конструктор. diff --git a/3.0/редактор/700.муром.js b/3.0/редактор/700.муром.js index 8951fc7..819c30e 100644 --- a/3.0/редактор/700.муром.js +++ b/3.0/редактор/700.муром.js @@ -2,9 +2,9 @@ function Муром() { this.создать = function() { - this.редактор = new Редактор("редактор"); - this.пульт = new Пульт("пульт", "пуск"); - + this.события = new События(); + this.редактор = new Редактор(this.события, "редактор"); + this.пульт = new Пульт(this.события, "ошибка", "пуск"); }; // Конструктор. diff --git a/3.0/редактор/index.html b/3.0/редактор/index.html index 728c562..734475b 100644 --- a/3.0/редактор/index.html +++ b/3.0/редактор/index.html @@ -31,7 +31,8 @@ bottom: 0; width: 4em; display: flex; - justify-content: center; + flex-direction: column; + /*justify-content: center;*/ border: 1px dashed gainsboro; } #воспроизведение @@ -44,27 +45,21 @@ }
- +   +
+