Unify button logic to one method. Relates to: #HFP-200
parent
9250903a5f
commit
b756406d2e
|
@ -222,28 +222,7 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Update button state.
|
|
||||||
QuestionSet.prototype._updateButtons = function () {
|
|
||||||
var self = this;
|
|
||||||
|
|
||||||
var currentQuestion = questionInstances[currentQuestionIndex];
|
|
||||||
var isLast = currentQuestionIndex === (questionInstances.length - 1);
|
|
||||||
|
|
||||||
// Verify that current question is answered when backward nav is disabled
|
|
||||||
if (self.disableBackwardsNavigation) {
|
|
||||||
var showNextButton = currentQuestion.getAnswerGiven() && !isLast;
|
|
||||||
currentQuestion[showNextButton ? 'showButton' : 'hideButton']('next');
|
|
||||||
}
|
|
||||||
|
|
||||||
// checks if all questions are answered
|
|
||||||
var isAllAnswered = questionInstances.every(function(question){
|
|
||||||
return question.getAnswerGiven();
|
|
||||||
});
|
|
||||||
|
|
||||||
if (isLast && currentQuestion) {
|
|
||||||
currentQuestion[isAllAnswered ? 'showButton' : 'hideButton']('finish');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var _stopQuestion = function (questionNumber) {
|
var _stopQuestion = function (questionNumber) {
|
||||||
if (questionInstances[questionNumber]) {
|
if (questionInstances[questionNumber]) {
|
||||||
|
@ -398,12 +377,16 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
//Force the last page to be reRendered
|
//Force the last page to be reRendered
|
||||||
self.rendered = false;
|
self.rendered = false;
|
||||||
|
|
||||||
|
// if using pool
|
||||||
if(self.poolSize > 0){
|
if(self.poolSize > 0){
|
||||||
var questions = H5P.shuffleArray(self.questions);
|
var questions = H5P.shuffleArray(self.questions);
|
||||||
|
|
||||||
questionInstances = questions.map(function (question, index) {
|
questionInstances = questions.map(function (question, index) {
|
||||||
question = overrideBehaviourAndSettings(question, self.override, $template, self);
|
question = overrideBehaviourAndSettings(question, self.override, $template, self);
|
||||||
return createQuestionInstance(self, question, index, self.contentId, self.contentData);
|
return createQuestionInstance(self, question, index, self.contentId, self.contentData);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
questionInstances = limitArrayToPoolSize(questionInstances, self.poolSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.randomQuestions || self.poolSize > 0) {
|
if (self.randomQuestions || self.poolSize > 0) {
|
||||||
|
@ -428,9 +411,7 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
question.attach($questionContainer, $myDom);
|
question.attach($questionContainer, $myDom);
|
||||||
|
|
||||||
// toggle buttons
|
// toggle buttons
|
||||||
var isFirst = (i === 0);
|
self._updateButtons(question, i);
|
||||||
var isLast = (i === questionInstances.length - 1);
|
|
||||||
self.toggleButtonsForQuestion(question, isFirst, isLast);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -441,17 +422,44 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
QuestionSet.prototype.toggleButtonsForQuestion = function (question, isFirst, isLast) {
|
// Update button state.
|
||||||
|
QuestionSet.prototype._updateButtons = function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
var currentQuestion = questionInstances[currentQuestionIndex];
|
||||||
|
var isLast = currentQuestionIndex === (questionInstances.length - 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
QuestionSet.prototype.isAllAnswered = function(){
|
||||||
|
return questionInstances.every(function(question){
|
||||||
|
return question.getAnswerGiven();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
QuestionSet.prototype._updateButtons = function (questionInstance, index) {
|
||||||
|
questionInstance = questionInstance || questionInstances[currentQuestionIndex];
|
||||||
|
index = index || currentQuestionIndex;
|
||||||
|
var self = this;
|
||||||
|
var isFirst = self.isFirst(index);
|
||||||
|
var isLast = self.isLast(index);
|
||||||
|
|
||||||
//Show buttons if necessary
|
//Show buttons if necessary
|
||||||
question[isLast ? 'showButton' : 'hideButton']('finish');
|
questionInstance[isLast && self.isAllAnswered() ? 'showButton' : 'hideButton']('finish');
|
||||||
question[!isLast ? 'showButton' : 'hideButton']('next');
|
|
||||||
|
// Verify that current question is answered when backward nav is disabled
|
||||||
|
if (self.disableBackwardsNavigation) {
|
||||||
|
var showNextButton = questionInstance.getAnswerGiven() && !isLast;
|
||||||
|
questionInstance[showNextButton ? 'showButton' : 'hideButton']('next');
|
||||||
|
} else {
|
||||||
|
questionInstance[!isLast ? 'showButton' : 'hideButton']('next');
|
||||||
|
}
|
||||||
|
|
||||||
if (isFirst || self.disableBackwardsNavigation) {
|
if (isFirst || self.disableBackwardsNavigation) {
|
||||||
question.hideButton('prev');
|
questionInstance.hideButton('prev');
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
question.showButton('prev');
|
questionInstance.showButton('prev');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -755,6 +763,9 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
shortVerb === 'attempted') {
|
shortVerb === 'attempted') {
|
||||||
self.toggleAnsweredDot(currentQuestionIndex,
|
self.toggleAnsweredDot(currentQuestionIndex,
|
||||||
questionInstances[currentQuestionIndex].getAnswerGiven());
|
questionInstances[currentQuestionIndex].getAnswerGiven());
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self._updateButtons();
|
self._updateButtons();
|
||||||
}
|
}
|
||||||
if (shortVerb === 'completed') {
|
if (shortVerb === 'completed') {
|
||||||
|
@ -777,7 +788,7 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
$('.qs-startbutton', $myDom).click(function () {
|
$('.qs-startbutton', $myDom).click(function () {
|
||||||
$(this).parents('.intro-page').hide();
|
$(this).parents('.intro-page').hide();
|
||||||
$('.questionset', $myDom).show();
|
$('.questionset', $myDom).show();
|
||||||
_showQuestion(self.initialQuestion);
|
self._showQuestion(self.initialQuestion);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -793,7 +804,7 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_stopQuestion(currentQuestionIndex);
|
_stopQuestion(currentQuestionIndex);
|
||||||
_showQuestion($(this).parent().index());
|
self._showQuestion($(this).parent().index());
|
||||||
};
|
};
|
||||||
|
|
||||||
// Set event listeners.
|
// Set event listeners.
|
||||||
|
@ -842,6 +853,14 @@ H5P.QuestionSet = (function($, EventDispatcher) {
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
QuestionSet.prototype.isFirst = function (index) {
|
||||||
|
return index === 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
QuestionSet.prototype.isLast = function (index) {
|
||||||
|
return index === (questionInstances.length - 1);
|
||||||
|
};
|
||||||
|
|
||||||
// Get current score for questionset.
|
// Get current score for questionset.
|
||||||
QuestionSet.prototype.getScore = function () {
|
QuestionSet.prototype.getScore = function () {
|
||||||
var score = 0;
|
var score = 0;
|
||||||
|
|
Loading…
Reference in New Issue