Diff for /loncom/interface/lonmenu.pm between versions 1.45 and 1.55

version 1.45, 2003/03/03 13:03:58 version 1.55, 2003/04/04 19:35:04
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (TeX Conversion Module  
 #  #
 # 05/29/00,05/30 Gerd Kortemeyer)  # There are two parameters controlling the action of this module:
   #
   # browser.interface - if this is 'textual', it overrides the second parameter
   # and goes to screen reader PDA mode
   #
   # environment.remote - if this is 'on', the routines controll the remote
   # control, otherwise they render the main window controls; ignored it
   # browser.interface is 'textual'
 #  #
 # 10/05,05/28,05/30,06/01,06/08,06/09,07/04,08/07 Gerd Kortemeyer  
 # 02/15/02 Matthew Hall  
   
 package Apache::lonmenu;  package Apache::lonmenu;
   
 use strict;  use strict;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
   use Apache::lonhtmlcommon();
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::File;  use Apache::File;
 use vars qw(@desklines $readdesk);  use vars qw(@desklines $readdesk);
Line 47  sub menubuttons { Line 52  sub menubuttons {
     my $forcereg=shift;      my $forcereg=shift;
     my $target  =shift;      my $target  =shift;
     my $registration=shift;      my $registration=shift;
     unless ($ENV{'browser.interface'} eq 'textual') { return ''; }      my $navmaps='';
       my $escurl=&Apache::lonnet::escape($ENV{'REQUEST_URI'});
       my $escsymb=&Apache::lonnet::escape($ENV{'request.symb'});
       if ($ENV{'browser.interface'} eq 'textual') {
 # Textual display only  # Textual display only
     my $output=(<<ENDMAINMENU);          if ($ENV{'request.course.id'}) {
       $navmaps=(<<ENDNAV);
   <a href="/adm/navmaps?postdata=$escurl&postsymb=$escsymb" target="_top">Navigate Contents</a>
   ENDNAV
           }
    my $output=(<<ENDMAINMENU);
 <script>  <script>
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
 </script>  </script>
 <a href="/adm/menu" target="_top">Main Menu</a><br />  <a href="/adm/menu" target="_top">Main Menu</a>
   $navmaps<br />
 <script>  <script>
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
 ENDMAINMENU  ENDMAINMENU
     if ($registration) { $output.=&innerregister($forcereg,$target); }          if ($registration) { $output.=&innerregister($forcereg,$target); }
     return $output."<hr />";   return $output."<hr />";
       } elsif ($ENV{'environment.remote'} eq 'off') {
   # Remote Control is switched off
           if ($ENV{'request.course.id'}) {
       $navmaps=(<<ENDNAVREM);
   <a href="/adm/navmaps?postdata=$escurl&postsymb=$escsymb" target="_top">Navigate Contents</a>
   ENDNAVREM
           }
    my $output=(<<ENDINLINEMENU);
   <script>
   // BEGIN LON-CAPA Internal
   </script>
   <table bgcolor="#AAAAAA" width="100%" border="2"><tr><td>
   <a href="/adm/menu" target="_top">Main Menu</a>
   $navmaps
   <a href="/adm/remote?action=launch&url=$escurl" target="_top">Launch Remote Control</a>
   <br />
   <script>
   // END LON-CAPA Internal
   </script>
   ENDINLINEMENU
           if ($registration) { $output.=&innerregister($forcereg,$target); }
    return $output."</td></tr></table>";
       } else {
    return '';
       }
 }  }
   
 # ====================================== This gets called in the header section  # ====================================== This gets called in the header section
Line 76  sub registerurl { Line 115  sub registerurl {
                 "\n</script>\n";                  "\n</script>\n";
     }      }
     if (($ENV{'browser.interface'} eq 'textual') ||      if (($ENV{'browser.interface'} eq 'textual') ||
           ($ENV{'environment.remote'} eq 'off') ||
         ((($ENV{'request.publicaccess'}) ||           ((($ENV{'request.publicaccess'}) || 
          (!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) &&           (!&Apache::lonnet::is_on_map($ENV{'REQUEST_URI'}))) &&
         (!$forcereg))) {          (!$forcereg))) {
Line 98  sub innerregister { Line 138  sub innerregister {
   
     $Apache::lonxml::registered=1;      $Apache::lonxml::registered=1;
   
     my $textual=($ENV{'browser.interface'} eq 'textual');      my $textinter=($ENV{'browser.interface'} eq 'textual');
       my $noremote=($ENV{'environment.remote'} eq 'off');
       
       my $textual=($textinter || $noremote);
   
     my $reopen=&Apache::lonmenu::reopenmenu();      my $reopen=&Apache::lonmenu::reopenmenu();
   
     my $newmail='';      my $newmail='';
Line 245  var swmenu=null; Line 289  var swmenu=null;
           $newmail            $newmail
           $buttons            $buttons
   swmenu.currentURL=window.location.pathname;    swmenu.currentURL=window.location.pathname;
           swmenu.reloadURL=window.location.pathname;            swmenu.reloadURL=window.location.pathname+window.location.search;
           swmenu.currentSymb="$ENV{'request.symb'}";            swmenu.currentSymb="$ENV{'request.symb'}";
           swmenu.reloadSymb="$ENV{'request.symb'}";            swmenu.reloadSymb="$ENV{'request.symb'}";
           swmenu.currentStale=0;            swmenu.currentStale=0;
Line 330  sub unloadevents() { Line 374  sub unloadevents() {
   
 sub startupremote {  sub startupremote {
     my ($lowerurl)=@_;      my ($lowerurl)=@_;
     if ($ENV{'browser.interface'} eq 'textual') {      if (($ENV{'browser.interface'} eq 'textual') ||
           ($ENV{'environment.remote'} eq 'off')) {
      return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');       return ('<meta HTTP-EQUIV="Refresh" CONTENT="0.5; url='.$lowerurl.'" />');
     }      }
   #
   # The Remote actually gets launched!
   #
     my $configmenu=&rawconfig();      my $configmenu=&rawconfig();
       my $esclowerurl=&Apache::lonnet::escape($lowerurl);
   
     return(<<ENDREMOTESTARTUP);      return(<<ENDREMOTESTARTUP);
 <script>  <script>
   
Line 363  function wait() { Line 413  function wait() {
          $configmenu           $configmenu
          window.location='$lowerurl';             window.location='$lowerurl';  
       } else {        } else {
          alert("Remote Control timed out. It is possible that it was blocked by pop-up window filters.");    window.location='/adm/remote?action=collapse&url=$esclowerurl';
       }        }
    } else {     } else {
       wheelswitch();        wheelswitch();
Line 372  function wait() { Line 422  function wait() {
 }  }
   
 function main() {  function main() {
    canceltim=setTimeout('tim=1;',60000);     canceltim=setTimeout('tim=1;',30000);
    window.status='-';     window.status='-';
    wait();     wait();
 }  }
Line 391  ENDSETFLAGS Line 441  ENDSETFLAGS
 }  }
   
 sub maincall() {  sub maincall() {
     if ($ENV{'browser.interface'} eq 'textual') { return ''; }      if (($ENV{'browser.interface'} eq 'textual') ||
           ($ENV{'environment.remote'} eq 'off')) { return ''; }
     return(<<ENDMAINCALL);      return(<<ENDMAINCALL);
 <script>  <script>
     main();      main();
Line 401  ENDMAINCALL Line 452  ENDMAINCALL
 # ================================================================= Reopen menu  # ================================================================= Reopen menu
   
 sub reopenmenu {  sub reopenmenu {
    my $nothing='';     if (($ENV{'browser.interface'} eq 'textual') ||
    if ($ENV{'browser.interface'} eq 'textual') { return ''; }         ($ENV{'environment.remote'} eq 'off')) { return ''; }
    my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
    if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; }     my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
    return('window.open("'.$nothing.'","'.$menuname.'","",false);');     return('window.open('.$nothing.',"'.$menuname.'","",false);');
 }   } 
   
 # =============================================================== Open the menu  # =============================================================== Open the menu
   
 sub open {  sub open {
     my $returnval='';      my $returnval='';
     if ($ENV{'browser.interface'} eq 'textual') { return ''; }      if (($ENV{'browser.interface'} eq 'textual') ||
           ($ENV{'environment.remote'} eq 'off')) { return ''; }
     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};      my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
     unless (shift eq 'unix') {      unless (shift eq 'unix') {
 # resizing does not work on linux because of virtual desktop sizes  # resizing does not work on linux because of virtual desktop sizes
Line 436  ENDOPEN Line 488  ENDOPEN
   
 sub clear {  sub clear {
     my ($row,$col)=@_;      my ($row,$col)=@_;
     unless ($ENV{'browser.interface'} eq 'textual') {      unless (($ENV{'browser.interface'} eq 'textual') ||
               ($ENV{'environment.remote'} eq 'off')) {
        return "\n".qq(window.status+='.';swmenu.clearbut($row,$col););         return "\n".qq(window.status+='.';swmenu.clearbut($row,$col););
    } else { return ''; }     } else { return ''; }
 }  }
Line 449  sub switch { Line 502  sub switch {
     my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$nobreak)=@_;      my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$nobreak)=@_;
     $act=~s/\$uname/$uname/g;      $act=~s/\$uname/$uname/g;
     $act=~s/\$udom/$udom/g;      $act=~s/\$udom/$udom/g;
     unless ($ENV{'browser.interface'} eq 'textual') {      unless (($ENV{'browser.interface'} eq 'textual')  ||
               ($ENV{'environment.remote'} eq 'off')) {
   # Remote
        return "\n".         return "\n".
  qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc"););   qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc"););
      } elsif ($ENV{'browser.interface'} eq 'textual') {
   # Accessibility
          if ($nobreak==2) { return ''; }
          my $text=$top.' '.$bot;
          $text=~s/\- //;
          return "\n".($nobreak?' ':'<br />').
           '<a href="javascript:'.$act.';" target="_top">'.$text.'</a> '.
           ($nobreak?'':$desc);
    } else {     } else {
   # Inline Remote
        if ($nobreak==2) { return ''; }         if ($nobreak==2) { return ''; }
        my $text=$top.' '.$bot;         my $text=$top.' '.$bot;
        $text=~s/\- //;         $text=~s/\- //;
Line 478  sub secondlevel { Line 542  sub secondlevel {
   
 sub openmenu {  sub openmenu {
     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};      my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
     if ($ENV{'browser.interface'} eq 'textual') { return ''; }      if (($ENV{'browser.interface'} eq 'textual') ||
     if ($ENV{'browser.type'} eq 'explorer') {          ($ENV{'environment.remote'} eq 'off')) { return ''; }
        return "window.open('javascript:void(0);','".$menuname."');";      my $nothing = &Apache::lonhtmlcommon::javascript_nothing();
    } else {      return "window.open(".$nothing.",'".$menuname."');";
        return "window.open('','".$menuname."');";  
    }  
 }  }
   
 sub rawconfig {  sub rawconfig {
     my $textualoverride=shift;      my $textualoverride=shift;
     my $output='';      my $output='';
     unless ($ENV{'browser.interface'} eq 'textual') {      unless (($ENV{'browser.interface'} eq 'textual') ||
               ($ENV{'environment.remote'} eq 'off')) {
        $output.=         $output.=
  "window.status='Opening Remote Control';var swmenu=".&openmenu().   "window.status='Opening Remote Control';var swmenu=".&openmenu().
 "\nwindow.status='Configuring Remote Control ';";  "\nwindow.status='Configuring Remote Control ';";
Line 562  sub rawconfig { Line 625  sub rawconfig {
             }              }
         }          }
     }      }
     unless ($ENV{'browser.interface'} eq 'textual') {      unless (($ENV{'browser.interface'} eq 'textual') ||
               ($ENV{'environment.remote'} eq 'off')) {
        $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';";         $output.="\nwindow.status='Synchronizing Time';swmenu.syncclock(1000*".time.");\nwindow.status='Remote Control Configured.';";
     }      }
     return $output;      return $output;
Line 571  sub rawconfig { Line 635  sub rawconfig {
 # ======================================================================= Close  # ======================================================================= Close
   
 sub close {  sub close {
     if ($ENV{'browser.interface'} eq 'textual') { return ''; }      if (($ENV{'browser.interface'} eq 'textual') ||
           ($ENV{'environment.remote'} eq 'off')) { return ''; }
     my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};      my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'};
     return(<<ENDCLOSE);      return(<<ENDCLOSE);
 <script>  <script>
Line 595  sub footer { Line 660  sub footer {
 }  }
   
 sub utilityfunctions {  sub utilityfunctions {
     unless ($ENV{'browser.interface'} eq 'textual') { return ''; }      unless (($ENV{'browser.interface'} eq 'textual')  ||
           ($ENV{'environment.remote'} eq 'off')) { return ''; }
     my $currenturl=$ENV{'REQUEST_URI'};      my $currenturl=$ENV{'REQUEST_URI'};
     my $currentsymb=$ENV{'request.symb'};      my $currentsymb=$ENV{'request.symb'};
 return (<<ENDUTILITY)  return (<<ENDUTILITY)
Line 656  sub handler { Line 722  sub handler {
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
   
     my $utility=&utilityfunctions();  
     my $form=&serverform();      my $form=&serverform();
     my $bodytag=&Apache::loncommon::bodytag('Main Menu');      my $bodytag=&Apache::loncommon::bodytag('Main Menu');
 # ------------------------------------------------------------ Print the screen  # ---- Print the screen, pretent to be in text mode to generate text-based menu
       unless ($ENV{'brower.interface'} eq 'textual') {
    $ENV{'environment.remote'}='off';
       }
       my $utility=&utilityfunctions();
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 <html><head>  <html><head>
 <title>LON-CAPA Main Menu</title>  <title>LON-CAPA Main Menu</title>

Removed from v.1.45  
changed lines
  Added in v.1.55


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