Diff for /rat/lonwrapper.pm between versions 1.49.2.2 and 1.49.2.11

version 1.49.2.2, 2016/10/31 21:31:42 version 1.49.2.11, 2021/12/15 00:41:48
Line 40  use Apache::lonextresedit(); Line 40  use Apache::lonextresedit();
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
 sub wrapper {  sub wrapper {
     my ($url,$brcrum,$absolute,$is_ext,$is_pdf,$title) = @_;      my ($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$title) = @_;
   
     my $forcereg;      my $forcereg;
     unless ($env{'form.folderpath'}) {      unless ($env{'form.folderpath'}) {
Line 52  sub wrapper { Line 52  sub wrapper {
                                           'show' => 'Show content in pop-up window',                                            'show' => 'Show content in pop-up window',
                                         );                                          );
   
     my $anchor;      (undef,undef,undef,undef,undef,undef,my $clientmobile) =
           &Apache::loncommon::decode_user_agent($r);
   
       my ($anchor,$uselink,$linktext);
     if ($is_ext) {      if ($is_ext) {
         if ($env{'form.symb'}) {          if ($env{'form.symb'}) {
             (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});              (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});
             if ($res =~ /(\#.+)$/) {              if ($res =~ /(#[^#]+)$/) {
                 $anchor = $1;                  $anchor = $1;
             }              }
         } elsif ($env{'form.anchor'} ne '') {          } elsif ($env{'form.anchor'} ne '') {
             $anchor = '#'.$env{'form.anchor'};              $anchor = '#'.$env{'form.anchor'};
         }          }
           unless (($is_pdf) && ($clientmobile)) {
               my $hostname = $r->hostname();
               my $lonhost = $r->dir_config('lonHostID');
               my $ip = &Apache::lonnet::get_host_ip($lonhost);
               $uselink = &Apache::loncommon::is_nonframeable($url,$absolute,$hostname,$ip);
           }
     }      }
   
     my $noiframe = &Apache::loncommon::modal_link($url.$anchor,$lt{'show'},500,400);      my $noiframe = &Apache::loncommon::modal_link($url.$anchor,$lt{'show'},500,400);
Line 73  sub wrapper { Line 82  sub wrapper {
         $args->{'bread_crumbs'} = $brcrum;          $args->{'bread_crumbs'} = $brcrum;
     }      }
     if ($absolute) {      if ($absolute) {
         $args->{'use_absolute'} = $absolute;           $args->{'use_absolute'} = $absolute;
       }
       if ($env{'form.only_body'}) {
           $args->{'only_body'} = $env{'form.only_body'};
       }
   
       my $headjs;
   
   #
   # Where iframe is in use, if window.onload() executes before the custom resize function
   # has been defined (jQuery), two global javascript vars (LCnotready and LCresizedef)
   # are used to ensure document.ready() triggers a call to resize, so the iframe contents
   # do not obscure the Functions menu.
   #
   
       unless ($clientmobile || $uselink) {
           $headjs = '
   <script type="text/javascript">
   // <![CDATA[
   var LCnotready = 0;
   var LCresizedef = 0;
   // ]]>
   </script>'."\n";
     }      }
   
     my $startpage = &Apache::loncommon::start_page('Menu',undef,$args);      my $startpage = &Apache::loncommon::start_page('Menu',$headjs,$args);
     my $endpage = &Apache::loncommon::end_page();      my $endpage = &Apache::loncommon::end_page();
   
     if ($env{'browser.mobile'}) {      if (($uselink) && ($title eq '')) {
           if ($env{'form.symb'}) {
               $title=&Apache::lonnet::gettitle($env{'form.symb'});
           } else {
               my $symb=&Apache::lonnet::symbread($r->uri);
               if ($symb) {
                   $title=&Apache::lonnet::gettitle($symb);
               }
           }
       }
       if ($clientmobile) {
         my $output = $startpage;          my $output = $startpage;
         if ($is_pdf) {          if ($is_pdf) {
             if ($title eq '') {              $linktext = &mt('Link to PDF (for mobile devices)');
                 $title = $env{'form.title'};              $output .= &create_link($url,$anchor,$title,$linktext);
                 if ($title eq '') {  
                     unless ($env{'request.enc'}) {  
                         ($title) = ($url =~ m{/([^/]+)$});  
                         $title =~ s/(\?[^\?]+)$//;  
                     }  
                 }  
             }  
             unless ($title eq '') {  
                 $output .= $title.'<br />';  
             }  
             $output .= '<a href="'.$url.'">'.&mt('Link to PDF (for mobile devices)').'</a>';  
         } else {          } else {
             $output .= '<div style="overflow:scroll; -webkit-overflow-scrolling:touch;">'."\n".              if ($uselink) {
                        '<iframe src="'.$url.$anchor.'" height="100%" width="100%" frameborder="0">'."\n".                  $linktext = &mt('Link to resource');
                        "$lt{'noif'} $noiframe\n".                  $output .= &create_link($url,$anchor,$title,$linktext);
                        "</iframe>\n".              } else {
                        "</div>\n";                  my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');
                   $output .= '<div style="overflow:scroll; -webkit-overflow-scrolling:touch;">'."\n".
                              '<iframe src="'.$dest.'" height="100%" width="100%" frameborder="0">'."\n".
                              "$lt{'noif'} $noiframe\n".
                              "</iframe>\n".
                              "</div>\n";
               }
         }          }
         $output .= $endpage;          $output .= $endpage;
         return $output;          return $output;
       } elsif ($uselink) {
           $linktext = &mt('Link to resource');
           return $startpage.&create_link($url,$anchor,$title,$linktext).$endpage;
     } else {      } else {
           my $offset = 5;
           &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['inhibitmenu']);
           if ($env{'form.inhibitmenu'} eq 'yes') {
               $offset = 0;
           }
         my $script = &Apache::lonhtmlcommon::scripttag(<<SCRIPT);          my $script = &Apache::lonhtmlcommon::scripttag(<<SCRIPT);
         \$(document).ready( function() {          \$(document).ready( function() {
             \$(window).unbind('resize').resize(function(){              \$(window).unbind('resize').resize(function(){
                 var header;                  var header = null;
                 var offset = 5;                  var offset = $offset;
                 var height = 0;                  var height = 0;
                 var hdrtop = 0;                  var hdrtop = 0;
                 if (\$('div.LC_head_subbox:first').length) {                  if (\$('div.LC_head_subbox:first').length) {
Line 120  sub wrapper { Line 164  sub wrapper {
                         header = \$('#LC_breadcrumbs');                          header = \$('#LC_breadcrumbs');
                     }                      }
                 }                  }
                 if (header.length) {                  if (header != null && header.length) {
                     height = header.height();                      height = header.height();
                     hdrtop = header.position().top;                      hdrtop = header.position().top;
                 }                  }
                 var pos = height + hdrtop + offset;                  var pos = height + hdrtop + offset;
                 \$('.LC_iframecontainer').css('top', pos);                  \$('.LC_iframecontainer').css('top', pos);
             });              });
               LCresizedef = 1;
               if (LCnotready == 1) {
                   LCnotready = 0;
                   \$(window).trigger('resize');
               }
         });          });
         window.onload = function(){  \$(window).trigger('resize') };          window.onload = function(){
               if (LCresizedef) {
                   LCnotready = 0;
                   \$(window).trigger('resize');
               } else {
                   LCnotready = 1;
               }
           };
 SCRIPT  SCRIPT
         # javascript will position the iframe if window was resized (or zoomed)          # javascript will position the iframe if window was resized (or zoomed)
         return <<ENDFRAME;          return <<ENDFRAME;
Line 142  ENDFRAME Line 198  ENDFRAME
     }      }
 }  }
   
   sub create_link {
       my ($url,$anchor,$title,$linktext) = @_;
       my $shownlink;
       if ($title eq '') {
           $title = $env{'form.title'};
           if ($title eq '') {
               unless ($env{'request.enc'}) {
                   ($title) = ($url =~ m{/([^/]+)$});
                   $title =~ s/(\?[^\?]+)$//;
               }
           }
       }
       unless ($title eq '') {
           $shownlink = '<span style="font-weight:bold;">'.$title.'</span><br />';
       }
       my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');
       $shownlink .= '<a href="'.$dest.'">'.$linktext.'</a>';
       return $shownlink;
   }
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
Line 150  sub handler { Line 226  sub handler {
     return OK if $r->header_only;      return OK if $r->header_only;
   
     my $url = $r->uri;      my $url = $r->uri;
     my ($is_ext,$brcrum,$absolute,$is_pdf);      my ($is_ext,$brcrum,$absolute,$is_pdf,$cdom,$cnum,$hostname);
   
     for ($url){      for ($url){
         s|^/adm/wrapper||;          s|^/adm/wrapper||;
         $is_ext = $_ =~ s|^/ext/|http://|;                   $is_ext = $_ =~ s|^/ext/|http://|;
         s|http://https://|https://|;          s|http://https://|https://| if ($is_ext);
         s|&colon;|:|g;                        s|&colon;|:|g;
     }      }
   
     if ($url =~ /\.pdf$/i) {      if ($url =~ /\.pdf$/i) {
Line 180  sub handler { Line 256  sub handler {
                     $url .= '#'.$env{'form.anchor'};                      $url .= '#'.$env{'form.anchor'};
                 }                  }
             }              }
               if (($url =~ /^http:/) && ($ENV{'SERVER_PORT'} == 443)) {
                   $hostname = $r->hostname();
               }
               my $type = 'ext';
             $r->print(              $r->print(
                 &Apache::lonextresedit::display_editor($url,$env{'form.folderpath'},                  &Apache::lonextresedit::display_editor($url,$env{'form.folderpath'},
                                                        $env{'form.symb'},                                                         $env{'form.symb'},
                                                        $env{'form.idx'}));                                                         $env{'form.idx'},$type,$cdom,
                                                          $cnum,$hostname));
             return OK;              return OK;
         } elsif ($env{'form.folderpath'} =~ /^supplemental/) {          } elsif ($env{'form.folderpath'} =~ /^supplemental/) {
             my $crstype = &Apache::loncommon::course_type();              my $crstype = &Apache::loncommon::course_type();
Line 222  sub handler { Line 303  sub handler {
         # encrypt url if not external          # encrypt url if not external
         &Apache::lonenc::check_encrypt(\$url) if $url !~ /^https?\:/ ;          &Apache::lonenc::check_encrypt(\$url) if $url !~ /^https?\:/ ;
   
         $r->print( wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf) );          $r->print( wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf) );
   
     } # not just the menu      } # not just the menu
           
Line 249  described at http://www.lon-capa.org. Line 330  described at http://www.lon-capa.org.
   
 =over  =over
   
 =item wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf,$title))  =item wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$title))
   
 =over  =over
   
   =item $r
   
   request object
   
 =item $url  =item $url
   
 url to display by including in an iframe within a  url to display by including in an iframe within a
Line 293  true if URL is for a PDF (based on file Line 378  true if URL is for a PDF (based on file
   
 =item $title  =item $title
   
 optional. If wrapped item is a PDF, and $env{'browser.mobile'}   optional. If wrapped item is a PDF, and $clientmobile is true,
 is true, a link to a PDF is shown. The "title" will be displayed  a link to a PDF is shown. The "title" will be displayed
 above the link, but if not provided as an arg, $env{'form.title'}  above the link, but if not provided as an arg, $env{'form.title'}
 will be used, otherwise, the filename will be displayed (unless  will be used, otherwise, the filename will be displayed (unless
 hidden URL set for the resource).  hidden URL set for the resource).

Removed from v.1.49.2.2  
changed lines
  Added in v.1.49.2.11


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>