Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.192 and 1.215

version 1.192, 2008/12/05 10:23:56 version 1.215, 2009/05/16 21:50:52
Line 62  use Apache::lonlocal; Line 62  use Apache::lonlocal;
 use Apache::lonnet;  use Apache::lonnet;
 use LONCAPA;  use LONCAPA;
   
   ##############################################
   ##############################################
   
   =pod
   
   =item confirm_success
   
   Successful completion of an operation message
   
   =cut
   
   sub confirm_success {
      my ($message,$failure)=@_;
      if ($failure) {
         return '<span class="LC_error">'."\n"
               .'<img src="/adm/lonIcons/navmap.wrong.gif" /> '."\n"
               .$message."\n"
               .'</span>'."\n";
      } else {
         return '<span class="LC_success">'."\n"
               .'<img src="/adm/lonIcons/navmap.correct.gif" /> '."\n"
               .$message."\n"
               .'</span>'."\n";
      }
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
Line 285  sub checkbox { Line 310  sub checkbox {
         $Str .= 'value="'.$value.'"';          $Str .= 'value="'.$value.'"';
     }       } 
     if ($checked) {      if ($checked) {
         $Str .= ' checked="1"';          $Str .= ' checked="checked"';
     }      }
     $Str .= ' />';      $Str .= ' />';
     return $Str;      return $Str;
Line 307  sub radio { Line 332  sub radio {
         $Str .= 'value="'.$value.'"';          $Str .= 'value="'.$value.'"';
     }       } 
     if ($checked eq $value) {      if ($checked eq $value) {
         $Str .= ' checked="1"';          $Str .= ' checked="checked"';
     }      }
     $Str .= ' />';      $Str .= ' />';
     return $Str;      return $Str;
Line 955  sub Create_PrgWin { Line 980  sub Create_PrgWin {
          popwin=open(\'\',\'popwin\',\'width=400,height=100\');".           popwin=open(\'\',\'popwin\',\'width=400,height=100\');".
         "popwin.document.writeln(\'".$start_page.          "popwin.document.writeln(\'".$start_page.
               "<h4>".&mt("$heading")."<\/h4>".                "<h4>".&mt("$heading")."<\/h4>".
               "<form action= \"\" name=\"popremain\" method=\"post\">".                "<form action=\"\" name=\"popremain\" method=\"post\">".
               '<input type="text" size="'.$width.'" name="remaining" value="'.                '<input type="text" size="'.$width.'" name="remaining" value="'.
       &mt('Starting').'" /><\\/form>'.$end_page.        &mt('Starting').'" /><\\/form>'.$end_page.
               "\');".                "\');".
Line 1278  Inputs: $component (the large text on th Line 1303  Inputs: $component (the large text on th
         $menulink (boolean, controls whether to include a link to /adm/menu)          $menulink (boolean, controls whether to include a link to /adm/menu)
         $helplink (if 'nohelp' don't include the orange help link)          $helplink (if 'nohelp' don't include the orange help link)
         $css_class (optional name for the class to apply to the table for CSS)          $css_class (optional name for the class to apply to the table for CSS)
           $no_mt (optional flag, 1 if &mt() is _not_ to be applied to $component
              when including the text on the right.
 Returns a string containing breadcrumbs for the current page.  Returns a string containing breadcrumbs for the current page.
   
 =item clear_breadcrumbs  =item clear_breadcrumbs
Line 1303  returns: nothing Line 1330  returns: nothing
     my @Crumbs;      my @Crumbs;
           
     sub breadcrumbs {      sub breadcrumbs {
         my ($component,$component_help,$menulink,$helplink,$css_class) = @_;          my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, $no_realBreadcrumb) = @_;
         #          #
  $css_class ||= 'LC_breadcrumbs';          $css_class ||= 'LC_breadcrumbs';
         my $Str = "\n".'<table class="'.$css_class.'"><tr><td>';          my $Str1 = '<div id="LC_head_subbox"><ol id="LC_MenuBreadcrumbs">';
   
    if($no_realBreadcrumb){
    $Str1 = '<ul class="LC_CourseBreadcrumbs">';
    }
   
           my $Str = '';
         #          #
         # Make the faq and bug data cascade          # Make the faq and bug data cascade
         my $faq = '';          my $faq = '';
         my $bug = '';          my $bug = '';
  my $help='';          my $help='';
  # Crumb Symbol          # Crumb Symbol
  my $crumbsymbol = ' &#x25b6; ';          my $crumbsymbol = '&raquo;&nbsp;';
         # The last breadcrumb does not have a link, so handle it separately.          # The last breadcrumb does not have a link, so handle it separately.
         my $last = pop(@Crumbs);          my $last = pop(@Crumbs);
         #          #
         # 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';              my $description = 'Menu';
             my $no_mt_descr = 0;              my $no_mt_descr = 0;
Line 1328  returns: nothing Line 1361  returns: nothing
                     $env{'course.'.$env{'request.course.id'}.'.description'};                      $env{'course.'.$env{'request.course.id'}.'.description'};
                 $no_mt_descr = 1;                  $no_mt_descr = 1;
             }              }
             unshift(@Crumbs,{              $menulink =  {  href   =>'/adm/menu',
                     href   =>'/adm/menu',                              title  =>'Go to main menu',
                     title  =>'Go to main menu',                              target =>'_top',
                     target =>'_top',                              text   =>$description,
                     text   =>$description,                              no_mt  =>$no_mt_descr, };
                     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 .=           my $links .= '<li>'. 
             join($crumbsymbol,              join('</li><li>'.$crumbsymbol,
                  map {                   map {
                      $faq = $_->{'faq'} if (exists($_->{'faq'}));                       $faq = $_->{'faq'} if (exists($_->{'faq'}));
                      $bug = $_->{'bug'} if (exists($_->{'bug'}));                       $bug = $_->{'bug'} if (exists($_->{'bug'}));
Line 1346  returns: nothing Line 1384  returns: nothing
                      if (defined($_->{'target'}) && $_->{'target'} ne '') {                       if (defined($_->{'target'}) && $_->{'target'} ne '') {
                          $result .= 'target="'.$_->{'target'}.'" ';                           $result .= 'target="'.$_->{'target'}.'" ';
                      }                       }
    # set the possible translation for title 
      if ($_->{'no_mt'}) {       if ($_->{'no_mt'}) {
  $result .='title="'.$_->{'title'}.'">'.   $result .='title="'.$_->{'title'}.'">'.
      $_->{'text'}.'</a>';       $_->{'text'}.'</a>';
Line 1355  returns: nothing Line 1394  returns: nothing
      }       }
                      $result;                       $result;
                      } @Crumbs                       } @Crumbs
                  );                   ).'</li>';
         $links .= $crumbsymbol if ($links ne '');  #Workaround for edit course. 
    if(@Crumbs == 0 ){
    $links .= '<li>' if ($links ne '');
    } else {
    $links .= '<li>'.$crumbsymbol if ($links ne '');
    }
   #should the last Element be translated?
  if ($last->{'no_mt'}) {   if ($last->{'no_mt'}) {
     $links .= '<b>'.$last->{'text'}.'</b>';      $links .= '<b>'.$last->{'text'}.'</b>';
  } else {   } else {
     $links .= '<b>'.&mt($last->{'text'}).'</b>';      $links .= '<b>'.&mt($last->{'text'}).'</b>';
  }   }
         #   $links .= '</li>';
         my $icons = '';          my $icons = '';
         $faq = $last->{'faq'} if (exists($last->{'faq'}));          $faq = $last->{'faq'} if (exists($last->{'faq'}));
         $bug = $last->{'bug'} if (exists($last->{'bug'}));          $bug = $last->{'bug'} if (exists($last->{'bug'}));
Line 1380  returns: nothing Line 1425  returns: nothing
  $faq,$bug);   $faq,$bug);
  }   }
         #          #
         $Str .= $links.'</td>';  
   
    if($no_realBreadcrumb){
           $Str1 .= $links.'</ul>';
    } else {
           $Str1 .= $links.'</ol></div>';
    }
         #          #
         if (defined($component)) {          if (defined($component)) {
             $Str .= '<td class="'.$css_class.'_component">'.              $Str .= "\n".'<table class="'.$css_class.'">'
                 &mt($component);                     .'<tr><td class="'.$css_class.'_component">';
               if ($no_mt) {
                   $Str .= $component;
               } else {
                   $Str .= &mt($component);
               }
     if ($icons ne '') {      if ($icons ne '') {
  $Str .= '&nbsp;'.$icons;   $Str .= '&nbsp;'.$icons;
     }      }
     $Str .= '</td>';      $Str .= '</td></tr></table>'."\n";
         }          }
         $Str .= '</tr></table>'."\n";  
         #          #
         # Return the @Crumbs stack to what we started with          # Return the @Crumbs stack to what we started with
         push(@Crumbs,$last);          push(@Crumbs,$last);
         shift(@Crumbs);          shift(@Crumbs);
         #          # Return a table and after that the breadcrumb's line
         return $Str;          return "$Str\n$Str1";
     }      }
   
     sub clear_breadcrumbs {      sub clear_breadcrumbs {
Line 1465  returns: nothing Line 1520  returns: nothing
 # routines, but can also be called directly to start and end rows which have   # routines, but can also be called directly to start and end rows which have 
 # needs that are not accommodated by the *_select_row() routines.      # needs that are not accommodated by the *_select_row() routines.    
   
   { # Start: row_count block for pick_box
   my @row_count;
   
 sub start_pick_box {  sub start_pick_box {
     my ($css_class) = @_;      my ($css_class) = @_;
     if (defined($css_class)) {      if (defined($css_class)) {
Line 1472  sub start_pick_box { Line 1530  sub start_pick_box {
     } else {      } else {
  $css_class= 'class="LC_pick_box"';   $css_class= 'class="LC_pick_box"';
     }      }
       unshift(@row_count,0);
     my $output = <<"END";      my $output = <<"END";
  <table $css_class>   <table $css_class>
 END  END
Line 1479  END Line 1538  END
 }  }
   
 sub end_pick_box {  sub end_pick_box {
       shift(@row_count);
     my $output = <<"END";      my $output = <<"END";
        </table>         </table>
 END  END
Line 1494  END Line 1554  END
   
 sub row_title {  sub row_title {
     my ($title,$css_title_class,$css_value_class) = @_;      my ($title,$css_title_class,$css_value_class) = @_;
       $row_count[0]++;
       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';
     $css_title_class = 'class="'.$css_title_class.'"';      $css_title_class = 'class="'.$css_title_class.'"';
   
     $css_value_class ||= 'LC_pick_box_value';      $css_value_class ||= 'LC_pick_box_value';
     $css_value_class = 'class="'.$css_value_class.'"';  
   
     if ($title ne '') {      if ($title ne '') {
         $title .= ':';          $title .= ':';
Line 1508  sub row_title { Line 1569  sub row_title {
             <td $css_title_class>              <td $css_title_class>
        $title         $title
             </td>              </td>
             <td $css_value_class>              <td class="$css_value_class $css_class">
 ENDONE  ENDONE
     return $output;      return $output;
 }  }
Line 1530  ENDTWO Line 1591  ENDTWO
     return $output;      return $output;
 }  }
   
   } # 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 $output;      my $output;
Line 1537  sub role_select_row { Line 1601  sub role_select_row {
         $output = &row_title($title,$css_class);          $output = &row_title($title,$css_class);
     }      }
     $output .= qq|      $output .= qq|
                                   <select name="roles" multiple >\n|;                                    <select name="roles" multiple="multiple">\n|;
     foreach my $role (@$roles) {      foreach my $role (@$roles) {
         my $plrole;          my $plrole;
         if ($role eq 'ow') {          if ($role eq 'ow') {
Line 1664  sub status_select_row { Line 1728  sub status_select_row {
         $output = &row_title($title,$css_class,'LC_pick_box_select');          $output = &row_title($title,$css_class,'LC_pick_box_select');
     }      }
     $output .= qq|      $output .= qq|
                                     <select name="types" multiple>\n|;                                      <select name="types" multiple="multiple">\n|;
     foreach my $status_type (sort(keys(%{$types}))) {      foreach my $status_type (sort(keys(%{$types}))) {
         $output .= '  <option value="'.$status_type.'">'.$$types{$status_type}.'</option>';          $output .= '  <option value="'.$status_type.'">'.$$types{$status_type}.'</option>';
     }      }
Line 1750  sub topic_bar { Line 1814  sub topic_bar {
     return '      return '
 <div class="LC_topic_bar">  <div class="LC_topic_bar">
     <img alt="'.&mt('Step [_1]',$imgnum).      <img alt="'.&mt('Step [_1]',$imgnum).
               '"src="/res/adm/pages/bl_step'.$imgnum.'.gif" />&nbsp;                ' "src="/res/adm/pages/bl_step'.$imgnum.'.gif" />&nbsp;
     <span>'.$title.'</span>      <span>'.$title.'</span>
 </div>  </div>
 ';  ';
Line 2016  END Line 2080  END
 # An array of following structure:  # An array of following structure:
 #   ({ categorytitle => 'Categorytitle',  #   ({ categorytitle => 'Categorytitle',
 # items => [  # 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(),  # 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',  # icon        =>  'icon filename',
 # alttext    => 'alt text for the icon',  # alttext    => 'alt text for the icon',
 # help    => 'Name of the corresponding helpfile',  # help    => 'Name of the corresponding helpfile',
Line 2038  END Line 2103  END
 # subject to change during this project.  # subject to change during this project.
 # Don't rely on its current functionality as it might be   # Don't rely on its current functionality as it might be 
 # changed or removed.  # changed or removed.
 # TODO:  
 # check for empty values  
 # --------------------------  # --------------------------
   
 sub generate_menu {  sub generate_menu {
     my @menu = @_;      my @menu = @_;
     my $menu_html = qq|<div class="columnSection">|;  
   
     foreach my $category (@menu) { #FIXME: insert appropriate classnames for styles when they're finished.      # usage: $wrap->(element, content, {attribute => value,...});
  $menu_html .='<div class="ContentBoxSpecial">      # output: content enclosed in html conform tags
  <h3 class="hcell">'.mt($category->{'categorytitle'}).'</h3>      my $wrap = sub {
  <ul class="ListStyleNormal">';          return
  foreach my $item ( @{ $category->{items} } ) {              qq|<$_[0]|
     next unless $item->{'permission'};            . join( '', map { qq| $_="${$_[2]}{$_}"| } keys %{ $_[2] } )
     $menu_html .= qq|<li class="LC_menubuttons_inline_text"><a href="$item->{'url'}" title="|.mt($item->{'linktitle'}).'">';            . ($_[1] ? qq|>$_[1]</$_[0]>| : qq|/>|). "\n";
             if($item->{'icon'}){      };
                 $menu_html .= qq|<img class ="noBorder middle" src="/res/adm/pages/$item->{'icon'}" alt="|;      
  if($item->{'alttext'}){      # subs for specific html elements
     $menu_html .= $item->{'alttext'}.'"/></a>';      my $h3  = sub { return $wrap->( "h3",  @_ ) };
  } else { #use linktext as alt text for the icon      my $div = sub { return $wrap->( "div", @_ ) };
     $menu_html .= qq|$item->{'linktext'}"/></a>|;      my $ul  = sub { return $wrap->( "ul",  @_ ) };
                 }       my $li  = sub { return $wrap->( "li",  @_ ) };
             }      my $a   = sub { return $wrap->( "a",   @_ ) };
     $menu_html .= qq|<a href="$item->{'url'}" title="|.mt($item->{'linktitle'}).'">';      my $img = sub { return $wrap->( "img", @_ ) };
             $menu_html .= mt($item->{'linktext'}).'</a>';      
     if (exists($item->{'help'})) {      my @categories; # each element represents the entire markup for a category
  $menu_html .= Apache::loncommon::help_open_topic($item->{'help'});     
     }      foreach my $category (@menu) {
     $menu_html .= '</li>';          my @links;  # contains the links for the current $category
  }          foreach my $link (@{$$category{items}}) {
  $menu_html .= '</div>';              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   => mt(defined($$link{alttext}) ?
                                   $$link{alttext} : $$link{linktext})
                               }), {
                               href  => $$link{url},
                               title => mt($$link{linktitle})
                               }).
                           $a->(mt($$link{linktext}), {
                               href  => $$link{url},
                               title => mt($$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->(mt($$category{categorytitle}), {class=>"LC_hcell"}).
               $ul->(join('' ,@links),  {class =>"LC_ListStyleNormal" }),
               {class=>"LC_ContentBoxSpecial LC_400Box"}) 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;  1;
   

Removed from v.1.192  
changed lines
  Added in v.1.215


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