[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