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

raeburn raeburn at source.lon-capa.org
Tue May 5 21:23:15 EDT 2026


raeburn		Wed May  6 01:23:15 2026 EDT

  Modified files:              
    /loncom/interface	lonpreferences.pm 
  Log:
  - WCAG 2.2 compliance for Authoring Space Settings page.
    - Include landmark for page's main content to support "Skip to main content".
    - Sequential headings.
    - Include labels for form elements.
    - Group form elements in fieldset with legend for screenreaders.
  
  
Index: loncom/interface/lonpreferences.pm
diff -u loncom/interface/lonpreferences.pm:1.254 loncom/interface/lonpreferences.pm:1.255
--- loncom/interface/lonpreferences.pm:1.254	Sat Apr 18 06:54:54 2026
+++ loncom/interface/lonpreferences.pm	Wed May  6 01:23:15 2026
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Preferences
 #
-# $Id: lonpreferences.pm,v 1.254 2026/04/18 06:54:54 raeburn Exp $
+# $Id: lonpreferences.pm,v 1.255 2026/05/06 01:23:15 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -790,6 +790,7 @@
     my $change=&mt('Save');
     my $returnurl = &HTML::Entities::encode($env{'form.returnurl'},'"<>&\'');
     $r->print(<<ENDSCREEN);
+<div class="LC_landmark" role="main" id="LC_main_content">
 <form name="prefs" action="/adm/preferences" method="post">
 <input type="hidden" name="returnurl" value="$returnurl" />
 <input type="hidden" name="action" value="verify_and_change_domcoord" />
@@ -800,6 +801,7 @@
 <input type="submit" value="$change" />
 </div>
 </form>
+</div>
 ENDSCREEN
 }
 
@@ -2170,7 +2172,8 @@
             $args = { 'add_entries' => { 'onload' => $onload } };
         }
         $r->print(Apache::loncommon::start_page('Authoring Space Settings',$js,$args));
-        $r->print(Apache::lonhtmlcommon::breadcrumbs('Authoring Space Settings'));
+        $r->print(Apache::lonhtmlcommon::breadcrumbs('Authoring Space Settings').
+                  "\n".'<div class="LC_landmark" role="main" id="LC_main_content">'."\n");
         if ($showdomdefs) {
             my %userenv = &Apache::lonnet::get('environment',\@items);
             my %domdefs = &Apache::lonnet::get_domain_defaults($domain);
@@ -2182,13 +2185,13 @@
             );
             my %lt = &authoring_settings_text();
             my %titles = &authoring_settings_titles();
-            $r->print("<h3>$lt{'auss'}</h3>".
+            $r->print("<h2 class=\"LC_heading_2\">$lt{'auss'}</h2>".
                       '<form name="prefs" action="/adm/preferences" method="post">'."\n".
                       '<input type="submit" value="'.$lt{'save'}.'" /><br /><hr />'."\n".
                       '<input type="hidden" name="returnurl" value="'.$returnurl.'" />'."\n".
                       '<input type="hidden" name="action" value="change_authoring_settings" />'."\n");
             foreach my $item (@items) {
-                my ($domdef,$checkeddom,$checkeduser,$domdefdisplay,$divsty,$userelem);
+                my ($domdef,$checkeddom,$checkeduser,$domdefdisplay,$divsty,$userelem,$userlegend);
                 $checkeddom = ' checked="checked"';
                 $divsty = 'display:none';
                 if (exists($domdefs{$item})) {
@@ -2196,16 +2199,21 @@
                 } else {
                     $domdef = $staticdefaults{$item};
                 }
+                $userlegend = $lt{'ousv'};
                 if ($item eq 'copyright') {
                     $domdefdisplay = &Apache::loncommon::copyrightdescription($domdef);
-                    $userelem = &selectbox('userchoice_'.$item,$userenv{$item},'',
+                    $userelem = &selectbox('userchoice_'.$item,'userchoice_'.$item,
+                                           $userenv{$item},'',
                                            \&Apache::loncommon::copyrightdescription,
                                            (grep !/^priv|custom$/,(&Apache::loncommon::copyrightids)));
+                    $userlegend = '<label for="userchoice_'.$item.'">'.$lt{'ousv'}.'</label>';
                 } elsif ($item eq 'sourceavail') {
                     $domdefdisplay = &Apache::loncommon::source_copyrightdescription($domdef);
-                    $userelem = &selectbox('userchoice_'.$item,$userenv{$item},'',
+                    $userelem = &selectbox('userchoice_'.$item,'userchoice_'.$item,
+                                           $userenv{$item},'',
                                            \&Apache::loncommon::source_copyrightdescription,
                                            (&Apache::loncommon::source_copyrightids));
+                    $userlegend = '<label for="userchoice_'.$item.'">'.$lt{'ousv'}.'</label>';
                 } elsif (($item eq 'nocodemirror') || ($item eq 'daxecollapse')) {
                     if ($domdef) {
                         if ($item eq 'daxecollapse') {
@@ -2252,11 +2260,13 @@
                 $r->print(<<"END");
 <h3 class="LC_heading_3"><span class="LC_nobreak">$titles{$item}</span></h3>
 <p class="LC_nobreak">$lt{'curd'}: <span style="font-style:italic">$domdefdisplay</span></p>
-<p class="LC_nobreak">
+<fieldset class="LC_borderless" class="LC_nobreak">
+<legend class="LC_visually_hidden">$lt{'chdu'}</legend>
 <label><input type="radio" name="$item" value="dom" onclick="toggleOptions(this.form,'$item','user_$item');"$checkeddom />$lt{'used'}</label>   
-<label><input type="radio" name="$item" value="user" onclick="toggleOptions(this.form,'$item','user_$item');"$checkeduser />$lt{'usyo'}</label></p>
+<label><input type="radio" name="$item" value="user" onclick="toggleOptions(this.form,'$item','user_$item');"$checkeduser />$lt{'usyo'}</label>
+</fieldset>
 <fieldset id="user_$item" style="$divsty">
-<legend style="font-weight:normal;font-style:italic;">$lt{'ousv'}</legend>
+<legend style="font-weight:normal;font-style:italic;">$userlegend</legend>
 $userelem
 </fieldset><br /><hr />
 END
@@ -2281,6 +2291,7 @@
         </form>
 ENDSCREEN
         }
+        $r->print('</div>');
     }
 }
 
@@ -2435,6 +2446,7 @@
                'no'   => 'Activated',
                'expa' => 'Start Expanded',
                'coll' => 'Start Collapsed',
+               'chdu' => 'Use domain default or user-specific value',
      );
 }
 
@@ -3144,17 +3156,21 @@
 }
 
 sub selectbox {
-    my ($name,$value,$readonly,$functionref, at idlist)=@_;
-    my $selout = '<select name="'.$name.'">';
-    foreach my $id (@idlist) {
-        $selout.='<option value="'.$id.'"';
-        if ($id eq $value) {
+    my ($name,$id,$value,$readonly,$functionref, at idlist)=@_;
+    my $selout = '<select name="'.$name.'"';
+    if ($id ne '') {
+        $selout .= ' id="'.$id.'"';
+    }
+    $selout .= '>';
+    foreach my $opt (@idlist) {
+        $selout.='<option value="'.$opt.'"';
+        if ($opt eq $value) {
             $selout.=' selected="selected"';
         }
         if ($readonly) {
             $selout .= ' disabled="disabled"';
         }
-        $selout.='>'.&{$functionref}($id).'</option>';
+        $selout.='>'.&{$functionref}($opt).'</option>';
     }
     $selout.='</select>';
     return $selout;




More information about the LON-CAPA-cvs mailing list