Diff for /loncom/interface/lonhtmlcommon.pm between versions 1.116 and 1.125

version 1.116, 2005/10/27 23:13:49 version 1.125, 2006/04/19 22:26:26
Line 207  sub checkbox { Line 207  sub checkbox {
     return $Str;      return $Str;
 }  }
   
   
   =pod
   
   =item radiobutton
   
   =cut
   
   ##############################################
   ##############################################
   sub radio {
       my ($name,$checked,$value) = @_;
       my $Str = '<input type="radio" name="'.$name.'" ';
       if (defined($value)) {
           $Str .= 'value="'.$value.'"';
       } 
       if ($checked eq $value) {
           $Str .= ' checked="1"';
       }
       $Str .= ' />';
       return $Str;
   }
   
 ##############################################  ##############################################
 ##############################################  ##############################################
   
Line 502  sub get_date_from_form { Line 524  sub get_date_from_form {
     if (($year<70) || ($year>137)) { return undef; }      if (($year<70) || ($year>137)) { 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))) {          eval('&timelocal($sec,$min,$hour,$day,$month,$year)')) {
         return &timelocal($sec,$min,$hour,$day,$month,$year);          return &timelocal($sec,$min,$hour,$day,$month,$year);
     } else {      } else {
         return undef;          return undef;
Line 781  sub Create_PrgWin { Line 803  sub Create_PrgWin {
     $prog_state{'type'}=$type;      $prog_state{'type'}=$type;
     if ($type eq 'popup') {      if ($type eq 'popup') {
  $prog_state{'window'}='popwin';   $prog_state{'window'}='popwin';
  my $html=&Apache::lonxml::xmlbegin();   my $start_page =
       &Apache::loncommon::start_page($title,undef,
      {'only_body' => 1,
       'bgcolor'   => '#88DDFF',
       'js_ready'  => 1});
    my $end_page = &Apache::loncommon::end_page({'js_ready'  => 1});
   
  #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>'.   &r_print($r,'<script type="text/javascript">'.
         "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(\'".$html."<head><title>$title</title></head>".          "popwin.document.writeln(\'".$start_page.
       "<body bgcolor=\"#88DDFF\">".  
               "<h4>$heading</h4>".                "<h4>$heading</h4>".
               "<form name=popremain>".                "<form name=popremain>".
               '<input type="text" size="'.$width.'" name="remaining" value="'.                '<input type="text" size="'.$width.'" name="remaining" value="'.
       &mt('Starting').'"></form>'.        &mt('Starting').'"></form>'.$end_page.
               "</body></html>\');".                "\');".
         "popwin.document.close();}".          "popwin.document.close();}".
         "\nwindow.setTimeout(openpopwin,0)</script>");          "\nwindow.setTimeout(openpopwin,0)</script>");
  $prog_state{'formname'}='popremain';   $prog_state{'formname'}='popremain';
Line 952  sub crumbs { Line 979  sub crumbs {
 # --------------------- A function that generates a window for the spellchecker  # --------------------- A function that generates a window for the spellchecker
   
 sub spellheader {  sub spellheader {
     my $html=&Apache::lonxml::xmlbegin();      my $start_page=
    &Apache::loncommon::start_page('Speller Suggestions',undef,
          {'only_body' => 1,
    'js_ready'  => 1,
    'bgcolor'   => '#DDDDDD',});
       my $end_page=
    &Apache::loncommon::end_page({'js_ready'  => 1}); 
   
     my $nothing=&javascript_nothing();      my $nothing=&javascript_nothing();
     return (<<ENDCHECK);      return (<<ENDCHECK);
 <script type="text/javascript">   <script type="text/javascript"> 
Line 961  var checkwin; Line 995  var checkwin;
   
 function spellcheckerwindow() {  function spellcheckerwindow() {
     checkwin=window.open($nothing,'spellcheckwin','height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');      checkwin=window.open($nothing,'spellcheckwin','height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no');
     checkwin.document.writeln('$html<head></head><body bgcolor="#DDDDDD"><form name="spellcheckform" action="/adm/spellcheck" method="post"><input type="hidden" name="text" value="" /></form></body></html>');      checkwin.document.writeln('$start_page<form name="spellcheckform" action="/adm/spellcheck" method="post"><input type="hidden" name="text" value="" /></form>$end_page');
     checkwin.document.close();      checkwin.document.close();
 }  }
 // END LON-CAPA Internal -->  // END LON-CAPA Internal -->
Line 981  ENDLINK Line 1015  ENDLINK
   
 # ------------------------------------------------- Output headers for HTMLArea  # ------------------------------------------------- Output headers for HTMLArea
   
   {
       my @htmlareafields;
       sub init_htmlareafields {
    undef(@htmlareafields);
       }
       
       sub add_htmlareafields {
    my (@newfields) = @_;
    push(@htmlareafields,@newfields);
       }
   
       sub get_htmlareafields {
    return @htmlareafields;
       }
   }
   
 sub htmlareaheaders {  sub htmlareaheaders {
     if (&htmlareablocked()) { return ''; }      if (&htmlareablocked()) { return ''; }
     unless (&htmlareabrowser()) { return ''; }      unless (&htmlareabrowser()) { return ''; }
Line 1337  sub role_select_row { Line 1387  sub role_select_row {
     if (defined($title)) {      if (defined($title)) {
         $output = &row_title($col_width,$tablecolor,$title);          $output = &row_title($col_width,$tablecolor,$title);
     }      }
     $output .= qq|               <td>      $output .= qq|               <td valign="top">
                                   <select name="roles" multiple >\n|;                                    <select name="roles" multiple >\n|;
     foreach my $role (@$roles) {      foreach my $role (@$roles) {
         my $plrole;          my $plrole;
Line 1387  sub course_select_row { Line 1437  sub course_select_row {
 </script>  </script>
     |;      |;
     my $courseform='<b>'.&Apache::loncommon::selectcourse_link      my $courseform='<b>'.&Apache::loncommon::selectcourse_link
                      ($formname,'pickcourse','pickdomain','coursedesc').'</b>';                       ($formname,'pickcourse','pickdomain','coursedesc','',1).'</b>';
     if ($totcodes > 0) {      if ($totcodes > 0) {
         $output .= '<input type="radio" name="coursepick" value="all" onclick="coursePick(this.form)" />'.&mt('All courses');          $output .= '<input type="radio" name="coursepick" value="all" onclick="coursePick(this.form)" />'.&mt('All courses');
         my $numtitles = @$codetitles;          my $numtitles = @$codetitles;
Line 1433  sub course_select_row { Line 1483  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('."'".'rolefilter'."'".','."'".'dccourse'."'".','."'".'dcdomain'."'".','."'".'coursedesc'."',''".')" />'.&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 /></td>'."\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 /></td>'."\n";
     $output .= &row_closure();      $output .= &row_closure();
     return $output;      return $output;
 }  }
   
 sub status_select_row {  sub status_select_row {
     my ($types,$col_width,$tablecolor,$title) = @_;      my ($types,$col_width,$tablecolor,$title) = @_;
     my $output = &row_title($col_width,$tablecolor,$title);      my $output; 
     $output .= qq|              <td>      if (defined($title)) {
           $output = &row_title($col_width,$tablecolor,$title);
       }
       $output .= qq|              <td valign="top">
                                     <select name="types" multiple>\n|;                                      <select name="types" 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>';
     }      }
     $output .= qq|                   </select>      $output .= qq|                   </select>
                                     </td>\n|;                                       </td>\n|; 
     $output .= &row_closure();      if (defined($title)) {
           $output .= &row_closure();
       }
     return $output;      return $output;
 }  }
   
Line 1495  sub submit_row { Line 1550  sub submit_row {
     return $output;      return $output;
 }  }
   
   ##############################################
   ##############################################
                                                                                
   # echo_form_input
   #
   # Generates html markup to add form elements from the referrer page
   # as hidden form elements (values encoded) in the new page.
   #
   # Intended to support two types of use 
   # (a) to allow backing up to earlier pages in a multi-page 
   # form submission process using a breadcrumb trail.
   #
   # (b) to allow the current page to be reloaded with form elements
   # set on previous page to remain unchanged.  An example would
   # be where the a page containing a dynamically-built table of data is 
   # is to be redisplayed, with only the sort order of the data changed. 
   #  
   # Inputs:
   # 1. Reference to array of form elements in the submitted form on 
   # the referrer page which are to be excluded from the echoed elements.
   #
   # 2. Reference to array of regular expressions, which if matched in the  
   # name of the form element n the referrer page will be omitted from echo. 
   #
   # Outputs: A scalar containing the html markup for the echoed form
   # elements (all as hidden elements, with values encoded). 
   
   
   sub echo_form_input {
       my ($excluded,$regexps) = @_;
       my $output = '';
       foreach my $key (keys(%env)) {
           if ($key =~ /^form\.(.+)$/) {
               my $name = $1;
               my $match = 0;
               if ((!@{$excluded}) || (!grep/^$name$/,@{$excluded})) {
                   if (defined($regexps)) {
                       if (@{$regexps} > 0) {
                           foreach my $regexp (@{$regexps}) {
                               if ($name =~ /\Q$regexp\E/) {
                                   $match = 1;
                                   last;
                               }
                           }
                       }
                   }
                   if (!$match) {
                       if (ref($env{$key})) {
                           foreach my $value (@{$env{$key}}) {
                               $value = &HTML::Entities::encode($value,'<>&"');
                               $output .= '<input type="hidden" name="'.$name.
                                                '" value="'.$value.'" />'."\n";
                           }
                       } else {
                           my $value = &HTML::Entities::encode($env{$key},'<>&"');
                           $output .= '<input type="hidden" name="'.$name.
                                                '" value="'.$value.'" />'."\n";
                       }
                   }
               }
           }
       }
       return $output;
   }
   
   ##############################################
   ##############################################
                                                                                
   # set_form_elements
   #
   # Generates javascript to set form elements to values based on
   # corresponding values for the same form elements when the page was
   # previously submitted.
   #     
   # Last submission values are read from hidden form elements in referring 
   # page which have the same name, i.e., generated by &echo_form_input(). 
   #
   # Intended to be called by onload event.
   #
   # Inputs:
   # (a) Reference to hash of echoed form elements to be set.
   #
   # In the hash, keys are the form element names, and the values are the
   # element type (selectbox, radio, checkbox or text -for textbox, textarea or
   # hidden).
   #
   # (b) Optional reference to hash of stored elements to be set.
   #
   # If the page being displayed is a page which permits modification of
   # previously stored data, e.g., the first page in a multi-page submission,
   # then if stored is supplied, form elements will be set to the last stored
   # values.  If user supplied values are also available for the same elements
   # these will replace the stored values. 
   #        
   # Output:
   #  
   # javascript function - set_form_elements() which sets form elements,
   # expects an argument: formname - the name of the form according to 
   # the DOM, e.g., document.compose
   
   sub set_form_elements {
       my ($elements,$stored) = @_;
       my %values;
       my $output .= 'function setFormElements(courseForm) {
   ';
       if (defined($stored)) {
           foreach my $name (keys(%{$stored})) {
               if (exists($$elements{$name})) {
                   if (ref($$stored{$name}) eq 'ARRAY') {
                       $values{$name} = $$stored{$name};
                   } else {
                       @{$values{$name}} = ($$stored{$name});
                   }
               }
           }
       }
   
       foreach my $key (keys(%env)) {
           if ($key =~ /^form\.(.+)$/) {
               my $name = $1;
               if (exists($$elements{$name})) {
                   @{$values{$name}} = &Apache::loncommon::get_env_multiple($key);
               }
           }
       }
   
       foreach my $name (keys(%values)) {
           for (my $i=0; $i<@{$values{$name}}; $i++) {
               $values{$name}[$i] = &HTML::Entities::decode($values{$name}[$i],'<>&"');
               $values{$name}[$i] =~ s/([\r\n\f]+)/\\n/g;
               $values{$name}[$i] =~ s/"/\\"/g;
           }
           if ($$elements{$name} eq 'text') {
               my $numvalues = @{$values{$name}};
               if ($numvalues > 1) {
                   my $valuestring = join('","',@{$values{$name}});
                   $output .= qq|
     var textvalues = new Array ("$valuestring");
     var total = courseForm.$name.length;
     if (total > $numvalues) {
         total = $numvalues;
     }    
     for (var i=0; i<total; i++) {
         courseForm.$name\[i].value = textvalues[i];
     }
   |;
               } else {
                   $output .= qq|
     courseForm.$name.value = "$values{$name}[0]";
   |;
               }
           } else {
               $output .=  qq|
     var elementLength = courseForm.$name.length;
     if (elementLength==undefined) {
   |;
               foreach my $value (@{$values{$name}}) {
                   if ($$elements{$name} eq 'selectbox') {
                       $output .=  qq|
         if (courseForm.$name.options[0].value == "$value") {
             courseForm.$name.options[0].selected = true;
         }|;
                   } elsif (($$elements{$name} eq 'radio') ||
                            ($$elements{$name} eq 'checkbox')) {
                       $output .= qq|
         if (courseForm.$name.value == "$value") {
             courseForm.$name.checked = true;
         }|;
                   }
               }
               $output .= qq|
     }
     else {
         for (var i=0; i<courseForm.$name.length; i++) {
   |;
               if ($$elements{$name} eq 'selectbox') {
                   $output .=  qq|
             courseForm.$name.options[i].selected = false;|;
               } elsif (($$elements{$name} eq 'radio') || 
                        ($$elements{$name} eq 'checkbox')) {
                   $output .= qq|
             courseForm.$name\[i].checked = false;|; 
               }
               $output .= qq|
         }
         for (var j=0; j<courseForm.$name.length; j++) {
   |;
               foreach my $value (@{$values{$name}}) {
                   if ($$elements{$name} eq 'selectbox') {
                       $output .=  qq|
             if (courseForm.$name.options[j].value == "$value") {
                 courseForm.$name.options[j].selected = true;
             }|;
                   } elsif (($$elements{$name} eq 'radio') ||
                            ($$elements{$name} eq 'checkbox')) { 
                         $output .= qq|
             if (courseForm.$name\[j].value == "$value") {
                 courseForm.$name\[j].checked = true;
             }|;
                   }
               }
               $output .= qq|
         }
     }
   |;
           }
       }
       $output .= "
   }\n";
       return $output;
   }
   
 1;  1;
   
 __END__  __END__

Removed from v.1.116  
changed lines
  Added in v.1.125


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