Показать сообщение отдельно
  #5 (permalink)  
Старый 10.04.2013, 23:25
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

отрисовка и ответ на вопрос проиходит в методе 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 ? "Да":"Нет") );
});

Последний раз редактировалось melky, 10.04.2013 в 23:33.
Ответить с цитированием