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

version 1.253.2.8, 2010/12/05 21:58:49 version 1.254, 2009/12/11 17:25:01
Line 383  dname_hour, dname_min, and dname_sec. Line 383  dname_hour, dname_min, and dname_sec.
   
 The current setting for this time parameter.  A unix format time  The current setting for this time parameter.  A unix format time
 (time in seconds since the beginning of Jan 1st, 1970, GMT.    (time in seconds since the beginning of Jan 1st, 1970, GMT.  
 An undefined value is taken to indicate the value is the current time.  An undefined value is taken to indicate the value is the current time
   unless it is requested to leave it empty. See $includeempty. 
 Also, to be explicit, a value of 'now' also indicates the current time.  Also, to be explicit, a value of 'now' also indicates the current time.
   
 =item $special  =item $special
Line 393  the date_setter.  See lonparmset for exa Line 394  the date_setter.  See lonparmset for exa
   
 =item $includeempty   =item $includeempty 
   
   If it is set (true) and no date/time value is provided,
   the date/time fields are left empty.
   
 =item $state  =item $state
   
 Specifies the initial state of the form elements.  Either 'disabled' or empty.  Specifies the initial state of the form elements.  Either 'disabled' or empty.
Line 410  The method used to restrict user input w Line 414  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,$hide_timezone) = @_;          $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink) = @_;
     my $now = time;      my $now = time;
     my $wasdefined=1;  
       my $tzname;
       my ($sec,$min,$hour,$mday,$month,$year) = ('','',undef,'','','');
       # other potentially useful values:     wkday,yrday,is_daylight_savings
   
     if (! defined($state) || $state ne 'disabled') {      if (! defined($state) || $state ne 'disabled') {
         $state = '';          $state = '';
     }      }
     if (! defined($no_hh_mm_ss)) {      if (! defined($no_hh_mm_ss)) {
         $no_hh_mm_ss = 0;          $no_hh_mm_ss = 0;
     }      }
       
     if ($currentvalue eq 'now') {      if ($currentvalue eq 'now') {
  $currentvalue = $now;          $currentvalue = $now;
     }      }
     if ((!defined($currentvalue)) || ($currentvalue eq '')) {          
  $wasdefined=0;      # Default value: Set empty date field to current time
  if ($includeempty) {      # unless empty inclusion is requested
     $currentvalue = 0;      if ((!$includeempty) && (!$currentvalue)) {
  } else {              $currentvalue = $now;
     $currentvalue = $now;  
  }  
     }      }
     # other potentially useful values:     wkday,yrday,is_daylight_savings      # Do we have a date? Split it!
     my $tzname;  
     my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','','');  
     if ($currentvalue) {      if ($currentvalue) {
         ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue);           ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue);
     }  
     unless ($wasdefined) {          # No values provided for hour, min, sec? Use default 0
         ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($now);          if (($defhour) || ($defmin) || ($defsec)) {
  if (($defhour) || ($defmin) || ($defsec)) {              $sec  = ($defsec  ? $defsec  : 0);
     $sec=($defsec?$defsec:0);              $min  = ($defmin  ? $defmin  : 0);
     $min=($defmin?$defmin:0);              $hour = ($defhour ? $defhour : 0);
     $hour=($defhour?$defhour:0);          }
  } elsif (!$includeempty) {  
     $sec=0;  
     $min=0;  
     $hour=0;  
  }  
     }      }
   
       # Create Output
     my $result = "\n<!-- $dname date setting form -->\n";      my $result = "\n<!-- $dname date setting form -->\n";
     $result .= <<ENDJS;      $result .= <<ENDJS;
 <script type="text/javascript">  <script type="text/javascript">
