[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