Diff for /rat/lonwrapper.pm between versions 1.49.2.7.2.6 and 1.70

version 1.49.2.7.2.6, 2021/10/19 11:27:51 version 1.70, 2020/01/14 14:26:39
Line 38  use Apache::loncommon(); Line 38  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::lonextresedit();  use Apache::lonextresedit();
 use Apache::lonexttool();  use Apache::lonexttool();
   use Apache::lonhomework();
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use HTML::Entities();  use HTML::Entities();
   
Line 50  sub wrapper { Line 51  sub wrapper {
     unless ($env{'form.folderpath'}) {      unless ($env{'form.folderpath'}) {
         $forcereg = 1;          $forcereg = 1;
     }      }
   
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                                           'noif' => 'No iframe support.',                                            'noif' => 'No iframe support.',
                                           'show' => 'Show content in pop-up window',                                            'show' => 'Show content in pop-up window',
                                         );                                          );
   
     (undef,undef,undef,undef,undef,undef,my $clientmobile) =  
         &Apache::loncommon::decode_user_agent($r);  
   
     my ($anchor,$uselink);      my ($anchor,$uselink);
     if ($is_ext) {      if ($is_ext) {
         if ($env{'form.symb'}) {          if ($env{'form.symb'}) {
Line 69  sub wrapper { Line 66  sub wrapper {
         } elsif ($env{'form.anchor'} ne '') {          } elsif ($env{'form.anchor'} ne '') {
             $anchor = '#'.$env{'form.anchor'};              $anchor = '#'.$env{'form.anchor'};
         }          }
         unless (($is_pdf) && ($clientmobile)) {          unless (($is_pdf) && ($env{'browser.mobile'})) {
             my $hostname = $r->hostname();              my $hostname = $r->hostname();
             my $lonhost = $r->dir_config('lonHostID');              my $lonhost = $r->dir_config('lonHostID');
             my $ip = &Apache::lonnet::get_host_ip($lonhost);              my $ip = &Apache::lonnet::get_host_ip($lonhost);
Line 92  sub wrapper { Line 89  sub wrapper {
         $args->{'only_body'} = $env{'form.only_body'};          $args->{'only_body'} = $env{'form.only_body'};
     }      }
   
     my $headjs;      my ($countdown,$donemsg);
       if (($exttool) && (&Apache::lonnet::EXT('resource.0.gradable') =~ /^yes$/i)) {
 #          $Apache::lonhomework::browse = &Apache::lonnet::allowed('bre',$url);
 # Where iframe is in use, if window.onload() executes before the custom resize function          if ($env{'form.markaccess'}) {
 # has been defined (jQuery), two global javascript vars (LCnotready and LCresizedef)              my $symb=&Apache::lonnet::symbread($url);
 # are used to ensure document.ready() triggers a call to resize, so the iframe contents              my @interval=&Apache::lonnet::EXT('resource.0.interval',$symb);
 # do not obscure the Functions menu.              my ($timelimit) = split(/_/,$interval[0]);
 #              my $setres = &Apache::lonnet::set_first_access($interval[1],$timelimit);
               if ($setres eq 'ok') {
     unless ($clientmobile || ($exttool eq 'window') || ($exttool eq 'tab') || $uselink) {                  delete($env{'form.markaccess'});
         $headjs = '              }
           } elsif ($env{'form.LC_interval_done'} eq 'true') {
               my $symb=&Apache::lonnet::symbread($url);
               if ($symb) {
                   (my $donebuttonresult,$donemsg) = &Apache::lonhomework::zero_timer($symb);
                   undef($env{'form.LC_interval_done'});
                   undef($env{'form.LC_interval_done_proctorpass'});
               }
           }
           my ($status,$result,$resource_due) =
               &Apache::lonexttool::gradabletool_access_check();
           undef($Apache::lonhomework::browse);
           if ($status eq 'CAN_ANSWER') {
               if ($resource_due) {
                   my $time_left = $resource_due - time();
                   if ($resource_due && ($time_left > 0)) {
                       $countdown ='
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA['."\n".
 var LCnotready = 0;                               &Apache::lonhtmlcommon::countdown().'
 var LCresizedef = 0;  
 // ]]>  // ]]>
 </script>'."\n";  </script>'."\n".
                       &Apache::lonhtmlcommon::set_due_date($resource_due);
                   }
               }
           } else {
               if ($status eq 'SHOW_ANSWER') {
                   $result = &Apache::lonexttool::display_score().
                             &Apache::lonfeedback::list_discussion('tool','OPEN');
               }
               return &Apache::loncommon::start_page('Menu',undef,$args).
                      $result.
                      &Apache::loncommon::end_page();
           }
     }      }
   
     my $startpage = &Apache::loncommon::start_page('Menu',$headjs,$args);      my $startpage = &Apache::loncommon::start_page('Menu',undef,$args).$countdown.$donemsg;
     my $endpage = &Apache::loncommon::end_page();      my $endpage = &Apache::loncommon::end_page();
   
     if (($uselink) && ($title eq '')) {      if (($uselink) && ($title eq '')) {
Line 124  var LCresizedef = 0; Line 148  var LCresizedef = 0;
             }              }
         }          }
     }      }
     if ($clientmobile || ($exttool eq 'window') || ($exttool eq 'tab')) {      if (($env{'browser.mobile'}) || ($exttool eq 'window') || ($exttool eq 'tab')) {
         my $output = $startpage;          my $output = $startpage;
         if ($is_pdf) {          if ($is_pdf) {
             $linktext = &mt('Link to PDF (for mobile devices)');              $linktext = &mt('Link to PDF (for mobile devices)');
Line 170  ENDLINK Line 194  ENDLINK
             if ($explanation ne '') {              if ($explanation ne '') {
                 $output .= '<div>'.$explanation.'</div>';                  $output .= '<div>'.$explanation.'</div>';
             }              }
               if (&Apache::lonnet::EXT('resource.0.gradable')) {
                   $output .= &Apache::lonfeedback::list_discussion('tool','OPEN');
               }
         } else {          } else {
             if ($uselink) {              if ($uselink) {
                 $linktext = &mt('Link to resource');                  $linktext = &mt('Link to resource');
Line 216  ENDLINK Line 243  ENDLINK
                 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.onload = function(){  \$(window).trigger('resize') };
             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)
         my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');          my $dest = &HTML::Entities::encode($url.$anchor,'&<>"');
Line 277  sub handler { Line 292  sub handler {
   
     for ($url){      for ($url){
         s|^/adm/wrapper||;          s|^/adm/wrapper||;
         $is_ext = $_ =~ s|^/ext/|http://|;          $is_ext = $_ =~ s|^/ext/|http://|;         
         s|http://https://|https://| if ($is_ext);          s|http://https://|https://|;
         s|&colon;|:|g;          s|&colon;|:|g;
     }      }
   
Line 412  described at http://www.lon-capa.org. Line 427  described at http://www.lon-capa.org.
   
 =over  =over
   
 =item wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool,$linktext,$explanation,$title,$width,$height)  =item wrapper($r,$url,$brcrum,$absolute,$is_ext,$is_pdf,$linktext,$explanation,$title,$width,$height)
   
 =over  =over
   
Line 460  true if URL is for a PDF (based on file Line 475  true if URL is for a PDF (based on file
   
 =item $title  =item $title
   
 optional. If wrapped item is a PDF, and $clientmobile is true,  optional. If wrapped item is a PDF, and $env{'browser.mobile'} 
 a link to a PDF is shown. The "title" will be displayed  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'}  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.7.2.6  
changed lines
  Added in v.1.70


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