Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.165 and 1.182.4.2

version 1.165, 2007/10/01 18:45:40 version 1.182.4.2, 2009/08/13 15:43:45
Line 67  use LONCAPA; Line 67  use LONCAPA;
   
 =pod  =pod
   
   =item confirm_success
   
   Successful completion of an operation message
   
   =cut
   
   sub confirm_success {
      my ($message,$failure)=@_;
      if ($failure) {
         return '<span class="LC_error">'."\n"
               .'<img src="/adm/lonIcons/navmap.wrong.gif" alt="'.&mt('Error').'" /> '."\n"
               .$message."\n"
               .'</span>'."\n";
      } else {
         return '<span class="LC_success">'."\n"
               .'<img src="/adm/lonIcons/navmap.correct.gif" alt="'.&mt('OK').'" /> '."\n"
               .$message."\n"
               .'</span>'."\n";
      }
   }
   
   ##############################################
   ##############################################
   
   =pod
   
   =item dragmath_button
   
   Creates a button that launches a dragmath popup-window, in which an 
   expression can be edited and pasted as LaTeX into a specified textarea. 
   
     textarea - Name of the textarea to edit.
     helpicon - If true, show a help icon to the right of the button.
   
   =cut
   
   sub dragmath_button {
       my ($textarea,$helpicon) = @_;
       my $help_text; 
       if ($helpicon) {
           $help_text = &Apache::loncommon::help_open_topic('Authoring_Math_Editor');
       }
       my $buttontext=&mt('Edit Math');
       return <<ENDDRAGMATH;
                   <input type="button" value="$buttontext", onclick="javascript:mathedit('$textarea',document)" />$help_text
   ENDDRAGMATH
   }
   
   ##############################################
   
   =pod
   
   =item dragmath_js
   
   Javascript used to open pop-up window containing dragmath applet which 
   can be used to paste LaTeX into a textarea.
    
   =cut
   
   sub dragmath_js {
       my ($popup) = @_;
       return <<ENDDRAGMATHJS;
                   <script type="text/javascript">
                   // <![CDATA[
                     function mathedit(textarea, doc) {
                        targetEntry = textarea;
                        targetDoc   = doc;
                        newwin  = window.open("/adm/dragmath/applet/$popup.html","","width=565,height=500,resizable");
                     }
                   // ]]>
                   </script>
   
   ENDDRAGMATHJS
   }
   
   
   ##############################################
   ##############################################
   
   =pod
   
 =item authorbombs  =item authorbombs
   
 =cut  =cut
Line 231  sub checkbox { Line 312  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 253  sub radio { Line 334  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 311  The method used to restrict user input w Line 392  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) = @_;          $no_hh_mm_ss,$defhour,$defmin,$defsec,$nolink) = @_;
       my $now = time;
     my $wasdefined=1;      my $wasdefined=1;
     if (! defined($state) || $state ne 'disabled') {      if (! defined($state) || $state ne 'disabled') {
         $state = '';          $state = '';
Line 319  sub date_setter { Line 401  sub date_setter {
         $no_hh_mm_ss = 0;          $no_hh_mm_ss = 0;
     }      }
     if ($currentvalue eq 'now') {      if ($currentvalue eq 'now') {
  $currentvalue=time;   $currentvalue = $now;
     }      }
     if ((!defined($currentvalue)) || ($currentvalue eq '')) {      if ((!defined($currentvalue)) || ($currentvalue eq '')) {
  $wasdefined=0;   $wasdefined=0;
  if ($includeempty) {   if ($includeempty) {
     $currentvalue = 0;      $currentvalue = 0;
  } else {   } else {
     $currentvalue = time;      $currentvalue = $now;
  }   }
     }      }
     # other potentially useful values:     wkday,yrday,is_daylight_savings      # other potentially useful values:     wkday,yrday,is_daylight_savings
       my $tzname;
     my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','','');      my ($sec,$min,$hour,$mday,$month,$year)=('','',undef,'','','');
     if ($currentvalue) {      if ($currentvalue) {
  ($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) =           ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($currentvalue); 
     localtime($currentvalue);  
  $year += 1900;  
     }      }
     unless ($wasdefined) {      unless ($wasdefined) {
           ($tzname,$sec,$min,$hour,$mday,$month,$year) = &get_timedates($now);
  if (($defhour) || ($defmin) || ($defsec)) {   if (($defhour) || ($defmin) || ($defsec)) {
     ($sec,$min,$hour,$mday,$month,$year,undef,undef,undef) =   
  localtime(time);  
     $year += 1900;  
     $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 353  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 413  document.$formname.$dname\_year.value, Line 493  document.$formname.$dname\_year.value,
         }          }
   
     }      }
   // ]]>
 </script>  </script>
 ENDJS  ENDJS
     $result .= '  <span style="white-space: nowrap;">';      $result .= '  <span style="white-space: nowrap;">';
Line 463  ENDJS Line 544  ENDJS
         $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};          $cal_link = qq{<a href="javascript:$dname\_opencalendar()">};
     }      }
     #      #
       my $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).
                      $tzone;
         if (!$nolink) {          if (!$nolink) {
             $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');              $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');
         }          }
     } else {      } else {
         $result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ',          $result .= &mt('[_1] [_2] [_3] [_4] [_5]m [_6]s ',
                       $monthselector,$dayselector,$yearselector,                        $monthselector,$dayselector,$yearselector,
                       $hourselector,$minuteselector,$secondselector);                        $hourselector,$minuteselector,$secondselector).
                      $tzone;
         if (!$nolink) {          if (!$nolink) {
             $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');              $result .= &mt('[_1]Select Date[_2]',$cal_link,'</a>');
         }          }
