Diff for /rat/lonwrapper.pm between versions 1.42 and 1.49.2.1

version 1.42, 2012/11/27 23:45:15 version 1.49.2.1, 2016/08/05 21:34:54
Line 40  use Apache::lonextresedit(); Line 40  use Apache::lonextresedit();
   
 # ================================================================ Main Handler  # ================================================================ Main Handler
 sub wrapper {  sub wrapper {
     my ($url,$brcrum) = @_;      my ($url,$brcrum,$absolute,$is_ext,$is_pdf,$title) = @_;
   
     my $forcereg;      my $forcereg;
     unless ($env{'form.folderpath'}) {      unless ($env{'form.folderpath'}) {
         $forcereg = 1;          $forcereg = 1;
     }      }
   
       my %lt = &Apache::lonlocal::texthash(
                                             'noif' => 'No iframe support.',
                                             'show' => 'Show content in pop-up window',
                                           );
   
       my $anchor;
       if (($is_ext) && ($env{'form.symb'})) {
           (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});
           if ($res =~ /(\#.+)$/) {
               $anchor = $1;
           }
       }
   
       my $noiframe = &Apache::loncommon::modal_link($url.$anchor,$lt{'show'},500,400);
     my $args = {'bgcolor' => '#FFFFFF'};      my $args = {'bgcolor' => '#FFFFFF'};
     if ($forcereg) {      if ($forcereg) {
         $args->{'force_register'} = $forcereg;          $args->{'force_register'} = $forcereg;
     }      }
     if (ref($brcrum) eq 'ARRAY') {      if (ref($brcrum) eq 'ARRAY') {
          $args->{'bread_crumbs'} = $brcrum;          $args->{'bread_crumbs'} = $brcrum;
       }
       if ($absolute) {
           $args->{'use_absolute'} = $absolute; 
     }      }
   
     my $startpage =  Apache::loncommon::start_page('Menu',undef,$args);      my $startpage = &Apache::loncommon::start_page('Menu',undef,$args);
     my $endpage =  Apache::loncommon::end_page();      my $endpage = &Apache::loncommon::end_page();
   
     my $script = Apache::lonhtmlcommon::scripttag(<<SCRIPT );      if ($env{'browser.mobile'}) {
     \$(document).ready( function() {          my $output = $startpage;
         \$(window).unbind('resize').resize(function(){          if ($is_pdf) {
             var header;              if ($title eq '') {
             var offset = 5;                  $title = $env{'form.title'};
             var height = 0;                  if ($title eq '') {
             var hdrtop = 0;                      unless ($env{'request.enc'}) {
             if (\$('div.LC_head_subbox:first').length) {                          ($title) = ($url =~ m{/([^/]+)$});
                 header = \$('div.LC_head_subbox:first');                          $title =~ s/(\?[^\?]+)$//;
                 offset = 9;                      }
             } else {  
                 if (\$('#LC_breadcrumbs').length) {  
                     header = \$('#LC_breadcrumbs');  
                 }                  }
             }              }
             if (header.length) {              unless ($title eq '') {
                 height = header.height();                  $output .= $title.'<br />';
                 hdrtop = header.position().top;  
             }              }
             var pos = height + hdrtop + offset;              $output .= '<a href="'.$url.'">'.&mt('Link to PDF (for mobile devices)').'</a>';
             \$('.LC_iframecontainer').css('top', pos);          } else {
               $output .= '<div style="overflow:scroll; -webkit-overflow-scrolling:touch;">'."\n".
                          '<iframe src="'.$url.$anchor.'" height="100%" width="100%" frameborder="0">'."\n".
                          "$lt{'noif'} $noiframe\n".
                          "</iframe>\n".
                          "</div>\n";
           }
           $output .= $endpage;
           return $output;
       } else {
           my $script = &Apache::lonhtmlcommon::scripttag(<<SCRIPT);
           \$(document).ready( function() {
               \$(window).unbind('resize').resize(function(){
                   var header;
                   var offset = 5;
                   var height = 0;
                   var hdrtop = 0;
                   if (\$('div.LC_head_subbox:first').length) {
                       header = \$('div.LC_head_subbox:first');
                       offset = 9;
                   } else {
                       if (\$('#LC_breadcrumbs').length) {
                           header = \$('#LC_breadcrumbs');
                       }
                   }
                   if (header.length) {
                       height = header.height();
                       hdrtop = header.position().top;
                   }
                   var pos = height + hdrtop + offset;
                   \$('.LC_iframecontainer').css('top', pos);
               });
         });          });
     });          window.onload = function(){  \$(window).trigger('resize') };
     window.onload = function(){  \$(window).trigger('resize') };   
 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;          $startpage
     $startpage          $script
     $script          <div class="LC_iframecontainer">
     <div class="LC_iframecontainer">              <iframe src="$url$anchor">$lt{'noif'} $noiframe</iframe>
         <iframe src="$url">No iframe support!</iframe>          </div>
     </div>          $endpage
     $endpage  
 ENDFRAME  ENDFRAME
       }
 }  }
   
 sub handler {  sub handler {
Line 103  sub handler { Line 146  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);      my ($is_ext,$brcrum,$absolute,$is_pdf);
   
     for ($url){      for ($url){
         s|^/adm/wrapper||;          s|^/adm/wrapper||;
Line 112  sub handler { Line 155  sub handler {
         s|&colon;|:|g;                        s|&colon;|:|g;              
     }      }
   
       if ($url =~ /\.pdf$/i) {
           $is_pdf = 1;
       }
    
     if ($is_ext) {      if ($is_ext) {
         &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},          &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
             ['forceedit','register','folderpath','symb','idx','title']);              ['forceedit','register','folderpath','symb','idx','title']);
Line 126  sub handler { Line 173  sub handler {
             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();
             $brcrum =              my $title = $env{'form.title'};
                 &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$env{'form.title'},1);              if ($title eq '') {
             if (ref($brcrum) eq 'ARRAY') {                  $title = &mt('External Resource');
                 my $last = $env{'form.title'};  
                 if ($last eq '') {  
                     $last = &mt('External Resource');  
                 }  
                 push(@{$brcrum},  
                          {'title' => $last,  
                           'text' => $last,  
                           'no_mt' => 1,  
                          });  
   
             }              }
               $brcrum =
                   &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
         }          }
     }      }
   
