--- loncom/interface/lonmenu.pm 2021/09/21 22:54:26 1.510 +++ loncom/interface/lonmenu.pm 2021/11/15 22:36:37 1.511 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.510 2021/09/21 22:54:26 raeburn Exp $ +# $Id: lonmenu.pm,v 1.511 2021/11/15 22:36:37 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -220,7 +220,7 @@ use vars qw(@desklines %category_names % my @inlineremote; sub prep_menuitem { - my ($menuitem,$ltitarget) = @_; + my ($menuitem,$ltitarget,$listclass,$linkattr) = @_; return '' unless(ref($menuitem) eq 'ARRAY'); my $link; if ($$menuitem[1]) { # graphical Link @@ -234,10 +234,10 @@ sub prep_menuitem { if ($ltitarget eq 'iframe') { $target =''; } - return '
  • ':'
  • ').'$link
  • |; + . qq| href="$$menuitem[0]"$target $linkattr>$link|; } # primary_menu() evaluates @primary_menu and returns a two item array, @@ -247,7 +247,7 @@ sub prep_menuitem { # @primary_menu is filled within the BEGIN block of this module with # entries from mydesk.tab sub primary_menu { - my ($crstype,$ltimenu,$menucoll,$menuref) = @_; + my ($crstype,$ltimenu,$menucoll,$menuref,$links_disabled) = @_; my (%menu,%ltiexc,%menuopts); # each element of @primary contains following array: # (link url, icon path, alt text, link text, condition, position) @@ -332,6 +332,11 @@ sub primary_menu { } } } + my ($listclass,$linkattr); + if ($links_disabled) { + $listclass = 'LCisDisabled'; + $linkattr = 'aria-disabled="true"'; + } if (defined($primary_submenu{$title})) { my ($link,$target); if ($menuitem->[0] ne '') { @@ -364,13 +369,17 @@ sub primary_menu { } next if (($env{'request.course.id'}) && ($menucoll) && ($title eq 'Personal') && (!@primsub)); + if ($title eq 'Personal') { + $title = &mt($title); + } } else { $title = &mt($title); } if (@primsub > 0) { - $menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1); + $menu{$position} .= &create_submenu($link,$target,$title,\@primsub,1,undef,$listclass,$linkattr); } elsif ($link) { - $menu{$position} .= '
  • '.$title.'
  • '; + $menu{$position} .= ($listclass?'
  • ':'
  • '). + ''.$title.'
  • '; } } } elsif ($$menuitem[3] eq 'Help') { # special treatment for helplink @@ -382,10 +391,12 @@ sub primary_menu { 'helpdeskmail', $defdom,$origmail); if ($to ne '') { - $menu{$position} .= &prep_menuitem($menuitem,$ltitarget); + $menu{$position} .= &prep_menuitem($menuitem,$ltitarget,$listclass,$linkattr); } } else { - $menu{$position} .= '
  • '.&Apache::loncommon::top_nav_help('Help').'
  • '; + $menu{$position} .= ($listclass?'
  • ':'
  • '). + &Apache::loncommon::top_nav_help('Help',$linkattr). + '
  • '; } } elsif ($$menuitem[3] eq 'Log In') { if ($public) { @@ -393,9 +404,9 @@ sub primary_menu { $$menuitem[0] = '/adm/login'; } } - $menu{$position} .= prep_menuitem($menuitem,$ltitarget); + $menu{$position} .= prep_menuitem($menuitem,$ltitarget,$listclass,$linkattr); } else { - $menu{$position} .= prep_menuitem($menuitem,$ltitarget); + $menu{$position} .= prep_menuitem($menuitem,$ltitarget,$listclass,$linkattr); } } my @output = ('',''); @@ -434,7 +445,7 @@ sub getauthor{ } sub secondary_menu { - my ($httphost,$ltiscope,$ltimenu,$noprimary,$menucoll,$menuref) = @_; + my ($httphost,$ltiscope,$ltimenu,$noprimary,$menucoll,$menuref,$links_disabled) = @_; my $menu; my $crstype = &Apache::loncommon::course_type(); @@ -511,6 +522,12 @@ sub secondary_menu { %menuopts = %{$menuref}; } + my ($listclass,$linkattr); + if ($links_disabled) { + $listclass = 'LCisDisabled'; + $linkattr = 'aria-disabled="true"'; + } + my ($canmodifycoauthor); if ($env{'request.role'} eq "au./$env{'user.domain'}/") { my $extent = "$env{'user.domain'}/$env{'user.name'}"; @@ -617,9 +634,12 @@ sub secondary_menu { } } if (@scndsub > 0) { - $menu .= &create_submenu($link,$target,&mt($title),\@scndsub,1); + $menu .= &create_submenu($link,$target,&mt($title),\@scndsub,1,undef, + $listclass,$linkattr); } elsif ($link ne '#') { - $menu .= '
  • '.&mt($title).'
  • '; + $menu .= ($listclass?'
  • ':''). + ''. + &mt($title).'
  • '; } } } elsif ($$menuitem[3] eq 'Roles' && $env{'request.course.id'}) { @@ -663,7 +683,7 @@ sub secondary_menu { } $$menuitem[0] = &HTML::Entities::encode($$menuitem[0],'&<>"'); } - $menu .= &prep_menuitem(\@$menuitem,$ltitarget); + $menu .= &prep_menuitem(\@$menuitem,$ltitarget,$listclass,$linkattr); } } if ($menu =~ /\[url\].*\[symb\]/) { @@ -701,7 +721,7 @@ sub secondary_menu { } sub create_submenu { - my ($link,$target,$title,$submenu,$translate,$addclass) = @_; + my ($link,$target,$title,$submenu,$translate,$addclass,$listclass,$linkattr) = @_; return unless (ref($submenu) eq 'ARRAY'); my $disptarget; if ($target ne '') { @@ -716,7 +736,7 @@ sub create_submenu { # $link and $title are only used in the initial string written in $menu # as seen above, not needed for nested submenus - $menu .= &build_submenu($target, $submenu, $translate, '1'); + $menu .= &build_submenu($target, $submenu, $translate, '1', $listclass, $linkattr); $menu .= ''; return $menu; @@ -726,7 +746,7 @@ sub create_submenu { # build the dropdown (and nested submenus) recursively # see perldoc create_submenu documentation for further information sub build_submenu { - my ($target, $submenu, $translate, $first_level) = @_; + my ($target, $submenu, $translate, $first_level, $listclass, $linkattr) = @_; unless (@{$submenu}) { return ''; } @@ -791,8 +811,10 @@ sub build_submenu { } } - $menu .= '
  • '; - $menu .= '' . $title . ''; + $menu .= '
  • '; + $menu .= '' . $title . ''; $menu .= '
  • '; } }