Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.182.2.3 and 1.209

version 1.182.2.3, 2010/01/23 22:26:27 version 1.209, 2009/04/25 20:22:07
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">'.
             $message.
             ' <img src="/adm/lonIcons/navmap.wrong.gif" /></span>';
      } else {
         return '<span class="LC_success">'.
             $message.
             ' <img src="/adm/lonIcons/navmap.correct.gif" /></span>';
      }
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
Line 285  sub checkbox { Line 308  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 330  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 391  sub date_setter { Line 414  sub date_setter {
         ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue);           ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue); 
     }      }
     unless ($wasdefined) {      unless ($wasdefined) {
           ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($now);
  if (($defhour) || ($defmin) || ($defsec)) {   if (($defhour) || ($defmin) || ($defsec)) {
             ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($now);  
     $sec=($defsec?$defsec:0);      $sec=($defsec?$defsec:0);
     $min=($defmin?$defmin:0);      $min=($defmin?$defmin:0);
     $hour=($defhour?$defhour:0);      $hour=($defhour?$defhour:0);
Line 467  document.$formname.$dname\_year.value, Line 490  document.$formname.$dname\_year.value,
     }      }
 </script>  </script>
 ENDJS  ENDJS
     $result .= '  <span style="white-space: nowrap;">';      $result .= '  <span class="LC_nobreak">';
     my $monthselector = qq{<select name="$dname\_month" $special $state onchange="javascript:$dname\_checkday()" >};      my $monthselector = qq{<select name="$dname\_month" $special $state onchange="javascript:$dname\_checkday()" >};
     # Month      # Month
     my @Months = qw/January February  March     April   May      June       my @Months = qw/January February  March     April   May      June 
Line 1092  sub crumbs { Line 1115  sub crumbs {
     my $output='';      my $output='';
     unless ($noformat) { $output.='<br /><tt><b>'; }      unless ($noformat) { $output.='<br /><tt><b>'; }
     $output.='<font size="'.$size.'">'.$prefix.'/';      $output.='<font size="'.$size.'">'.$prefix.'/';
     if (($env{'user.adv'}) || ($env{'user.author'})) {      if ($env{'user.adv'}) {
  my $path=$prefix.'/';   my $path=$prefix.'/';
  foreach my $dir (split('/',$uri)) {   foreach my $dir (split('/',$uri)) {
             if (! $dir) { next; }              if (! $dir) { next; }
Line 1280  Inputs: $component (the large text on th Line 1303  Inputs: $component (the large text on th
         $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          $no_mt (optional flag, 1 if &mt() is _not_ to be applied to $component
            when including the text on the right.             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 1306  returns: nothing Line 1328  returns: nothing
     my @Crumbs;      my @Crumbs;
           
     sub breadcrumbs {      sub breadcrumbs {
         my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt) = @_;          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 = '<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);
         #          #
Line 1339  returns: nothing Line 1367  returns: nothing
                     no_mt  =>$no_mt_descr,                      no_mt  =>$no_mt_descr,
                 });                  });
         }          }
         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 1349  returns: nothing Line 1377  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 1358  returns: nothing Line 1387  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 1383  returns: nothing Line 1418  returns: nothing
  $faq,$bug);   $faq,$bug);
  }   }
         #          #
         $Str .= $links.'</td>';  
   
    if($no_realBreadcrumb){
           $Str1 .= $links.'</ul>';
    } else {
           $Str1 .= $links.'</ol>';
    }
         #          #
         if (defined($component)) {          if (defined($component)) {
             $Str .= '<td class="'.$css_class.'_component">';              $Str .= "\n".'<table class="'.$css_class.'">'
                      .'<tr><td class="'.$css_class.'_component">';
             if ($no_mt) {              if ($no_mt) {
                 $Str .= $component;                  $Str .= $component;
             } else {              } else {
Line 1395  returns: nothing Line 1437  returns: nothing
     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 1472  returns: nothing Line 1513  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 1479  sub start_pick_box { Line 1523  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 1486  END Line 1531  END
 }  }
   
 sub end_pick_box {  sub end_pick_box {
       shift(@row_count);
     my $output = <<"END";      my $output = <<"END";
        </table>         </table>
 END  END
Line 1500  END Line 1546  END
 }  }
   
 sub row_title {  sub row_title {
       $row_count[0]++;
       my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
     my ($title,$css_title_class,$css_value_class) = @_;      my ($title,$css_title_class,$css_value_class) = @_;
     $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 1515  sub row_title { Line 1562  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 1537  ENDTWO Line 1584  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 1544  sub role_select_row { Line 1594  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 1671  sub status_select_row { Line 1721  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 1715  sub email_default_row { Line 1765  sub email_default_row {
   
 sub submit_row {  sub submit_row {
     my ($title,$cmd,$submit_text,$css_class) = @_;      my ($title,$cmd,$submit_text,$css_class) = @_;
       $submit_text = &mt($submit_text);
     my $output = &row_title($title,$css_class,'LC_pick_box_submit');      my $output = &row_title($title,$css_class,'LC_pick_box_submit');
     $output .= qq|      $output .= qq|
              <br />               <br />
Line 2011  END Line 2062  END
     return $scripttag;      return $scripttag;
 }  }
   
   ##############################################
   ##############################################
   
   # generate_menu
   #
   # Generates html markup for a menu. 
   #
   # Inputs:
   # 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',
   # permission  => 'Contains permissions as returned from lonnet::allowed(),
   #         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',
   # linktitle   => 'Description of the link (used for title tag)'
   #    },
   #    ...
   # ]
   #   }, 
   #   ...
   #   )
   #
   # 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 {
       my @menu = @_;
   
       # 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   => 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);
       }
   
       # wrap the joined @categories in another <div> (column layout)
       return $div->(join('', @categories), {class => "LC_columnSection"});
   }
   
 1;  1;
   

Removed from v.1.182.2.3  
changed lines
  Added in v.1.209


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