[LON-CAPA-cvs] cvs: loncom /interface lonhtmlcommon.pm
droeschl
droeschl@source.lon-capa.org
Wed, 18 Feb 2009 19:28:45 -0000
droeschl Wed Feb 18 19:28:45 2009 EDT
Modified files:
/loncom/interface lonhtmlcommon.pm
Log:
Refactoring of generate_menu.
Some css styles adjusted, such that the submenu look is equal to the mainmenu.
Empty categories won't be shown anymore.
Index: loncom/interface/lonhtmlcommon.pm
diff -u loncom/interface/lonhtmlcommon.pm:1.200 loncom/interface/lonhtmlcommon.pm:1.201
--- loncom/interface/lonhtmlcommon.pm:1.200 Thu Jan 22 14:44:40 2009
+++ loncom/interface/lonhtmlcommon.pm Wed Feb 18 19:28:45 2009
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common html routines
#
-# $Id: lonhtmlcommon.pm,v 1.200 2009/01/22 14:44:40 bisitz Exp $
+# $Id: lonhtmlcommon.pm,v 1.201 2009/02/18 19:28:45 droeschl Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2032,10 +2032,11 @@
# An array of following structure:
# ({ categorytitle => 'Categorytitle',
# items => [
-# { linktext => 'Text to be displayed',
-# url => 'URL the link is pointing to, i.e. /adm/site?action=dosomething',
+# {
+# linktext => 'Text to be displayed',
+# url => 'URL the link is pointing to, i.e. /adm/site?action=dosomething',
# permission => 'Contains permissions as returned from lonnet::allowed(),
-# must evaluate to true in order to activate the link',
+# must evaluate to true in order to activate the link',
# icon => 'icon filename',
# alttext => 'alt text for the icon',
# help => 'Name of the corresponding helpfile',
@@ -2054,42 +2055,74 @@
# subject to change during this project.
# Don't rely on its current functionality as it might be
# changed or removed.
-# TODO:
-# check for empty values
# --------------------------
-
sub generate_menu {
my @menu = @_;
- my $menu_html = qq|<div class="LC_columnSection">|;
- foreach my $category (@menu) { #FIXME: insert appropriate classnames for styles when they're finished.
- $menu_html .='<div class="LC_ContentBoxSpecial">
- <h3 class="LC_hcell">'.mt($category->{'categorytitle'}).'</h3>
- <ul class="LC_ListStyleNormal">';
- foreach my $item ( @{ $category->{items} } ) {
- next unless $item->{'permission'};
- $menu_html .= qq|<li class="LC_menubuttons_inline_text"><a href="$item->{'url'}" title="|.mt($item->{'linktitle'}).'">';
- if($item->{'icon'}){
- $menu_html .= qq|<img class ="LC_noBorder LC_middle" src="/res/adm/pages/$item->{'icon'}" alt="|;
- if($item->{'alttext'}){
- $menu_html .= $item->{'alttext'}.'"/></a>';
- } else { #use linktext as alt text for the icon
- $menu_html .= qq|$item->{'linktext'}"/></a>|;
- }
- }
- $menu_html .= qq|<a href="$item->{'url'}" title="|.mt($item->{'linktitle'}).'">';
- $menu_html .= mt($item->{'linktext'}).'</a>';
- if (exists($item->{'help'})) {
- $menu_html .= Apache::loncommon::help_open_topic($item->{'help'});
- }
- $menu_html .= '</li>';
- }
- $menu_html .= '</ul></div>';
+ # usage: $wrap->(element, content, {attribute => value,...});
+ # output: content enclosed in html conform tags
+ my $wrap = sub {
+ return
+ qq|<$_[0]|
+ . join( '', map { qq| $_="${$_[2]}{$_}"| } keys %{ $_[2] } )
+ . ($_[1] ? qq|>$_[1]</$_[0]>| : qq|/>|). "\n";
+ };
+
+ # subs for specific html elements
+ my $h3 = sub { return $wrap->( "h3", @_ ) };
+ my $div = sub { return $wrap->( "div", @_ ) };
+ my $ul = sub { return $wrap->( "ul", @_ ) };
+ my $li = sub { return $wrap->( "li", @_ ) };
+ my $a = sub { return $wrap->( "a", @_ ) };
+ my $img = sub { return $wrap->( "img", @_ ) };
+
+ my @categories; # each element represents the entire markup for a category
+
+ foreach my $category (@menu) {
+ my @links; # contains the links for the current $category
+ foreach my $link (@{$$category{items}}) {
+ next unless $$link{permission};
+
+ # create the markup for the current $link and push it into @links.
+ # each entry consists of an image and a text optionally followed
+ # by a help link.
+ push @links, $li->(
+ $a->(
+ $img->("", {
+ class => "LC_noBorder LC_middle",
+ src => "/res/adm/pages/$$link{icon}",
+ alt => defined($$link{alttext}) ?
+ $$link{alttext} : $$link{linktext}
+ }), {
+ href => $$link{url},
+ title => $$link{linktitle}
+ }).
+ $a->($$link{linktext}, {
+ href => $$link{url},
+ title => $$link{linktitle},
+ class => "LC_menubuttons_link"
+ }).
+ (defined($$link{help}) ?
+ Apache::loncommon::help_open_topic($$link{help}) : ''),
+ {class => "LC_menubuttons_inline_text"});
+ }
+
+ # wrap categorytitle in <h3>, concatenate with
+ # joined and in <ul> tags wrapped @links
+ # and wrap everything in an enclosing <div> and push it into
+ # @categories
+ # such that each element looks like:
+ # <div><h3>title</h3><ul><li>...</li>...</ul></div>
+ # the category won't be added if there aren't any links
+ push @categories,
+ $div->($h3->($$category{categorytitle}, {class=>"LC_hcell"}).
+ $ul->(join('' ,@links), {class =>"LC_ListStyleNormal" }),
+ {class=>"LC_ContentBoxSpecial"}) if scalar(@links);
}
- $menu_html .= qq|</div>|;
- return $menu_html;
-}
+ # wrap the joined @categories in another <div> (column layout)
+ return $div->(join('', @categories), {class => "LC_columnSection"});
+}
1;