--- loncom/interface/lonhtmlcommon.pm 2018/12/27 20:10:31 1.394 +++ loncom/interface/lonhtmlcommon.pm 2022/05/29 20:37:21 1.403 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.394 2018/12/27 20:10:31 raeburn Exp $ +# $Id: lonhtmlcommon.pm,v 1.403 2022/05/29 20:37:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -79,7 +79,8 @@ 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 =''; } return '<a'.$target.' href="'.&HTML::Entities::encode("/adm/courseprefs?phase=display&actions=$category",'<>&"').'"><span class="LC_setting">'.$text.'</span></a>'; @@ -106,7 +107,8 @@ 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=''; } return "<a".$target." href=\"/adm/parmset?symb=$symb&filter=$filter&part=$part\"><span class=\"LC_setting\">$linktext</span></a>"; @@ -866,13 +868,14 @@ parameter setting wizard. ############################################## sub pjump_javascript_definition { my $Str = <<END; - function pjump(type,dis,value,marker,ret,call,hour,min,sec) { + function pjump(type,dis,value,marker,ret,call,hour,min,sec,extra) { openMyModal("/adm/rat/parameter.html?type="+escape(type) +"&value="+escape(value)+"&marker="+escape(marker) +"&return="+escape(ret) +"&call="+escape(call)+"&name="+escape(dis) +"&defhour="+escape(hour)+"&defmin="+escape(min) - +"&defsec="+escape(sec)+"&modal=1",350,350,'no'); + +"&defsec="+escape(sec)+"&extra="+escape(extra) + +"&modal=1",350,350,'no'); } END return $Str; @@ -1869,6 +1872,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 @@ -1900,7 +1910,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'; @@ -1916,6 +1926,16 @@ returns: nothing # The first one should be the course or a menu link if (!defined($menulink)) { $menulink=1; } if ($menulink) { + if ($env{'request.course.id'}) { + my ($menucoll,$deeplinkmenu,$menuref) = &Apache::loncommon::menucoll_in_effect(); + if (($menucoll) && (ref($menuref) eq 'HASH')) { + if ($menuref->{'main'} eq 'n') { + undef($menulink); + } + } + } + } + if ($menulink) { my $description = 'Menu'; my $no_mt_descr = 0; if ((exists($env{'request.course.id'})) && @@ -1934,7 +1954,10 @@ 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=''; } $menulink = { href =>'/adm/menu', @@ -1957,11 +1980,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'} = ''; - } + if ($links_target) { + $hashref->{'target'} = $links_target; } $links=&htmltag( 'a','<img src="/res/adm/pages/tolastloc.png" alt="'.$alttext.'" class="LC_icon" />', $hashref); @@ -2012,11 +2032,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); } # @@ -2660,9 +2681,9 @@ sub course_custom_roles { sub resource_info_box { - my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp)=@_; + my ($symb,$onlyfolderflag,$stuvcurrent,$stuvdisp,$divforres)=@_; my $return=''; - if ($stuvcurrent ne '') { + if (($stuvcurrent ne '') || ($divforres)) { $return = '<div class="LC_left_float">'; } if ($symb) { @@ -2691,7 +2712,7 @@ sub resource_info_box { } else { $return='<p><span class="LC_error">'.&mt('No context provided.').'</span></p>'; } - if ($stuvcurrent ne '') { + if (($stuvcurrent ne '') || ($divforres)) { $return .= '</div>'; } return $return; @@ -3422,12 +3443,18 @@ PARAMSONE if (itemid != null) { itemh = itemid.offsetHeight; } - var primaryheight = document.getElementById('LC_nav_bar').offsetHeight; - var secondaryheight; + var primaryheight = 0; + if (document.getElementById('LC_nav_bar') != null) { + primaryheight = document.getElementById('LC_nav_bar').offsetHeight; + } + var secondaryheight = 0; if (document.getElementById('LC_secondary_menu') != null) { secondaryheight = document.getElementById('LC_secondary_menu').offsetHeight; } - var crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight; + var crumbsheight = 0; + if (document.getElementById('LC_breadcrumbs') != null) { + crumbsheight = document.getElementById('LC_breadcrumbs').offsetHeight; + } var dccidheight = 0; if (document.getElementById('dccid') != null) { dccidheight = document.getElementById('dccid').offsetHeight; @@ -3557,13 +3584,13 @@ sub jump_to_editres { } } else { unless ($cfile =~ m{^/priv/}) { - if ($cfile =~ m{^(/adm/wrapper/ext/([^#]+))#([^#]+)$}) { + if ($cfile =~ m{^(/adm/wrapper/ext/([^#]+))(?:|#([^#]+))$}) { $cfile = $1; my $extlink = $2; $anchor = $3; $is_ext = 1; if (($extlink !~ /^https:/) && ($ENV{'SERVER_PORT'} == 443)) { - unless (&Apache::lonnet::uses_sts()) { + unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { $usehttp = 1; } } elsif ($env{'request.use_absolute'}) { @@ -3578,7 +3605,7 @@ sub jump_to_editres { ($env{'course.'.$env{'request.course.id'}.'.num'} eq $cnum) && ($env{'course.'.$env{'request.course.id'}.'.domain'} eq $cdom)) { if ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://}) { - unless (&Apache::lonnet::uses_sts()) { + unless ((&Apache::lonnet::uses_sts()) || (&Apache::lonnet::waf_allssl($hostname))) { $usehttp = 1; } } @@ -3620,9 +3647,7 @@ sub jump_to_editres { if ($hostname ne '') { $cfile = 'http://'.$hostname.(($cfile =~ /^\//)? '':'/').$cfile; } - unless ($is_ext) { - $cfile .= (($cfile=~/\?/)?'&':'?').'usehttp=1'; - } + $cfile .= (($cfile=~/\?/)?'&':'?').'usehttp=1'; } elsif ($usehttps) { $cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile; }