Skip to content

Commit 2c3e980

Browse files
committed
MOBILE-4736 question: Add partial to match and multichoice
1 parent ffb8642 commit 2c3e980

File tree

3 files changed

+42
-20
lines changed

3 files changed

+42
-20
lines changed

src/addons/qtype/match/component/addon-qtype-match.html

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
<ion-item class="ion-text-wrap question-rows" *ngFor="let row of question.rows">
99

1010
<ion-select id="{{row.id}}" [name]="row.name" [(ngModel)]="row.selected" interface="action-sheet" [disabled]="row.disabled"
11-
[cancelText]="'core.cancel' | translate"
12-
[ngClass]="{'addon-qtype-match-correct': row.isCorrect === 1,'addon-qtype-match-incorrect': row.isCorrect === 0}">
11+
[cancelText]="'core.cancel' | translate" [class.addon-qtype-match-correct]="row.correctClass === 'correct'"
12+
[class.addon-qtype-match-incorrect]="row.correctClass === 'incorrect'"
13+
[class.addon-qtype-match-partiallycorrect]="row.correctClass === 'partiallycorrect'">
1314
<div slot="label" class="flex-row ion-text-wrap">
1415
<div>
1516
<core-format-text [component]="component" [componentId]="componentId" [text]="row.text" [contextLevel]="contextLevel"
@@ -19,10 +20,14 @@
1920
{{ row.accessibilityLabel }}
2021
</label>
2122
</div>
22-
<ion-icon *ngIf="row.isCorrect === 1" class="core-correct-icon" [name]="correctIcon" color="success" slot="start"
23+
24+
<ion-icon *ngIf="row.correctClass === 'correct'" class="core-correct-icon" [name]="correctIcon" color="success" slot="start"
2325
[attr.aria-label]="'core.question.correct' | translate" />
24-
<ion-icon *ngIf="row.isCorrect === 0" class="core-correct-icon" [name]="incorrectIcon" color="danger" slot="start"
26+
<ion-icon *ngIf="row.correctClass === 'partiallycorrect'" class="core-correct-icon" [name]="partialCorrectIcon" color="warning"
27+
slot="start" [attr.aria-label]="'core.question.partiallycorrect' | translate" />
28+
<ion-icon *ngIf="row.correctClass === 'incorrect'" class="core-correct-icon" [name]="incorrectIcon" color="danger" slot="start"
2529
[attr.aria-label]="'core.question.incorrect' | translate" />
30+
2631
<ion-select-option *ngFor="let option of row.options" [value]="option.value">
2732
{{option.label}}
2833
</ion-select-option>

