Diff for /loncom/interface/lonmenu.pm between versions 1.40 and 1.49

version 1.40, 2003/02/17 17:34:16 version 1.49, 2003/04/03 00:52:21
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 ''; }      if ($ENV{'browser.interface'} eq 'textual') {
     my $output='<a href="/adm/menu">Main Menu</a><br />';  # Textual display only
     if ($registration) { $output.=&innerregister($forcereg,$target); }   my $output=(<<ENDMAINMENU);
     return $output."<hr />";  <script>
   // BEGIN LON-CAPA Internal
   </script>
   <a href="/adm/menu" target="_top">Main Menu</a><br />
   <script>
   // END LON-CAPA Internal
   </script>
   ENDMAINMENU
           if ($registration) { $output.=&innerregister($forcereg,$target); }
    return $output."<hr />";
       } elsif ($ENV{'environment.remote'} eq 'off') {
   # Remote Control is switched off
    my $output=(<<ENDINLINEMENU);
   <script>
   // BEGIN LON-CAPA Internal
   </script>
   <a href="/adm/menu" target="_top">Main Menu</a>
   <a href="/adm/remote?action=launch" target="_top">Launch Remote Control</a>
   <script>
   // END LON-CAPA Internal
   </script>
   ENDINLINEMENU
           if ($registration) { $output.=&innerregister($forcereg,$target); }
    return $output."<hr />";
       } else {
    return '';
       }
 }  }
   
 # ====================================== This gets called in the header section  # ====================================== This gets called in the header section
