Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions macros/core/PGbasicmacros.pl
Original file line number Diff line number Diff line change
Expand Up @@ -521,12 +521,13 @@ sub NAMED_ANS_RADIO_BUTTONS {
##############################################

sub generate_aria_label {
my $name = shift;
my ($name, $suffix) = @_;
my $label = '';

# if we dont have an AnSwEr type name then we do the best we can
if ($name !~ /AnSwEr\d+/) {
return maketext('answer [_1] ', $name);
$label = maketext('answer [_1] ', $name);
return $suffix ? "$label$suffix " : $label;
}

# check for quiz prefix
Expand All @@ -552,7 +553,7 @@ sub generate_aria_label {
$label .= maketext('row [_1] column [_2] ', $1 + 1, $2 + 1);
}

return $label;
return $suffix ? "$label$suffix " : $label;
}

##############################################
Expand Down
81 changes: 48 additions & 33 deletions macros/parsers/parserMultiAnswer.pl
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ sub new {
singleResult => 0,
namedRules => 0,
cmpOpts => undef,
ansLabels => [],
checkTypes => 1,
allowBlankAnswers => 0,
tex_separator => $separator . '\,',
Expand Down Expand Up @@ -416,33 +417,38 @@ sub NEW_NAME {
main::RECORD_FORM_LABEL(shift);
}

sub generate_aria_label {
my ($self, $name, $part) = @_;
return main::generate_aria_label($self->{singleResult} ? $answerPrefix . $name . '_' . $part : $name,
$self->{ansLabels}[$part]);
}

#
# Produce an answer rule for the next item in the list,
# taking care to use names or extensions as needed
# by the settings of the MultiAnswer.
#
sub ans_rule {
my $self = shift;
my $size = shift || 20;
my $data = $self->{data}[ $self->{part} ];
my $name = $self->ANS_NAME($self->{part}++);
if ($self->{singleResult} && $self->{part} == 1) {
my $label = main::generate_aria_label($answerPrefix . $name . "_0");
main::RECORD_IMPLICIT_ANS_NAME($name) unless $self->{namedRules};
return $data->named_ans_rule($name, $size, @_, aria_label => $label);
}
if ($self->{singleResult} && $self->{part} > 1) {
my $extension_ans_rule = $data->named_ans_rule_extension(
my $self = shift;
my $size = shift || 20;
my $part = $self->{part};
my $data = $self->{data}[$part];
my $name = $self->ANS_NAME($self->{part}++);
my $label = $self->generate_aria_label($name, $part);
Comment on lines +434 to +437

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that the initial value of $self->{part} is being saved to a local variable, this should be

Suggested change
my $part = $self->{part};
my $data = $self->{data}[$part];
my $name = $self->ANS_NAME($self->{part}++);
my $label = $self->generate_aria_label($name, $part);
my $part = $self->{part}++;
my $data = $self->{data}[$part];
my $name = $self->ANS_NAME($part);
my $label = $self->generate_aria_label($name, $part);

So the current value of $self->{part} is saved to $part and then $self->{part} is incremented and not used again in the method.

The same change should be made in the ans_array method.

if ($self->{singleResult}) {
if ($part == 0) {
main::RECORD_IMPLICIT_ANS_NAME($name) unless $self->{namedRules};
return $data->named_ans_rule($name, $size, @_, aria_label => $label);
}
return $data->named_ans_rule_extension(
$name, $size,
answer_group_name => $self->{answerNames}{0},
@_
@_,
aria_label => $label
);
# warn "extension rule created: $extension_ans_rule for ", ref($data);
return $extension_ans_rule;
} else {
main::RECORD_IMPLICIT_ANS_NAME($name) unless $self->{namedRules};
return $data->named_ans_rule($name, $size, @_);
}
main::RECORD_IMPLICIT_ANS_NAME($name) unless $self->{namedRules};
return $data->named_ans_rule($name, $size, @_, aria_label => $label);
}

#
Expand All @@ -454,29 +460,30 @@ sub ans_array {
my $self = shift;
my $size = shift || 5;
my $HTML;
my $data = $self->{data}[ $self->{part} ];
my $name = $self->ANS_NAME($self->{part}++);
if ($self->{singleResult} && $self->{part} == 1) {
my $label = main::generate_aria_label($answerPrefix . $name . "_0");
main::RECORD_IMPLICIT_ANS_NAME($name) unless $self->{namedRules};
return $data->named_ans_array(
$name, $size,
answer_group_name => $self->{answerNames}{0},
@_, aria_label => $label
);
}
if ($self->{singleResult} && $self->{part} > 1) {
my $part = $self->{part};
my $data = $self->{data}[$part];
my $name = $self->ANS_NAME($self->{part}++);
my $label = $self->generate_aria_label($name, $part);
if ($self->{singleResult}) {
if ($part == 0) {
main::RECORD_IMPLICIT_ANS_NAME($name) unless $self->{namedRules};
return $data->named_ans_array(
$name, $size,
answer_group_name => $self->{answerNames}{0},
@_, aria_label => $label
);
}
$HTML = $data->named_ans_array_extension(
$self->NEW_NAME($name), $size,
answer_group_name => $self->{answerNames}{0},
@_
@_,
aria_label => $label
);
# warn "array extension rule created: $HTML for ", ref($data);
} else {
main::RECORD_IMPLICIT_ANS_NAME($name) unless $self->{namedRules};
$HTML = $data->named_ans_array($name, $size, @_);
$HTML = $data->named_ans_array($name, $size, @_, aria_label => $label);
}
$self->{cmp}[ $self->{part} - 1 ] = $data->cmp(@ans_defaults);
$self->{cmp}[$part] = $data->cmp(@ans_defaults);
return $HTML;
}

Expand Down Expand Up @@ -566,6 +573,14 @@ =head2 allowBlankAnswers
Indicates whether to remove the blank-check prefilter from the answer checkers used for type checking
the student's answers. Default: 0.

=head2 ansLabels

An array reference of labels to be added to the assoicated answer box. By default answer boxes are

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

assoicated -> associated

labeled (C<aria-label>) with "answer X" or "answer X part Y" if C<singleResult> is used. These labels
are appeneded to the default label, e.g. "answer X part Y custom label", and can be used to improve

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

appeneded -> appended

the accessiblity. For example stating the side of the equation or part of an integral the answer

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

accessiblity -> accessibility

box is used for.

=head2 format

An sprintf-style string used to format the students' answers for the results table when C<singleResult>
Expand Down