[LON-CAPA-cvs] cvs: loncom /interface lonfeedback.pm
raeburn
raeburn at source.lon-capa.org
Fri Jan 30 13:20:35 EST 2026
raeburn Fri Jan 30 18:20:35 2026 EDT
Modified files:
/loncom/interface lonfeedback.pm
Log:
- WCAG 2.2 compliance
- Include landmark for page's main content to support "Skip to main content"
- Include labels for form elements
- Group form elements in fieldset with legend for screenreaders
- Include empty alt tag for icons
- Satisfy minimum size for touch targets
Index: loncom/interface/lonfeedback.pm
diff -u loncom/interface/lonfeedback.pm:1.393 loncom/interface/lonfeedback.pm:1.394
--- loncom/interface/lonfeedback.pm:1.393 Fri Sep 15 23:00:16 2023
+++ loncom/interface/lonfeedback.pm Fri Jan 30 18:20:34 2026
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Feedback
#
-# $Id: lonfeedback.pm,v 1.393 2023/09/15 23:00:16 raeburn Exp $
+# $Id: lonfeedback.pm,v 1.394 2026/01/30 18:20:34 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -989,6 +989,7 @@
'podi' => 'Post Discussion',
'poan' => 'Post Anonymous Discussion',
'newa' => 'New attachments',
+ 'poco' => 'Post Content',
);
if ($crstype eq 'Community') {
$lt{'note'} = &mt('Note: in anonymous discussion, your name is visible only to community facilitators');
@@ -1014,9 +1015,9 @@
<input type="hidden" name="sendit" value="true" />
<input type="hidden" name="timestamp" value="$now" />
<a name="newpost"></a>
-<font size="1">$lt{'note'}</font><br />
-<b>$lt{'title'}:</b> <input type="text" name="subject" value="$subject" size="30" /><br />
-<textarea name="comment" cols="80" rows="14" id="comment" $textareaclass>$comment</textarea>
+<span class="LC_fontsize_medium">$lt{'note'}</span><br />
+<label><b>$lt{'title'}:</b> <input type="text" name="subject" value="$subject" size="30" /></label><br />
+<textarea name="comment" cols="80" rows="14" id="comment" $textareaclass aria-label="$lt{'poco'}">$comment</textarea>
ENDDISCUSS
if ($env{'form.origpage'}) {
$postingform .= '<input type="hidden" name="origpage" value="'.
@@ -1057,7 +1058,9 @@
}
}
$postingform .= $newattachmsg;
- $postingform .= &generate_preview_button();
+ $postingform .= '<div class="LC_touch_target">'.
+ &generate_preview_button().
+ '</div>';
return $postingform;
}
@@ -2034,7 +2037,8 @@
}
$r->print(<<END);
$start_page
-<h1>$lt{'myqu'}</h1>
+<div class="LC_landmark" role="main" id="LC_main_content">
+<h1 class="LC_heading_1">$lt{'myqu'}</h1>
$header
<form action="/adm/feedback" method="post" name="mailform"
enctype="multipart/form-data">
@@ -2062,18 +2066,19 @@
<p>
$textareaheader
</p>
-<p>
+<div>
$latexHelp
-</p>
-<p>
+</div>
END
- $r->print(&Apache::lonhtmlcommon::row_title(&mt('Subject')));
- $r->print('<input type="text" name="subject" size="30" value="'.
- $subject.'" /></p>');
+ $r->print(&Apache::lonhtmlcommon::row_title('<label for="subject">'.
+ &mt('Subject').'</label>'));
+ $r->print('<input type="text" name="subject" id="subject" size="30" value="'.
+ $subject.'" />');
$r->print(&Apache::lonhtmlcommon::row_closure());
- $r->print(&Apache::lonhtmlcommon::row_title(&mt('Message')));
+ $r->print(&Apache::lonhtmlcommon::row_title('<label for="comment">'.
+ &mt('Message').'</label>'));
$r->print('<textarea name="comment" id="comment" cols="55" rows="10" '.
$textareaclass.'>'.$comment.
'</textarea>');
@@ -2101,7 +2106,7 @@
} else {
$r->print(<<END);
<p>
-$lt{'atta'} $attachmaxtext: <input type="file" name="attachment" class="LC_flUpload" />
+<label for="attachment">$lt{'atta'}</label> $attachmaxtext: <input type="file" name="attachment" class="LC_flUpload" id="attachment" />
<input type="hidden" id="LC_free_space" value="131072" />
</p>
END
@@ -2153,9 +2158,10 @@
}
$r->print(&generate_attachments_button($postidx,$attachnum,$ressymb,$now,\@currnewattach,\@currdelold,$numoldver,'',$blockblog));
}
- $r->print(&generate_preview_button().
+ $r->print('<div class="LC_touch_target">'.
+ &generate_preview_button().'</div>'.
+ '</div>'.
&Apache::loncommon::end_page());
-
}
sub print_display_options {
@@ -3069,22 +3075,24 @@
}
if (keys(%discoptions)) {
if ($discoptions{'nonanon'}) {
- $discussoptions='<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.
+ $discussoptions='<div class_"LC_touch_target">'.
+ '<label><input type="radio" name="discuss" value="nonanon" checked="checked" /> '.
$contribdisc.
- '</label>';
+ '</label></div>';
}
if ($discoptions{'anon'}) {
- $discussoptions .= '<br /><label><input type="radio" name="discuss" value="anon"'.$checkradio.' /> '.
+ $discussoptions .= '<div class_"LC_touch_target">'.
+ '<label><input type="radio" name="discuss" value="anon"'.$checkradio.' /> '.
$anoncontrib.
' <i>('.$namevis.')</i></label> '.
- '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a>';
+ '<a href="/adm/preferences?action=changescreenname">'.&mt('Change Screenname').'</a></div>';
}
if (!$blockblog) {
$discussoptions.= &add_blog_checkbox($crstype);
}
}
if ($msgoptions) {
- $msgoptions='<tr><th><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').'" />'
+ $msgoptions='<tr><th><img src="'.&Apache::loncommon::lonhttpdurl('/res/adm/pages/feedback.png').'" alt="" />'
.'<br />'.&mt('Send Feedback').'<br />'.&Apache::lonhtmlcommon::coursepreflink(&mt('Feedback Settings'),'feedback').'</th>'.
'<td>'.$msgoptions.'</td></tr>';
}
@@ -3093,7 +3101,10 @@
.'<br />'.&mt('Discussion Contributions').'<br />'.&Apache::lonhtmlcommon::coursepreflink(&mt('Discussion Settings'),'discussion').'</th>'.
'<td>'.$discussoptions.'</td></tr>';
}
- return &Apache::loncommon::start_data_table().$msgoptions.$discussoptions.&Apache::loncommon::end_data_table();
+ return '<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.
+ &mt('Select Destination').'</legend>'.
+ &Apache::loncommon::start_data_table().$msgoptions.$discussoptions.&Apache::loncommon::end_data_table().
+ '</fieldset>';
}
sub resource_output {
@@ -3566,7 +3577,8 @@
my $end_page = &Apache::loncommon::end_page();
$r->print($start_page
- .'<h1>'.&mt('Preview').'</h1>'
+ .'<div class="LC_landmark" role="main" id="LC_main_content">'
+ .'<h1 class="LC_heading_1">'.&mt('Preview').'</h1>'
.&Apache::lonhtmlcommon::start_pick_box()
.&Apache::lonhtmlcommon::row_title(&mt('Subject'))
.$subject
@@ -3575,6 +3587,7 @@
.$message
.&Apache::lonhtmlcommon::row_closure(1)
.&Apache::lonhtmlcommon::end_pick_box()
+ .'</div>'
.$end_page
);
}
@@ -3632,7 +3645,6 @@
unless ($fieldname) { $fieldname='comment'; }
my $pre=&mt("Show Preview and Check Spelling");
return(<<ENDPREVIEW);
-<br />
<form name="preview" action="/adm/feedback?preview=1" method="post" target="preview">
<input type="hidden" name="subject" />
<input type="hidden" name="comment" />
@@ -3957,14 +3969,14 @@
document.attachment.blog.value = 0;
}
}
-</script><br />
+</script><div class="LC_touch_target">
<label><input type="checkbox" name="blog" '.$checkstatus.' /> ';
if ($crstype eq 'Community') {
$output .= &mt('Add to my public community blog');
} else {
$output .= &mt('Add to my public course blog');
}
- $output .= '</label><br />'."\n";
+ $output .= '</label></div>'."\n";
return $output;
}
More information about the LON-CAPA-cvs
mailing list