Line 157  sub handler { Line 196  sub handler {
 # This is not homework  # This is not homework
 #  #
         if ($is_ext) {          if ($is_ext) {
               $absolute = $env{'request.use_absolute'};
             $ENV{'QUERY_STRING'} =~ s/(^|\&)symb=[^\&]*/$1/;              $ENV{'QUERY_STRING'} =~ s/(^|\&)symb=[^\&]*/$1/;
             $ENV{'QUERY_STRING'} =~ s/\&$//;              $ENV{'QUERY_STRING'} =~ s/\&$//;
         }          }
Line 168  sub handler { Line 208  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) );          $r->print( wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf) );
   
     } # not just the menu      } # not just the menu
           
Line 195  described at http://www.lon-capa.org. Line 235  described at http://www.lon-capa.org.
   
 =over  =over
   
 =item wrapper($url,$brcrum)  =item wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf,$title))
   
   =over
   
   =item $url
   
 Wraps $url in an iframe and generates a page for it.  url to display by including in an iframe within a
 $brcrum contains breadcrumbs for unregistered urls  LON-CAPA page which has a standard LON-CAPA inline menu.
   
   =item $brcrum
   
   breadcrumbs for unregistered urls
 (i.e., external resources in Supplemental Content).  (i.e., external resources in Supplemental Content).
 Returns markup for the entire page.  
   
 =item handler()  =item $absolute
   
 =back  contains protocol (http or https) followed by
   the hostname, if menu items in the standard LON-CAPA
   interface created by the call to loncommon::start_page()
   within &wrapper() need to use absolute URLs rather than
   relative URLs.
   
 =cut  That will be the case where an external resource has been 
   served from port 80, when the server customarily serves
   requests using Apache/SSL (i.e., port 443). mod_rewrite 
   is used to switch requests for external resources and
   the syllabus: /public/<domain>/<courseid>/syllabus
   (which might also point at an external resource)
   from https:// to http:// where the the URL of the remote site 
   specified in the resource itself is http://.
   
   This is done to avoid default mixed content blocking
   in Firefox 23 and later, when serving from Apache/SSL.
   
   =item $is_ext
   
   true if URL is for an external resource.
   
   =item $is_pdf
   
   true if URL is for a PDF (based on file extension).
   
   =item $title
   
   optional. If wrapped item is a PDF, and $env{'browser.mobile'} 
   is true, 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'}
   will be used, otherwise, the filename will be displayed (unless
   hidden URL set for the resource).
   
   =back
   
   Returns markup for the entire page.
   
   =item handler()
   
   =back
   
   =cut
   

Removed from v.1.42  
changed lines
  Added in v.1.49.2.1


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