--- loncom/interface/lonmenu.pm 2003/11/21 21:38:50 1.103 +++ loncom/interface/lonmenu.pm 2010/01/15 04:05:21 1.309.2.11 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.103 2003/11/21 21:38:50 www Exp $ +# $Id: lonmenu.pm,v 1.309.2.11 2010/01/15 04:05:21 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,148 +26,484 @@ # http://www.lon-capa.org/ # # -# 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 +# There is one parameter controlling the action of this module: # # 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' -# +# control, otherwise they render the main window controls; + +=head1 NAME + +Apache::lonmenu + +=head1 SYNOPSIS + +Coordinates the response to clicking an image. + +This is part of the LearningOnline Network with CAPA project +described at http://www.lon-capa.org. + +=head1 SUBROUTINES + +=over + +Little texts + +=item initlittle() + +=item menubuttons() + +This gets called at the top of the body section + +=item show_return_link() + +=item registerurl() + +This gets called in the header section + +=item innerregister() + +This gets called in order to register a URL, both with the Remote +and in the body of the document + +=item loadevents() + +=item unloadevents() + +=item startupremote() + +=item setflags() + +=item maincall() + +=item load_remote_msg() + +=item get_menu_name() + +=item reopenmenu() + +=item open() + +Open the menu + +=item clear() + +=item switch() + +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(..)". + +=item secondlevel() + +=item openmenu() + +=item inlinemenu() + +=item rawconfig() + +=item close() + +=item footer() + +=item utilityfunctions() + +=item serverform() + +=item constspaceform() + +=item get_nav_status() + +=item hidden_button_check() + +=item roles_selector() + +=item jump_to_role() + +=back + +=cut package Apache::lonmenu; use strict; use Apache::lonnet; -use Apache::Constants qw(:common); use Apache::lonhtmlcommon(); -use Apache::loncommon; -use Apache::File; +use Apache::loncommon(); +use Apache::lonenc(); use Apache::lonlocal; +use LONCAPA qw(:DEFAULT :match); +use HTML::Entities(); -use vars qw(@desklines $readdesk); - +use vars qw(@desklines %category_names %category_members %category_positions + $readdesk @primary_menu @secondary_menu); my @inlineremote; -my $font; -my $tabbg; -my $pgbg; -# ================================================================ Little texts +sub prep_menuitem { + my ($menuitem) = @_; + return '' unless(ref($menuitem) eq 'ARRAY'); + my $link; + if ($$menuitem[1]) { # graphical Link + $link = ""; + } else { # textual Link + $link = &mt($$menuitem[3]); + } + return '
-$lt{'main'} - | + +
';
+
+ if (&Apache::lonmsg::newmail() && !$noremote) {
+ # We have new mail and remote is up
+ $newmail= 'swmenu.setstatus("you have","messages");';
+ }
+
+ my ($breadcrumb,$separator);
+ if ($noremote
+ && ($env{'request.symb'})
+ && ($env{'request.course.id'})) {
+
+ my ($mapurl,$rid,$resurl) = &Apache::lonnet::decode_symb(&Apache::lonnet::symbread());
+ my $coursetitle = $env{'course.'.$env{'request.course.id'}.'.description'};
+
+ my $maptitle = &Apache::lonnet::gettitle($mapurl);
+ my $restitle = &Apache::lonnet::gettitle(&Apache::lonnet::symbread());
+ my $contentstext;
+ if ($env{'course.'.$env{'request.course.id'}.'.type'} eq 'Community') {
+ $contentstext = &mt('Community Contents');
+ } else {
+ $contentstext = &mt('Course Contents');
+ }
+ my @crumbs = ({text => $contentstext,
+ href => "Javascript:gonav('/adm/navmaps')"});
+
+ if ($mapurl ne $env{'course.'.$env{'request.course.id'}.'.url'}) {
+ push(@crumbs, {text => '...',
+ no_mt => 1});
+ }
+
+ push @crumbs, {text => $maptitle, no_mt => 1} if ($maptitle
+ && $maptitle ne 'default.sequence'
+ && $maptitle ne $coursetitle);
+
+ push @crumbs, {text => $restitle, no_mt => 1} if $restitle;
+
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ &Apache::lonhtmlcommon::add_breadcrumb(@crumbs);
+ #$breadcrumb .= &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0);
+ unless (($env{'request.state'} eq 'edit') || ($newmail) ||
+ ($env{'request.state'} eq 'construct') ||
+ ($env{'form.register'})) {
+ $separator = &Apache::loncommon::head_subbox();
+ }
+ #
}
- if (($textual) && ($ENV{'request.symb'}) && ($ENV{'request.course.id'})) {
- my ($mapurl,$rid,$resurl)=&Apache::lonnet::decode_symb($ENV{'request.symb'});
- $newmail.=$ENV{'course.'.$ENV{'request.course.id'}.'.description'};
- my $maptitle=&Apache::lonnet::gettitle($mapurl);
- my $restitle=&Apache::lonnet::gettitle($resurl);
- if ($maptitle) {
- $newmail.=', '.$maptitle;
- }
- if ($restitle) {
- $newmail.=': '.$restitle;
- }
- $newmail.=' ';
- }
- if (&Apache::lonmsg::newmail()) {
- $newmail=($textual?
- 'You have new messages ': - 'swmenu.setstatus("you have","messages");'); - } - if ($noremote) { - $newmail.=' |
$link
+ENDREMOTEFORM +} + +sub get_menu_name { + my $hostid = $Apache::lonnet::perlvar{'lonHostID'}; + $hostid =~ s/\W//g; + return 'LCmenu'.$hostid; +} + sub reopenmenu { - if (($ENV{'browser.interface'} eq 'textual') || - ($ENV{'environment.remote'} eq 'off')) { return ''; } - my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; + if ($env{'environment.remote'} eq 'off') { return ''; } + my $menuname = &get_menu_name(); my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); return('window.open('.$nothing.',"'.$menuname.'","",false);'); } -# =============================================================== Open the menu sub open { my $returnval=''; - if (($ENV{'browser.interface'} eq 'textual') || - ($ENV{'environment.remote'} eq 'off')) { return ''; } - my $menuname='LCmenu'.$Apache::lonnet::perlvar{'lonHostID'}; - unless (shift eq 'unix') { -# resizing does not work on linux because of virtual desktop sizes - $returnval.=(<';
+ for (my $row=1; $row<=8; $row++) {
+ foreach my $cat (keys(%category_members)) {
+ if ($category_positions{$cat} ne "$col,$row") { next; }
+ $output.=' ';
+ $output.=' ';
+ }
+ }
+ $output.="'.&mt($category_names{$cat}).''; + $output.=' | ";
+ }
+ $output.="