[LON-CAPA-cvs] cvs: loncom /interface loncommon.pm lonpickcourse.pm

raeburn raeburn at source.lon-capa.org
Wed Feb 4 12:52:06 EST 2026


raeburn		Wed Feb  4 17:52:06 2026 EDT

  Modified files:              
    /loncom/interface	loncommon.pm lonpickcourse.pm 
  Log:
  - WCAG 2 compliance
    - Include landmark for page's main content to support "Skip to main content"
    - Include labels for form elements 
    - Group radio buttons in fieldset with legend for screenreaders  
    - Sequential headings
  - Satisfy w3c validation
  
  
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1505 loncom/interface/loncommon.pm:1.1506
--- loncom/interface/loncommon.pm:1.1505	Wed Jan 28 17:46:10 2026
+++ loncom/interface/loncommon.pm	Wed Feb  4 17:52:06 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1505 2026/01/28 17:46:10 raeburn Exp $
+# $Id: loncommon.pm,v 1.1506 2026/02/04 17:52:06 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -3166,15 +3166,16 @@
 
 =pod
 
-=item * &home_server_form_item($domain,$name,$defaultflag)
+=item * &home_server_form_item($domain,$name,$defaultflag,$hide,$id)
 
-input: 4 arguments (two required, two optional) - 
+input: 5 arguments (two required, three optional) - 
     $domain - domain of new user
     $name - name of form element
     $default - Value of 'default' causes a default item to be first 
                             option, and selected by default. 
     $hide - Value of 'hide' causes hiding of the name of the server, 
                             if 1 server found, or default, if 0 found.
+    $id - Optional id of form element
 output: returns 2 items: 
 (a) form element which contains either:
    (i) <select name="$name">
@@ -3193,12 +3194,16 @@
 
 #-------------------------------------------
 sub home_server_form_item {
-    my ($domain,$name,$default,$hide) = @_;
+    my ($domain,$name,$default,$hide,$id) = @_;
     my %servers = &Apache::lonnet::get_servers($domain,'library');
     my $result;
     my $numlib = keys(%servers);
     if ($numlib > 1) {
-        $result .= '<select name="'.$name.'" />'."\n";
+        $result .= '<select name="'.$name.'"';
+        if ($id ne '') {
+            $result .= ' id="'.$id.'"';
+        }
+        $result .= ' />'."\n";
         if ($default) {
             $result .= '<option value="default" selected="selected">'.&mt('default').
                        '</option>'."\n";
@@ -19215,7 +19220,10 @@
     }
     if ($cloneableonlyform) {
         $output .= &Apache::lonhtmlcommon::row_title($cloneabletitle).
-                   $cloneableonlyform.&Apache::lonhtmlcommon::row_closure();
+                   '<fieldset class="LC_borderless"><legend class="LC_visually_hidden">'.
+                   $cloneabletitle.'</legend>'.
+                   $cloneableonlyform.'</fieldset>'.
+                   &Apache::lonhtmlcommon::row_closure();
     }
     if (exists($filter->{'descriptfilter'})) {
         $output .= &Apache::lonhtmlcommon::row_title('<label for="descriptfilter">'.$lt{'cde'}.'</label>')
Index: loncom/interface/lonpickcourse.pm
diff -u loncom/interface/lonpickcourse.pm:1.127 loncom/interface/lonpickcourse.pm:1.128
--- loncom/interface/lonpickcourse.pm:1.127	Sat Apr  8 14:28:56 2017
+++ loncom/interface/lonpickcourse.pm	Wed Feb  4 17:52:06 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Pick a course
 #
-# $Id: lonpickcourse.pm,v 1.127 2017/04/08 14:28:56 raeburn Exp $
+# $Id: lonpickcourse.pm,v 1.128 2026/02/04 17:52:06 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -37,6 +37,7 @@
 use Apache::lonlocal;
 use Apache::longroup;
 use LONCAPA qw(:DEFAULT :match);
+use HTML::Entities();
 use JSON::DWIW;
 
 sub handler {
@@ -167,7 +168,9 @@
     my $js = &Apache::loncommon::js_changer();
     $r->print(&Apache::loncommon::start_page($title,$js,
 					     {'add_entries' => \%loaditem,
-					      'no_nav_bar'  => 1, }));
+					      'no_nav_bar'  => 1, }).
+              '<div class="LC_landmark" role="main" id="LC_main_content">'.
+              '<h1 class="LC_heading_1">'.$title.'</h1>');
 
     if ($env{'form.form'} eq 'portform') {
         $lastaction = 'document.courselist.submit()';
@@ -263,7 +266,8 @@
                 $clonetext = '<input type="hidden" name="cloner" value="'.$env{'form.cloner'}.'" />'."\n";
             }
             if ($coord_cloneable) {
-                $clonetext .= '<input type="hidden" name="cc_clone" value="'.$coord_cloneable.'" />';
+                $clonetext .= '<input type="hidden" name="cc_clone" value="'.
+                              &HTML::Entities::encode($coord_cloneable,'"<>&').'" />';
             }
             if ($crscode ne '') {
                 $clonetext .= '<input type="hidden" name="crscode" value="'.$crscode.'" />';
@@ -317,7 +321,7 @@
                                      $clonerudom,$crsdom,$crscode,%courses);
         }
     }
-    $r->print(&Apache::loncommon::end_page());
+    $r->print('</div>'.&Apache::loncommon::end_page());
     return OK;
 }
 




More information about the LON-CAPA-cvs mailing list