Merge remote-tracking branch 'origin/master' into release
commit
e30df40148
|
@ -114,6 +114,12 @@
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Need to disable max-height animation stuff, since this will
|
||||||
|
make resizing of iframe in Safari not work! */
|
||||||
|
.questionset .h5p-question-buttons.h5p-question-visible {
|
||||||
|
transition: none;
|
||||||
|
}
|
||||||
|
|
||||||
.h5p-question .h5p-question-prev,
|
.h5p-question .h5p-question-prev,
|
||||||
.h5p-question .h5p-question-finish,
|
.h5p-question .h5p-question-finish,
|
||||||
.h5p-question .h5p-question-next {
|
.h5p-question .h5p-question-next {
|
||||||
|
@ -215,9 +221,3 @@
|
||||||
.h5p-no-frame .questionset .h5p-question > *:last-child {
|
.h5p-no-frame .questionset .h5p-question > *:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hide retry and show solution buttons */
|
|
||||||
.questionset .h5p-question .h5p-question-try-again,
|
|
||||||
.questionset .h5p-question .h5p-question-show-solution {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
var questionInstances = [];
|
var questionInstances = [];
|
||||||
var $myDom;
|
var $myDom;
|
||||||
var scoreBar;
|
var scoreBar;
|
||||||
|
var up;
|
||||||
renderSolutions = false;
|
renderSolutions = false;
|
||||||
|
|
||||||
// Instantiate question instances
|
// Instantiate question instances
|
||||||
|
@ -126,11 +127,21 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var questionInstance = H5P.newRunnable(question, contentId, undefined, undefined, {parent: self});
|
var questionInstance = H5P.newRunnable(question, contentId, undefined, undefined, {parent: self});
|
||||||
|
questionInstance.on('resize', function () {
|
||||||
|
up = true;
|
||||||
|
self.trigger('resize');
|
||||||
|
});
|
||||||
questionInstances.push(questionInstance);
|
questionInstances.push(questionInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resize all interactions on resize
|
// Resize all interactions on resize
|
||||||
self.on('resize', function () {
|
self.on('resize', function () {
|
||||||
|
if (up) {
|
||||||
|
// Prevent resizing the question again.
|
||||||
|
up = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (var i = 0; i < questionInstances.length; i++) {
|
for (var i = 0; i < questionInstances.length; i++) {
|
||||||
questionInstances[i].trigger('resize');
|
questionInstances[i].trigger('resize');
|
||||||
}
|
}
|
||||||
|
@ -143,11 +154,18 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
answered = answered && (questionInstances[i]).getAnswerGiven();
|
answered = answered && (questionInstances[i]).getAnswerGiven();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentQuestion === (params.questions.length - 1) && answered) {
|
if (currentQuestion === (params.questions.length - 1) && answered &&
|
||||||
|
questionInstances[currentQuestion]) {
|
||||||
questionInstances[currentQuestion].showButton('finish');
|
questionInstances[currentQuestion].showButton('finish');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var _stopQuestion = function (questionNumber) {
|
||||||
|
if (questionInstances[questionNumber]) {
|
||||||
|
pauseMedia(questionInstances[questionNumber]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
var _showQuestion = function (questionNumber) {
|
var _showQuestion = function (questionNumber) {
|
||||||
// Sanitize input.
|
// Sanitize input.
|
||||||
if (questionNumber < 0) {
|
if (questionNumber < 0) {
|
||||||
|
@ -157,13 +175,18 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
questionNumber = params.questions.length - 1;
|
questionNumber = params.questions.length - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hide all questions
|
currentQuestion = questionNumber;
|
||||||
|
|
||||||
|
// Hide all questions
|
||||||
$('.question-container', $myDom).hide().eq(questionNumber).show();
|
$('.question-container', $myDom).hide().eq(questionNumber).show();
|
||||||
|
|
||||||
// Trigger resize on question in case the size of the QS has changed.
|
if (questionInstances[questionNumber]) {
|
||||||
var instance = questionInstances[questionNumber];
|
// Trigger resize on question in case the size of the QS has changed.
|
||||||
if (instance.$ !== undefined) {
|
var instance = questionInstances[questionNumber];
|
||||||
instance.trigger('resize');
|
instance.setActivityStarted();
|
||||||
|
if (instance.$ !== undefined) {
|
||||||
|
instance.trigger('resize');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update progress indicator
|
// Update progress indicator
|
||||||
|
@ -178,7 +201,6 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remember where we are
|
// Remember where we are
|
||||||
currentQuestion = questionNumber;
|
|
||||||
_updateButtons();
|
_updateButtons();
|
||||||
self.trigger('resize');
|
self.trigger('resize');
|
||||||
return currentQuestion;
|
return currentQuestion;
|
||||||
|
@ -250,7 +272,7 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
passed: success
|
passed: success
|
||||||
};
|
};
|
||||||
var displayResults = function () {
|
var displayResults = function () {
|
||||||
self.triggerXAPICompleted(self.getScore(), self.totalScore());
|
self.triggerXAPICompleted(self.getScore(), self.totalScore(), success);
|
||||||
|
|
||||||
if (!params.endGame.showResultPage) {
|
if (!params.endGame.showResultPage) {
|
||||||
self.trigger('h5pQuestionSetFinished', eventData);
|
self.trigger('h5pQuestionSetFinished', eventData);
|
||||||
|
@ -332,7 +354,9 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
|
|
||||||
// Function for attaching the multichoice to a DOM element.
|
// Function for attaching the multichoice to a DOM element.
|
||||||
this.attach = function (target) {
|
this.attach = function (target) {
|
||||||
this.setActivityStarted();
|
if (this.isRoot()) {
|
||||||
|
this.setActivityStarted();
|
||||||
|
}
|
||||||
if (typeof(target) === "string") {
|
if (typeof(target) === "string") {
|
||||||
$myDom = $('#' + target);
|
$myDom = $('#' + target);
|
||||||
}
|
}
|
||||||
|
@ -383,6 +407,7 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
|
|
||||||
// Add finish question set button
|
// Add finish question set button
|
||||||
question.addButton('finish', params.texts.finishButton, function () {
|
question.addButton('finish', params.texts.finishButton, function () {
|
||||||
|
_stopQuestion(currentQuestion);
|
||||||
_displayEndGame();
|
_displayEndGame();
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
|
@ -390,6 +415,7 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
|
|
||||||
// Add next question button
|
// Add next question button
|
||||||
question.addButton('next', '', function () {
|
question.addButton('next', '', function () {
|
||||||
|
_stopQuestion(currentQuestion);
|
||||||
_showQuestion(currentQuestion + 1);
|
_showQuestion(currentQuestion + 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -397,6 +423,7 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
// Add previous question button
|
// Add previous question button
|
||||||
if (questionInstances[0] !== question) {
|
if (questionInstances[0] !== question) {
|
||||||
question.addButton('prev', '', function () {
|
question.addButton('prev', '', function () {
|
||||||
|
_stopQuestion(currentQuestion);
|
||||||
_showQuestion(currentQuestion - 1);
|
_showQuestion(currentQuestion - 1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -413,6 +440,10 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
// An activity within this activity is not allowed to send completed events
|
// An activity within this activity is not allowed to send completed events
|
||||||
event.setVerb('answered');
|
event.setVerb('answered');
|
||||||
}
|
}
|
||||||
|
if (event.data.statement.context.extensions === undefined) {
|
||||||
|
event.data.statement.context.extensions = [];
|
||||||
|
}
|
||||||
|
event.data.statement.context.extensions['http://id.tincanapi.com/extension/ending-point'] = currentQuestion + 1;
|
||||||
});
|
});
|
||||||
if (question.getAnswerGiven()) {
|
if (question.getAnswerGiven()) {
|
||||||
$('.progress-dot:eq(' + i +')', $myDom).removeClass('unanswered').addClass('answered');
|
$('.progress-dot:eq(' + i +')', $myDom).removeClass('unanswered').addClass('answered');
|
||||||
|
@ -430,6 +461,7 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
|
|
||||||
// Set event listeners.
|
// Set event listeners.
|
||||||
$('.progress-dot', $myDom).click(function () {
|
$('.progress-dot', $myDom).click(function () {
|
||||||
|
_stopQuestion(currentQuestion);
|
||||||
_showQuestion($(this).index());
|
_showQuestion($(this).index());
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -535,6 +567,26 @@ H5P.QuestionSet = function (options, contentId) {
|
||||||
this.showSolutions = function() {
|
this.showSolutions = function() {
|
||||||
renderSolutions = true;
|
renderSolutions = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stop the given element's playback if any.
|
||||||
|
*
|
||||||
|
* @param {object} instance
|
||||||
|
*/
|
||||||
|
var pauseMedia = function (instance) {
|
||||||
|
try {
|
||||||
|
if (instance.pause !== undefined &&
|
||||||
|
(instance.pause instanceof Function ||
|
||||||
|
typeof instance.pause === 'function')) {
|
||||||
|
instance.pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err) {
|
||||||
|
// Prevent crashing, log error.
|
||||||
|
H5P.error(err);
|
||||||
|
}
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
H5P.QuestionSet.prototype = Object.create(H5P.EventDispatcher.prototype);
|
H5P.QuestionSet.prototype = Object.create(H5P.EventDispatcher.prototype);
|
||||||
H5P.QuestionSet.prototype.constructor = H5P.QuestionSet;
|
H5P.QuestionSet.prototype.constructor = H5P.QuestionSet;
|
||||||
|
|
|
@ -8,11 +8,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Titolo",
|
"label": "Titolo",
|
||||||
"description": "Questo titolo verr<EFBFBD> visualizzato sopra il testo introduttivo."
|
"description": "Questo titolo verrà visualizzato sopra il testo introduttivo."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Testo introduttivo",
|
"label": "Testo introduttivo",
|
||||||
"description": "Questo testo verr<EFBFBD> visualizzato prima dell'inizio del quiz."
|
"description": "Questo testo verrà visualizzato prima dell'inizio del quiz."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Testo pulsante Start"
|
"label": "Testo pulsante Start"
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Testo Avanzamento",
|
"label": "Testo Avanzamento",
|
||||||
"description": "esto utilizzato se il testo Avanzamento <EFBFBD> selezionato."
|
"description": "esto utilizzato se il testo Avanzamento è selezionato."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -85,27 +85,27 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Intestazione Feedback",
|
"label": "Intestazione Feedback",
|
||||||
"description": "Questa intestazione verr<EFBFBD> visualizzata alla fine del quiz, dopo che l'utente avr<76> risposto a tutte le domande."
|
"description": "Questa intestazione verrà visualizzata alla fine del quiz, dopo che l'utente avrà risposto a tutte le domande."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Testo visualizza punteggio",
|
"label": "Testo visualizza punteggio",
|
||||||
"description": "Testo utilizzato per visualizzare il punteggio Totale dell'utente. \"@score\" verr<EFBFBD> rimpiazzato dal punteggio calcolato, \"@total\" sar<61> rimpiazzato dal punteggio massimo possibile. "
|
"description": "Testo utilizzato per visualizzare il punteggio Totale dell'utente. \"@score\" verrà rimpiazzato dal punteggio calcolato, \"@total\" sarà rimpiazzato dal punteggio massimo possibile. "
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Messaggio di superamento quiz",
|
"label": "Messaggio di superamento quiz",
|
||||||
"description": "Questo testo verr<EFBFBD> visualizzato sopra il punteggio se l'utente ha superato con successo il quiz."
|
"description": "Questo testo verrà visualizzato sopra il punteggio se l'utente ha superato con successo il quiz."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Commento di superamento quiz",
|
"label": "Commento di superamento quiz",
|
||||||
"description": "Questo commento verr<EFBFBD> visualizzato dopo il punteggio se l'utente ha superato con successo il quiz."
|
"description": "Questo commento verrà visualizzato dopo il punteggio se l'utente ha superato con successo il quiz."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Titolo quiz fallito",
|
"label": "Titolo quiz fallito",
|
||||||
"description": "Questo testo verr<EFBFBD> visualizzato sopra il punteggio se l'utente non ha superato il quiz."
|
"description": "Questo testo verrà visualizzato sopra il punteggio se l'utente non ha superato il quiz."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Commento quiz fallito",
|
"label": "Commento quiz fallito",
|
||||||
"description": "Questo commento verr<EFBFBD> visualizzato dopo il punteggio se l'utente non ha superato il quiz."
|
"description": "Questo commento verrà visualizzato dopo il punteggio se l'utente non ha superato il quiz."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Etichetta pulsante Soluzione",
|
"label": "Etichetta pulsante Soluzione",
|
||||||
|
@ -129,11 +129,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Video di superamento quiz",
|
"label": "Video di superamento quiz",
|
||||||
"description": "Questo video verr<EFBFBD> visualizzato sopra il punteggio se l'utente ha superato con successo il quiz."
|
"description": "Questo video verrà visualizzato sopra il punteggio se l'utente ha superato con successo il quiz."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Video quiz fallito",
|
"label": "Video quiz fallito",
|
||||||
"description": "Questo testo verr<EFBFBD> visualizzato se l'utente non ha superato il quiz."
|
"description": "Questo testo verrà visualizzato se l'utente non ha superato il quiz."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -143,15 +143,15 @@
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"label": "Abilita ignora impostazioni per \"Mostra soluzione\" e \"Riprova\".",
|
"label": "Abilita ignora impostazioni per \"Mostra soluzione\" e \"Riprova\".",
|
||||||
"description": "Se questa opzione <EFBFBD> abilitata le proprie impostazioni per le domande saranno ignorate e verranno utilizzate le impostazioni seguenti."
|
"description": "Se questa opzione è abilitata le proprie impostazioni per le domande saranno ignorate e verranno utilizzate le impostazioni seguenti."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Abilita pulsanti \"Mostra soluzione\".",
|
"label": "Abilita pulsanti \"Mostra soluzione\".",
|
||||||
"description": "L'attivazione di questa opzione far<EFBFBD> in modo che le domande mostrino il tasto \"Mostra soluzione\"."
|
"description": "L'attivazione di questa opzione farà in modo che le domande mostrino il tasto \"Mostra soluzione\"."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"label": "Abilita \"Riprova\".",
|
"label": "Abilita \"Riprova\".",
|
||||||
"description": "L'attivazione di questa opzione far<EFBFBD> in modo che per l'utente sia abilitata l'opzione \"Riprova\"."
|
"description": "L'attivazione di questa opzione farà in modo che per l'utente sia abilitata l'opzione \"Riprova\"."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
"description": "Put together a set of different questions that has to be solved. (Quiz)",
|
"description": "Put together a set of different questions that has to be solved. (Quiz)",
|
||||||
"contentType": "question",
|
"contentType": "question",
|
||||||
"majorVersion": 1,
|
"majorVersion": 1,
|
||||||
"minorVersion": 5,
|
"minorVersion": 6,
|
||||||
"patchVersion": 0,
|
"patchVersion": 0,
|
||||||
"embedTypes": [
|
"embedTypes": [
|
||||||
"iframe"
|
"iframe"
|
||||||
|
|
|
@ -110,7 +110,7 @@
|
||||||
"label": "Question type",
|
"label": "Question type",
|
||||||
"description": "Library for this question.",
|
"description": "Library for this question.",
|
||||||
"options": [
|
"options": [
|
||||||
"H5P.MultiChoice 1.4",
|
"H5P.MultiChoice 1.5",
|
||||||
"H5P.DragQuestion 1.5",
|
"H5P.DragQuestion 1.5",
|
||||||
"H5P.Blanks 1.4",
|
"H5P.Blanks 1.4",
|
||||||
"H5P.MarkTheWords 1.4",
|
"H5P.MarkTheWords 1.4",
|
||||||
|
|
Loading…
Reference in New Issue