сообщать об ошибке

This commit is contained in:
2021-09-01 14:49:22 +03:00
parent dc85b0571f
commit c007c2e6ea
5 changed files with 79 additions and 27 deletions

View File

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

View File

@@ -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("ИГР Редактор.проверитьКК ОШИБКА: ", ошибка);
события.уведомить("код некорректен");
}
};

View File

@@ -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 = показать ? "⚠" : " ";
};
// Конструктор.

View File

@@ -2,9 +2,9 @@ function Муром()
{
this.создать = function()
{
this.редактор = new Редактор("редактор");
this.пульт = new Пульт("пульт", "пуск");
this.события = new События();
this.редактор = new Редактор(this.события, "редактор");
this.пульт = new Пульт(this.события, "ошибка", "пуск");
};
// Конструктор.

View File

@@ -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 @@
}
</style>
<style>
/*
.кнопка {
border-radius: 50%;
width: 3em;
height: 3em;
border: 2px solid lightgrey;
display: flex;
align-items: center;
justify-content: center;
background: white;
.впульте
{
margin: 0 auto;
}
*/
</style>
</head>
<body>
<div id="редактор"></div>
<div id="пульт">
<a id="пуск" class="uk-icon-button uk-margin-top uk-margin-bottom" uk-icon="play" uk-tooltip="Пуск"></a>
<span id="ошибка" class="впульте">&nbsp;</span>
<a id="пуск" class="впульте uk-icon-button uk-margin-top" uk-icon="play" uk-tooltip="Пуск"></a>
</div>
<div id="воспроизведение"></div>
<script src="040.события.js"></script>
<script src="100.редактор.js"></script>
<script src="200.пульт.js"></script>
<script src="700.муром.js"></script>