From c007c2e6ea92038c211e19335a8972a20d75379c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9A=D0=B0=D0=BF?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BA=D0=BE?= Date: Wed, 1 Sep 2021 14:49:22 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=B1=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3.0/редактор/040.события.js | 31 ++++++++++++++++++++ 3.0/редактор/100.редактор.js | 21 +++++++++---- 3.0/редактор/200.пульт.js | 27 +++++++++++++---- 3.0/редактор/700.муром.js | 6 ++-- 3.0/редактор/index.html | 21 +++++-------- 5 files changed, 79 insertions(+), 27 deletions(-) create mode 100644 3.0/редактор/040.события.js 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 @@ }
- +   +
+