Line 481  ENDJS Line 565  ENDJS
     return $result;      return $result;
 }  }
   
   sub get_timedates {
       my ($epoch) = @_;
       my $dt = DateTime->from_epoch(epoch => $epoch)
                        ->set_time_zone(&Apache::lonlocal::gettimezone());
       my $tzname = $dt->time_zone_short_name();
       my $sec = $dt->second;
       my $min = $dt->minute;
       my $hour = $dt->hour;
       my $mday = $dt->day;
       my $month = $dt->month;
       if ($month) {
           $month --;
       }
       my $year = $dt->year;
       return ($tzname,$sec,$min,$hour,$mday,$month,$year);
   }
   
   sub build_url {
       my ($base, $fields)=@_;
       my $url;
       $url = $base.'?';
       foreach my $key (keys(%$fields)) {
           $url.=&escape($key).'='.&escape($$fields{$key}).'&amp;';
       }
       $url =~ s/&amp;$//;
       return $url;
   }
   
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 549  sub get_date_from_form { Line 662  sub get_date_from_form {
     if (defined($env{'form.'.$dname.'_month'})) {      if (defined($env{'form.'.$dname.'_month'})) {
         my $tmpmonth = $env{'form.'.$dname.'_month'};          my $tmpmonth = $env{'form.'.$dname.'_month'};
         if (($tmpmonth =~ /^\d+$/) && ($tmpmonth > 0) && ($tmpmonth < 13)) {          if (($tmpmonth =~ /^\d+$/) && ($tmpmonth > 0) && ($tmpmonth < 13)) {
             $month = $tmpmonth - 1;              $month = $tmpmonth;
         }          }
     }      }
     if (defined($env{'form.'.$dname.'_year'})) {      if (defined($env{'form.'.$dname.'_year'})) {
         my $tmpyear = $env{'form.'.$dname.'_year'};          my $tmpyear = $env{'form.'.$dname.'_year'};
         if (($tmpyear =~ /^\d+$/) && ($tmpyear > 1900)) {          if (($tmpyear =~ /^\d+$/) && ($tmpyear >= 1970)) {
             $year = $tmpyear - 1900;              $year = $tmpyear;
         }          }
     }      }
     if (($year<70) || ($year>137)) { 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)) {
         eval('&timelocal($sec,$min,$hour,$day,$month,$year)')) {          my $timezone = &Apache::lonlocal::gettimezone();
         return &timelocal($sec,$min,$hour,$day,$month,$year);          my $dt = DateTime->new( year   => $year,
                                   month  => $month,
                                   day    => $day,
                                   hour   => $hour,
                                   minute => $min,
                                   second => $sec,
                                   time_zone => $timezone,
                                 );
           my $epoch_time  = $dt->epoch;
           if ($epoch_time ne '') {
               return $epoch_time;
           } else {
               return undef;
           }
     } else {      } else {
         return undef;          return undef;
     }      }