Line 61  sub registerurl { Line 92  sub registerurl {
     my $result = '';      my $result = '';
           
     if ($target eq 'edit') {      if ($target eq 'edit') {
         $result .="<script type=\"text/javascrtipt\">\n".          $result .="<script type=\"text/javascript\">\n".
             "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n".              "if (typeof swmenu != 'undefined') {swmenu.currentURL=null;}\n".
             &Apache::loncommon::browser_and_searcher_javascript().              &Apache::loncommon::browser_and_searcher_javascript().
                 "\n</script>\n";                  "\n</script>\n";
Line 73  sub registerurl { Line 104  sub registerurl {
  return $result.   return $result.
          '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>';           '<script type="text/javascript">function LONCAPAreg(){;} function LONCAPAstale(){}</script>';
     }      }
   # Graphical display after login only
     if ($Apache::lonxml::registered && !$forcereg) { return ''; }      if ($Apache::lonxml::registered && !$forcereg) { return ''; }
     $result.=&innerregister($forcereg,$target);      $result.=&innerregister($forcereg,$target);
     return $result;      return $result;
Line 88  sub innerregister { Line 120  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='';
     if (&Apache::lonmsg::newmail()) {       if (&Apache::lonmsg::newmail()) { 
        $newmail=($textual?'<b>You have messages</b><br />':         $newmail=($textual?
    '<b><a href="/adm/communicate">You have new messages</a></b><br />':
                           'swmenu.setstatus("you have","messages");');                            'swmenu.setstatus("you have","messages");');
     }      }
     my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');');      my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');');
 # -- This is for URLs that actually can be registered  # =============================================================================
   # ============================ This is for URLs that actually can be registered
     if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {      if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) {
 # -- This applies to homework problems for users with grading privileges  # -- This applies to homework problems for users with grading privileges
         my $hwkadd='';          my $hwkadd='';
Line 176  sub innerregister { Line 214  sub innerregister {
         }          }
         ###          ###
         ###          ###
  $result = (<<ENDREGTHIS);  # Prepare the rest of the buttons
    my $menuitems=(<<ENDMENUITEMS);
   c&3&1
   s&2&1&back.gif&backward&&gopost('/adm/flip','back:'+currentURL)&Go to the previous resource in the course sequence&1
   s&2&3&forw.gif&forward&&gopost('/adm/flip','forward:'+currentURL)&Go to the next resource in the course sequence&1
   s&6&3&catalog.gif&catalog&info&catalog_info()&Show catalog information
   s&8&1&eval.gif&evaluate&this&gopost('/adm/evaluate',currentURL)&Provide my evaluation of this resource
   s&8&2&fdbk.gif&feedback&discuss&gopost('/adm/feedback',currentURL)&Provide feedback messages or contribute to the course discussion about this resource
   s&8&3&prt.gif&prepare&printout&gopost('/adm/printout',currentURL)&Prepare a printable document
   s&9&1&sbkm.gif&set&bookmark&set_bookmark()&Set a bookmark for this resource&2
   s&9&2&vbkm.gif&view&bookmark&edit_bookmarks()&Use or edit my bookmark collection&2
   s&9&3&anot.gif&anno-&tations&annotate()&Make notes and annotations about this resource&2
   ENDMENUITEMS
           my $buttons='';
           foreach (split(/\n/,$menuitems)) {
       my ($command,@rest)=split(/\&/,$_);
               if ($command eq 's') {
    $buttons.=&switch('','',@rest);
               } else {
                   $buttons.=&clear(@rest);
               }
           }
           if ($textual) {
   # Registered, textual output
               my $utility=&utilityfunctions();
               my $form=&serverform();
       $result =(<<ENDREGTEXT);
   <script>
   // BEGIN LON-CAPA Internal
   $utility
   </script>
   $timesync
   $newmail
   $buttons
   $hwkadd
   $editbutton
   $form
   <script>
   //END LON-CAPA Internal
   </script>
   
   ENDREGTEXT
   # Registered, graphical output
           } else {
       $result = (<<ENDREGTHIS);
             
 <script language="JavaScript">  <script language="JavaScript">
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   var swmenu=null;
   
     function LONCAPAreg() {      function LONCAPAreg() {
   swmenu=$reopen;    swmenu=$reopen;
           swmenu.clearTimeout(swmenu.menucltim);            swmenu.clearTimeout(swmenu.menucltim);
           $timesync            $timesync
           $newmail            $newmail
             $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;
           swmenu.clearbut(3,1);  
           swmenu.switchbutton  
        (6,3,'catalog.gif','catalog','info','catalog_info()','Show catalog information');  
           swmenu.switchbutton  
        (8,1,'eval.gif','evaluate','this','gopost("/adm/evaluate",currentURL)','Provide my evaluation of this resource');  
           swmenu.switchbutton  
     (8,2,'fdbk.gif','feedback','discuss','gopost("/adm/feedback",currentURL)','Provide feedback messages or contribute to the course discussion about this resource');  
           swmenu.switchbutton  
      (8,3,'prt.gif','prepare','printout','gopost("/adm/printout",currentURL)','Prepare a printable document');  
           swmenu.switchbutton  
        (2,1,'back.gif','backward','','gopost("/adm/flip","back:"+currentURL)','Go to the previous resource in the course sequence');  
           swmenu.switchbutton  
      (2,3,'forw.gif','forward','','gopost("/adm/flip","forward:"+currentURL)','Go to the next resource in the course sequence');  
           swmenu.switchbutton  
                             (9,1,'sbkm.gif','set','bookmark','set_bookmark()','Set a bookmark for this resource');  
           swmenu.switchbutton  
                          (9,2,'vbkm.gif','view','bookmark','edit_bookmarks()','Use or edit my bookmark collection');  
           swmenu.switchbutton  
                                (9,3,'anot.gif','anno-','tations','annotate()','Make notes and annotations about this resource');  
           $hwkadd            $hwkadd
           $editbutton            $editbutton
     }      }
Line 234  sub innerregister { Line 299  sub innerregister {
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
 ENDREGTHIS  ENDREGTHIS
           }
   # =============================================================================
     } else {      } else {
         $result = (<<ENDDONOTREGTHIS);  # ========================================== This can or will not be registered
           if ($textual) {
   # Not registered, textual
       $result= (<<ENDDONOTREGTEXT);
   ENDDONOTREGTEXT
           } else {
   # Not registered, graphical
              $result = (<<ENDDONOTREGTHIS);
   
 <script language="JavaScript">  <script language="JavaScript">
 // BEGIN LON-CAPA Internal  // BEGIN LON-CAPA Internal
   var swmenu=null;
   
     function LONCAPAreg() {      function LONCAPAreg() {
   swmenu=$reopen    swmenu=$reopen
Line 264  ENDREGTHIS Line 338  ENDREGTHIS
 // END LON-CAPA Internal  // END LON-CAPA Internal
 </script>  </script>
 ENDDONOTREGTHIS  ENDDONOTREGTHIS
          }
   # =============================================================================
     }      }
     return $result;      return $result;
 }  }
Line 280  sub unloadevents() { Line 356  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();
     return(<<ENDREMOTESTARTUP);      return(<<ENDREMOTESTARTUP);
 <script>  <script>
Line 341  ENDSETFLAGS Line 421  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 351  ENDMAINCALL Line 432  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 386  ENDOPEN Line 468  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 399  sub switch { Line 482  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')) {
        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"););
    } else {     } else {
          if ($nobreak==2) { return ''; }
        my $text=$top.' '.$bot;         my $text=$top.' '.$bot;
        $text=~s/\- //;         $text=~s/\- //;
        return ($nobreak?'':'<br />').         return "\n".($nobreak?' ':'<br />').
         '<a href="javascript:'.$act.';">'.$text.'</a> '.$desc;          '<a href="javascript:'.$act.';" target="_top">'.$text.'</a> '.
           ($nobreak?'':$desc);
    }     }
 }  }
   
Line 426  sub secondlevel { Line 512  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 510  sub rawconfig { Line 595  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 519  sub rawconfig { Line 605  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 542  sub footer { Line 629  sub footer {
   
 }  }
   
   sub utilityfunctions {
       unless ($ENV{'browser.interface'} eq 'textual') { return ''; }
       my $currenturl=$ENV{'REQUEST_URI'};
       my $currentsymb=$ENV{'request.symb'};
   return (<<ENDUTILITY)
   
       var currentURL="$currenturl";
       var reloadURL="$currenturl";
       var currentSymb="$currentsymb";
   
   function go(url) {
      if (url!='' && url!= null) {
          currentURL = null;
          currentSymb= null;
          window.location.href=url;
      }
   }
   
   function gopost(url,postdata) {
      if (url!='') {
         this.document.server.action=url;
         this.document.server.postdata.value=postdata;
         this.document.server.command.value='';
         this.document.server.url.value='';
         this.document.server.symb.value='';
         this.document.server.submit();
      }
   }
   
   function gocmd(url,cmd) {
      if (url!='') {
         this.document.server.action=url;
         this.document.server.postdata.value='';
         this.document.server.command.value=cmd;
         this.document.server.url.value=currentURL;
         this.document.server.symb.value=currentSymb;
         this.document.server.submit();
      }
   }
   ENDUTILITY
   }
   
   sub serverform {
       return(<<ENDSERVERFORM);
   
   <form name="server" action="/adm/logout" method="post">
   <input type="hidden" name="postdata" value="none" />
   <input type="hidden" name="command" value="none" />
   <input type="hidden" name="url" value="none" />
   <input type="hidden" name="symb" value="none" />
   </form>
   ENDSERVERFORM
   }
 # ================================================ Handler when called directly  # ================================================ Handler when called directly
   
   
Line 551  sub handler { Line 691  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 $bodytag=&Apache::loncommon::bodytag('Main Menu');      my $bodytag=&Apache::loncommon::bodytag('Main Menu');
 # ------------------------------------------------------------ Print the screen  # ------------------------------------------------------------ Print the screen
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 <html><head>  <html><head>
 <title>LON-CAPA Main Menu</title>  <title>LON-CAPA Main Menu</title>
 <script>  <script>
 function go(url) {  $utility
     window.location=url;  
 }  
 function gopost(url) {  
     window.location=url;  
 }  
 </script>  </script>
 </head>  </head>
 $bodytag  $bodytag
 ENDHEADER  ENDHEADER
     $r->print(&rawconfig(1));      $r->print(&rawconfig(1).$form);
     $r->print('</body></html>');      $r->print('</body></html>');
     return OK;      return OK;
 }  }

Removed from v.1.40  
changed lines
  Added in v.1.49


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