Line 563  ENDJS Line 565  ENDJS
         $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};          $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};
     }      }
     #      #
     my $tzone;      my $tzone = ' '.$tzname.' ';
     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 646  Returns: Unix time represented in the fo Line 645  Returns: Unix time represented in the fo
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub get_date_from_form {  sub get_date_from_form {
     my ($dname,$timezone) = @_;      my ($dname) = @_;
     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 696  sub get_date_from_form { Line 695  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)) {
         if (defined($timezone)) {          my $timezone = &Apache::lonlocal::gettimezone();
             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 1387  returns: nothing Line 1380  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) {
             if ($menulink eq '_nomenu') {              my $description = 'Menu';
                 return unless($last);              my $no_mt_descr = 0;
               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 {
                 my $description = 'Menu';                  #only menulink crumb present
                 my $href = '/adm/menu';                  $last = $menulink;
                 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 1432  returns: nothing Line 1407  returns: nothing
                      $bug  = $_->{'bug'}  if (exists($_->{'bug'}));                       $bug  = $_->{'bug'}  if (exists($_->{'bug'}));
                      $help = $_->{'help'} if (exists($_->{'help'}));                       $help = $_->{'help'} if (exists($_->{'help'}));
   
                      my $result = $_->{no_mt} ? $_->{text} : mt($_->{text});                       my $result = htmltag( 'a', 
                                              $_->{no_mt} ? 
                      if ($_->{href}){                                              $_->{text} : mt($_->{text}), 
                          $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', 
         my $lasttext = $last->{'no_mt'} ? $last->{'text'}                          htmltag( 'b', 
                      : mt( $last->{'text'} );                                   $last->{'no_mt'} ? 
                                    $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 1490  returns: nothing Line 1458  returns: nothing
                              .$links;                               .$links;
         }          }
                   
         render_tools(\$links);          #SD START (work in progress!)
           add_tools(\$links);
           #SD END
         $links = htmltag('div', $links,           $links = htmltag('div', $links, 
                         { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;                          { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;
         render_advtools(\$links);          add_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 1511  returns: nothing Line 1481  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)) { 
             %tools = ( navigation => [], tools => [], advtools => []);              my %tools = ( A => [], B => [], C => []);
         }  
   
         #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);
     }      }
   
 =item render_tools(\$breadcrumbs)      sub add_tools {
           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">';
         my $navigation = list_from_array($tools{navigation},          for my $category ('A','B') {
                    { listattr => { class=>"LC_breadcrumb_tools_navigation" } });              $html .= '<li class="LC_breadcrumb_tools">'
         my $tools = list_from_array($tools{tools},                     . '<ul class="LC_breadcrumb_tools'
                    { listattr => { class=>"LC_breadcrumb_tools_tools" } });                     . " LC_breadcrumb_tools_$category\">";
         $$breadcrumbs = list_from_array([$navigation, $tools, $$breadcrumbs],              for my $item (@{$tools{$category}}){
                    { listattr => { class=>'LC_breadcrumb_tools_outerlist' } });                  #SD ugly! I'll fix that later on
     }                  $item =~ s/align="(right|left)"//;
                   $item =~ s/<span(.*?)\/span>//;
 =item render_advtools(\$breadcrumbs,$legend)                  $html .= "<li>$item</li>";
               }
 Creates html for advanced tools (category advtools) and inserts \$breadcrumbs              $html .= '</ul></li>';
 at the correct position.              if ($category eq 'A') { $html .= "<li>$$links</li>"; }
           }
 input: \$breadcrumbs - a reference to the string containing prepared          $$links = $html.'</ul>';
 breadcrumbs (after render_tools call).      }
   
 returns: nothing      sub add_advtools {
 =cut          my ($links) = @_;
           return unless (defined $tools{'C'}) and (scalar (@{$tools{'C'}}) > 0);
     sub render_advtools {          my $html = start_funclist();
         my ($breadcrumbs,$legend) = @_;          for my $item (@{$tools{'C'}}){
         return unless     (defined $tools{'advtools'})                  next unless $item;
                       and (scalar(@{$tools{'advtools'}}) > 0);                  $item =~ s/align="(right|left)"//;
         my $args;                  $html .= add_item_funclist($item);
         if ($legend) {          }
             $args = {legend => $legend};          $html   .= end_funclist();
         }          $html    = Apache::loncommon::head_subbox($html);
         $$breadcrumbs .= Apache::loncommon::head_subbox(          $$links .= $html;
                             funclist_from_array($tools{'advtools'},$args));  
     }      }
       #SD END
   
 } # End of scope for @Crumbs  } # End of scope for @Crumbs
   
Line 1744  ENDTWO Line 1662  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 1990  sub topic_bar { Line 1909  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 2054  sub echo_form_input { Line 1974  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 2271  sub htmltag{ Line 2192  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 2320  sub scripttag { Line 2241  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 2382  sub list_from_array { Line 2270  sub list_from_array {
 #  #
 # 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 2397  sub generate_menu { Line 2291  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   => $src,                                  src   => "/res/adm/pages/$$link{icon}",
                                 alt   => mt(defined($$link{alttext}) ?                                  alt   => mt(defined($$link{alttext}) ?
                                 $$link{alttext} : $$link{linktext})                                  $$link{alttext} : $$link{linktext})
                             }), {                              }), {
Line 2508  sub add_item_funclist { Line 2398  sub add_item_funclist {
     return '<li>'.$content.'</li>'."\n";      return '<li>'.$content.'</li>'."\n";
 }  }
   
   ##############################################
   ##############################################
   
 =pod  =pod
   
 =item &end_funclist  =item &end_funclist
Line 2523  add_item_funclist Line 2416  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.8  
changed lines
  Added in v.1.254


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