--- loncom/interface/lonhtmlcommon.pm 2022/05/24 18:21:43 1.402 +++ loncom/interface/lonhtmlcommon.pm 2024/04/14 17:12:27 1.411 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.402 2022/05/24 18:21:43 raeburn Exp $ +# $Id: lonhtmlcommon.pm,v 1.411 2024/04/14 17:12:27 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -79,12 +79,10 @@ sub coursepreflink { my ($text,$category)=@_; if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { my $target =' target="_top"'; - if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { + if ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || + (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) { $target =''; } - if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'})) { - $target = ' target="'.$env{'request.deeplink.target'}.'"'; - } return '&"').'">'.$text.''; } else { return ''; @@ -109,12 +107,10 @@ sub direct_parm_link { $part=&entity_encode($part); if (($symb) && (&Apache::lonnet::allowed('opa')) && ($target ne 'tex')) { my $target=' target="_top"'; - if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { + if ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || + (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) { $target=''; } - if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'})) { - $target = ' target="'.$env{'request.deeplink.target'}.'"'; - } return "$linktext"; } else { return $linktext; @@ -235,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 < // 1) +# +# Will apply to any input tag with class: LC_numresponse_text. +# Currently set in start_textline for numericalresponse items. +# + +sub dash_to_minus_js { + return <<'ENDJS'; + + + +ENDJS +} + ############################################################ ############################################################ @@ -1876,6 +1932,13 @@ loncommon::help_open_topic() to generate text to include in the link in the optional help item ($topic_help) on the right side of the breadcrumbs row. +=item $links_target + +optionally includes the target (_top, _parent or _self) for (i) initial +$menulink item in the breadcrumbs (if present), (ii) return to last location +(if present), and (iii) help item at the right side of breadcrumbs menu, +created by loncommon::help_open_topic() or loncommon::help_open_menu(). + =back =back @@ -1907,7 +1970,7 @@ returns: nothing sub breadcrumbs { my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, - $CourseBreadcrumbs,$topic_help,$topic_help_text,$crstype) = @_; + $CourseBreadcrumbs,$topic_help,$topic_help_text,$links_target) = @_; # $css_class ||= 'LC_breadcrumbs'; @@ -1951,12 +2014,12 @@ returns: nothing } } my $target = '_top'; - if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { + if ($links_target) { + $target = $links_target; + } elsif ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || + (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) { $target=''; } - if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'})) { - $target = $env{'request.deeplink.target'}; - } $menulink = { href =>'/adm/menu', title =>'Go to main menu', target =>$target, @@ -1977,14 +2040,8 @@ returns: nothing title => &mt('Back to most recent content resource'), class => 'LC_menubuttons_link', }; - if ($env{'request.noversionuri'} eq '/adm/searchcat') { - $hashref->{'target'} = '_top'; - if (($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) { - $hashref->{'target'} = '_parent'; - } - if (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self')) { - $hashref->{'target'} = '_parent'; - } + if ($links_target) { + $hashref->{'target'} = $links_target; } $links=&htmltag( 'a',''.$alttext.'', $hashref); @@ -2035,11 +2092,12 @@ returns: nothing if ($faq ne '' || $component_help ne '' || $bug ne '') { $icons .= &Apache::loncommon::help_open_menu($component, $component_help, - $faq,$bug); + $faq,$bug,'','','','', + $links_target); } if ($topic_help && $topic_help_text) { $icons .= ' '.&Apache::loncommon::help_open_topic($topic_help,&mt($topic_help_text),'', - undef,600); + undef,600,'',$links_target); } # @@ -2239,7 +2297,7 @@ returns: nothing } # End of scope for @Crumbs sub docs_breadcrumbs { - my ($allowed,$crstype,$contenteditor,$title,$precleared)=@_; + my ($allowed,$crstype,$contenteditor,$title,$precleared,$checklinkprot)=@_; my ($folderpath,@folders,$supplementalflag); @folders = split('&',$env{'form.folderpath'}); if ($env{'form.folderpath'} =~ /^supplemental/) { @@ -2265,8 +2323,10 @@ sub docs_breadcrumbs { # each of randompick number, hidden, encrypted, random order, is_page # are appended with ":"s to the foldername $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)\:?(\d*)$//; - unless ($supplementalflag) { - if ($contenteditor) { + if ($contenteditor) { + if ($supplementalflag) { + if ($2) { $ishidden=1; } + } else { if ($1 ne '') { $randompick=$1; } else { @@ -2307,9 +2367,17 @@ sub docs_breadcrumbs { $plain=~s/\>\;\s*$//; } my $menulink = 0; - if (!$allowed && !$contenteditor) { + if (!$allowed && !$contenteditor && !$supplementalflag) { $menulink = 1; } + if ($checklinkprot) { + if ($env{'request.deeplink.login'}) { + my $linkprotout = &Apache::lonmenu::linkprot_exit(); + if ($linkprotout) { + &Apache::lonhtmlcommon::add_breadcrumb_tool('tools',$linkprotout); + } + } + } return (&breadcrumbs(undef,undef,$menulink,'nohelp',undef,undef, $contenteditor), $randompick,$ishidden,$isencrypted,$plain, @@ -3529,7 +3597,10 @@ THIRD sub javascript_jumpto_resource { my $confirm_switch = &mt("Editing requires switching to the resource's home server.")."\n". &mt('Switch server?'); + my $confirm_new_tab = &mt("Editing requires using the resource's home server.")."\n". + &mt('Open a new browser tab?'); &js_escape(\$confirm_switch); + &js_escape(\$confirm_new_tab); return (<&'); - if ($symb) { - $cfile .= '&symb='.&HTML::Entities::encode($symb,'"<>&'); + if ($shownsymb) { + $cfile .= '&symb='.&HTML::Entities::encode($shownsymb,'"<>&'); + if ($resedit) { + $cfile .= '&edit=1'; + } } elsif ($folderpath) { $cfile .= '&folderpath='.&HTML::Entities::encode($folderpath,'"<>&'); } @@ -3582,7 +3677,7 @@ sub jump_to_editres { if ($forcereg) { $cfile .= '&register=1'; } - $jscall = "need_switchserver('".&Apache::loncommon::escape_single($cfile)."');"; + $jscall = "need_switchserver('".&Apache::loncommon::escape_single($cfile)."','$target')"; } } else { unless ($cfile =~ m{^/priv/}) {