Line 632  sub javascript_nothing { Line 758  sub javascript_nothing {
 ##############################################  ##############################################
 ##############################################  ##############################################
 sub javascript_docopen {  sub javascript_docopen {
       my ($mimetype) = @_;
       $mimetype ||= 'text/html';
     # safari does not understand document.open() and loads "text/html"      # safari does not understand document.open() and loads "text/html"
     my $nothing = "''";      my $nothing = "''";
     my $user_browser;      my $user_browser;
Line 645  sub javascript_docopen { Line 773  sub javascript_docopen {
     if ($user_browser eq 'safari' && $user_os =~ 'mac') {      if ($user_browser eq 'safari' && $user_os =~ 'mac') {
         $nothing = "document.clear()";          $nothing = "document.clear()";
     } else {      } else {
  $nothing = "document.open('text/html','replace')";   $nothing = "document.open('$mimetype','replace')";
     }      }
     return $nothing;      return $nothing;
 }  }
Line 851  sub Create_PrgWin { Line 979  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,'<script type="text/javascript">'.
           '// <![CDATA['.
         "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>$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).
           '// ]]>'.
           '</script>");
  $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 874  sub Create_PrgWin { Line 1005  sub Create_PrgWin {
  }   }
  if (!$inputname) {   if (!$inputname) {
     $prog_state{'inputname'}=&get_uniq_name();      $prog_state{'inputname'}=&get_uniq_name();
     &r_print($r,$heading.' <input type="text" name="'.$prog_state{'inputname'}.      &r_print($r,&mt("$heading [_1]",' <input type="text" name="'.$prog_state{'inputname'}.'" size="'.$width.'" />'));
      '" size="'.$width.'" />');  
  } else {   } else {
     $prog_state{'inputname'}=$inputname;      $prog_state{'inputname'}=$inputname;
           
Line 895  sub Create_PrgWin { Line 1025  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,'<script type="text/javascript">'.
                '// <![CDATA['.
                $$prog_state{'window'}.'.document.'.
      $$prog_state{'formname'}.'.'.       $$prog_state{'formname'}.'.'.
      $$prog_state{'inputname'}.'.value="'.       $$prog_state{'inputname'}.'.value="'.
      $displayString.'";</script>');       $displayString.'";'.
                '// ]]>'.
                '</script>');
     $$prog_state{'laststart'}=&Time::HiRes::time();      $$prog_state{'laststart'}=&Time::HiRes::time();
 }  }
   
Line 951  sub Increment_PrgWin { Line 1085  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,'<script>'.
                '// <![CDATA['.
                $$prog_state{'window'}.'.document.'.
      $$prog_state{'formname'}.'.'.       $$prog_state{'formname'}.'.'.
      $$prog_state{'inputname'}.'.value="'.       $$prog_state{'inputname'}.'.value="'.
      $$prog_state{'done'}.'/'.$$prog_state{'max'}.       $$prog_state{'done'}.'/'.$$prog_state{'max'}.
      ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'.'</script>');       ': '.$time_est.' '.&mt('remaining').' '.$lasttime.'";'.
                '// ]]>'.
                '</script>');
     $$prog_state{'laststart'}=&Time::HiRes::time();      $$prog_state{'laststart'}=&Time::HiRes::time();
 }  }
   
Line 963  sub Increment_PrgWin { Line 1101  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,'<script>'.
                    '// <![CDATA['.
                    'popwin.close()'.
                    '// ]]>'.
                    '</script>'."\n");
     } 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 1044  sub spellheader { Line 1186  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 1055  function spellcheckerwindow(string) { Line 1198  function spellcheckerwindow(string) {
     checkwin.document.close();      checkwin.document.close();
 }  }
 // END LON-CAPA Internal -->  // END LON-CAPA Internal -->
   // ]]>
 </script>  </script>
 ENDCHECK  ENDCHECK
 }  }
