--- 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&amp;filter=$filter&amp;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=~/\?/)?'&amp;':'?').'usehttp=1';
-                }
+                $cfile .= (($cfile=~/\?/)?'&amp;':'?').'usehttp=1';
             } elsif ($usehttps) {
                 $cfile = $env{'request.use_absolute'}.(($cfile =~ /^\//)? '':'/').$cfile;
             }