Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.253.2.2 and 1.253.2.3

version 1.253.2.2, 2009/12/08 05:19:08 version 1.253.2.3, 2010/10/04 19:19:15
Line 1383  returns: nothing Line 1383  returns: nothing
             } else {              } else {
                 my $description = 'Menu';                  my $description = 'Menu';
                 my $no_mt_descr = 0;                  my $no_mt_descr = 0;
                   if ((exists($env{'request.course.id'})) &&
                       ($env{'request.course.id'} ne '') &&
                       ($env{'course.'.$env{'request.course.id'}.'.description'} ne '')) {
                       $description =
                           $env{'course.'.$env{'request.course.id'}.'.description'};
                       $no_mt_descr = 1;
                   }
                 $menulink =  {  href   =>'/adm/menu',                  $menulink =  {  href   =>'/adm/menu',
                                 title  =>'Go to main menu',                                  title  =>'Go to main menu',
                                 target =>'_top',                                  target =>'_top',
Line 1403  returns: nothing Line 1410  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 1454  returns: nothing Line 1468  returns: nothing
                              .$links;                               .$links;
         }          }
                   
         #SD START (work in progress!)          render_tools(\$links);
         add_tools(\$links);  
         #SD END  
         $links = htmltag('div', $links,           $links = htmltag('div', $links, 
                         { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;                          { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;
         add_advtools(\$links);          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 1477  returns: nothing Line 1489  returns: nothing
         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
   
     #SD START (work in progress!)  
     sub add_breadcrumb_tool {      sub add_breadcrumb_tool {
         my ($category, $html) = @_;          my ($category, @html) = @_;
         return unless $html;          return unless @html;
         if (!defined(%tools)) {           if (!defined(%tools)) {
             my %tools = ( A => [], B => [], C => []);              %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;  
           push @{$tools{$category}}, @html;
     }      }
   
   =item clear_breadcrumb_tools()
   
   Clears the breadcrumb toolbar container.
   
   returns: nothing
   
   =cut
   
     sub clear_breadcrumb_tools {      sub clear_breadcrumb_tools {
         undef(%tools);          undef(%tools);
     }      }
   
     sub add_tools {  =item render_tools(\$breadcrumbs)
         my ($links) = @_;  
   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;          return unless defined %tools;
         my $html = '<ul class="LC_bct">';  
         for my $category ('A','B') {          my $navigation = list_from_array($tools{navigation},
             $html .= '<li class="LC_breadcrumb_tools">'                     { listattr => { class=>"LC_breadcrumb_tools_navigation" } });
                    . '<ul class="LC_breadcrumb_tools'          my $tools = list_from_array($tools{tools},
                    . " LC_breadcrumb_tools_$category\">";                     { listattr => { class=>"LC_breadcrumb_tools_tools" } });
             for my $item (@{$tools{$category}}){          $$breadcrumbs = list_from_array([$navigation, $tools, $$breadcrumbs],
                 #SD ugly! I'll fix that later on                     { listattr => { class=>'LC_breadcrumb_tools_outerlist' } });
                 $item =~ s/align="(right|left)"//;  
                 $item =~ s/<span(.*?)\/span>//;  
                 $html .= "<li>$item</li>";  
             }  
             $html .= '</ul></li>';  
             if ($category eq 'A') { $html .= "<li>$$links</li>"; }  
         }  
         $$links = $html.'</ul>';  
     }      }
   
     sub add_advtools {  =item render_advtools(\$breadcrumbs)
         my ($links) = @_;  
         return unless (defined $tools{'C'}) and (scalar (@{$tools{'C'}}) > 0);  Creates html for advanced tools (category advtools) and inserts \$breadcrumbs
         my $html = start_funclist();  at the correct position.
         for my $item (@{$tools{'C'}}){  
                 next unless $item;  input: \$breadcrumbs - a reference to the string containing prepared
                 $item =~ s/align="(right|left)"//;  breadcrumbs (after render_tools call).
                 $html .= add_item_funclist($item);  
         }  returns: nothing
         $html   .= end_funclist();  =cut
         $html    = Apache::loncommon::head_subbox($html);  
         $$links .= $html;      sub render_advtools {
           my ($breadcrumbs) = @_;
           return unless     (defined $tools{'advtools'})
                         and (scalar(@{$tools{'advtools'}}) > 0);
   
           $$breadcrumbs .= Apache::loncommon::head_subbox(
                               funclist_from_array($tools{'advtools'}) );
     }      }
     #SD END  
   
 } # End of scope for @Crumbs  } # End of scope for @Crumbs
   
Line 1658  ENDTWO Line 1719  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 1905  sub topic_bar { Line 1965  sub topic_bar {
   
 ##############################################  ##############################################
 ##############################################  ##############################################
                                                                                
 # 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 1970  sub echo_form_input { Line 2029  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 2188  sub htmltag{ Line 2246  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 2237  sub scripttag { Line 2295  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 2266  sub scripttag { Line 2357  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 2287  sub generate_menu { Line 2372  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 2394  sub add_item_funclist { Line 2483  sub add_item_funclist {
     return '<li>'.$content.'</li>'."\n";      return '<li>'.$content.'</li>'."\n";
 }  }
   
 ##############################################  
 ##############################################  
   
 =pod  =pod
   
 =item &end_funclist  =item &end_funclist
Line 2412  add_item_funclist Line 2498  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 {
     return "</ul>\n";      return "</ul>\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;
   
 __END__  __END__

Removed from v.1.253.2.2  
changed lines
  Added in v.1.253.2.3


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