--- loncom/interface/lonmenu.pm 2009/07/21 14:36:08 1.276 +++ loncom/interface/lonmenu.pm 2011/05/27 18:39:20 1.349 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Routines to control the menu # -# $Id: lonmenu.pm,v 1.276 2009/07/21 14:36:08 droeschl Exp $ +# $Id: lonmenu.pm,v 1.349 2011/05/27 18:39:20 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -28,8 +28,6 @@ # # 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; =head1 NAME @@ -42,48 +40,76 @@ Coordinates the response to clicking an This is part of the LearningOnline Network with CAPA project described at http://www.lon-capa.org. -=head1 SUBROUTINES +=head1 GLOBAL VARIABLES =over -Little texts +=item @desklines -=item initlittle() +Each element of this array contains a line of mydesk.tab that doesn't start with +cat, prim or scnd. +It gets filled in the BEGIN block of this module. -=item menubuttons() +=item %category_names -This gets called at the top of the body section +The keys of this hash are the abbreviations used in mydesk.tab in those lines that +start with cat, the values are strings representing titles. +It gets filled in the BEGIN block of this module. -=item show_return_link() +=item %category_members -=item registerurl() +TODO -This gets called in the header section +=item %category_positions -=item innerregister() +The keys of this hash are the abbreviations used in mydesk.tab in those lines that +start with cat, its values are position vectors (column, row). +It gets filled in the BEGIN block of this module. + +=item $readdesk -This gets called in order to register a URL, both with the Remote -and in the body of the document +Indicates that mydesk.tab has been read. +It is set to 'done' in the BEGIN block of this module. -=item loadevents() +=item @primary_menu -=item unloadevents() +The elements of this array reference arrays that are made up of the components +of those lines of mydesk.tab that start with prim. +It is used by primary_menu() to generate the corresponding menu. +It gets filled in the BEGIN block of this module. -=item startupremote() +=item @secondary_menu -=item setflags() +The elements of this array reference arrays that are made up of the components +of those lines of mydesk.tab that start with scnd. +It is used by secondary_menu() to generate the corresponding menu. +It gets filled in the BEGIN block of this module. + +=back + +=head1 SUBROUTINES + +=over -=item maincall() +=item prep_menuitems(\@menuitem) -=item load_remote_msg() +This routine wraps a menuitem in proper HTML. It is used by primary_menu() and +secondary_menu(). -=item get_menu_name() +=item primary_menu() -=item reopenmenu() +This routine evaluates @primary_menu and returns XHTML for the menu +that contains following links: About, Message, Roles, Help, Logout +@primary_menu is filled within the BEGIN block of this module with +entries from mydesk.tab -=item open() +=item secondary_menu() -Open the menu +Same as primary_menu() but operates on @secondary_menu. + +=item innerregister() + +This gets called in order to register a URL in the body of the document =item clear() @@ -101,10 +127,6 @@ The javascript is usually similar to "go =item rawconfig() -=item close() - -=item footer() - =item utilityfunctions() =item serverform() @@ -113,11 +135,6 @@ The javascript is usually similar to "go =item get_nav_status() -=item convert_menu_function() - -FIXME this needs to move into mydesktab and the other locations -the text is generated - =item hidden_button_check() =item roles_selector() @@ -137,239 +154,202 @@ use Apache::loncommon(); use Apache::lonenc(); use Apache::lonlocal; use LONCAPA qw(:DEFAULT :match); +use HTML::Entities(); +use Apache::lonwishlist(); -use vars qw(@desklines %category_names %category_members %category_positions $readdesk); - +use vars qw(@desklines %category_names %category_members %category_positions + $readdesk @primary_menu @secondary_menu); my @inlineremote; -# -# This routine returns a translated hash for the menu items in the top inline menu row -# Probably should be in mydesk.tab - -sub initlittle { - return &Apache::lonlocal::texthash('ret' => 'Return to Last Location', - 'nav' => 'Navigate Contents', - 'main' => 'Main Menu', - 'roles' => (&Apache::loncommon::show_course()? - 'Courses':'Roles'), - 'other' => 'Other Roles', - 'docs' => 'Edit Course', - 'exit' => 'Logout', - 'login' => 'Log In', - 'launch' => 'Launch Remote Control', - 'groups' => 'Groups', - 'gdoc' => 'Group Documents', - ); -} - -sub menubuttons { - my $forcereg=shift; - my $titletable=shift; -# -# Early-out for pages that should not have a menu, triggered by query string "inhibitmenu=yes" -# - &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['inhibitmenu']); - if (($env{'form.inhibitmenu'} eq 'yes') || - ($ENV{'REQUEST_URI'} eq '/adm/logout')) { return ''; } +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 '
$link
-ENDREMOTEFORM -} - -sub get_menu_name { - my $hostid = $Apache::lonnet::perlvar{'lonHostID'}; - $hostid =~ s/\W//g; - return 'LCmenu'.$hostid; -} - - -sub reopenmenu { - if ($env{'environment.remote'} eq 'off') { return ''; } - my $menuname = &get_menu_name(); - my $nothing = &Apache::lonhtmlcommon::javascript_nothing(); - return('window.open('.$nothing.',"'.$menuname.'","",false);'); -} - - -sub open { - my $returnval=''; - if ($env{'environment.remote'} eq 'off') { - return ''; - } - my $menuname = &get_menu_name(); - -# 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.='
|