MDL-76849 qtype_multichoice: Include question number in answer fields

* Improve accessibility as well by grouping the radio buttons/checkboxes
in a fieldset.
This commit is contained in:
Jun Pataleta 2023-02-17 11:58:06 +08:00
parent 2ad0871a82
commit fbffd9b148
2 changed files with 13 additions and 5 deletions

View File

@ -149,10 +149,16 @@ abstract class qtype_multichoice_renderer_base extends qtype_with_combined_feedb
$result .= html_writer::tag('div', $question->format_questiontext($qa),
array('class' => 'qtext'));
$result .= html_writer::start_tag('div', array('class' => 'ablock no-overflow visual-scroll-x'));
$questionnumber = $options->add_question_identifier_to_label($this->prompt(), true, true);
$result .= html_writer::start_tag('fieldset', array('class' => 'ablock no-overflow visual-scroll-x'));
$legendclass = 'sr-only';
if ($question->showstandardinstruction == 1) {
$result .= html_writer::tag('div', $this->prompt(), array('class' => 'prompt'));
$legendclass = '';
}
$legendattrs = [
'class' => 'prompt h6 font-weight-normal ' . $legendclass,
];
$result .= html_writer::tag('legend', $questionnumber, $legendattrs);
$result .= html_writer::start_tag('div', array('class' => 'answer'));
foreach ($radiobuttons as $key => $radio) {
@ -166,7 +172,7 @@ abstract class qtype_multichoice_renderer_base extends qtype_with_combined_feedb
[$qa->get_outer_question_div_unique_id()]);
$result .= $this->after_choices($qa, $options);
$result .= html_writer::end_tag('div'); // Ablock.
$result .= html_writer::end_tag('fieldset'); // Ablock.
if ($qa->get_state() == question_state::$invalid) {
$result .= html_writer::nonempty_tag('div',

View File

@ -302,8 +302,10 @@ class walkthrough_test extends \qbehaviour_walkthrough_test_base {
$this->render();
// Check for 'Show standard instruction'.
$standardinstruction = get_string('selectmulti', 'qtype_multichoice');
$this->assertStringNotContainsString($standardinstruction, $this->currentoutput);
$standardinstruction = \html_writer::tag('legend', get_string('selectmulti', 'qtype_multichoice'), [
'class' => 'prompt h6 font-weight-normal sr-only'
]);
$this->assertStringContainsString($standardinstruction, $this->currentoutput);
}
}