--- loncom/interface/lonhtmlcommon.pm 2023/09/27 14:52:26 1.410 +++ loncom/interface/lonhtmlcommon.pm 2025/03/06 16:42:40 1.420 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.410 2023/09/27 14:52:26 raeburn Exp $ +# $Id: lonhtmlcommon.pm,v 1.420 2025/03/06 16:42:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -231,15 +231,16 @@ sub dependencycheck_js { $link = '/adm/dependencies?symb='.&HTML::Entities::encode($symb,'<>&"'); } elsif ($folderpath) { $link = '/adm/dependencies?folderpath='.&HTML::Entities::encode($folderpath,'<>&"'); - $url = $uri; + $url = $uri; } elsif ($uri =~ m{^/public/$match_domain/$match_courseid/syllabus$}) { $link = '/adm/dependencies'; } - $link .= (($link=~/\?/)?'&':'?').'title='. + $link .= (($link=~/\?/)?'&':'?').'title='. &HTML::Entities::encode($title,'<>&"'); if ($url) { $link .= '&url='.&HTML::Entities::encode($url,'<>&"'); } + &js_escape(\$link); return < // 'day', + month => 'month', + year => 'year', + sec => 'seconds', + min => 'minutes', + hour => 'hours', + ); my $tzname; my ($sec,$min,$hour,$mday,$month,$year) = ('', '', undef,''.''.''); #other potentially useful values: wkday,yrday,is_daylight_savings @@ -642,7 +650,7 @@ document.$formname.$dname\_year.value, ENDJS $result .= ' '; - my $monthselector = qq{}; # Month my @Months = qw/January February March April May June July August September October November December/; @@ -656,11 +664,11 @@ ENDJS } $monthselector.= ' '; # Day - my $dayselector = qq{}; + my $dayselector = qq{}; # Year - my $yearselector = qq{}; + my $yearselector = qq{}; # - my $hourselector = qq{}; if ($includeempty) { $hourselector.=qq{}; } @@ -682,8 +690,8 @@ ENDJS $hourselector .= $timest." \n"; } $hourselector .= " \n"; - my $minuteselector = qq{}; - my $secondselector= qq{}; + my $minuteselector = qq{}; + my $secondselector= qq{}; my $cal_link; unless (($nolink) || ($state eq 'disabled')) { $cal_link = qq{}; @@ -1316,9 +1324,9 @@ sub htmlareaheaders { ENDEDITOR } $s.=(< - - + + + @@ -1849,13 +1857,19 @@ sub dash_to_minus_js { document.addEventListener("DOMContentLoaded", (event) => { const numresp = document.querySelectorAll("input.LC_numresponse_text"); if (numresp.length > 0) { - numresp.forEach((el) => { + Array.from(numresp).forEach((el) => { el.addEventListener("paste", (e) => { e.preventDefault(); e.stopPropagation(); let p = (e.clipboardData || window.clipboardData).getData("text"); p.toString(); - p = p.replace(/\p{Dash}/gu, '-'); + var regex; + try + { + regex = new RegExp ("\\p{Dash}", "gu"); + } + catch (e) { regex = new RegExp ("[\\u058A\\u05BE\\u1400\\u1806\\u2010-\\u2015\\u2212\\u2E3A\\u2E3B\\u2E5D\\u301C\\uFE58\\uFE63\\uFF0D]","g"); } + p = p.replace(regex,'-'); putInText(p); }); }); @@ -1908,9 +1922,10 @@ boolean, controls whether to include a l if 'nohelp' don't include the orange help link -=item $css_class +=item $crumbs_style -optional name for the class to apply to the table for CSS +optional style attribute for div containing breadcrumbs +unless called from docs_breadcrumbs =item $no_mt @@ -1968,11 +1983,9 @@ returns: nothing my %tools = (); sub breadcrumbs { - my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, + my ($component,$component_help,$menulink,$helplink,$crumbs_style,$no_mt, $CourseBreadcrumbs,$topic_help,$topic_help_text,$links_target) = @_; # - $css_class ||= 'LC_breadcrumbs'; - # Make the faq and bug data cascade my $faq = ''; my $bug = ''; @@ -2074,7 +2087,7 @@ returns: nothing if ($lasttext ne '') { $links .= &htmltag( 'li', htmltag($CourseBreadcrumbs ? 'b' : 'h1', - $lasttext), {title => $lasttext}); + $lasttext)); } my $icons = ''; @@ -2126,8 +2139,13 @@ returns: nothing } if (($links ne '') || ($nav_and_tools)) { &render_tools(\$links); - $links = &htmltag('div', $links, - { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ; + unless ($CourseBreadcrumbs) { + my $args = { id => 'LC_breadcrumbs' }; + if ($crumbs_style ne '') { + $args->{'style'} = $crumbs_style; + } + $links = &htmltag('div', $links, $args); + } } my $adv_tools = 0; if (ref($tools{'advtools'}) eq 'ARRAY') { @@ -2144,9 +2162,8 @@ returns: nothing # Return the breadcrumb's line - - - return "$links"; + my $labeltext = &HTML::Entities::encode(&mt('Links for navigation and information')); + return ''; } sub clear_breadcrumbs { @@ -2479,7 +2496,7 @@ END } sub row_title { - my ($title,$css_title_class,$css_value_class, $css_value_furtherAttributes) = @_; + my ($title,$css_title_class,$css_value_class,$css_value_furtherAttributes,$nocolon) = @_; $row_count[0]++; my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row'; $css_title_class ||= 'LC_pick_box_title'; @@ -2487,14 +2504,14 @@ sub row_title { $css_value_class ||= 'LC_pick_box_value'; - if ($title ne '') { + if (($title ne '') && (!$nocolon)) { $title .= ':'; } my $output = <<"ENDONE"; - + $title - + ENDONE return $output; @@ -3959,7 +3976,7 @@ sub list_from_array { sub generate_menu { my @menu = @_; # subs for specific html elements - my ($h3, $div, $ul, $li, $a, $img) = inittags( qw(h3 div ul li a img) ); + my ($h2, $div, $ul, $li, $a, $img) = inittags( qw(h2 div ul li a img) ); my @categories; # each element represents the entire markup for a category @@ -3982,30 +3999,25 @@ sub generate_menu { src => $src, alt => mt(defined($$link{alttext}) ? $$link{alttext} : $$link{linktext}) - }), { - href => $$link{url}, - title => mt($$link{linktitle}), - class => 'LC_menubuttons_link' - }). - $a->(mt($$link{linktext}), { + }).mt($$link{linktext}), { href => $$link{url}, title => mt($$link{linktitle}), class => "LC_menubuttons_link" }). - (defined($$link{help}) ? + (defined($$link{help}) ? Apache::loncommon::help_open_topic($$link{help}) : ''), {class => "LC_menubuttons_inline_text"})); } - # wrap categorytitle in

, concatenate with + # wrap categorytitle in

, concatenate with # joined and in
    tags wrapped @links # and wrap everything in an enclosing
    and push it into # @categories # such that each element looks like: - #

    title

    • ...
    • ...
    + #

    title

    • ...
    • ...
    # the category won't be added if there aren't any links push(@categories, - $div->($h3->(mt($$category{categorytitle}), {class=>"LC_hcell"}). + $div->($h2->(mt($$category{categorytitle}), {class=>'LC_hcell LC_heading_2'}). $ul->(join('' ,@links), {class =>"LC_ListStyleNormal" }), {class=>"LC_Box LC_400Box"})) if scalar(@links); }