Line 1088  ENDLINK Line 1232  ENDLINK
 }  }
   
 sub htmlareaheaders {  sub htmlareaheaders {
     if (&htmlareablocked()) { return ''; }      return if (&htmlareablocked());
     unless (&htmlareabrowser()) { return ''; }      return if (!&htmlareabrowser());
     my $lang='en';  
     if (&mt('htmlarea_lang') ne 'htmlarea_lang') {  
  $lang=&mt('htmlarea_lang');  
     }  
     return (<<ENDHEADERS);      return (<<ENDHEADERS);
 <script type="text/javascript">  <script type="text/javascript" src="/fckeditor/fckeditor.js"></script>
 _editor_url='/htmlarea/';  
 _editor_lang='$lang';  
 </script>  
 <script type="text/javascript" src="/htmlarea/htmlarea.js"></script>  
 <link rel="stylesheet" type="text/css" href="/htmlarea/htmlarea.css" />  
 ENDHEADERS  ENDHEADERS
 }  }
   
 # ------------------------------------------------- Activate additional buttons  
   
 sub htmlareaaddbuttons {  
     if (&htmlareablocked()) { return ''; }  
     unless (&htmlareabrowser()) { return ''; }  
     return (<<ENDADDBUTTON);  
     var config=new HTMLArea.Config();  
     config.registerButton('ed_math','LaTeX Inline',  
   '/htmlarea/images/ed_math.gif',false,  
     function(editor,id) {  
       editor.surroundHTML('&nbsp;<m>\$','\$</m>&nbsp;');  
     }  
   );  
     config.registerButton('ed_math_eqn','LaTeX Equation',  
   '/htmlarea/images/ed_math_eqn.gif',false,  
     function(editor,id) {  
       editor.surroundHTML(  
      '&nbsp;\\n<center><m>\\\\[','\\\\]</m></center>\\n&nbsp;');  
     }  
   );  
     config.toolbar.push(['ed_math','ed_math_eqn']);  
 ENDADDBUTTON  
 }  
   
 # ----------------------------------------------------------------- Preferences  # ----------------------------------------------------------------- Preferences
   
 sub disablelink {  sub disablelink {
Line 1146  sub enablelink { Line 1257  sub enablelink {
     return '<a href="'.&HTML::Entities::encode('/adm/preferences?action=set_wysiwyg&wysiwyg=on&returnurl=','<>&"').&escape($ENV{'REQUEST_URI'}).'">'.&mt('Enable WYSIWYG Editor').'</a>';      return '<a href="'.&HTML::Entities::encode('/adm/preferences?action=set_wysiwyg&wysiwyg=on&returnurl=','<>&"').&escape($ENV{'REQUEST_URI'}).'">'.&mt('Enable WYSIWYG Editor').'</a>';
 }  }
   
   # ------------------------------------------------- lang to use in html editor
   sub htmlarea_lang {
       my $lang='en';
       if (&mt('htmlarea_lang') ne 'htmlarea_lang') {
    $lang=&mt('htmlarea_lang');
       }
       return $lang;
   }
   
 # ----------------------------------------- Script to activate only some fields  # ----------------------------------------- Script to activate only some fields
   
 sub htmlareaselectactive {  sub htmlareaselectactive {
Line 1153  sub htmlareaselectactive { Line 1273  sub htmlareaselectactive {
     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">'.
  &htmlareaaddbuttons();                 '// <![CDATA[';
     foreach(@fields) {      my $lang = &htmlarea_lang();
  $output.="\nHTMLArea.replace('$_',config);";      foreach my $field (@fields) {
     }   $output.="
     $output.="\nwindow.status='Activated Editfields';\n</script><br />".  {
       var oFCKeditor = new FCKeditor('$field');
       oFCKeditor.Config['CustomConfigurationsPath'] = 
    '/fckeditor/loncapaconfig.js';    
       oFCKeditor.ReplaceTextarea();
       oFCKeditor.Config['AutoDetectLanguage'] = false;
       oFCKeditor.Config['DefaultLanguage'] = '$lang';
   }";
       }
       $output.="\nwindow.status='Activated Editfields';\n".
                '// ]]>'.
                '</script><br />'.
  &disablelink(@fields);   &disablelink(@fields);
     return $output;      return $output;
 }  }
Line 1221  returns: nothing Line 1352  returns: nothing
     my @Crumbs;      my @Crumbs;
           
     sub breadcrumbs {      sub breadcrumbs {
         my ($component,$component_help,$menulink,$helplink,$css_class) = @_;          my ($component,$component_help,$menulink,$helplink,$css_class,$no_mt) = @_;
         #          #
  $css_class ||= 'LC_breadcrumbs';   $css_class ||= 'LC_breadcrumbs';
         my $Str = "\n".'<table class="'.$css_class.'"><tr><td>';          my $Str = "\n".'<table class="'.$css_class.'"><tr><td>';
Line 1230  returns: nothing Line 1361  returns: nothing
         my $faq = '';          my $faq = '';
         my $bug = '';          my $bug = '';
  my $help='';   my $help='';
    # Crumb Symbol
    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 1237  returns: nothing Line 1370  returns: nothing
  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;
             if (exists($env{'request.course.id'}) &&               if (exists($env{'request.course.id'}) && 
                 $env{'request.course.id'} ne '') {                  $env{'request.course.id'} ne '') {
                 $description =                   $description = 
                     $env{'course.'.$env{'request.course.id'}.'.description'};                      $env{'course.'.$env{'request.course.id'}.'.description'};
                   $no_mt_descr = 1;
             }              }
             unshift(@Crumbs,{              unshift(@Crumbs,{
                     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,
                 });                  });
         }          }
         my $links .=           my $links .= 
             join('-&gt;',              join($crumbsymbol,
                  map {                   map {
                      $faq = $_->{'faq'} if (exists($_->{'faq'}));                       $faq = $_->{'faq'} if (exists($_->{'faq'}));
                      $bug = $_->{'bug'} if (exists($_->{'bug'}));                       $bug = $_->{'bug'} if (exists($_->{'bug'}));
Line 1269  returns: nothing Line 1405  returns: nothing
                      $result;                       $result;
                      } @Crumbs                       } @Crumbs
                  );                   );
         $links .= '-&gt;' if ($links ne '');          $links .= $crumbsymbol if ($links ne '');
  if ($last->{'no_mt'}) {   if ($last->{'no_mt'}) {
     $links .= '<b>'.$last->{'text'}.'</b>';      $links .= '<b>'.$last->{'text'}.'</b>';
  } else {   } else {
Line 1296  returns: nothing Line 1432  returns: nothing
         $Str .= $links.'</td>';          $Str .= $links.'</td>';
         #          #
         if (defined($component)) {          if (defined($component)) {
             $Str .= '<td class="'.$css_class.'_component">'.              $Str .= '<td class="'.$css_class.'_component">';
                 &mt($component);              if ($no_mt) {
                   $Str .= $component;
               } else {
                   $Str .= &mt($component);
               }
     if ($icons ne '') {      if ($icons ne '') {
  $Str .= '&nbsp;'.$icons;   $Str .= '&nbsp;'.$icons;
     }      }
Line 1336  returns: nothing Line 1476  returns: nothing
 # row1  # row1
 # row2  # row2
 # row3   ... etc.  # row3   ... etc.
 # &submit_row(0  # &submit_row()
 # &end_pick_box()  # &end_pick_box()
 #  #
 # where row1, row 2 etc. are chosen from &role_select_row,&course_select_row,  # where row1, row 2 etc. are chosen from &role_select_row,&course_select_row,
Line 1378  returns: nothing Line 1518  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 1385  sub start_pick_box { Line 1528  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 1392  END Line 1536  END
 }  }
   
 sub end_pick_box {  sub end_pick_box {
       shift(@row_count);
     my $output = <<"END";      my $output = <<"END";
        </table>         </table>
 END  END
     return $output;      return $output;
 }  }
   
   sub row_headline {
       my $output = <<"END";
              <tr><td colspan="2">
   END
       return $output;
   }
   
 sub row_title {  sub row_title {
     my ($title,$css_title_class,$css_value_class) = @_;      my ($title,$css_title_class,$css_value_class) = @_;
       $row_count[0]++;
       my $css_class = ($row_count[0] % 2)?'LC_odd_row':'LC_even_row';
     $css_title_class ||= 'LC_pick_box_title';      $css_title_class ||= 'LC_pick_box_title';
     $css_title_class = 'class="'.$css_title_class.'"';      $css_title_class = 'class="'.$css_title_class.'"';
   
     $css_value_class ||= 'LC_pick_box_value';      $css_value_class ||= 'LC_pick_box_value';
     $css_value_class = 'class="'.$css_value_class.'"';  
   
       if ($title ne '') {
           $title .= ':';
       }
     my $output = <<"ENDONE";      my $output = <<"ENDONE";
            <tr class="LC_pick_box_row">             <tr class="LC_pick_box_row">
             <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 1433  ENDTWO Line 1589  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 1440  sub role_select_row { Line 1599  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 1476  sub course_select_row { Line 1635  sub course_select_row {
     my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles,      my ($title,$formname,$totcodes,$codetitles,$idlist,$idlist_titles,
  $css_class) = @_;   $css_class) = @_;
     my $output = &row_title($title,$css_class);      my $output = &row_title($title,$css_class);
     $output .= qq|      $output .= &course_selection($formname,$totcodes,$codetitles,$idlist,$idlist_titles);
       $output .= &row_closure();
       return $output;
   }
   
   sub course_selection {
       my ($formname,$totcodes,$codetitles,$idlist,$idlist_titles) = @_;
       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 1500  sub course_select_row { Line 1667  sub course_select_row {
             formname.courselist = '';              formname.courselist = '';
         }          }
     }      }
   // ]]>
 </script>  </script>
     |;      |;
     my $courseform='<b>'.&Apache::loncommon::selectcourse_link      my $courseform='<b>'.&Apache::loncommon::selectcourse_link
Line 1549  sub course_select_row { Line 1717  sub course_select_row {
             $output .= '</tr></table><br />';              $output .= '</tr></table><br />';
         }          }
     }      }
     $output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".$formname."'".','."'".'dccourse'."'".','."'".'dcdomain'."'".','."'".'coursedesc'."','','1'".')" />'.&mt('Pick specific course(s):').' '.$courseform.'&nbsp;&nbsp;<input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br />'."\n";      $output .= '<input type="radio" name="coursepick" value="specific" onclick="coursePick(this.form);opencrsbrowser('."'".$formname."','dccourse','dcdomain','coursedesc','','1'".')" />'.&mt('Pick specific course(s):').' '.$courseform.'&nbsp;&nbsp;<input type="text" value="0" size="4" name="coursetotal" /><input type="hidden" name="courselist" value="" />selected.<br />'."\n";
     $output .= &row_closure();  
     return $output;      return $output;
 }  }
   
Line 1561  sub status_select_row { Line 1728  sub status_select_row {
         $output = &row_title($title,$css_class,'LC_pick_box_select');          $output = &row_title($title,$css_class,'LC_pick_box_select');
     }      }
     $output .= qq|      $output .= qq|
                                     <select name="types" multiple>\n|;                                      <select name="types" multiple="multiple">\n|;
     foreach my $status_type (sort(keys(%{$types}))) {      foreach my $status_type (sort(keys(%{$types}))) {
         $output .= '  <option value="'.$status_type.'">'.$$types{$status_type}.'</option>';          $output .= '  <option value="'.$status_type.'">'.$$types{$status_type}.'</option>';
     }      }
Line 1635  sub course_custom_roles { Line 1802  sub course_custom_roles {
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
   # topic_bar
   #
   # Generates a div containing a numbered (static image) followed by a title
   # with a background color defined in the corresponding CSS: LC_topic_bar
   #
   sub topic_bar {
       my ($imgnum,$title) = @_;
       return '
   <div class="LC_topic_bar">
       <img alt="'.&mt('Step [_1]',$imgnum).
                 '"src="/res/adm/pages/bl_step'.$imgnum.'.gif" />&nbsp;
       <span>'.$title.'</span>
   </div>
   ';
   }
   
   ##############################################
   ##############################################
                                                                                                                                                             
 # echo_form_input  # echo_form_input
 #  #
Line 1882  END Line 2068  END
     return $scripttag;      return $scripttag;
 }  }
   
   
   
 1;  1;
   
 __END__  __END__

Removed from v.1.165  
changed lines
  Added in v.1.182.4.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.