отрисовка и ответ на вопрос проиходит в методе QuestionMaster.renderQuestion
// первый аргумент - содержание вопроса (текст)
// второй - функция обратного вызова. см. ниже.
QuestionMaster.renderQuestion : function ( questionText, callback )
// функция должна выполниться, когда пользователь ответит на вопрос
// (чтобы выводить через HTML элементы, с\без анимации)
// первым аргументом к ф-и должно быть логическое значение, говорящее об ответе на вопрос
callback: function (answered)
var QuestionMaster = {
data: [],
Question: function (text) {
this.text = text + '';
this.value = false;
},
index: -1,
timeout: 25 * 1e3,
locked: false,
insert: function (text) {
if (text instanceof Array) {
var i = text.length;
while ( i-->0 ) this.insert( text[i] );
} else {
var question = new this.Question(text);
this.data.push(question);
}
},
current: function () {
return this.data[ this.index ];
},
next: function () {
return this.data[ this.index++ ];
},
prev: function () {
return this.data[ this.index-- ];
},
ask: function () {
var question = this.current();
if (!this.locked && question) {
question = this.current();
var self = this;
this.locked = true;
var askedTimestamp = new Date().valueOf();
this.renderQuestion(question.text, function (answered) {
self.locked = false;
var answeredTimestamp = new Date().valueOf();
var timedOut = (answeredTimestamp - askedTimestamp) >= self.timeout;
question.value = timedOut ? false : !!answered;
});
}
},
askNext: function () {
this.next();
this.ask();
},
renderQuestion: function (questionText, callback) {
var answered = window.confirm(questionText);
callback(answered);
},
iterate: function (callback) {
var i = this.data.length, question;
while ( i-->0) {
question = this.data[ i ];
callback(question.text, question.value);
}
}
};
QuestionMaster.insert("Хочешь пивка?");
QuestionMaster.insert([ "Хочешь рыбку?", "Хочешь учиться?", "Сейчас на улице темно?" ]);
QuestionMaster.next();
QuestionMaster.ask();
while (QuestionMaster.current()) QuestionMaster.askNext();
QuestionMaster.iterate(function (question, answered) {
alert(question + " \n\nОтвет: " + (answered ? "Да":"Нет") );
});