Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.210 and 1.233

version 1.210, 2009/04/29 18:42:38 version 1.233, 2009/08/13 14:54:52
Line 76  Successful completion of an operation me Line 76  Successful completion of an operation me
 sub confirm_success {  sub confirm_success {
    my ($message,$failure)=@_;     my ($message,$failure)=@_;
    if ($failure) {     if ($failure) {
       return '<span class="LC_error">'.        return '<span class="LC_error">'."\n"
           $message.              .'<img src="/adm/lonIcons/navmap.wrong.gif" alt="'.&mt('Error').'" /> '."\n"
           ' <img src="/adm/lonIcons/navmap.wrong.gif" /></span>';              .$message."\n"
               .'</span>'."\n";
    } else {     } else {
       return '<span class="LC_success">'.        return '<span class="LC_success">'."\n"
           $message.              .'<img src="/adm/lonIcons/navmap.correct.gif" alt="'.&mt('OK').'" /> '."\n"
           ' <img src="/adm/lonIcons/navmap.correct.gif" /></span>';              .$message."\n"
               .'</span>'."\n";
    }     }
 }  }
   
Line 128  sub dragmath_js { Line 130  sub dragmath_js {
     my ($popup) = @_;      my ($popup) = @_;
     return <<ENDDRAGMATHJS;      return <<ENDDRAGMATHJS;
                 <script type="text/javascript">                  <script type="text/javascript">
                   // <![CDATA[
                   function mathedit(textarea, doc) {                    function mathedit(textarea, doc) {
                      targetEntry = textarea;                       targetEntry = textarea;
                      targetDoc   = doc;                       targetDoc   = doc;
                      newwin  = window.open("/adm/dragmath/applet/$popup.html","","width=565,height=500,resizable");                       newwin  = window.open("/adm/dragmath/applet/$popup.html","","width=565,height=500,resizable");
                   }                    }
                   // ]]>
                 </script>                  </script>
   
 ENDDRAGMATHJS  ENDDRAGMATHJS
Line 156  sub authorbombs { Line 160  sub authorbombs {
     $url=&Apache::lonnet::declutter($url);      $url=&Apache::lonnet::declutter($url);
     my ($udom,$uname)=($url=~m{^($LONCAPA::domain_re)/($LONCAPA::username_re)/});      my ($udom,$uname)=($url=~m{^($LONCAPA::domain_re)/($LONCAPA::username_re)/});
     my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);      my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);
     foreach (keys %bombs) {      foreach my $bomb (keys(%bombs)) {
  if ($_=~/^$udom\/$uname\//) {   if ($bomb =~ /^$udom\/$uname\//) {
     return '<a href="/adm/bombs/'.$url.      return '<a href="/adm/bombs/'.$url.
  '"><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/bomb.gif').'" border="0" /></a>'.   '"><img src="'.&Apache::loncommon::lonhttpdurl('/adm/lonMisc/bomb.gif').'" alt="'.&mt('Bomb').'" border="0" /></a>'.
  &Apache::loncommon::help_open_topic('About_Bombs');   &Apache::loncommon::help_open_topic('About_Bombs');
  }   }
     }      }
