Diff for /loncom/interface/loncommon.pm between versions 1.1444 and 1.1477

version 1.1444, 2024/12/31 19:28:29 version 1.1477, 2025/03/31 13:55:07
Line 966  ENDSCRT Line 966  ENDSCRT
   
 sub select_timezone {  sub select_timezone {
    my ($name,$selected,$onchange,$includeempty,$id,$disabled)=@_;     my ($name,$selected,$onchange,$includeempty,$id,$disabled)=@_;
    my $output='<select name="'.$name.'" '.$id.$onchange.$disabled.'>'."\n";     my $labeltext = &HTML::Entities::encode(&mt('Select Time Zone'));
      my $output='<select name="'.$name.'" '.$id.$onchange.$disabled.
                 ' aria-label="'.$labeltext.'">'."\n";
    if ($includeempty) {     if ($includeempty) {
        $output .= '<option value=""';         $output .= '<option value=""';
        if (($selected eq '') || ($selected eq 'local')) {         if (($selected eq '') || ($selected eq 'local')) {
Line 1174  sub linked_select_forms { Line 1176  sub linked_select_forms {
         $menuorder,          $menuorder,
         $onchangefirst,          $onchangefirst,
         $onchangesecond,          $onchangesecond,
         $suffix          $suffix,
           $haslabel
         ) = @_;          ) = @_;
     my $second = "document.$formname.$secondselectname";      my $second = "document.$formname.$secondselectname";
     my $first = "document.$formname.$firstselectname";      my $first = "document.$formname.$firstselectname";
Line 1240  END Line 1243  END
         $result.=">".&mt($hashref->{$value}->{'text'})."</option>\n";          $result.=">".&mt($hashref->{$value}->{'text'})."</option>\n";
     }      }
     $result .= "</select>\n";      $result .= "</select>\n";
       if ($haslabel) {
           $result .= '</label>';
       }
     my %select2;      my %select2;
     if (ref($hashref->{$firstdefault}) eq 'HASH') {      if (ref($hashref->{$firstdefault}) eq 'HASH') {
         if (ref($hashref->{$firstdefault}->{'select2'}) eq 'HASH') {          if (ref($hashref->{$firstdefault}->{'select2'}) eq 'HASH') {
             %select2 = %{$hashref->{$firstdefault}->{'select2'}};              %select2 = %{$hashref->{$firstdefault}->{'select2'}};
         }          }
     }      }
     $result .= $middletext;      if ($middletext ne '') {
           $result .= '<label>'.$middletext;
       }
     $result .= "<select size=\"1\" name=\"$secondselectname\"";      $result .= "<select size=\"1\" name=\"$secondselectname\"";
     if ($onchangesecond) {      if ($onchangesecond) {
         $result .= ' onchange="'.$onchangesecond.'"';          $result .= ' onchange="'.$onchangesecond.'"';
Line 1264  END Line 1272  END
         $result.=">".&mt($select2{$value})."</option>\n";          $result.=">".&mt($select2{$value})."</option>\n";
     }      }
     $result .= "</select>\n";      $result .= "</select>\n";
       if ($middletext ne '') {
           $result .= '</label>';
       }
     #    return $debug;      #    return $debug;
     return $result;      return $result;
 }   #  end of sub linked_select_forms {  }   #  end of sub linked_select_forms {
Line 1342  sub help_open_topic { Line 1353  sub help_open_topic {
     }      }
     $template.=' <a'.$target.' href="'.$link.'" title="'.$title.'">'      $template.=' <a'.$target.' href="'.$link.'" title="'.$title.'">'
               .'<img src="'.$helpicon.'" border="0"'                .'<img src="'.$helpicon.'" border="0"'
               .' alt="'.&mt('Help: [_1]',$topic).'"'                .' alt="'.&mt('Help icon').'"'
               .' title="'.$title.'" style="vertical-align:middle;"'.$imgid                 .' title="'.$title.'" style="vertical-align:middle;"'.$imgid 
               .' /></a>';                .' /></a>';
     if ($text ne "") {      if ($text ne "") {
Line 1451  $banner_link Line 1462  $banner_link
 <a href="$link" title="$title" $linkattr>$text</a>  <a href="$link" title="$title" $linkattr>$text</a>
 END  END
     } else {      } else {
         return '&nbsp;'.$text.'&nbsp;';          return '&nbsp;<h1 class="LC_helpmenu">'.$text.'</h1>&nbsp;';
     }      }
 }  }
   
Line 1463  sub help_menu_js { Line 1474  sub help_menu_js {
     my $helptopic=&general_help();      my $helptopic=&general_help();
     my $details_link = $httphost.'/adm/help/'.$helptopic.'.hlp';      my $details_link = $httphost.'/adm/help/'.$helptopic.'.hlp';
     my $nothing=&Apache::lonhtmlcommon::javascript_nothing();      my $nothing=&Apache::lonhtmlcommon::javascript_nothing();
       my $bannertitle = &mt('Help Menu');
       &js_escape(\$bannertitle);
       my $bodytitle = &mt('Documentation');
       &js_escape(\$bodytitle);
     my $start_page =      my $start_page =
         &Apache::loncommon::start_page('Help Menu', undef,          &Apache::loncommon::start_page('Help Menu', undef,
        {'frameset'    => 1,         {'frameset'    => 1,
Line 1474  sub help_menu_js { Line 1489  sub help_menu_js {
     my $end_page =      my $end_page =
         &Apache::loncommon::end_page({'frameset' => 1,          &Apache::loncommon::end_page({'frameset' => 1,
       'js_ready' => 1,});        'js_ready' => 1,});
   
     my $template .= <<"ENDTEMPLATE";      my $template .= <<"ENDTEMPLATE";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
Line 1499  function helpMenu(target) { Line 1513  function helpMenu(target) {
     return;      return;
 }  }
 function writeHelp(caller) {  function writeHelp(caller) {
     caller.document.writeln('$start_page\\n<frame name="bannerframe" src="'+banner_link+'" marginwidth="0" marginheight="0" frameborder="0">\\n');      caller.document.writeln('$start_page\\n<frame name="bannerframe" title="$bannertitle" src="'+banner_link+'" marginwidth="0" marginheight="0" frameborder="0">\\n');
     caller.document.writeln('<frame name="bodyframe" src="$details_link" marginwidth="0" marginheight="0" frameborder="0">\\n$end_page');      caller.document.writeln('<frame name="bodyframe" title="$bodytitle" src="$details_link" marginwidth="0" marginheight="0" frameborder="0">\\n$end_page');
     caller.document.close();      caller.document.close();
     caller.focus();      caller.focus();
 }  }
Line 2300  sub import_crsauthor_form { Line 2314  sub import_crsauthor_form {
         dire => 'Directory',          dire => 'Directory',
         se   => 'Select',          se   => 'Select',
     );      );
     $output = $lt{'dire'}.':&nbsp;'.      $output = '<label>'.$lt{'dire'}.':&nbsp;'.
               '<select id="'.$firstselectname.'" name="'.$firstselectname.'" '.                '<select id="'.$firstselectname.'" name="'.$firstselectname.'" '.
               'onchange="populateCrsSelects(this.form,'."'$firstselectname','$secondselectname',1,'$js_only',0,1,0,0,0".');">'.                'onchange="populateCrsSelects(this.form,'."'$firstselectname','$secondselectname',1,'$js_only',0,1,0,0,0".');">'.
               '<option value="" selected="selected">'.$lt{'se'}.'</option>';                '<option value="" selected="selected">'.$lt{'se'}.'</option>';
Line 2311  sub import_crsauthor_form { Line 2325  sub import_crsauthor_form {
         next if ($key eq '/');          next if ($key eq '/');
         $output .= '<option value="'.$key.'">'.$key.'</option>'."\n";          $output .= '<option value="'.$key.'">'.$key.'</option>'."\n";
     }      }
     $output .= '</select><br />'."\n".      $output .= '</select></label><br /><label>'."\n".
                $lt{'fnam'}.':&nbsp;<select id="'.$secondselectname.'" name="'.$secondselectname.'">'."\n".                 $lt{'fnam'}.':&nbsp;<select id="'.$secondselectname.'" name="'.$secondselectname.'">'."\n".
                '<option value="" selected="selected"></option>'."\n".                 '<option value="" selected="selected"></option>'."\n".
                '</select>'."\n".                 '</select></label>'."\n".
                '<input type="hidden" id="crsres_include_'.$suffix.'" value="'.$only.'" />';                 '<input type="hidden" id="crsres_include_'.$suffix.'" value="'.$only.'" />';
     return ($numdirs,$output);      return ($numdirs,$output);
 }  }
Line 2476  END Line 2490  END
 <domain>$cdom</domain>  <domain>$cdom</domain>
 <highestgradelevel>0</highestgradelevel>  <highestgradelevel>0</highestgradelevel>
 <keywords></keywords>  <keywords></keywords>
 <language>notset </language>  <language>notset</language>
 <lastrevisiondate>$now</lastrevisiondate>  <lastrevisiondate>$now</lastrevisiondate>
 <lowestgradelevel>0</lowestgradelevel>  <lowestgradelevel>0</lowestgradelevel>
 <mime>rights</mime>  <mime>rights</mime>
Line 2786  sub create_text_file { Line 2800  sub create_text_file {
 # ------------------------------------------  # ------------------------------------------
   
 sub domain_select {  sub domain_select {
     my ($name,$value,$multiple,$incdoms,$excdoms)=@_;      my ($name,$value,$multiple,$incdoms,$excdoms,$id)=@_;
     my @possdoms;      my @possdoms;
     if (ref($incdoms) eq 'ARRAY') {      if (ref($incdoms) eq 'ARRAY') {
         @possdoms = @{$incdoms};          @possdoms = @{$incdoms};
Line 2807  sub domain_select { Line 2821  sub domain_select {
     if ($multiple) {      if ($multiple) {
  $domains{''}=&mt('Any domain');   $domains{''}=&mt('Any domain');
  $domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];   $domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];
  return &multiple_select_form($name,$value,4,\%domains);   return &multiple_select_form($name,$value,4,\%domains,undef,$id);
     } else {      } else {
  $domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];   $domains{'select_form_order'} = [sort {lc($a) cmp lc($b) } (keys(%domains))];
  return &select_form($name,$value,\%domains);   return &select_form($name,$value,\%domains,'','',$id);
     }      }
 }  }
   
Line 2822  sub domain_select { Line 2836  sub domain_select {
   
 =over 4  =over 4
   
 =item * &multiple_select_form($name,$value,$size,$hash,$order)  =item * &multiple_select_form($name,$value,$size,$hash,$order,$id)
   
 Returns a string containing a <select> element int multiple mode  Returns a string containing a <select> element int multiple mode
   
Line 2834  Args: Line 2848  Args:
   $hash - the elements should be 'option' => 'shown text'    $hash - the elements should be 'option' => 'shown text'
           (shown text should already have been &mt())            (shown text should already have been &mt())
   $order - (optional) array ref of the order to show the elements in    $order - (optional) array ref of the order to show the elements in
     $id = (optional) id for <select> element
   
 =cut  =cut
   
 #-------------------------------------------  #-------------------------------------------
 sub multiple_select_form {  sub multiple_select_form {
     my ($name,$value,$size,$hash,$order)=@_;      my ($name,$value,$size,$hash,$order,$id)=@_;
     my %selected = map { $_ => 1 } ref($value)?@{$value}:($value);      my %selected = map { $_ => 1 } ref($value)?@{$value}:($value);
     my $output='';      my $output='';
     if (! defined($size)) {      if (! defined($size)) {
Line 2848  sub multiple_select_form { Line 2863  sub multiple_select_form {
             $size = scalar(keys(%$hash));              $size = scalar(keys(%$hash));
         }          }
     }      }
     $output.="\n".'<select name="'.$name.'" size="'.$size.'" multiple="multiple">';      if ($id ne '') {
           $id = ' id="'.$id.'"'; 
       }
       $output.="\n".'<select name="'.$name.'" size="'.$size.'" multiple="multiple"'.$id.'>';
     my @order;      my @order;
     if (ref($order) eq 'ARRAY')  {      if (ref($order) eq 'ARRAY')  {
         @order = @{$order};          @order = @{$order};
Line 2872  sub multiple_select_form { Line 2890  sub multiple_select_form {
   
 =pod  =pod
   
 =item * &select_form($defdom,$name,$hashref,$onchange,$readonly)  =item * &select_form($defdom,$name,$hashref,$onchange,$readonly,$id,$aria_labelledby)
   
 Returns a string containing a <select name='$name' size='1'> form to   Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select options from a ref to a hash containing:  allow a user to select options from a ref to a hash containing:
Line 2880  option_name => displayed text. An option Line 2898  option_name => displayed text. An option
 a javascript onchange item, e.g., onchange="this.form.submit();".  a javascript onchange item, e.g., onchange="this.form.submit();".
 An optional arg -- $readonly -- if true will cause the select form  An optional arg -- $readonly -- if true will cause the select form
 to be disabled, e.g., for the case where an instructor has a section-  to be disabled, e.g., for the case where an instructor has a section-
 specific role, and is viewing/modifying parameters.   specific role, and is viewing/modifying parameters. An optional arg
   -- $id -- will be used as the id attribute of the select element. An
   optional arg -- $aria_labelledby -- will be included as the aria-labelledby
   attribute of the select element.
   
 See lonrights.pm for an example invocation and use.  See lonrights.pm for an example invocation and use.
   
Line 2888  See lonrights.pm for an example invocati Line 2909  See lonrights.pm for an example invocati
   
 #-------------------------------------------  #-------------------------------------------
 sub select_form {  sub select_form {
     my ($def,$name,$hashref,$onchange,$readonly) = @_;      my ($def,$name,$hashref,$onchange,$readonly,$id,$aria_labelledby) = @_;
     return unless (ref($hashref) eq 'HASH');      return unless (ref($hashref) eq 'HASH');
     if ($onchange) {      if ($onchange) {
         $onchange = ' onchange="'.$onchange.'"';          $onchange = ' onchange="'.$onchange.'"';
Line 2897  sub select_form { Line 2918  sub select_form {
     if ($readonly) {      if ($readonly) {
         $disabled = ' disabled="disabled"';          $disabled = ' disabled="disabled"';
     }      }
     my $selectform = "<select name=\"$name\" size=\"1\"$onchange$disabled>\n";      if ($id ne '') {
           $id = ' id="'.$id.'"';
       }
       if ($aria_labelledby ne '') {
           $aria_labelledby = ' aria-labelledby="'.$aria_labelledby.'"';
       }
       my $selectform = "<select name=\"$name\" size=\"1\"$onchange$disabled$id$aria_labelledby>\n";
     my @keys;      my @keys;
     if (exists($hashref->{'select_form_order'})) {      if (exists($hashref->{'select_form_order'})) {
  @keys=@{$hashref->{'select_form_order'}};   @keys=@{$hashref->{'select_form_order'}};
Line 2948  sub display_filter { Line 2975  sub display_filter {
     my $onchange = "javascript:toggleHistoryOptions(this,'containingphrase','$context',      my $onchange = "javascript:toggleHistoryOptions(this,'containingphrase','$context',
                                                     '$secondid','$thirdid')";                                                      '$secondid','$thirdid')";
     return '<span class="LC_nobreak"><label>'.&mt('Records: [_1]',      return '<span class="LC_nobreak"><label>'.&mt('Records: [_1]',
        &Apache::lonmeta::selectbox('show',$env{'form.show'},'',undef,         &Apache::lonmeta::selectbox('show',$env{'form.show'},'','',undef,
    (&mt('all'),10,20,50,100,1000,10000))).     (&mt('all'),10,20,50,100,1000,10000))).
    '</label></span> <span class="LC_nobreak">'.     '</label></span> <span class="LC_nobreak">'.
            &mt('Filter: [_1]',             &mt('Filter: [_1]',
Line 3050  sub gradeleveldescription { Line 3077  sub gradeleveldescription {
 }  }
   
 sub select_level_form {  sub select_level_form {
     my ($deflevel,$name)=@_;      my ($deflevel,$name,$id)=@_;
       if ($id ne '') {
           $id = ' id="'.$id.'"';
       }
     unless ($deflevel) { $deflevel=0; }      unless ($deflevel) { $deflevel=0; }
     my $selectform = "<select name=\"$name\" size=\"1\">\n";      my $selectform = "<select name=\"$name\" size=\"1\"$id>\n";
     for (my $i=0; $i<=18; $i++) {      for (my $i=0; $i<=18; $i++) {
         $selectform.="<option value=\"$i\" ".          $selectform.="<option value=\"$i\" ".
             ($i==$deflevel ? 'selected="selected" ' : '').              ($i==$deflevel ? 'selected="selected" ' : '').
Line 3066  sub select_level_form { Line 3096  sub select_level_form {
   
 =pod  =pod
   
 =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms,$excdoms,$disabled)  =item * &select_dom_form($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms,$excdoms,$disabled,$id)
   
 Returns a string containing a <select name='$name' size='1'> form to   Returns a string containing a <select name='$name' size='1'> form to 
 allow a user to select the domain to preform an operation in.    allow a user to select the domain to preform an operation in.  
Line 3085  The optional $excdoms is a reference to Line 3115  The optional $excdoms is a reference to
   
 The optional $disabled argument, if true, adds the disabled attribute to the select tag.  The optional $disabled argument, if true, adds the disabled attribute to the select tag.
   
   The option $id argument is the value (if any) to set as the (unique) id attribute for the select tag.
   
 =cut  =cut
   
 #-------------------------------------------  #-------------------------------------------
 sub select_dom_form {  sub select_dom_form {
     my ($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms,$excdoms,$disabled) = @_;      my ($defdom,$name,$includeempty,$showdomdesc,$onchange,$incdoms,$excdoms,$disabled,$id) = @_;
     if ($onchange) {      if ($onchange) {
         $onchange = ' onchange="'.$onchange.'"';          $onchange = ' onchange="'.$onchange.'"';
     }      }
     if ($disabled) {      if ($disabled) {
         $disabled = ' disabled="disabled"';          $disabled = ' disabled="disabled"';
     }      }
       if ($id ne '') {
           $id = ' id="'.$id.'"';
       }
     my (@domains,%exclude);      my (@domains,%exclude);
     if (ref($incdoms) eq 'ARRAY') {      if (ref($incdoms) eq 'ARRAY') {
         @domains = sort {lc($a) cmp lc($b)} (@{$incdoms});          @domains = sort {lc($a) cmp lc($b)} (@{$incdoms});
Line 3106  sub select_dom_form { Line 3141  sub select_dom_form {
     if (ref($excdoms) eq 'ARRAY') {      if (ref($excdoms) eq 'ARRAY') {
         map { $exclude{$_} = 1; } @{$excdoms};           map { $exclude{$_} = 1; } @{$excdoms}; 
     }      }
     my $selectdomain = "<select name=\"$name\" size=\"1\"$onchange$disabled>\n";      my $selectdomain = "<select name=\"$name\" size=\"1\"$onchange$disabled$id>\n";
     foreach my $dom (@domains) {      foreach my $dom (@domains) {
         next if ($exclude{$dom});          next if ($exclude{$dom});
         $selectdomain.="<option value=\"$dom\" ".          $selectdomain.="<option value=\"$dom\" ".
Line 4842  sub filemimetype { Line 4877  sub filemimetype {
   
   
 sub filecategoryselect {  sub filecategoryselect {
     my ($name,$value)=@_;      my ($name,$value,$id)=@_;
     return &select_form($value,$name,      return &select_form($value,$name,
                         {'' => &mt('Any category'), map { $_,$_ } sort(keys(%category_extensions))});                          {'' => &mt('Any category'), map { $_,$_ } sort(keys(%category_extensions))},
                           '','',$id);
 }  }
   
 =pod  =pod
Line 5328  sub get_student_view { Line 5364  sub get_student_view {
   $userview=~s/\<\/html\>//gi;    $userview=~s/\<\/html\>//gi;
   $userview=~s/\<head\>//gi;    $userview=~s/\<head\>//gi;
   $userview=~s/\<\/head\>//gi;    $userview=~s/\<\/head\>//gi;
     $userview=~s/\Q<div class="LC_landmark" role="main"\E/<div class="LC_landmark"/; 
   $userview=~s/action\s*\=/would_be_action\=/gi;    $userview=~s/action\s*\=/would_be_action\=/gi;
   $userview=&relative_to_absolute($feedurl,$userview);    $userview=&relative_to_absolute($feedurl,$userview);
   if (wantarray) {    if (wantarray) {
Line 6933  sub bodytag { Line 6970  sub bodytag {
         $role = &Apache::lonnet::plaintext($role);          $role = &Apache::lonnet::plaintext($role);
     }      }
   
     if (!$realm) { $realm='&nbsp;'; }  
   
     my $extra_body_attr = &make_attr_string($forcereg,\%design);      my $extra_body_attr = &make_attr_string($forcereg,\%design);
   
 # construct main body tag  # construct main body tag
Line 6958  sub bodytag { Line 6993  sub bodytag {
                 undef($role);                  undef($role);
             }              }
             unless ($ltimenu->{'coursetitle'}) {              unless ($ltimenu->{'coursetitle'}) {
                 $realm='&nbsp;';  
                 $showcrstitle = 0;                  $showcrstitle = 0;
             }              }
         }          }
Line 6968  sub bodytag { Line 7002  sub bodytag {
                 undef($role);                  undef($role);
             }              }
             unless ($menuref->{'crs'}) {              unless ($menuref->{'crs'}) {
                 $realm='&nbsp;';  
                 $showcrstitle = 0;                  $showcrstitle = 0;
             }              }
         }          }
Line 7025  sub bodytag { Line 7058  sub bodytag {
             my $alttext = &mt('menu state: '.$menustate);              my $alttext = &mt('menu state: '.$menustate);
             my $tooltip = &mt($tiptext.' standard menus');              my $tooltip = &mt($tiptext.' standard menus');
             $bodytag .= <<"END";              $bodytag .= <<"END";
 <div id="LC_expandingContainer" style="display:inline;">  <div id="LC_expandingContainer" style="display:inline;" role="navigation">
 <div id="LC_collapsible" class="LC_collapse_trigger" style="position: absolute;top: -5px;left: 0px; z-index:101; display:inline;">  <div id="LC_collapsible" class="LC_collapse_trigger" style="position: absolute;top: -5px;left: 0px; z-index:101; display:inline;">
 <a href="#" style="text-decoration:none;"><img class="LC_collapsible_indicator" alt="$alttext" title="$tooltip" src="/res/adm/pages/$menustate.png" style="border:0;margin:0;padding:0;max-width:100%;height:auto" /></a></div>  <a href="#" style="text-decoration:none;"><img class="LC_collapsible_indicator" alt="$alttext" title="$tooltip" src="/res/adm/pages/$menustate.png" style="border:0;margin:0;padding:0;max-width:100%;height:auto" /></a></div>
 <div class="LC_menus_content $divclass">  <div class="LC_menus_content $divclass">
Line 7036  END Line 7069  END
                                                               $args->{'links_disabled'},                                                                $args->{'links_disabled'},
                                                               $args->{'links_target'},                                                                $args->{'links_target'},
                                                               $collapsible);                                                                $collapsible);
               my $labeltext = &HTML::Entities::encode(&mt('Primary links'));
             if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {              if ($env{'request.noversionuri'} =~ m{^/res/adm/pages/}) {
                 if ($dc_info) {                  if ($dc_info) {
                     $dc_info = qq|<span class="LC_cusr_subheading">$dc_info</span>|;                      $dc_info = qq|<span class="LC_cusr_subheading">$dc_info</span>|;
                 }                  }
                 $bodytag .= qq|<div id="LC_nav_bar">$left $role<br />                  $bodytag .= qq|<div id="LC_nav_bar" role="navigation" aria-label="$labeltext">$left $role</div>|;
                                <em>$realm</em> $dc_info</div>|;                  unless (($realm eq '') && ($dc_info eq '')) {
                       $bodytag .= qq|<div id="LC_realm" role="complementary"><em>$realm</em> $dc_info</div>|;
                   }
                 if ($need_endlcint) {                  if ($need_endlcint) {
                     $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');                      $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
                 }                  }
                 return $bodytag;                  return $bodytag;
             }              }
   
               $bodytag .= '<div class="LC_landmark" style="margin: 3px 0 0 0;" role="navigation" aria-label="'.$labeltext.'">';
             unless ($env{'request.symb'} =~ m/\.page___\d+___/) {              unless ($env{'request.symb'} =~ m/\.page___\d+___/) {
                 $bodytag .= qq|<div id="LC_nav_bar">$left $role</div>|;                  $bodytag .= qq|<div id="LC_nav_bar">$left $role</div>|;
             }              }
   
             $bodytag .= $right;              $bodytag .= $right.'</div>';
   
             if ($dc_info) {              if ($dc_info) {
                 $dc_info = &dc_courseid_toggle($dc_info);                  $dc_info = &dc_courseid_toggle($dc_info);
             }              }
             $bodytag .= qq|<div id="LC_realm">$realm $dc_info</div>|;              unless (($realm eq '') && ($dc_info eq '')) {
                   $bodytag .= qq|<div id="LC_realm" role="complementary">$realm $dc_info</div>|;
               }
               $bodytag .= qq|<div style="clear: both; margin: 5px 0 0 0;"></div>|;
         }          }
   
         #if directed to not display the secondary menu, don't.            #if directed to not display the secondary menu, don't.  
Line 7071  END Line 7110  END
         #don't show menus for public users          #don't show menus for public users
         if (!$public){          if (!$public){
             unless ($args->{'no_inline_menu'}) {              unless ($args->{'no_inline_menu'}) {
                 $bodytag .= Apache::lonmenu::secondary_menu($httphost,$ltiscope,$ltimenu,                  $bodytag .= '<div class="LC_landmark" role="navigation" aria-label="Secondary Links">'.
                               Apache::lonmenu::secondary_menu($httphost,$ltiscope,$ltimenu,
                                                             $args->{'no_primary_menu'},                                                              $args->{'no_primary_menu'},
                                                             $menucoll,$menuref,                                                              $menucoll,$menuref,
                                                             $args->{'links_disabled'},                                                              $args->{'links_disabled'},
                                                             $args->{'links_target'});                                                              $args->{'links_target'}).
                               '</div>';
             }              }
             $bodytag .= Apache::lonmenu::serverform();              $bodytag .= Apache::lonmenu::serverform();
             if ($need_endlcint) {              if ($need_endlcint) {
Line 7090  END Line 7131  END
                                 $args->{'group'},$args->{'hide_buttons'},                                  $args->{'group'},$args->{'hide_buttons'},
                                 $hostname,$ltiscope,$ltiuri,$showncrumbsref);                                  $hostname,$ltiscope,$ltiuri,$showncrumbsref);
             } else {              } else {
                 $bodytag .=                   $bodytag .=
                     &Apache::lonmenu::prepare_functions($env{'request.noversionuri'},                      &Apache::lonmenu::prepare_functions($env{'request.noversionuri'},
                                                         $forcereg,$args->{'group'},                                                          $forcereg,$args->{'group'},
                                                         $args->{'bread_crumbs'},                                                          $args->{'bread_crumbs'},
Line 7099  END Line 7140  END
         } else {          } else {
             # this is to separate menu from content when there's no secondary              # this is to separate menu from content when there's no secondary
             # menu. Especially needed for publicly accessible resources.              # menu. Especially needed for publicly accessible resources.
             $bodytag .= '<hr style="clear:both" />';              $bodytag .= '<hr style="clear:both" role="complementary" />';
             if ($need_endlcint) {              if ($need_endlcint) {
                 $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');                  $bodytag .= Apache::lonhtmlcommon::scripttag('', 'end');
             }              }
Line 7301  form, .inline { Line 7342  form, .inline {
   display: inline;    display: inline;
 }  }
   
   .LC_landmark {
     margin: 0;
     padding: 0;
     border: none;
   }
   
 .LC_visually_hidden:not(:focus):not(:active) {  .LC_visually_hidden:not(:focus):not(:active) {
     clip-path: inset(50%);      clip-path: inset(50%);
     height: 1px;      height: 1px;
Line 7311  form, .inline { Line 7358  form, .inline {
     display: inline;      display: inline;
 }  }
   
   .LC_heading_2 {
     font-size: 1.17em;
   }
   
   .LC_heading_3 {
     font-size: 1.0em;
   }
   
   h1.LC_search_results {
     font-size: 1.0em;
     font-weight: normal;
   }
   
 .LC_menus_content.shown{  .LC_menus_content.shown{
   display: block;    display: block;
 }  }
Line 7323  form, .inline { Line 7383  form, .inline {
   text-align:right;    text-align:right;
 }  }
   
   .LC_left {
     text-align:left;
   }
   
   .LC_center {
     text-align:center;
   }
   
 .LC_middle {  .LC_middle {
   vertical-align:middle;    vertical-align:middle;
 }  }
   
   .LC_bottom {
     vertical-align:bottom;
   }
   
 .LC_floatleft {  .LC_floatleft {
   float: left;    float: left;
 }  }
Line 7412  div.LC_confirm_box .LC_success img { Line 7484  div.LC_confirm_box .LC_success img {
   height: auto;    height: auto;
 }  }
   
   div.LC_minheight {
     min-height: 24px;
     border: 0;
     margin: 4px 0 0 0;
     padding: 0;
     vertical-align: middle;
   }
   
 .LC_textsize_mobile {  .LC_textsize_mobile {
   \@media only screen and (max-device-width: 480px) {    \@media only screen and (max-device-width: 480px) {
       -webkit-text-size-adjust:100%; -moz-text-size-adjust:100%; -ms-text-size-adjust:100%;        -webkit-text-size-adjust:100%; -moz-text-size-adjust:100%; -ms-text-size-adjust:100%;
Line 7466  div.LC_confirm_box .LC_success img { Line 7546  div.LC_confirm_box .LC_success img {
   padding: 4px;    padding: 4px;
 }  }
   
 table.LC_pastsubmission {  .LC_pastsubmission {
   border: 1px solid black;    border: 1px solid black;
   margin: 2px;    margin: 2px;
     padding: 2px;
 }  }
   
 table#LC_menubuttons {  table#LC_menubuttons {
Line 7604  li.LC_menubuttons_inline_text img { Line 7685  li.LC_menubuttons_inline_text img {
   text-decoration: none;    text-decoration: none;
 }  }
   
   .LC_menubuttons_link img {
     vertical-align: middle;
   }
   
 .LC_menubuttons_category {  .LC_menubuttons_category {
   color: $font;    color: $font;
   background: $pgbg;    background: $pgbg;
Line 7611  li.LC_menubuttons_inline_text img { Line 7696  li.LC_menubuttons_inline_text img {
   font-weight: bold;    font-weight: bold;
 }  }
   
 td.LC_menubuttons_text {  .LC_menu_text {
     clear: left;
     text-align: left;
   color: $font;    color: $font;
 }  }
   
Line 7703  table.LC_data_table tr td.LC_leftcol_hea Line 7790  table.LC_data_table tr td.LC_leftcol_hea
 }  }
   
 table.LC_data_table tr.LC_empty_row td,  table.LC_data_table tr.LC_empty_row td,
 table.LC_nested tr.LC_empty_row td {  table.LC_nested tr.LC_empty_row td,
   table.LC_nested tr.LC_empty_row th {
   font-weight: bold;    font-weight: bold;
   font-style: italic;    font-style: italic;
   text-align: center;    text-align: center;
   padding: 8px;    padding: 8px;
     border: 0;
 }  }
   
 table.LC_data_table tr.LC_empty_row td,  table.LC_data_table tr.LC_empty_row td,
Line 7715  table.LC_data_table tr.LC_footer_row td Line 7804  table.LC_data_table tr.LC_footer_row td
   background-color: $sidebg;    background-color: $sidebg;
 }  }
   
   table.LC_nested tr.LC_empty_row th,
 table.LC_nested tr.LC_empty_row td {  table.LC_nested tr.LC_empty_row td {
     padding: 4ex;
   background-color: #FFFFFF;    background-color: #FFFFFF;
 }  }
   
 table.LC_caption {  table.LC_caption {
 }  }
   
 table.LC_nested tr.LC_empty_row td {  caption.LC_caption_prefs {
   padding: 4ex    font-weight: normal;
     text-align: left;
     padding-bottom: 0.8em;
 }  }
   
 table.LC_nested_outer tr th {  table.LC_nested_outer tr th {
Line 7742  table.LC_nested_outer tr td.LC_subheader Line 7835  table.LC_nested_outer tr td.LC_subheader
   text-align: right;    text-align: right;
 }  }
   
 table.LC_nested tr.LC_info_row td {  table.LC_nested tr.LC_info_row td,
   table.LC_nested tr.LC_info_row th {
   background-color: #CCCCCC;    background-color: #CCCCCC;
   font-weight: bold;    font-weight: bold;
   font-size: small;    font-size: small;
   text-align: center;    text-align: center;
     border: 0;
 }  }
   
 table.LC_nested tr.LC_info_row td.LC_left_item,  table.LC_nested tr.LC_info_row td.LC_left_item,
   table.LC_nested tr.LC_info_row th.LC_left_item,
 table.LC_nested_outer tr th.LC_left_item {  table.LC_nested_outer tr th.LC_left_item {
   text-align: left;    text-align: left;
 }  }
Line 7892  table.LC_data_table tr > td.LC_roles_sel Line 7988  table.LC_data_table tr > td.LC_roles_sel
   border-right: 8px solid #11CC55;    border-right: 8px solid #11CC55;
 }  }
   
   table.LC_data_table tr.LC_prefs_row {
      line-height: 250%;
   }
   
   table.LC_manage_reservations tr th {
     font-weight: normal;
     font-style: italic;
     text-align: left;
     background: transparent;
     font-size: 100%;
   }
   
 span.LC_current_location {  span.LC_current_location {
   font-size:larger;    font-size:larger;
   background: $pgbg;    background: $pgbg;
Line 7965  table.LC_parm_overview_restrictions th { Line 8073  table.LC_parm_overview_restrictions th {
   border-color: $pgbg;    border-color: $pgbg;
 }  }
   
 table#LC_helpmenu {  h1.LC_helpmenu {
   border: none;    display: inline;
   height: 55px;    font-size: 100%;
   border-spacing: 0;    font-weight: normal;
     line-height: 1em;
     margin: 0;
     padding: 0;
     border: 0;
 }  }
   
 table#LC_helpmenu fieldset legend {  .LC_helpdesk_headbox {
   font-size: larger;    border: 2px groove threedface;
     padding: 1em;
 }  }
   
 table#LC_helpmenu_links {  h1.LC_helpdesk_legend {
   width: 100%;    float: left;
   border: 1px solid black;    margin: -1.7em 0 0;
     padding: 0 .5em;
   background: $pgbg;    background: $pgbg;
     font-size: 1em;
     font-weight: bold;
   }
   
   h1.LC_helpdesk_title {
     display: inline;
     font-size: 1em;
     line-height: 2.5em;
     margin: 0;
   padding: 0;    padding: 0;
   border-spacing: 1px;    vertical-align: bottom;
 }  }
   
 table#LC_helpmenu_links tr td {  .LC_helpdesk_links {
   padding: 1px;    border: 1px solid black;
     padding: 3px;
   background: $tabbg;    background: $tabbg;
   text-align: center;    text-align: center;
   font-weight: bold;    font-weight: bold;
     display: inline;
     margin-right: -6px;
 }  }
   
 table#LC_helpmenu_links a:link,  .LC_helpdesk_img,
 table#LC_helpmenu_links a:visited,  .LC_helpdesk_text {
 table#LC_helpmenu_links a:active {    padding: 0;
     margin: 0;
     border: 0;
     display: inline;
   }
   
   .LC_helpdesk_img a:link,
   .LC_helpdesk_img a:visited,
   .LC_helpdesk_img a:active,
   .LC_helpdesk_text a:link,
   .LC_helpdesk_text a:visited,
   .LC_helpdesk_text a:active {
   text-decoration: none;    text-decoration: none;
   color: $font;    color: $font;
 }  }
   
 table#LC_helpmenu_links a:hover {  div.LC_helpdesk_text a:hover {
   text-decoration: underline;    text-decoration: underline;
   color: $vlink;    color: $vlink;
 }  }
Line 8024  table.LC_pick_box { Line 8161  table.LC_pick_box {
   border-spacing: 1px;    border-spacing: 1px;
 }  }
   
 table.LC_pick_box td.LC_pick_box_title {  table.LC_pick_box th.LC_pick_box_title {
   background: $sidebg;    background: $sidebg;
   font-weight: bold;    font-weight: bold;
   text-align: left;    text-align: left;
Line 8065  table.LC_pick_box td.LC_oddrow_value { Line 8202  table.LC_pick_box td.LC_oddrow_value {
   background-color: $data_table_light;    background-color: $data_table_light;
 }  }
   
   td.LC_log_filter,
   th.LC_log_filter {
     vertical-align: top;
     text-align: left;
     padding: 0 4px;
   }
   
 span.LC_helpform_receipt_cat {  span.LC_helpform_receipt_cat {
   font-weight: bold;    font-weight: bold;
 }  }
Line 8227  table.LC_prior_tries td { Line 8371  table.LC_prior_tries td {
   padding: 6px;    padding: 6px;
 }  }
   
   span.LC_prob_status {
     margin: 5px 0 0 0;
     padding: 0 5px 0 0;
     vertical-align: middle;
   }
   
   div.LC_prob_status_outer {
     display: inline-block;
     margin: -5px 0 0 0;
     padding: 0;
   }
   
   div.LC_prob_status_inner {
     display: inline-block;
     margin: 0 5px 0 0;
     padding: 5px;
   }
   
   caption.LC_filesub_status {
     text-align: left;
     font-weight: bold;
   }
   
   .LC_mail_actions {
     float: left;
     padding: 0;
     margin: 6px;
   }
   
   .LC_vertical_line {
     width: 1px;
     background-color: black;
     height: 4em;
     float: left;
     margin: 0;
     padding: 0;
   }
   
 span.LC_prior_numerical,  span.LC_prior_numerical,
 span.LC_prior_string,  span.LC_prior_string,
 span.LC_prior_custom,  span.LC_prior_custom,
Line 8380  div.LC_grade_show_user div.LC_Box { Line 8562  div.LC_grade_show_user div.LC_Box {
   margin-right: 50px;    margin-right: 50px;
 }  }
   
   div.LC_grade_show_user div.LC_Box table tr th {
     font-weight: normal;
   }
   
 div.LC_grade_submissions,  div.LC_grade_submissions,
 div.LC_grade_message_center,  div.LC_grade_message_center,
 div.LC_grade_info_links {  div.LC_grade_info_links {
Line 8410  table.LC_scantron_action tr th { Line 8596  table.LC_scantron_action tr th {
   font-style:normal;    font-style:normal;
 }  }
   
   div.LC_edit_problem_daxe_header {
     padding: 3px;
     background: $tabbg;
     z-index: 100;
   }
   
 .LC_edit_problem_header,  .LC_edit_problem_header,
 div.LC_edit_problem_footer {  div.LC_edit_problem_footer {
   font-weight: normal;    font-weight: normal;
Line 8475  img.stift { Line 8667  img.stift {
   vertical-align: middle;    vertical-align: middle;
 }  }
   
 table td.LC_mainmenu_col_fieldset {  div.LC_mainmenu {
   vertical-align: top;    margin: 3px 2px 2px 1px;
     float: left;
 }  }
   
 div.LC_createcourse {  div.LC_createcourse {
Line 8524  h6 { Line 8717  h6 {
   border-bottom:solid 1px $lg_border_color;    border-bottom:solid 1px $lg_border_color;
 }  }
   
   .LC_MainMenu_Box > .LC_hcell,
 .LC_Box > .LC_hcell {  .LC_Box > .LC_hcell {
   margin: 0 -10px 10px -10px;    margin: 0 -10px 10px -10px;
 }  }
Line 8558  fieldset { Line 8752  fieldset {
 }  }
   
 fieldset#LC_selectuser {  fieldset#LC_selectuser {
     margin: 0;    margin: -1px 0 0 0;
     padding: 0;    padding: 0;
     border: 0;
   }
   
   fieldset.LC_delete_slot {
     display:inline;
     margin: 0 4px 4px;
     padding: 4px;
   }
   
   fieldset.LC_delete_slot > legend {
     font-weight: normal;
   }
   
   p.LC_medium_line {
     line-height: 0.85em;
 }  }
   
 article.geogebraweb div {  article.geogebraweb div {
Line 8961  ol#LC_PathBreadcrumbs li a { Line 9170  ol#LC_PathBreadcrumbs li a {
   padding: 0 0 10px 10px;    padding: 0 0 10px 10px;
 }  }
   
   .LC_MainMenu_Box {
     border: solid 1px $lg_border_color;
     padding: 0 10px 0 10px;
   }
   
 .LC_AboutMe_Image {  .LC_AboutMe_Image {
   float:left;    float:left;
   margin-right:10px;    margin-right:10px;
Line 8982  dl.LC_ListStyleClean dd { Line 9196  dl.LC_ListStyleClean dd {
 .LC_ListStyleClean,  .LC_ListStyleClean,
 .LC_ListStyleSimple,  .LC_ListStyleSimple,
 .LC_ListStyleNormal,  .LC_ListStyleNormal,
   .LC_ListStyleMainMenu,
 .LC_ListStyleSpecial {  .LC_ListStyleSpecial {
   /* display:block; */    /* display:block; */
   list-style-position: inside;    list-style-position: inside;
Line 9019  dl.LC_ListStyleClean dd { Line 9234  dl.LC_ListStyleClean dd {
   margin-bottom: 4px;    margin-bottom: 4px;
 }  }
   
   .LC_ListStyleMainMenu li {
     margin: 0;
     padding: 2px 5px 2px 10px;
     clear: both;
   }
   
 table.LC_SimpleTable {  table.LC_SimpleTable {
   margin:5px;    margin:5px;
   border:solid 1px $lg_border_color;    border:solid 1px $lg_border_color;
Line 9117  ul#LC_toolbar { Line 9338  ul#LC_toolbar {
   padding: 0;    padding: 0;
   margin: 2px;    margin: 2px;
   list-style:none;    list-style:none;
   position:relative;    display:inline;
   background-color:white;    background-color:white;
   overflow: auto;    overflow: auto;
 }  }
Line 9145  a.LC_toolbarItem { Line 9366  a.LC_toolbarItem {
   background-color:transparent;    background-color:transparent;
 }  }
   
   .LC_navtools {
     display: inline-block;
     padding: 0;
     margin: 2px;
     vertical-align: middle;
   }
   
 ul.LC_funclist {  ul.LC_funclist {
     margin: 0;      margin: 0;
     padding: 0.5em 1em 0.5em 0;      padding: 0.5em 1em 0.5em 0;
Line 9249  pre.LC_wordwrap { Line 9477  pre.LC_wordwrap {
 /*  /*
   styles used for response display    styles used for response display
 */  */
 div.LC_radiofoil, div.LC_rankfoil {  div.LC_radiofoil, div.LC_rankfoil, div.LC_optionfoil, div.LC_matchfoil, div.LC_login_links {
   margin: .5em 0em .5em 0em;    margin: .5em 0em .5em 0em;
 }  }
 table.LC_itemgroup {  table.LC_itemgroup {
   margin-top: 1em;    margin-top: 1em;
 }  }
   
   table.LC_itemgroup tr th {
     font-weight: normal;
   }
   
   fieldset.LC_webbubbles {
     margin: 2px 0 0 0;
     padding: 0;
     border: 0;
   }
   
   ul.LC_webbubbles {
     list-style: none;
     padding: 0;
     margin: 0;
     text-align: left;
     float: left;
   }
   
   ul.LC_webbubbles li {
     line-height: 1.8em;
     border: 1px solid black;
     padding: 0 2px 0 5px;
     margin: 0 0 0 -1px;
     float: left;
   }
   
 /*  /*
   styles used by TTH when "Default set of options to pass to tth/m    styles used by TTH when "Default set of options to pass to tth/m
   when converting TeX" in course settings has been set    when converting TeX" in course settings has been set
Line 9679  OFFLOAD Line 9933  OFFLOAD
 <meta name="viewport" content="width=device-width, initial-scale=1.0">  <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta name="apple-mobile-web-app-capable" content="yes" />';  <meta name="apple-mobile-web-app-capable" content="yes" />';
     }      }
     $result .= '<meta name="google" content="notranslate" />'."\n";      $result .= '<meta name="google" content="notranslate"';
       if (!$args->{'frameset'}) {
           $result .= ' /';
       }
       $result .= '>'."\n";
     return $result.'</head>';      return $result.'</head>';
 }  }
   
Line 9810  sub xml_begin { Line 10068  sub xml_begin {
     .'xmlns="http://www.w3.org/1999/xhtml">';      .'xmlns="http://www.w3.org/1999/xhtml">';
     } elsif ($is_frameset) {      } elsif ($is_frameset) {
         $output='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'."\n".          $output='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'."\n".
                 '<html>'."\n";                  '<html lang="en">'."\n";
     } else {      } else {
  $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n".   $output='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'."\n".
                 '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">'."\n";                  '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">'."\n";
Line 10723  sub simple_error_page { Line 10981  sub simple_error_page {
     }      }
   
     my $page =      my $page =
  &Apache::loncommon::start_page($title,'',\%displayargs).   &Apache::loncommon::start_page($title,'',\%displayargs)."\n".
           '<div class="LC_landmark" style="clear:both" role="main">'.
  '<p class="LC_error">'.$msg.'</p>'.   '<p class="LC_error">'.$msg.'</p>'.
           '</div>'.
  &Apache::loncommon::end_page();   &Apache::loncommon::end_page();
     if (ref($r)) {      if (ref($r)) {
  $r->print($page);   $r->print($page);
Line 10746  sub simple_error_page { Line 11006  sub simple_error_page {
         return;          return;
     }      }
   
       sub set_data_table_count {
           my ($count) = @_;
           unshift(@row_count,$count);
       }
   
     sub start_data_table {      sub start_data_table {
  my ($add_class,$id) = @_;   my ($add_class,$id) = @_;
  my $css_class = (join(' ','LC_data_table',$add_class));   my $css_class = (join(' ','LC_data_table',$add_class));
Line 10793  sub simple_error_page { Line 11058  sub simple_error_page {
     }      }
   
     sub start_data_table_header_row {      sub start_data_table_header_row {
  return  '<tr class="LC_header_row">'."\n";;   my ($add_class,$id) = @_;
    my $css_class = 'LC_header_row';
    $css_class = (join(' ',$css_class,$add_class)) unless ($add_class eq '');
    $id = (' id="'.$id.'"') unless ($id eq '');
    return '<tr class="'.$css_class.'"'.$id.'>'."\n";
     }      }
   
     sub end_data_table_header_row {      sub end_data_table_header_row {
Line 10801  sub simple_error_page { Line 11070  sub simple_error_page {
     }      }
   
     sub data_table_caption {      sub data_table_caption {
         my $caption = shift;          my ($caption,$css_class) = @_;
         return "<caption class=\"LC_caption\">$caption</caption>";          return "<caption class=\"LC_caption $css_class\">$caption</caption>";
     }      }
 }  }
   
Line 15472  sub upfile_select_html { Line 15741  sub upfile_select_html {
                  tab   => &mt('Tabulator separated'),                   tab   => &mt('Tabulator separated'),
 #                 xml   => &mt('HTML/XML'),  #                 xml   => &mt('HTML/XML'),
                  );                   );
     my $Str = '<input type="file" name="upfile" size="50" />'.      my $Str = '<input type="file" name="upfile" id="upfile" size="50" />'.
         '<br />'.&mt('Type').': <select name="upfiletype">';          '<br /><label>'.&mt('Type').': <select name="upfiletype">';
     foreach my $type (sort(keys(%Types))) {      foreach my $type (sort(keys(%Types))) {
         $Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n";          $Str .= '<option value="'.$type.'" >'.$Types{$type}."</option>\n";
     }      }
     $Str .= "</select>\n";      $Str .= "</select></label>\n";
     return $Str;      return $Str;
 }  }
   
Line 15561  sub csv_print_select_table { Line 15830  sub csv_print_select_table {
               &end_data_table_header_row()."\n");                &end_data_table_header_row()."\n");
     foreach my $array_ref (@$d) {      foreach my $array_ref (@$d) {
  my ($value,$display,$defaultcol)=@{ $array_ref };   my ($value,$display,$defaultcol)=@{ $array_ref };
  $r->print(&start_data_table_row().'<td>'.$display.'</td>');   $r->print(&start_data_table_row().'<td><label for="f'.$i.'">'.$display.'</label></td>');
   
  $r->print('<td><select name="f'.$i.'"'.   $r->print('<td><select name="f'.$i.'" id="f'.$i.'"'.
   ' onchange="javascript:flip(this.form,'.$i.');">');    ' onchange="javascript:flip(this.form,'.$i.');">');
  $r->print('<option value="none"></option>');   $r->print('<option value="none"></option>');
  foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {   foreach my $sample (sort({$a <=> $b} keys(%{ $samples->[0] }))) {
Line 15608  sub csv_samples_select_table { Line 15877  sub csv_samples_select_table {
               &end_data_table_header_row());                &end_data_table_header_row());
   
     foreach my $key (sort(keys(%{ $samples->[0] }))) {      foreach my $key (sort(keys(%{ $samples->[0] }))) {
           my $num = $i+1;
           my $labeltext = &HTML::Entities::encode(&mt('Field for data in column [_1]',$num));
  $r->print(&start_data_table_row().'<td><select name="f'.$i.'"'.   $r->print(&start_data_table_row().'<td><select name="f'.$i.'"'.
   ' onchange="javascript:flip(this.form,'.$i.');">');    ' onchange="javascript:flip(this.form,'.$i.');" aria-label="'.$labeltext.'">');
  foreach my $option (@$d) {   foreach my $option (@$d) {
     my ($value,$display,$defaultcol)=@{ $option };      my ($value,$display,$defaultcol)=@{ $option };
     $r->print('<option value="'.$value.'"'.      $r->print('<option value="'.$value.'"'.
Line 18920  Returns: HTML to display with informatio Line 19191  Returns: HTML to display with informatio
 sub check_release_result {  sub check_release_result {
     my ($switchwarning,$switchserver) = @_;      my ($switchwarning,$switchserver) = @_;
     my $output = &start_page('Selected course unavailable on this server').      my $output = &start_page('Selected course unavailable on this server').
                  '<p class="LC_warning">';                   '<div class="LC_landmark" role="main"><p class="LC_warning">';
     if ($switchwarning) {      if ($switchwarning) {
         $output .= $switchwarning.'<br /><a href="/adm/roles">';          $output .= $switchwarning.'<br /><a href="/adm/roles">';
         if (&show_course()) {          if (&show_course()) {
Line 18936  sub check_release_result { Line 19207  sub check_release_result {
                    &mt('Switch Server').                     &mt('Switch Server').
                    '</a>';                     '</a>';
     }      }
     $output .= '</p>'.&end_page();      $output .= '</p></div>'.&end_page();
     return $output;      return $output;
 }  }
   
Line 19020  sub needs_coursereinit { Line 19291  sub needs_coursereinit {
                     $update = 'supp';                      $update = 'supp';
                 }                  }
             }              }
             return ($update);  
         }          }
           return ($update);
     }      }
     return ();      return ();
 }  }
Line 19552  sub create_captcha { Line 19823  sub create_captcha {
         if (-e $Apache::lonnet::perlvar{'lonCaptchaDir'}.'/'.$md5sum.'.png') {          if (-e $Apache::lonnet::perlvar{'lonCaptchaDir'}.'/'.$md5sum.'.png') {
             $output = '<input type="hidden" name="crypt" value="'.$md5sum.'" />'."\n".              $output = '<input type="hidden" name="crypt" value="'.$md5sum.'" />'."\n".
                       '<span class="LC_nobreak">'.                        '<span class="LC_nobreak">'.
                       &mt('Type in the letters/numbers shown below').'&nbsp;'.                        '<label>'.&mt('Type in the letters/numbers shown below').'&nbsp;'.
                       '<input type="text" size="5" name="code" value="" autocomplete="new-password" />'.                        '<input type="text" size="5" name="code" value="" autocomplete="new-password" aria-required="true" />'.
                       '</span><br />'.                        '</label></span><br />'.
                       '<img src="'.$captcha_params{'www_output_dir'}.'/'.$md5sum.'.png" alt="captcha" />';                        '<img src="'.$captcha_params{'www_output_dir'}.'/'.$md5sum.'.png" alt="captcha" />';
             last;              last;
         }          }

Removed from v.1.1444  
changed lines
  Added in v.1.1477


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>