Diff for /loncom/homework/daxepage.pm between versions 1.4 and 1.11

version 1.4, 2016/02/14 16:07:13 version 1.11, 2024/03/03 18:16:27
Line 28 Line 28
 ###  ###
   
 package Apache::daxepage;  package Apache::daxepage;
   use strict;
   
 use Apache::Constants;  use Apache::loncommon();
   use Apache::lonnet();
   use Apache::lonhtmlcommon();
   use Apache::lonxml();
   use Apache::edit();
   use Apache::lonmenu();
   use Apache::lonlocal;
   use Apache::Constants qw(:common);
   use LONCAPA qw(:DEFAULT :match);
   use HTML::Entities();
   
 sub handler {  sub handler {
     my $request = shift;      my $request = shift;
     my $uri = $request->uri;      my $uri = $request->uri;
     $uri =~ s/^\/daxepage//;      $uri =~ s{^/daxepage}{};
     &Apache::loncommon::content_type($request,'text/html');      &Apache::loncommon::content_type($request,'text/html');
     if ($uri !~ /\.(task|problem|exam|quiz|assess|survey|library|xml|html|htm|xhtml|xhtm)$/) {      my ($is_not_assess,$is_assess);
       if ($uri =~/\.(xml|html|htm|xhtml|xhtm)$/) {
           $is_not_assess = 1;
       } elsif ($uri =~ /$LONCAPA::assess_re/) {
           unless ($uri =~ /\.form$/) {
               $is_assess = 1;
           }
       }
       unless ($is_not_assess || $is_assess) {
         $request->status(406);          $request->status(406);
         return OK;          return OK;
     }      }
     my $result = '';      my %editors = &Apache::loncommon::permitted_editors();
     $result .= "<!DOCTYPE html>\n";      unless ($editors{'daxe'}) {
     $result .= "<html>\n";          my $msg = '<p class="LC_warning">'.
     $result .= "<head>\n";                    &mt('Daxe editor is not enabled for this Authoring Space.').'</p>';
           &do_redirect($request,$uri,$msg);
           return OK;
       }
       if ($is_not_assess) {
           delete($editors{'xml'});
           $editors{'edit'} = 1;
       }
       my %lt = &Apache::lonlocal::texthash(
                                             'noif' => 'No iframe support.',
                                             'show' => 'Show content in pop-up window',
                                             'oeds' => 'other editors',
                                             'othe' => 'other editor',
                                             'edit' => 'Edit',
                                             'exit' => 'Exit Daxe',
                                           );
     my $name = $uri;      my $name = $uri;
     $name =~ s/^.*\/([^\/]+)$/$1/;      $name =~ s/^.*\/([^\/]+)$/$1/;
     $result .= "  <title>LON-CAPA Daxe: $name</title>\n";      my $daxeurl = '/adm/daxe/daxe.html?config=config/loncapa_config.xml&save=/daxesave'.
     $result .= "  <style>\n";                    '&file=/daxeopen'.$uri;
     $result .= "    body { margin: 0; }\n";      my $headjs = &Apache::loncommon::iframe_wrapper_headjs().
     $result .= "    #daxe { position:absolute; top:0; left:0; width:100%; height:100%; border:none; }\n";                   &toggle_LCmenus_js().
     $result .= "  </style>\n";                   &Apache::edit::js_change_detection();
     $result .= "</head>\n";      my $clickexit; 
     $result .= "<body>\n";      if ($is_assess) {
     my $daxeurl = '/adm/daxe/daxe.html?config=config/loncapa_config.xml&amp;file=/daxeopen'.$uri.          $headjs .= &Apache::lonxml::setmode_javascript();
         '&amp;save=/daxesave';          $clickexit = "javascript:setmode(this.form,'view')";
     $result .= '  <iframe id="daxe" src="'.$daxeurl.'"></iframe>'."\n";      } else {
     $result .= "</body>\n";          $headjs .= &Apache::lonxml::seteditor_javascript();
     $result .= "</html>\n";          $clickexit = "javascript:seteditmode(this.form,'view')";
     $request->print($result);      }
       my $form_events = &Apache::edit::form_change_detection();
       my $editheader = '<form '.$form_events.' method="post" name="daxeedit" action="'.$uri.'">'.
                        '<input type="hidden" name="problemmode" value="daxe" />'."\n".
                        '<div class="LC_edit_problem_editxml_header">'."\n";
       my $exitbutton = '<input type="button" name="submitmode" accesskey="t" value="'.$lt{'exit'}.
                        '" onclick="'.$clickexit.'" />'."\n";
       if ($editors{'edit'} || $editors{'xml'}) {
           my $other = (($editors{'edit'} && $editors{'xml'})? $lt{'oeds'} : $lt{'othe'});
           $editheader .= '<table class="LC_edit_problem_header_title"><tr><td>'.
                          $uri.
                          '</td><td align="right"><span class="LC_nobreak">'.$other.': ';
           if ($is_not_assess) {
               $editheader .= '<input type="hidden" name="editmode" value="" />'."\n".
                              '<input type="button" name="editordefault" value="'.$lt{'edit'}.
                              '" onclick="seteditmode(this.form,'."'edit'".');" />'."\n";
           } else {
               if ($editors{'edit'}) {
                   $editheader .= '<input type="button" name="submitmode" accesskey="e" value="'.&mt('Edit').'" '.
                                  'onclick="javascript:setmode(this.form,'."'edit'".')" />'."\n";
               }
               if ($editors{'xml'}) {
                   $editheader .= '<input type="button" name="submitmode" accesskey="x" value="'.&mt('EditXML').'" '.
                                  'onclick="javascript:setmode(this.form,'."'editxml'".')" />'."\n";
               }
           }
           $editheader .= '&nbsp;&nbsp;|&nbsp;&nbsp;'.$exitbutton.'</span></td></tr></table>';
       } else {
           $editheader .= '<table class="LC_edit_problem_header_title"><tr><td>'.
                          $uri.
                          '</td><td align="right"><span class="LC_nobreak">'.
                          $exitbutton.'</span></td></tr></table>';
       }
       $editheader .= '</div></form>'."\n";
       my $start_collapsed = &collapsible_std_LCmenus();
       my $args = {
                   'collapsible_header' => $editheader,
                   'start_collapsed'    => $start_collapsed,
                  };
       my $startpage = &Apache::loncommon::start_page('Daxe: '.$name,$headjs,$args).
                       &Apache::lonmenu::constspaceform();
       my $endpage = &Apache::loncommon::end_page();
   
       # javascript will position the iframe if window was resized (or zoomed)
       my $script = &Apache::loncommon::iframe_wrapper_resizejs();
       my $dest = &HTML::Entities::encode($daxeurl,'&<>"');
       my $noiframe = &Apache::loncommon::modal_link($dest,$lt{'show'},500,400);
   
       $request->print(<<"ENDFRAME");
   $startpage
   $script
   <div class="LC_iframecontainer" style="padding-right: 5px">
   <iframe src="$dest">$lt{'noif'} $noiframe</iframe>
   </div>
   $endpage
   ENDFRAME
     return OK;      return OK;
 }  }
   
   sub toggle_LCmenus_js {
       my %lt = &Apache::lonlocal::texthash(
                                            altc => 'menu state: collapsed',
                                            alte => 'menu state: explanded',
                                            ttlc => 'display standard menus',
                                            ttle => 'hide standard menus',
       );
       return <<"ENDJS";
   <script type="text/javascript">
   //<![CDATA[
   \$(document).ready (function () {
       \$(".LC_collapse_trigger").on("click", function (e) {
           var id = this.id;
           var \$content = \$(this).next (".LC_menus_content");
           var expanded = \$content.hasClass ("shown");
           if (expanded) {
               \$content.removeClass ("shown");
               \$content.addClass ("hidden");
           } else {
               \$content.removeClass ("hidden");
               \$content.addClass ("shown");
           }
   
           \$(this).find ("[aria-expanded]")
           .attr ("aria-expanded", !expanded);
   
           \$(this).find ("[aria-pressed]")
           .attr ("aria-pressed", !expanded);
   
           \$(this).find (".LC_collapsible_indicator").attr ({
           "src":
           (expanded)? "/res/adm/pages/collapsed.png" : "/res/adm/pages/expanded.png",
           "alt":
           (expanded)? "$lt{altc}" : "$lt{alte}",
           "title":
           (expanded)? "$lt{ttlc}" : "$lt{ttle}"
           });
   
           \$(window).trigger('resize');
           \$(this).focus ();
       });
   
       \$("#LC_expandingContainer").attr ("aria-live", "off");
   });
   //]]>
   </script>
   ENDJS
   
   }
   
   sub do_redirect {
       my ($request,$uri,$msg) = @_;
       &Apache::lonhtmlcommon::clear_breadcrumbs();
       $request->print(
           &Apache::loncommon::start_page('Authoring Space',undef,
                                          {'redirect'       => [2,$uri]}).
   
           '<div style="padding:0;clear:both;margin:0;border:0"></div>'."\n".
           "$msg\n".
           &Apache::loncommon::end_page());
       return;
   }
   
   sub collapsible_std_LCmenus {
       my $daxecollapse = $Apache::lonnet::env{'environment.daxecollapse'};
       unless ($daxecollapse) {
           my %domdefs = &Apache::lonnet::get_domain_defaults($Apache::lonnet::env{'user.domain'});
           if ($domdefs{'daxecollapse'}) {
               $daxecollapse = 'yes';
           }
       }
       if ($daxecollapse eq 'yes') {
           return 1;
       }
       return;
   }
   
 1;  1;
 __END__  __END__

Removed from v.1.4  
changed lines
  Added in v.1.11


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