@@ -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.создать(); | |||||
} |
@@ -1,9 +1,18 @@ | |||||
function Редактор(имяОбласти) | |||||
function Редактор(события, имяОбласти) | |||||
{ | { | ||||
this.создать = function() | this.создать = function() | ||||
{ | { | ||||
this.установитьAce(); | this.установитьAce(); | ||||
this.улавливатьРедактирование(); | |||||
this.улавливатьЗавершениеРедактирования(); | |||||
события.подписать(this); | |||||
}; | |||||
this.обработатьСобытие = function(событие) | |||||
{ | |||||
if (событие == "завершили редактирование") | |||||
{ | |||||
this.проверитьКорректностьКода(); | |||||
} | |||||
}; | }; | ||||
this.установитьAce = function() | this.установитьAce = function() | ||||
@@ -13,7 +22,7 @@ function Редактор(имяОбласти) | |||||
this.ace.session.setMode("ace/mode/javascript"); | this.ace.session.setMode("ace/mode/javascript"); | ||||
} | } | ||||
this.улавливатьРедактирование = function() | |||||
this.улавливатьЗавершениеРедактирования = function() | |||||
{ | { | ||||
var тут = this; | var тут = this; | ||||
this.ace.session.on("change", function(дельта) { | this.ace.session.on("change", function(дельта) { | ||||
@@ -24,7 +33,7 @@ function Редактор(имяОбласти) | |||||
{ | { | ||||
if (билет == тут.билет) | if (билет == тут.билет) | ||||
{ | { | ||||
тут.проверитьКорректностьКода(); | |||||
события.уведомить("завершили редактирование"); | |||||
} | } | ||||
}, | }, | ||||
1000 | 1000 | ||||
@@ -37,11 +46,11 @@ function Редактор(имяОбласти) | |||||
try | try | ||||
{ | { | ||||
eval(this.ace.session.getValue()); | eval(this.ace.session.getValue()); | ||||
/**/console.debug("ИГР Редактор.проверитьКК OK"); | |||||
события.уведомить("код корректен"); | |||||
} | } | ||||
catch (ошибка) | catch (ошибка) | ||||
{ | { | ||||
/**/console.debug("ИГР Редактор.проверитьКК ОШИБКА: ", ошибка); | |||||
события.уведомить("код некорректен"); | |||||
} | } | ||||
}; | }; | ||||
@@ -1,16 +1,33 @@ | |||||
function Пульт(имяОбласти, имяПуска) | |||||
function Пульт(события, имяОшибки, имяПуска) | |||||
{ | { | ||||
this.создать = function() | this.создать = function() | ||||
{ | { | ||||
this.настроитьКнопкуПуска(); | |||||
}; | |||||
var ошибка = document.getElementById(имяОшибки); | |||||
this.настроитьКнопкуПуска = function() | |||||
{ | |||||
var пуск = document.getElementById(имяПуска); | var пуск = document.getElementById(имяПуска); | ||||
пуск.addEventListener("click", function(событие) { | пуск.addEventListener("click", function(событие) { | ||||
/**/console.debug("НАДО запустить"); | /**/console.debug("НАДО запустить"); | ||||
}); | }); | ||||
события.подписать(this); | |||||
}; | |||||
this.обработатьСобытие = function(событие) | |||||
{ | |||||
if (событие == "код корректен") | |||||
{ | |||||
this.показатьОшибку(false); | |||||
} | |||||
else if (событие == "код некорректен") | |||||
{ | |||||
this.показатьОшибку(true); | |||||
} | |||||
}; | |||||
this.показатьОшибку = function(показать) | |||||
{ | |||||
ошибка.innerHTML = показать ? "⚠" : " "; | |||||
}; | }; | ||||
// Конструктор. | // Конструктор. | ||||
@@ -2,9 +2,9 @@ function Муром() | |||||
{ | { | ||||
this.создать = function() | this.создать = function() | ||||
{ | { | ||||
this.редактор = new Редактор("редактор"); | |||||
this.пульт = new Пульт("пульт", "пуск"); | |||||
this.события = new События(); | |||||
this.редактор = new Редактор(this.события, "редактор"); | |||||
this.пульт = new Пульт(this.события, "ошибка", "пуск"); | |||||
}; | }; | ||||
// Конструктор. | // Конструктор. | ||||
@@ -31,7 +31,8 @@ | |||||
bottom: 0; | bottom: 0; | ||||
width: 4em; | width: 4em; | ||||
display: flex; | display: flex; | ||||
justify-content: center; | |||||
flex-direction: column; | |||||
/*justify-content: center;*/ | |||||
border: 1px dashed gainsboro; | border: 1px dashed gainsboro; | ||||
} | } | ||||
#воспроизведение | #воспроизведение | ||||
@@ -44,27 +45,21 @@ | |||||
} | } | ||||
</style> | </style> | ||||
<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> | </style> | ||||
</head> | </head> | ||||
<body> | <body> | ||||
<div id="редактор"></div> | <div id="редактор"></div> | ||||
<div id="пульт"> | <div id="пульт"> | ||||
<a id="пуск" class="uk-icon-button uk-margin-top uk-margin-bottom" uk-icon="play" uk-tooltip="Пуск"></a> | |||||
<span id="ошибка" class="впульте"> </span> | |||||
<a id="пуск" class="впульте uk-icon-button uk-margin-top" uk-icon="play" uk-tooltip="Пуск"></a> | |||||
</div> | </div> | ||||
<div id="воспроизведение"></div> | <div id="воспроизведение"></div> | ||||
<script src="040.события.js"></script> | |||||
<script src="100.редактор.js"></script> | <script src="100.редактор.js"></script> | ||||
<script src="200.пульт.js"></script> | <script src="200.пульт.js"></script> | ||||
<script src="700.муром.js"></script> | <script src="700.муром.js"></script> | ||||