Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.212 and 1.230

version 1.212, 2009/05/06 13:37:56 version 1.230, 2009/08/10 16:27:39
Line 77  sub confirm_success { Line 77  sub confirm_success {
    my ($message,$failure)=@_;     my ($message,$failure)=@_;
    if ($failure) {     if ($failure) {
       return '<span class="LC_error">'."\n"        return '<span class="LC_error">'."\n"
             .'<img src="/adm/lonIcons/navmap.wrong.gif" /> '."\n"              .'<img src="/adm/lonIcons/navmap.wrong.gif" alt="'.&mt('Error').'" /> '."\n"
             .$message."\n"              .$message."\n"
             .'</span>'."\n";              .'</span>'."\n";
    } else {     } else {
       return '<span class="LC_success">'."\n"        return '<span class="LC_success">'."\n"
             .'<img src="/adm/lonIcons/navmap.correct.gif" /> '."\n"              .'<img src="/adm/lonIcons/navmap.correct.gif" alt="'.&mt('Ok').'" /> '."\n"
             .$message."\n"              .$message."\n"
             .'</span>'."\n";              .'</span>'."\n";
    }     }
Line 130  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 161  sub authorbombs { Line 163  sub authorbombs {
     foreach (keys %bombs) {      foreach (keys %bombs) {
  if ($_=~/^$udom\/$uname\//) {   if ($_=~/^$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 430  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 490  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 501  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 605  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 974  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\');".
Line 985  sub Create_PrgWin { Line 989  sub Create_PrgWin {
       &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 1018  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 1074  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 1086  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 1168  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 1178  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 1251  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 1264  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 1290  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 1330  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 1361  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 1414  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 1641  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 1663  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 1767  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 1806  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 2064  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, true/false);
   #
   # EXAMPLES: 
   #  - scripttag("alert('Hello World!')") 
   #
   # NOTES:
   # - works currently only for javascripts
   #
   # OUTPUT: Scriptcode properly enclosed in <script> and CDATA tags (and LC
   # Internal markers if 2nd argument evaluates to true)
   sub scripttag {
       my ($content, $internal) = @_;
       $content = "// BEGIN LON-CAPA Internal\n$content\n// END LON-CAPA Internal" if $internal;
       $content = "\n// <![CDATA[\n$content\n// ]]>\n";
       htmltag("script", $content, {type => "text/javascript"});
       return htmltag("script", $content, {type => "text/javascript"});
   };
   
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 2101  END Line 2165  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 2160  sub generate_menu { Line 2209  sub generate_menu {
         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.212  
changed lines
  Added in v.1.230


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