Line 235  sub get_recent { Line 239  sub get_recent {
 # Begin filling return_hash with any 'always_include' option  # Begin filling return_hash with any 'always_include' option
     my %time_hash = ();      my %time_hash = ();
     my %return_hash = ();      my %return_hash = ();
     foreach my $item (keys %recent) {      foreach my $item (keys(%recent)) {
         my ($thistime,$thisvalue)=(split(/\&/,$recent{$item}));          my ($thistime,$thisvalue)=(split(/\&/,$recent{$item}));
         if ($thistime eq 'always_include') {          if ($thistime eq 'always_include') {
             $return_hash{$item} = &unescape($thisvalue);              $return_hash{$item} = &unescape($thisvalue);
Line 428  sub date_setter { Line 432  sub date_setter {
     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">
   // <![CDATA[
     function $dname\_checkday() {      function $dname\_checkday() {
         var day   = document.$formname.$dname\_day.value;          var day   = document.$formname.$dname\_day.value;
         var month = document.$formname.$dname\_month.value;          var month = document.$formname.$dname\_month.value;
Line 488  document.$formname.$dname\_year.value, Line 493  document.$formname.$dname\_year.value,
         }          }
   
     }      }
   // ]]>
 </script>  </script>
 ENDJS  ENDJS
     $result .= '  <span class="LC_nobreak">';      $result .= '  <span class="LC_nobreak">';
Line 499  ENDJS Line 505  ENDJS
     unshift(@Months,'If you can read this an error occurred');      unshift(@Months,'If you can read this an error occurred');
     if ($includeempty) { $monthselector.="<option value=''></option>"; }      if ($includeempty) { $monthselector.="<option value=''></option>"; }
     for(my $m = 1;$m <=$#Months;$m++) {      for(my $m = 1;$m <=$#Months;$m++) {
         $monthselector .= qq{      <option value="$m" };          $monthselector .= qq{      <option value="$m"};
         $monthselector .= "selected " if ($m-1 eq $month);          $monthselector .= ' selected="selected"' if ($m-1 eq $month);
         $monthselector .= '> '.&mt($Months[$m]).' </option>';          $monthselector .= '> '.&mt($Months[$m]).' </option>'."\n";
     }      }
     $monthselector.= '  </select>';      $monthselector.= '  </select>';
     # Day      # Day
     my $dayselector = qq{<input type="text" name="$dname\_day" $state value="$mday" size="3" $special onchange="javascript:$dname\_checkday()" />};      my $dayselector = qq{<input type="text" name="$dname\_day" $state value="$mday" size="3" $special onchange="javascript:$dname\_checkday()" />};
     # Year      # Year
     my $yearselector = qq{<input type="year" name="$dname\_year" $state value="$year" size="5" $special onchange="javascript:$dname\_checkday()" />};      my $yearselector = qq{<input type="text" name="$dname\_year" $state value="$year" size="5" $special onchange="javascript:$dname\_checkday()" />};
     #      #
     my $hourselector = qq{<select name="$dname\_hour" $special $state >};      my $hourselector = qq{<select name="$dname\_hour" $special $state >};
     if ($includeempty) {       if ($includeempty) { 
         $hourselector.=qq{<option value=''></option>};          $hourselector.=qq{<option value=''></option>};
     }      }
     for (my $h = 0;$h<24;$h++) {      for (my $h = 0;$h<24;$h++) {
         $hourselector .= qq{<option value="$h" };          $hourselector .= qq{<option value="$h"};
         $hourselector .= "selected " if (defined($hour) && $hour == $h);          $hourselector .= ' selected="selected"' if (defined($hour) && $hour == $h);
         $hourselector .= ">";          $hourselector .= ">";
         my $timest='';          my $timest='';
         if ($h == 0) {          if ($h == 0) {
Line 603  Inputs: Line 609  Inputs:
   
 =item $dname  =item $dname
   
 The name passed to &datesetter, which prefixes the form elements.  The name passed to &date_setter, which prefixes the form elements.
   
 =item $defaulttime  =item $defaulttime
   
Line 972  sub Create_PrgWin { Line 978  sub Create_PrgWin {
   
  #the whole function called through timeout is due to issues   #the whole function called through timeout is due to issues
  #in mozilla Read BUG #2665 if you want to know the whole story   #in mozilla Read BUG #2665 if you want to know the whole story
  &r_print($r,'<script type="text/javascript">'.   &r_print($r,&Apache::lonhtmlcommon::scripttag(
         "var popwin;          "var popwin;
          function openpopwin () {           function openpopwin () {
          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.
               "\');".                "\');".
         "popwin.document.close();}".          "popwin.document.close();}".
         "\nwindow.setTimeout(openpopwin,0)</script>");          "\nwindow.setTimeout(openpopwin,0)"
       ));
  $prog_state{'formname'}='popremain';   $prog_state{'formname'}='popremain';
  $prog_state{'inputname'}="remaining";   $prog_state{'inputname'}="remaining";
     } elsif ($type eq 'inline') {      } elsif ($type eq 'inline') {
Line 1016  sub Create_PrgWin { Line 1023  sub Create_PrgWin {
 # update progress  # update progress
 sub Update_PrgWin {  sub Update_PrgWin {
     my ($r,$prog_state,$displayString)=@_;      my ($r,$prog_state,$displayString)=@_;
     &r_print($r,'<script type="text/javascript">'.$$prog_state{'window'}.'.document.'.      &r_print($r,&Apache::lonhtmlcommon::scripttag(
      $$prog_state{'formname'}.'.'.          $$prog_state{'window'}.'.document.'.
      $$prog_state{'inputname'}.'.value="'.          $$prog_state{'formname'}.'.'.
      $displayString.'";</script>');          $$prog_state{'inputname'}.'.value="'.
           $displayString.'";'
       ));
     $$prog_state{'laststart'}=&Time::HiRes::time();      $$prog_state{'laststart'}=&Time::HiRes::time();
 }  }
   
Line 1072  sub Increment_PrgWin { Line 1081  sub Increment_PrgWin {
     if ($user_browser eq 'explorer' && $user_os =~ 'mac') {      if ($user_browser eq 'explorer' && $user_os =~ 'mac') {
         $lasttime = '';          $lasttime = '';
     }      }
     &r_print($r,'<script>'.$$prog_state{'window'}.'.document.'.      &r_print($r,&Apache::lonhtmlcommon::scripttag(
      $$prog_state{'formname'}.'.'.          $$prog_state{'window'}.'.document.'.
      $$prog_state{'inputname'}.'.value="'.          $$prog_state{'formname'}.'.'.
      $$prog_state{'done'}.'/'.$$prog_state{'max'}.          $$prog_state{'inputname'}.'.value="'.
      ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'.'</script>');          $$prog_state{'done'}.'/'.$$prog_state{'max'}.
           ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'
       ));
     $$prog_state{'laststart'}=&Time::HiRes::time();      $$prog_state{'laststart'}=&Time::HiRes::time();
 }  }
   
Line 1084  sub Increment_PrgWin { Line 1095  sub Increment_PrgWin {
 sub Close_PrgWin {  sub Close_PrgWin {
     my ($r,$prog_state)=@_;      my ($r,$prog_state)=@_;
     if ($$prog_state{'type'} eq 'popup') {      if ($$prog_state{'type'} eq 'popup') {
  &r_print($r,'<script>popwin.close()</script>'."\n");          &r_print($r,&Apache::lonhtmlcommon::scripttag(
               'popwin.close()'
           ));
     } elsif ($$prog_state{'type'} eq 'inline') {      } elsif ($$prog_state{'type'} eq 'inline') {
  &Update_PrgWin($r,$prog_state,&mt('Done'));   &Update_PrgWin($r,$prog_state,&mt('Done'));
     }      }
Line 1166  sub spellheader { Line 1179  sub spellheader {
     my $nothing=&javascript_nothing();      my $nothing=&javascript_nothing();
     return (<<ENDCHECK);      return (<<ENDCHECK);
 <script type="text/javascript">   <script type="text/javascript"> 
   // <![CDATA[
 //<!-- BEGIN LON-CAPA Internal  //<!-- BEGIN LON-CAPA Internal
 var checkwin;  var checkwin;
   
Line 1176  function spellcheckerwindow(string) { Line 1190  function spellcheckerwindow(string) {
     checkwin.document.close();      checkwin.document.close();
 }  }
 // END LON-CAPA Internal -->  // END LON-CAPA Internal -->
   // ]]>
 </script>  </script>
 ENDCHECK  ENDCHECK
 }  }
Line 1249  sub htmlareaselectactive { Line 1264  sub htmlareaselectactive {
     my @fields=@_;      my @fields=@_;
     unless (&htmlareabrowser()) { return ''; }      unless (&htmlareabrowser()) { return ''; }
     if (&htmlareablocked()) { return '<br />'.&enablelink(@fields); }      if (&htmlareablocked()) { return '<br />'.&enablelink(@fields); }
     my $output='<script type="text/javascript" defer="1">';      my $output='<script type="text/javascript" defer="1">'."\n"
                 .'// <![CDATA['."\n";
     my $lang = &htmlarea_lang();      my $lang = &htmlarea_lang();
     foreach my $field (@fields) {      foreach my $field (@fields) {
  $output.="   $output.="
Line 1262  sub htmlareaselectactive { Line 1278  sub htmlareaselectactive {
     oFCKeditor.Config['DefaultLanguage'] = '$lang';      oFCKeditor.Config['DefaultLanguage'] = '$lang';
 }";  }";
     }      }
     $output.="\nwindow.status='Activated Editfields';\n</script><br />".      $output.="\nwindow.status='Activated Editfields';\n"
               .'// ]]>'."\n"
               .'</script><br />'.
  &disablelink(@fields);   &disablelink(@fields);
     return $output;      return $output;
 }  }
Line 1288  sub htmlareabrowser { Line 1306  sub htmlareabrowser {
 =item breadcrumbs  =item breadcrumbs
   
 Compiles the previously registered breadcrumbs into an series of links.  Compiles the previously registered breadcrumbs into an series of links.
 FAQ and BUG links will be placed on the left side of the table if they  
 are defined for the last registered breadcrumb.    
 Additionally supports a 'component', which will be displayed on the  Additionally supports a 'component', which will be displayed on the
 right side of the table (without a link).  right side of the breadcrumbs enclosing div (without a link).
 A link to help for the component will be included if one is specified.  A link to help for the component will be included if one is specified.
   
 All inputs can be undef without problems.  All inputs can be undef without problems.
   
 Inputs: $component (the large text on the right side of the table),  Inputs: $component (the text on the right side of the breadcrumbs trail),
         $component_help          $component_help
         $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)
Line 1328  returns: nothing Line 1344  returns: nothing
     my @Crumbs;      my @Crumbs;
           
     sub breadcrumbs {      sub breadcrumbs {
         my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, $no_realBreadcrumb) = @_;          my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt, $CourseBreadcrumbs) = @_;
         #          #
  $css_class ||= 'LC_breadcrumbs';          $css_class ||= 'LC_breadcrumbs';
         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 = '&raquo;&nbsp;';          my $crumbsymbol = '&raquo;';
         # 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 1359  returns: nothing Line 1368  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 .= '<li>'.           my $links = join "", 
             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'}));
                      $help = $_->{'help'} if (exists($_->{'help'}));                       $help = $_->{'help'} if (exists($_->{'help'}));
                      my $result = '<a href="'.$_->{'href'}.'" ';  
                      if (defined($_->{'target'}) && $_->{'target'} ne '') {                       my $result = htmltag( 'a', 
                          $result .= 'target="'.$_->{'target'}.'" ';                                             $_->{no_mt} ? 
                      }                                              $_->{text} : mt($_->{text}), 
  # set the possible translation for title                                              { 
      if ($_->{'no_mt'}) {                                                 href   => $_->{href},
  $result .='title="'.$_->{'title'}.'">'.                                                 title  => $_->{no_mt} ? 
      $_->{'text'}.'</a>';                                                  $_->{title} : mt($_->{title}),
      } else {                                                 target => $_->{target},
  $result .='title="'.&mt($_->{'title'}).'">'.                                             });
      &mt($_->{'text'}).'</a>';                       $result = htmltag( 'li', "$result $crumbsymbol");
      }                       } @Crumbs;
                      $result;  
                      } @Crumbs          #should the last Element be translated?
                  ).'</li>';          $links  .= htmltag( 'li', 
 #Workaround for edit course.                           htmltag( 'b', 
  if(@Crumbs == 0 ){                                   $last->{'no_mt'} ? 
  $links .= '<li>' if ($links ne '');                                   $last->{'text'} : mt($last->{'text'}) ));
  } else {  
  $links .= '<li>'.$crumbsymbol if ($links ne '');  
  }  
 #should the last Element be translated?  
  if ($last->{'no_mt'}) {  
     $links .= '<b>'.$last->{'text'}.'</b>';  
  } else {  
     $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'}));
         $help = $last->{'help'} if (exists($last->{'help'}));          $help = $last->{'help'} if (exists($last->{'help'}));
         $component_help=($component_help?$component_help:$help);          $component_help=($component_help?$component_help:$help);
 #        if ($faq ne '') {  #        if ($faq ne '') {
Line 1412  returns: nothing Line 1416  returns: nothing
 #        if ($bug ne '') {  #        if ($bug ne '') {
 #            $icons .= &Apache::loncommon::help_open_bug($bug);  #            $icons .= &Apache::loncommon::help_open_bug($bug);
 #        }  #        }
  if ($faq ne '' || $component_help ne '' || $bug ne '') {          if ($faq ne '' || $component_help ne '' || $bug ne '') {
     $icons .= &Apache::loncommon::help_open_menu($component,              $icons .= &Apache::loncommon::help_open_menu($component,
  $component_help,                                                           $component_help,
  $faq,$bug);                                                           $faq,$bug);
  }          }
         #          #
   
   
  if($no_realBreadcrumb){          unless ($CourseBreadcrumbs) {
         $Str1 .= $links.'</ul>';              $links = htmltag('ol',  $links, { id => "LC_MenuBreadcrumbs"   });
  } else {          } else {
         $Str1 .= $links.'</ol>';              $links = htmltag('ul',  $links, { class => "LC_CourseBreadcrumbs" });
  }  
         #  
         if (defined($component)) {  
             $Str .= "\n".'<table class="'.$css_class.'">'  
                    .'<tr><td class="'.$css_class.'_component">';  
             if ($no_mt) {  
                 $Str .= $component;  
             } else {  
                 $Str .= &mt($component);  
             }  
     if ($icons ne '') {  
  $Str .= '&nbsp;'.$icons;  
     }  
     $Str .= '</td></tr></table>'."\n";  
         }          }
         #  
           if ($component) {
               $links = htmltag('span', 
                                ( $no_mt ? $component : mt($component) ).
                                ( $icons ? $icons : '' ),
                                { class => 'LC_breadcrumbs_component' } )
                                .$links;
           }
           
           $links = htmltag('div', $links, 
                           { id => "LC_breadcrumbs" }) unless ($CourseBreadcrumbs) ;
   
         # 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 the breadcrumb's line
         return "$Str\n$Str1";          return "$links";
     }      }
   
     sub clear_breadcrumbs {      sub clear_breadcrumbs {
Line 1452  returns: nothing Line 1453  returns: nothing
     }      }
   
     sub add_breadcrumb {      sub add_breadcrumb {
         push (@Crumbs,@_);          push(@Crumbs,@_);
     }      }
   
 } # End of scope for @Crumbs  } # End of scope for @Crumbs
Line 1639  sub course_selection { Line 1640  sub course_selection {
     my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_;      my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_;
     my $output = qq|      my $output = qq|
 <script type="text/javascript">  <script type="text/javascript">
   // <![CDATA[
     function coursePick (formname) {      function coursePick (formname) {
         for  (var i=0; i<formname.coursepick.length; i++) {          for  (var i=0; i<formname.coursepick.length; i++) {
             if (formname.coursepick[i].value == 'category') {              if (formname.coursepick[i].value == 'category') {
Line 1661  sub course_selection { Line 1663  sub course_selection {
             formname.courselist = '';              formname.courselist = '';
         }          }
     }      }
   // ]]>
 </script>  </script>
     |;      |;
     my $courseform='<b>'.&Apache::loncommon::selectcourse_link      my $courseform='<b>'.&Apache::loncommon::selectcourse_link
Line 1765  sub email_default_row { Line 1768  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 1804  sub course_custom_roles { Line 1806  sub course_custom_roles {
 #  #
 sub topic_bar {  sub topic_bar {
     my ($imgnum,$title) = @_;      my ($imgnum,$title) = @_;
     return '      return '<div class="LC_topic_bar">'
 <div class="LC_topic_bar">            .'<img src="/res/adm/pages/bl_step'.$imgnum.'.gif"'
     <img alt="'.&mt('Step [_1]',$imgnum).            .' alt="'.&mt('Step [_1]',$imgnum).'" />'
               '"src="/res/adm/pages/bl_step'.$imgnum.'.gif" />&nbsp;            .' '.$title
     <span>'.$title.'</span>            .'</div>';
 </div>  
 ';  
 }  }
   
 ##############################################  ##############################################
Line 2062  END Line 2062  END
     return $scripttag;      return $scripttag;
 }  }
   
   
   # USAGE: htmltag(element, content, {attribute => value,...});
   #
   # EXAMPLES: 
   #  - htmltag('a', 'this is an anchor', {href  => 'www.example.com', 
   #                                       title => 'this is a title'})
   #
   #  - You might want to set up needed tags like: 
   #
   #     my $h3  = sub { return htmltag( "h3",  @_ ) };
   #
   #    ... and use them: $h3->("This is a headline")
   #
   #  - To set up a couple of tags, see sub inittags
   #
   # NOTES:
   # - Empty elements, such as <br/> are correctly terminated, 
   #   i.e. htmltag('br') returns <br/> 
   # - Empty attributes (title="") are filtered out.
   # - The function will not check for deprecated attributes.
   #
   # OUTPUT: content enclosed in xhtml conform tags
   sub htmltag{
       return
           qq|<$_[0]|
           . join( '', map { qq| $_="${$_[2]}{$_}"| if ${$_[2]}{$_} } keys %{ $_[2] } )
           . ($_[1] ? qq|>$_[1]</$_[0]>| : qq|/>|). "\n";
   };
   
   
   # USAGE: inittags(@tags);
   #
   # EXAMPLES:
   #  - my ($h1, $h2, $h3) = initTags( qw( h1 h2 h3 ) )
   #    $h1->("This is a headline") #Returns: <h1>This is a headline</h1>
   #
   # NOTES: See sub htmltag for further information.
   #
   # OUTPUT: List of subroutines. 
   sub inittags {
       my @tags = @_;
       return map { my $tag = $_;
                    sub { return htmltag( $tag, @_ ) }
                  } @tags;
   }
   
   
   # USAGE: scripttag(scriptcode, [start|end|both]);
   #
   # EXAMPLES: 
   #  - scripttag("alert('Hello World!')", 'both') 
   #    returns:
   #    <script type="text/javascript">
   #    // BEGIN LON-CAPA Internal
   #    alert(Hello World!')
   #    // END LON-CAPA Internal
   #    </script>
   #
   # NOTES:
   # - works currently only for javascripts
   #
   # OUTPUT: 
   # Scriptcode properly enclosed in <script> and CDATA tags (and LC
   # Internal markers if 2nd argument is given)
   sub scripttag {
       my ( $content, $marker ) = @_;
       return unless defined $content;
   
       my $begin = "\n// BEGIN LON-CAPA Internal\n";
       my $end   = "\n// END LON-CAPA Internal\n";
   
       if ($marker) {
           $content  = $begin . $content if $marker eq 'start' or $marker eq 'both';
           $content .= $end              if $marker eq 'end'   or $marker eq 'both';
       }
   
       $content = "\n// <![CDATA[\n$content\n// ]]>\n";
   
       return htmltag('script', $content, {type => 'text/javascript'});
   };
   
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 2099  END Line 2181  END
 # --------------------------  # --------------------------
 sub generate_menu {  sub generate_menu {
     my @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      # subs for specific html elements
     my $h3  = sub { return $wrap->( "h3",  @_ ) };      my ($h3, $div, $ul, $li, $a, $img) = inittags( qw(h3 div ul li a img) ); 
     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      my @categories; # each element represents the entire markup for a category
         
Line 2127  sub generate_menu { Line 2194  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.
             push @links, $li->(              push(@links,$li->(
                         $a->(                          $a->(
                             $img->("", {                              $img->("", {
                                 class => "LC_noBorder LC_middle",                                  class => "LC_noBorder LC_middle",
Line 2145  sub generate_menu { Line 2212  sub generate_menu {
                             }).                              }).
                          (defined($$link{help}) ?                            (defined($$link{help}) ? 
                          Apache::loncommon::help_open_topic($$link{help}) : ''),                           Apache::loncommon::help_open_topic($$link{help}) : ''),
                          {class => "LC_menubuttons_inline_text"});                           {class => "LC_menubuttons_inline_text"}));
         }          }
   
         # wrap categorytitle in <h3>, concatenate with           # wrap categorytitle in <h3>, concatenate with 
Line 2155  sub generate_menu { Line 2222  sub generate_menu {
         # such that each element looks like:          # such that each element looks like:
         # <div><h3>title</h3><ul><li>...</li>...</ul></div>          # <div><h3>title</h3><ul><li>...</li>...</ul></div>
         # the category won't be added if there aren't any links          # the category won't be added if there aren't any links
         push @categories,           push(@categories, 
             $div->($h3->(mt($$category{categorytitle}), {class=>"LC_hcell"}).              $div->($h3->(mt($$category{categorytitle}), {class=>"LC_hcell"}).
             $ul->(join('' ,@links),  {class =>"LC_ListStyleNormal" }),              $ul->(join('' ,@links),  {class =>"LC_ListStyleNormal" }),
             {class=>"LC_ContentBoxSpecial LC_400Box"}) if scalar(@links);              {class=>"LC_Box LC_400Box"})) if scalar(@links);
     }      }
   
     # wrap the joined @categories in another <div> (column layout)      # wrap the joined @categories in another <div> (column layout)
     return $div->(join('', @categories), {class => "LC_columnSection"});      return $div->(join('', @categories), {class => "LC_columnSection"});
 }  }
   
   ##############################################
   ##############################################
   
   =pod
   
   =item &start_funclist
   
   Start list of available functions
   
   Typically used to offer a simple list of available functions
   at top or bottom of page.
   All available functions/actions for the current page
   should be included in this list.
   
   If the optional headline text is not provided, a default text will be used.
   
   
   Related routines:
   =over 4
   add_item_funclist
   end_funclist
   =back
   
   
   Inputs: (optional) headline text
   
   Returns: HTML code with function list start
   
   =cut
   
   ##############################################
   ##############################################
   
   sub start_funclist {
       my($legendtext)=@_;
       $legendtext=&mt('Functions') if !$legendtext;
       return "<fieldset>\n<legend>$legendtext</legend>\n"
             .'<ul class="LC_funclist">'."\n";
   }
   
   
   ##############################################
   ##############################################
   
   =pod
   
   =item &add_item_funclist
   
   Adds an item to the list of available functions
   
   Related routines:
   =over 4
   start_funclist
   end_funclist
   =back
   
   Inputs: content item with text and link to function
   
   Returns: HTML code with list item for funclist
   
   =cut
   
   ##############################################
   ##############################################
   
   sub add_item_funclist {
       my($content) = @_;
       return '<li>'.$content.'</li>'."\n";
   }
   
   ##############################################
   ##############################################
   
   =pod
   
   =item &end_funclist
   
   End list of available functions
   
   Related routines:
   =over 4
   start_funclist
   add_item_funclist
   =back
   
   Inputs: ./.
   
   Returns: HTML code with function list end
   
   =cut
   
   ##############################################
   ##############################################
   
   sub end_funclist {
       my($r)=@_;
       return "</ul>\n</fieldset>\n";
   }
   
 1;  1;
   
 __END__  __END__

Removed from v.1.210  
changed lines
  Added in v.1.233


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