Score total par page
class PageScoreTotalWidget extends NGSWidget {
/* Modèle HTML qui sera généré avant la création de la classe
Tous les id et noms de classes CSS seront suffixés par l'uniqueId
fourni lors de la création du widget */
static get template() {
return ` `; // Nous n'avons pas besoin d'interface utilisateur
}
/* Style qui sera assigné à ce widget, notez que tous
les noms de classes des éléments seront scindés en scope avec l'identifiant unique du widget */
static get style() {
return ``
}
/* Est-ce que ce widget prend en charge le label, le label est le texte qu'un administrateur de
formulaire peut saisir via le concepteur de formulaire et peut être injecté dans
le modèle en utilisant la balise <ngs-label></ngs-label>
*/
static get hasLabel() {
return false; // Nous n'avons pas besoin d'afficher un label car nous n'avons pas d'interface utilisateur
}
/* Permet de définir si la réponse est requise ou non
depuis la page de paramètres de la réponse pour rendre
rendre la réponse du widget obligatoire pendant le Sondage */
static get required() {
return true;
}
/* Propriétés qui peuvent être définies depuis le concepteur de formulaire pour chaque
réponse utilisant ce widget comme type de réponse dans les propriétés de réponse */
static get propertiesDef() {
return [];
}
init() {
// Retourne l'id de la page sur laquelle le widget a été instancié
currentPageId = this.getAnswerPage(this.answerContext.answer);
// S'abonner à l'observable des réponses du répondant
// cela nous permettra d'obtenir les réponses du répondant
// dès que de nouvelles réponses auront été saisies ou modifiées
this.getRespondentAnswers$(respondentAnswers => {
// Calculer le score et stocker le résultat
// en tant que réponse du répondant dans le sondage actuel
this.setAnswer(getPageTotalScore(respondentAnswers))
});
}
// Retourne le score total basé
// sur les réponses du répondant et
// la page de ce widget
getPageTotalScore(respondentAnswers) {
var totalScore = 0;
for (var i=0;i<respondentAnswers.length;i++) {
// Cette réponse du répondant fait‑elle partie de la page actuelle du widget ?
if (this.getAnswerPage(this.answers.find(a => a.id == respondentAnswers[i].answerId)) == currentPageId) {
// Récupérer la réponse du sondage
var answer = this.answers
.find(a => a.id == respondentAnswers[i].answerId);
// La réponse a‑t‑elle un score à calculer ?
if (answer && answer.scorePoint != null) {
// Recalculer le score de la page
totalScore+=answer.scorePoint;
}
}
}
return totalScore;
}
// Rechercher l'id de la page de la réponse
getAnswerPage(answer) {
if (!answer) return;
var question = this.questions.find(q => q.id == answer.questionId);
return question ? question.pageId : null;
}
isValid() {
return null;
}
}
Mis à jour
Ce contenu vous a-t-il été utile ?