Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.241 and 1.253.2.8

version 1.241, 2009/11/07 17:25:43 version 1.253.2.8, 2010/12/05 21:58:49
Line 62  use Apache::lonlocal; Line 62  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use LONCAPA;  use LONCAPA;
   
   
   sub coursepreflink {
      my ($text,$category)=@_;
      if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) {
         return '<a href="/adm/courseprefs?phase=display&actions='.$category.'">'.$text.'</a>';
      } else {
         return '';
      }
   }
   
   sub raw_href_to_link {
      my ($message)=@_;
      $message=~s/(https?\:\/\/[^\s\'\"]+)(\s|$)/<a href="$1"><tt>$1<\/tt><\/a>$2/gi;
      return $message;
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 111  sub dragmath_button { Line 127  sub dragmath_button {
     }      }
     my $buttontext=&mt('Edit Math');      my $buttontext=&mt('Edit Math');
     return <<ENDDRAGMATH;      return <<ENDDRAGMATH;
                 <input type="button" value="$buttontext", onclick="javascript:mathedit('$textarea',document)" />$help_text                  <input type="button" value="$buttontext" onclick="javascript:mathedit('$textarea',document)" />$help_text
 ENDDRAGMATH  ENDDRAGMATH
 }  }
   
Line 222  sub select_recent { Line 238  sub select_recent {
  unless ($value =~/^error\:/) {   unless ($value =~/^error\:/) {
     my $escaped = &Apache::loncommon::escape_url($value);      my $escaped = &Apache::loncommon::escape_url($value);
     &Apache::loncommon::inhibit_menu_check(\$escaped);      &Apache::loncommon::inhibit_menu_check(\$escaped);
               if ($area eq 'residx') {
                   next if ((!&Apache::lonnet::allowed('bre',$value)) && (!&Apache::lonnet::allowed('bro',$value)));
               }
     $return.="\n<option value='$escaped'>".      $return.="\n<option value='$escaped'>".
  &unescape((split(/\&/,$recent{$value}))[1]).   &unescape((split(/\&/,$recent{$value}))[1]).
  '</option>';   '</option>';
Line 391  The method used to restrict user input w Line 410  The method used to restrict user input w
 ##############################################  ##############################################
 sub date_setter {  sub date_setter {
     my ($formname,$dname,$currentvalue,$special,$includeempty,$state,      my ($formname,$dname,$currentvalue,$special,$includeempty,$state,
         $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink) = @_;          $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink,$hide_timezone) = @_;
     my $now = time;      my $now = time;
     my $wasdefined=1;      my $wasdefined=1;
     if (! defined($state) || $state ne 'disabled') {      if (! defined($state) || $state ne 'disabled') {
Line 544  ENDJS Line 563  ENDJS
         $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};          $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};
     }      }
     #      #
     my $tzone = ' '.$tzname.' ';      my $tzone;
       unless ($hide_timezone) {
           $tzone = ' '.$tzname.' ';
       }
     if ($no_hh_mm_ss) {      if ($no_hh_mm_ss) {
         $result .= &mt('[_1] [_2] [_3] ',          $result .= &mt('[_1] [_2] [_3] ',
                        $monthselector,$dayselector,$yearselector).                         $monthselector,$dayselector,$yearselector).
Line 624  Returns: Unix time represented in the fo Line 646  Returns: Unix time represented in the fo
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub get_date_from_form {  sub get_date_from_form {
     my ($dname) = @_;      my ($dname,$timezone) = @_;
     my ($sec,$min,$hour,$day,$month,$year);      my ($sec,$min,$hour,$day,$month,$year);
     #      #
     if (defined($env{'form.'.$dname.'_second'})) {      if (defined($env{'form.'.$dname.'_second'})) {
Line 674  sub get_date_from_form { Line 696  sub get_date_from_form {
     if (($year<1970) || ($year>2037)) { return undef; }      if (($year<1970) || ($year>2037)) { return undef; }
     if (defined($sec) && defined($min)   && defined($hour) &&      if (defined($sec) && defined($min)   && defined($hour) &&
         defined($day) && defined($month) && defined($year)) {          defined($day) && defined($month) && defined($year)) {
         my $timezone = &Apache::lonlocal::gettimezone();          if (defined($timezone)) {
               if (&Apache::lonlocal::gettimezone($timezone) eq 'local') {
                   $timezone = &Apache::lonlocal::gettimezone();
               }
           } else {
               $timezone = &Apache::lonlocal::gettimezone();
           }
         my $dt = DateTime->new( year   => $year,          my $dt = DateTime->new( year   => $year,
                                 month  => $month,                                  month  => $month,
                                 day    => $day,                                  day    => $day,
Line 1117  sub r_print { Line 1145  sub r_print {
 # ------------------------------------------------------- Puts directory header  # ------------------------------------------------------- Puts directory header
   
 sub crumbs {  sub crumbs {
     my ($uri,$target,$prefix,$form,$size,$noformat,$skiplast)=@_;      my ($uri,$target,$prefix,$form,$skiplast)=@_;
     if (! defined($size)) {  
         $size = '+2';  
     }  
     if ($target) {      if ($target) {
         $target = ' target="'.          $target = ' target="'.
                   &Apache::loncommon::escape_single($target).'"';                    &Apache::loncommon::escape_single($target).'"';
     }      }
     my $output='';      my $output='<span class="LC_filename">';
     unless ($noformat) { $output.='<br /><tt><b>'; }      $output.=$prefix.'/';
     $output.='<font size="'.$size.'">'.$prefix.'/';      if (($env{'user.adv'}) || ($env{'user.author'})) {
     if (($env{'user.adv'}) | ($env{'user.author'})) {          my $path=$prefix.'/';
  my $path=$prefix.'/';          foreach my $dir (split('/',$uri)) {
  foreach my $dir (split('/',$uri)) {  
             if (! $dir) { next; }              if (! $dir) { next; }
             $path .= $dir;              $path .= $dir;
     if ($path eq $uri) {              if ($path eq $uri) {
  if ($skiplast) {                  if ($skiplast) {
     $output.=$dir;                      $output.=$dir;
                     last;                      last;
  }                   } 
     } else {              } else {
  $path.='/';                   $path.='/'; 
     }                  }
             my $href_path = &HTML::Entities::encode($path,'<>&"');              my $href_path = &HTML::Entities::encode($path,'<>&"');
     &Apache::loncommon::inhibit_menu_check(\$href_path);              &Apache::loncommon::inhibit_menu_check(\$href_path);
     if ($form) {              if ($form) {
         my $href = 'javascript:'.$form.".action='".$href_path."';".$form.'.submit();';                  my $href = 'javascript:'.$form.".action='".$href_path."';".$form.'.submit();';
         $output.=qq{<a href="$href" $target>$dir</a>/};                  $output.=qq{<a href="$href"$target>$dir</a>/};
     } else {              } else {
         $output.=qq{<a href="$href_path" $target>$dir</a>/};                  $output.=qq{<a href="$href_path"$target>$dir</a>/};
     }              }
  }          }
     } else {      } else {
  foreach my $dir (split('/',$uri)) {          foreach my $dir (split('/',$uri)) {
             if (! $dir) { next; }              if (! $dir) { next; }
     $output.=$dir.'/';              $output.=$dir.'/';
  }          }
     }      }
     if ($uri !~ m|/$|) { $output=~s|/$||; }      if ($uri !~ m|/$|) { $output=~s|/$||; }
     return $output.'</font>'.($noformat?'':'</b></tt><br />');      $output.='</span>';
   
       return $output;
 }  }
   
 # --------------------- A function that generates a window for the spellchecker  # --------------------- A function that generates a window for the spellchecker
Line 1342  returns: nothing Line 1368  returns: nothing
 ############################################################  ############################################################
 {  {
     my @Crumbs;      my @Crumbs;
       my %tools = ();
           
     sub breadcrumbs {      sub breadcrumbs {
         my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, $CourseBreadcrumbs) = @_;          my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, $CourseBreadcrumbs) = @_;
Line 1360  returns: nothing Line 1387  returns: nothing
         # The first one should be the course or a menu link          # The first one should be the course or a menu link
         if (!defined($menulink)) { $menulink=1; }          if (!defined($menulink)) { $menulink=1; }
         if ($menulink) {          if ($menulink) {
             my $description = 'Menu';              if ($menulink eq '_nomenu') {
             my $no_mt_descr = 0;                  return unless($last);
             if (exists($env{'request.course.id'}) &&   
                 $env{'request.course.id'} ne '') {  
                 $description =   
                     $env{'course.'.$env{'request.course.id'}.'.description'};  
                 $no_mt_descr = 1;  
             }  
             $menulink =  {  href   =>'/adm/menu',  
                             title  =>'Go to main menu',  
                             target =>'_top',  
                             text   =>$description,  
                             no_mt  =>$no_mt_descr, };  
             if($last) {  
                 #$last set, so we have some crumbs  
                 unshift(@Crumbs,$menulink);  
             } else {              } else {
                 #only menulink crumb present                  my $description = 'Menu';
                 $last = $menulink;                  my $href = '/adm/menu';
                   my $tooltip = 'Go to main menu';
                   my $no_mt_descr = 0;
                   if ((exists($env{'request.course.id'})) &&
                       ($env{'request.course.id'} ne '') && 
                       !($env{'form.context'} eq 'requestcrs')) {
                       if ((&Apache::loncommon::needs_gci_custom()) || ($env{'user.domain'} =~ /^\w+citest$/)) {
                           if ($env{'environment.remotenavmap'} eq 'on') {
                               # open link using javascript when remote navmap is activated
                               $href = "javascript:gonav('/adm/navmaps');";
                           } else {
                               $href = '/adm/navmaps';
                           }
                           $tooltip = 'Contents';
                       }
                       if ($env{'course.'.$env{'request.course.id'}.'.description'} ne '') {
                           $description =
                               $env{'course.'.$env{'request.course.id'}.'.description'};
                           $no_mt_descr = 1;
                       }
                   }
                   $menulink =  {  href   => $href,
                                   title  => $tooltip,
                                   target => '_top',
                                   text   => $description,
                                   no_mt  => $no_mt_descr, };
                   if ($last) {
                       #$last set, so we have some crumbs
                       unshift(@Crumbs,$menulink);
                   } else {
                       #only menulink crumb present
                       $last = $menulink;
                   }
             }              }
         }          }
         my $links = join "",           my $links = join "", 
Line 1387  returns: nothing Line 1432  returns: nothing
                      $bug  = $_->{'bug'}  if (exists($_->{'bug'}));                       $bug  = $_->{'bug'}  if (exists($_->{'bug'}));
                      $help = $_->{'help'} if (exists($_->{'help'}));                       $help = $_->{'help'} if (exists($_->{'help'}));
   
                      my $result = htmltag( 'a',                        my $result = $_->{no_mt} ? $_->{text} : mt($_->{text});
                                            $_->{no_mt} ?   
                                             $_->{text} : mt($_->{text}),                        if ($_->{href}){
                            $result = htmltag( 'a', $result, 
                                            {                                              { 
                                                href   => $_->{href},                                                 href   => $_->{href},
                                                title  => $_->{no_mt} ?                                                  title  => $_->{no_mt} ? 
                                                 $_->{title} : mt($_->{title}),                                                  $_->{title} : mt($_->{title}),
                                                target => $_->{target},                                                 target => $_->{target},
                                            });                                             });
                        }
   
                      $result = htmltag( 'li', "$result $crumbsymbol");                       $result = htmltag( 'li', "$result $crumbsymbol");
                      } @Crumbs;                   } @Crumbs;
   
         #should the last Element be translated?          #should the last Element be translated?
         $links  .= htmltag( 'li',   
                         htmltag( 'b',           my $lasttext = $last->{'no_mt'} ? $last->{'text'}
                                  $last->{'no_mt'} ?                        : mt( $last->{'text'} );
                                  $last->{'text'} : mt($last->{'text'}) ));  
           # last breadcrumb is the first order heading of a page
           # for course breadcrumbs it's just bold
           $links .= htmltag( 'li', htmltag($CourseBreadcrumbs ? 'b' : 'h1',
                              $lasttext), {title => $lasttext});
   
         my $icons = '';          my $icons = '';
         $faq  = $last->{'faq'}  if (exists($last->{'faq'}));          $faq  = $last->{'faq'}  if (exists($last->{'faq'}));
Line 1438  returns: nothing Line 1490  returns: nothing
                              .$links;                               .$links;
         }          }
                   
           render_tools(\$links);
         $links = htmltag('div', $links,           $links = htmltag('div', $links, 
                         { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;                          { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;
           render_advtools(\$links);
   
         # Return the @Crumbs stack to what we started with          # Return the @Crumbs stack to what we started with
         push(@Crumbs,$last);          push(@Crumbs,$last);
Line 1450  returns: nothing Line 1504  returns: nothing
   
     sub clear_breadcrumbs {      sub clear_breadcrumbs {
         undef(@Crumbs);          undef(@Crumbs);
           undef(%tools);
     }      }
   
     sub add_breadcrumb {      sub add_breadcrumb {
         push(@Crumbs,@_);          push(@Crumbs,@_);
     }      }
       
   =item add_breadcrumb_tool($category, $html)
   
   Adds $html to $category of the breadcrumb toolbar container.
   
   $html is usually a link to a page that invokes a function on the currently
   displayed data (e.g. print when viewing a problem)
   
   Currently there are 3 possible values for $category:
   
   =over
   
   =item navigation
   left of breadcrumbs line
   
   =item tools
   right of breadcrumbs line
   
   =item advtools
   advanced tools shown in a separate box below breadcrumbs line
   
   =back
   
   returns: nothing
   
   =cut
   
       sub add_breadcrumb_tool {
           my ($category, @html) = @_;
           return unless @html;
           if (!defined(%tools)) {
               %tools = ( navigation => [], tools => [], advtools => []);
           }
   
           #this cleans data received from lonmenu::innerregister
           @html = grep {defined $_ && $_ ne ''} @html;
           for (@html) {
               s/align="(right|left)"//;
               s/<span.*?\/span>// if $category ne 'advtools';
           }
   
           push @{$tools{$category}}, @html;
       }
   
   =item clear_breadcrumb_tools()
   
   Clears the breadcrumb toolbar container.
   
   returns: nothing
   
   =cut
   
       sub clear_breadcrumb_tools {
           undef(%tools);
       }
   
   =item render_tools(\$breadcrumbs)
   
   Creates html for breadcrumb tools (categories navigation and tools) and inserts
   \$breadcrumbs at the correct position.
   
   input: \$breadcrumbs - a reference to the string containing prepared
   breadcrumbs.
   
   returns: nothing
   =cut
   
   #TODO might split this in separate functions for each category
       sub render_tools {
           my ($breadcrumbs) = @_;
           return unless defined %tools;
   
           my $navigation = list_from_array($tools{navigation},
                      { listattr => { class=>"LC_breadcrumb_tools_navigation" } });
           my $tools = list_from_array($tools{tools},
                      { listattr => { class=>"LC_breadcrumb_tools_tools" } });
           $$breadcrumbs = list_from_array([$navigation, $tools, $$breadcrumbs],
                      { listattr => { class=>'LC_breadcrumb_tools_outerlist' } });
       }
   
   =item render_advtools(\$breadcrumbs,$legend)
   
   Creates html for advanced tools (category advtools) and inserts \$breadcrumbs
   at the correct position.
   
   input: \$breadcrumbs - a reference to the string containing prepared
   breadcrumbs (after render_tools call).
   
   returns: nothing
   =cut
   
       sub render_advtools {
           my ($breadcrumbs,$legend) = @_;
           return unless     (defined $tools{'advtools'})
                         and (scalar(@{$tools{'advtools'}}) > 0);
           my $args;
           if ($legend) {
               $args = {legend => $legend};
           }
           $$breadcrumbs .= Apache::loncommon::head_subbox(
                               funclist_from_array($tools{'advtools'},$args));
       }
   
 } # End of scope for @Crumbs  } # End of scope for @Crumbs
   
Line 1547  END Line 1704  END
 }  }
   
 sub row_title {  sub row_title {
     my ($title,$css_title_class,$css_value_class) = @_;      my ($title,$css_title_class,$css_value_class, $css_value_furtherAttributes) = @_;
     $row_count[0]++;      $row_count[0]++;
     my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';      my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
     $css_title_class ||= 'LC_pick_box_title';      $css_title_class ||= 'LC_pick_box_title';
Line 1559  sub row_title { Line 1716  sub row_title {
         $title .= ':';          $title .= ':';
     }      }
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
            <tr class="LC_pick_box_row">             <tr class="LC_pick_box_row" $css_value_furtherAttributes> 
             <td $css_title_class>              <td $css_title_class>
        $title         $title
             </td>              </td>
Line 1587  ENDTWO Line 1744  ENDTWO
   
 } # End: row_count block for pick_box  } # End: row_count block for pick_box
   
   
 sub role_select_row {  sub role_select_row {
     my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;      my ($roles,$title,$css_class,$show_separate_custom,$cdom,$cnum) = @_;
     my $crstype = 'Course';      my $crstype = 'Course';
Line 1815  sub course_custom_roles { Line 1971  sub course_custom_roles {
   
 # topic_bar  # topic_bar
 #  #
 # Generates a div containing an (optional) numbered (static) image followed by a   # Generates a div containing an (optional) number with a white background followed by a 
 # title with a background color defined in the corresponding CSS: LC_topic_bar  # title with a background color defined in the corresponding CSS: LC_topic_bar
 # Inputs:  # Inputs:
 # 1. number to display (corresponding static image should exist).  # 1. number to display.
 #    img tag will be included if arg is an integer in the range 1 to 9.   #    If input for number is empty only the title will be displayed. 
 # 2. title text to display.  # 2. title text to display.
 # Outputs - a scalar containing html mark-up for the div.  # Outputs - a scalar containing html mark-up for the div.
   
 sub topic_bar {  sub topic_bar {
     my ($imgnum,$title) = @_;      my ($num,$title) = @_;
     my $imgtag;      my $number = '';
     if ($imgnum =~ /^[1-9]$/) {      if ($num ne '') {
         $imgtag = '<img src="/res/adm/pages/bl_step'.$imgnum.'.gif"'.           $number = '<span>'.$num.'</span>';
                   ' alt="'.&mt('Step [_1]',$imgnum).'" /> ';  
     }      }
     return '<div class="LC_topic_bar">'.$imgtag.$title.'</div>';      return '<div class="LC_topic_bar">'.$number.$title.'</div>';
 }  }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
                                                                                
 # echo_form_input  # echo_form_input
 #  #
 # Generates html markup to add form elements from the referrer page  # Generates html markup to add form elements from the referrer page
Line 1900  sub echo_form_input { Line 2054  sub echo_form_input {
   
 ##############################################  ##############################################
 ##############################################  ##############################################
                                                                                
 # set_form_elements  # set_form_elements
 #  #
 # Generates javascript to set form elements to values based on  # Generates javascript to set form elements to values based on
Line 2118  sub htmltag{ Line 2271  sub htmltag{
 # USAGE: inittags(@tags);  # USAGE: inittags(@tags);
 #  #
 # EXAMPLES:  # EXAMPLES:
 #  - my ($h1, $h2, $h3) = initTags( qw( h1 h2 h3 ) )  #  - my ($h1, $h2, $h3) = inittags( qw( h1 h2 h3 ) )
 #    $h1->("This is a headline") #Returns: <h1>This is a headline</h1>  #    $h1->("This is a headline") #Returns: <h1>This is a headline</h1>
 #  #
 # NOTES: See sub htmltag for further information.  # NOTES: See sub htmltag for further information.
Line 2167  sub scripttag { Line 2320  sub scripttag {
 };  };
   
   
   =item list_from_array( \@array, { listattr =>{}, itemattr =>{} } )
   
   Constructs a XHTML list from \@array.
   
   input:
   
   =over
   
   =item \@array
   
   A reference to the array containing text that will be wrapped in <li></li> tags.
   
   =item { listattr => {}, itemattr =>{} }
   
   Attributes for <ul> and <li> passed in as hash references.
   See htmltag() for more details.
   
   =back
   
   returns: XHTML list as String.
   
   =cut
   
   # \@items, {listattr => { class => 'abc', id => 'xyx' }, itemattr => {class => 'abc', id => 'xyx'}}
   sub list_from_array {
       my ($items, $args) = @_;
       return unless scalar @$items;
       my ($ul, $li) = inittags( qw(ul li) );
       my $listitems = join '', map { $li->($_, $args->{itemattr}) } @$items;
       return $ul->( $listitems, $args->{listattr} );
   }
   
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 2196  sub scripttag { Line 2382  sub scripttag {
 #  #
 # Outputs: A scalar containing the html markup for the menu.  # Outputs: A scalar containing the html markup for the menu.
   
 # ---- Remove when done ----  
 # This routine is part of the redesign of LON-CAPA and it's   
 # subject to change during this project.  
 # Don't rely on its current functionality as it might be   
 # changed or removed.  
 # --------------------------  
 sub generate_menu {  sub generate_menu {
     my @menu = @_;      my @menu = @_;
     # subs for specific html elements      # subs for specific html elements
Line 2217  sub generate_menu { Line 2397  sub generate_menu {
             # create the markup for the current $link and push it into @links.              # create the markup for the current $link and push it into @links.
             # each entry consists of an image and a text optionally followed               # each entry consists of an image and a text optionally followed 
             # by a help link.              # by a help link.
               my $src;
               if ($$link{icon} ne '') {
                   $src = '/res/adm/pages/'.$$link{icon};
               }
             push(@links,$li->(              push(@links,$li->(
                         $a->(                          $a->(
                             $img->("", {                              $img->("", {
                                 class => "LC_noBorder LC_middle",                                  class => "LC_noBorder LC_middle",
                                 src   => "/res/adm/pages/$$link{icon}",                                  src   => $src,
                                 alt   => mt(defined($$link{alttext}) ?                                  alt   => mt(defined($$link{alttext}) ?
                                 $$link{alttext} : $$link{linktext})                                  $$link{alttext} : $$link{linktext})
                             }), {                              }), {
Line 2291  Returns: HTML code with function list st Line 2475  Returns: HTML code with function list st
 sub start_funclist {  sub start_funclist {
     my($legendtext)=@_;      my($legendtext)=@_;
     $legendtext=&mt('Functions') if !$legendtext;      $legendtext=&mt('Functions') if !$legendtext;
     return "<fieldset>\n<legend>$legendtext</legend>\n"      return '<ul class="LC_funclist"><li style="font-weight:bold; margin-left:0.8em;">'.$legendtext.'</li>'."\n";
           .'<ul class="LC_funclist">'."\n";  
 }  }
   
   
Line 2325  sub add_item_funclist { Line 2508  sub add_item_funclist {
     return '<li>'.$content.'</li>'."\n";      return '<li>'.$content.'</li>'."\n";
 }  }
   
 ##############################################  
 ##############################################  
   
 =pod  =pod
   
 =item &end_funclist  =item &end_funclist
Line 2343  add_item_funclist Line 2523  add_item_funclist
 Inputs: ./.  Inputs: ./.
   
 Returns: HTML code with function list end  Returns: HTML code with function list end
   
 =cut  =cut
   
 ##############################################  
 ##############################################  
   
 sub end_funclist {  sub end_funclist {
     my($r)=@_;      return "</ul>\n";
     return "</ul>\n</fieldset>\n";  }
   
   =pod
   
   =item funclist_from_array( \@array, {legend => 'text for legend'} )
   
   Constructs a XHTML list from \@array with the first item being visually
   highlighted and set to the value of legend or 'Functions' if legend is
   empty.
   
   =over
   
   =item \@array
   
   A reference to the array containing text that will be wrapped in <li></li> tags.
   
   =item { legend => 'text' }
   
   A string that's used as visually highlighted first item. 'Functions' is used if
   it's value evaluates to false.
   
   =back
   
   returns: XHTML list as string.
   
   =back
   
   =cut
   
   sub funclist_from_array {
       my ($items, $args) = @_;
       $args->{legend} ||= mt('Functions');
       return list_from_array( [$args->{legend}, @$items],
                  { listattr => {class => 'LC_funclist'} });
 }  }
   
 1;  1;

Removed from v.1.241  
changed lines
  Added in v.1.253.2.8


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