src/addons/qtype/multichoice/component/addon-qtype-multichoice.html

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,19 @@
1818
<ion-item class="ion-text-wrap answer" *ngFor="let option of question.options">
1919
<div class="flex-column">
2020
<ion-checkbox [attr.name]="option.name" [(ngModel)]="option.checked" [disabled]="option.disabled"
21-
[color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
21+
[color]="option.correctColor">
2222
<div class="flex-grow ion-text-wrap">
2323
<div [class]="option.class">
2424
<core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
2525
[contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
2626
</div>
2727
</div>
28-
<ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" [name]="correctIcon" color="success"
28+
29+
<ion-icon *ngIf="option.correctClass === 'correct'" class="core-correct-icon" [name]="correctIcon" color="success"
2930
[attr.aria-label]="'core.question.correct' | translate" />
30-
<ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" [name]="incorrectIcon" color="danger"
31+
<ion-icon *ngIf="option.correctClass === 'partiallycorrect'" class="core-correct-icon" [name]="partialCorrectIcon"
32+
color="warning" [attr.aria-label]="'core.question.partiallycorrect' | translate" />
33+
<ion-icon *ngIf="option.correctClass === 'incorrect'" class="core-correct-icon" [name]="incorrectIcon" color="danger"
3134
[attr.aria-label]="'core.question.incorrect' | translate" />
3235
</ion-checkbox>
3336
<div *ngIf="option.feedback" class="specificfeedback">
@@ -45,17 +48,19 @@
4548
<ion-radio-group *ngIf="!question.multi" [(ngModel)]="question.singleChoiceModel" [name]="question.optionsName">
4649
<ion-item class="ion-text-wrap answer" *ngFor="let option of question.options">
4750
<div class="flex-column">
48-
<ion-radio [value]="option.value" [disabled]="option.disabled"
49-
[color]='(option.isCorrect === 1 ? "success": "") + (option.isCorrect === 0 ? "danger": "")'>
51+
<ion-radio [value]="option.value" [disabled]="option.disabled" [color]="option.correctColor">
5052
<div class="flex-grow ion-text-wrap">
5153
<div [class]="option.class">
5254
<core-format-text [component]="component" [componentId]="componentId" [text]="option.text"
5355
[contextLevel]="contextLevel" [contextInstanceId]="contextInstanceId" [courseId]="courseId" />
5456
</div>
5557
</div>
56-
<ion-icon *ngIf="option.isCorrect === 1" class="core-correct-icon" [name]="correctIcon" color="success"
58+
59+
<ion-icon *ngIf="option.correctClass === 'correct'" class="core-correct-icon" [name]="correctIcon" color="success"
5760
[attr.aria-label]="'core.question.correct' | translate" />
58-
<ion-icon *ngIf="option.isCorrect === 0" class="core-correct-icon" [name]="incorrectIcon" color="danger"
61+
<ion-icon *ngIf="option.correctClass === 'partiallycorrect'" class="core-correct-icon" [name]="partialCorrectIcon"
62+
color="warning" [attr.aria-label]="'core.question.partiallycorrect' | translate" />
63+
<ion-icon *ngIf="option.correctClass === 'incorrect'" class="core-correct-icon" [name]="incorrectIcon" color="danger"
5964
[attr.aria-label]="'core.question.incorrect' | translate" />
6065
</ion-radio>
6166

src/core/features/question/classes/base-question-component.ts

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -589,10 +589,15 @@ export class CoreQuestionBaseComponent<T extends AddonModQuizQuestion = AddonMod
589589
};
590590

591591
// Check if answer is correct.
592-
if (columns[1].className.indexOf('incorrect') >= 0) {
593-
rowModel.isCorrect = 0;
592+
if (columns[1].className.indexOf('partiallycorrect') >= 0) {
593+
rowModel.correctClass = 'partiallycorrect';
594+
rowModel.correctColor = CoreIonicColorNames.WARNING;
595+
} else if (columns[1].className.indexOf('incorrect') >= 0) {
596+
rowModel.correctClass = 'incorrect';
597+
rowModel.correctColor = CoreIonicColorNames.DANGER;
594598
} else if (columns[1].className.indexOf('correct') >= 0) {
595-
rowModel.isCorrect = 1;
599+
rowModel.correctClass = 'correct';
600+
rowModel.correctColor = CoreIonicColorNames.SUCCESS;
596601
}
597602

598603
// Treat each option.
@@ -710,10 +715,15 @@ export class CoreQuestionBaseComponent<T extends AddonModQuizQuestion = AddonMod
710715

711716
if (parent) {
712717
// Check if answer is correct.
713-
if (parent && parent.className.indexOf('incorrect') >= 0) {
714-
option.isCorrect = 0;
715-
} else if (parent && parent.className.indexOf('correct') >= 0) {
716-
option.isCorrect = 1;
718+
if (parent.className.indexOf('partiallycorrect') >= 0) {
719+
option.correctClass = 'partiallycorrect';
720+
option.correctColor = CoreIonicColorNames.WARNING;
721+
} else if (parent.className.indexOf('incorrect') >= 0) {
722+
option.correctClass = 'incorrect';
723+
option.correctColor = CoreIonicColorNames.DANGER;
724+
} else if (parent.className.indexOf('correct') >= 0) {
725+
option.correctClass = 'correct';
726+
option.correctColor = CoreIonicColorNames.SUCCESS;
717727
}
718728

719729
// Search the feedback.
@@ -796,7 +806,8 @@ export type AddonModQuizQuestionRadioOption = {
796806
disabled: boolean;
797807
checked: boolean;
798808
text?: string;
799-
isCorrect?: number;
809+
correctClass?: 'correct' | 'incorrect' | 'partiallycorrect';
810+
correctColor?: CoreIonicColorNames;
800811
feedback?: string;
801812
};
802813

@@ -868,7 +879,8 @@ export type AddonModQuizMatchQuestion = AddonModQuizQuestionBasicData & {
868879
*/
869880
export type AddonModQuizQuestionMatchSelect = AddonModQuizQuestionSelect & {
870881
text: string;
871-
isCorrect?: number;
882+
correctClass?: 'correct' | 'incorrect' | 'partiallycorrect';
883+
correctColor?: CoreIonicColorNames;
872884
};
873885

874886
/**

0 commit comments

Comments
 (0)