--- loncom/interface/lonmenu.pm 2003/02/14 19:35:54 1.38 +++ loncom/interface/lonmenu.pm 2003/03/10 20:21:45 1.47 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.38 2003/02/14 19:35:54 www Exp $ +# $Id: lonmenu.pm,v 1.47 2003/03/10 20:21:45 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,21 +37,33 @@ package Apache::lonmenu; use strict; use Apache::lonnet; use Apache::Constants qw(:common); +use Apache::lonhtmlcommon(); use Apache::loncommon; use Apache::File; use vars qw(@desklines $readdesk); -# ======================================================= Make the menu buttons +# ============================= This gets called at the top of the body section sub menubuttons { my $forcereg=shift; my $target =shift; + my $registration=shift; unless ($ENV{'browser.interface'} eq 'textual') { return ''; } - return "Menu here
"; +# Textual display only + my $output=(< +// BEGIN LON-CAPA Internal + +Main Menu
+ +ENDMAINMENU + if ($registration) { $output.=&innerregister($forcereg,$target); } + return $output."
"; } -# ============================================== Register a URL with the remote - +# ====================================== This gets called in the header section sub registerurl { my $forcereg=shift; @@ -59,7 +71,7 @@ sub registerurl { my $result = ''; if ($target eq 'edit') { - $result .="\n"; @@ -71,36 +83,56 @@ sub registerurl { return $result. ''; } +# Graphical display after login only if ($Apache::lonxml::registered && !$forcereg) { return ''; } + $result.=&innerregister($forcereg,$target); + return $result; +} + +# =========== This gets called in order to register a URL, both with the Remote +# =========== and in the body of the document + +sub innerregister { + my $forcereg=shift; + my $target = shift; + my $result = ''; + $Apache::lonxml::registered=1; + + my $textual=($ENV{'browser.interface'} eq 'textual'); my $reopen=&Apache::lonmenu::reopenmenu(); + my $newmail=''; if (&Apache::lonmsg::newmail()) { - $newmail='swmenu.setstatus("you have","messages");'; - } - my $timesync='swmenu.syncclock(1000*'.time.');'; + $newmail=($textual? + 'You have new messages
': + 'swmenu.setstatus("you have","messages");'); + } + my $timesync=($textual?'':'swmenu.syncclock(1000*'.time.');'); +# ============================================================================= +# ============================ This is for URLs that actually can be registered if (($ENV{'REQUEST_URI'}!~/^\/(res\/)*adm\//) || ($forcereg)) { +# -- This applies to homework problems for users with grading privileges my $hwkadd=''; - if ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { + if + ($ENV{'request.filename'}=~/\.(problem|exam|quiz|assess|survey|form)$/) { if (&Apache::lonnet::allowed('vgr',$ENV{'request.course.id'})) { - $hwkadd.=(< +// BEGIN LON-CAPA Internal +$utility + +$timesync +$newmail +$buttons +$hwkadd +$editbutton +$form + + +ENDREGTEXT +# Registered, graphical output + } else { + $result = (< // BEGIN LON-CAPA Internal +var swmenu=null; function LONCAPAreg() { swmenu=$reopen; swmenu.clearTimeout(swmenu.menucltim); $timesync $newmail + $buttons swmenu.currentURL=window.location.pathname; - swmenu.reloadURL=window.location.pathname; + swmenu.reloadURL=window.location.pathname+window.location.search; swmenu.currentSymb="$ENV{'request.symb'}"; swmenu.reloadSymb="$ENV{'request.symb'}"; 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 $editbutton } @@ -215,12 +274,21 @@ ENDPARM // END LON-CAPA Internal ENDREGTHIS - + } +# ============================================================================= } else { - $result = (< // BEGIN LON-CAPA Internal +var swmenu=null; function LONCAPAreg() { swmenu=$reopen @@ -245,6 +313,8 @@ ENDREGTHIS // END LON-CAPA Internal ENDDONOTREGTHIS + } +# ============================================================================= } return $result; } @@ -332,11 +402,10 @@ ENDMAINCALL # ================================================================= Reopen menu sub reopenmenu { - my $nothing=''; if ($ENV{'browser.interface'} eq 'textual') { return ''; } my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; - if ($ENV{'browser.type'} eq 'explorer') { $nothing='javascript:void(0);'; } - return('window.open("'.$nothing.'","'.$menuname.'","",false);'); + my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); + return('window.open('.$nothing.',"'.$menuname.'","",false);'); } # =============================================================== Open the menu @@ -372,19 +441,24 @@ sub clear { } else { return ''; } } +# ============================================ Switch a button or create a link # Switch acts on the javascript that is executed when a button is clicked. # The javascript is usually similar to "go('/adm/roles')" or "cstrgo(..)". + sub switch { - my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc)=@_; + my ($uname,$udom,$row,$col,$img,$top,$bot,$act,$desc,$nobreak)=@_; $act=~s/\$uname/$uname/g; $act=~s/\$udom/$udom/g; unless ($ENV{'browser.interface'} eq 'textual') { return "\n". qq(window.status+='.';swmenu.switchbutton($row,$col,"$img","$top","$bot","$act","$desc");); } else { + if ($nobreak==2) { return ''; } my $text=$top.' '.$bot; $text=~s/\- //; - return '
'.$text.' '.$desc; + return "\n".($nobreak?' ':'
'). + ''.$text.' '. + ($nobreak?'':$desc); } } @@ -405,11 +479,8 @@ sub secondlevel { sub openmenu { my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; if ($ENV{'browser.interface'} eq 'textual') { return ''; } - if ($ENV{'browser.type'} eq 'explorer') { - return "window.open('javascript:void(0);','".$menuname."');"; - } else { - return "window.open('','".$menuname."');"; - } + my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); + return "window.open(".$nothing.",'".$menuname."');"; } sub rawconfig { @@ -520,6 +591,59 @@ sub footer { } +sub utilityfunctions { + unless ($ENV{'browser.interface'} eq 'textual') { return ''; } + my $currenturl=$ENV{'REQUEST_URI'}; + my $currentsymb=$ENV{'request.symb'}; +return (< + + + + + +ENDSERVERFORM +} # ================================================ Handler when called directly @@ -529,23 +653,20 @@ sub handler { $r->send_http_header; return OK if $r->header_only; + my $utility=&utilityfunctions(); + my $form=&serverform(); my $bodytag=&Apache::loncommon::bodytag('Main Menu'); # ------------------------------------------------------------ Print the screen $r->print(< LON-CAPA Main Menu $bodytag ENDHEADER - $r->print(&rawconfig(1)); + $r->print(&rawconfig(1).$form); $r->print(''); return OK; }