--- loncom/interface/lonhtmlcommon.pm 2005/11/15 21:08:47 1.119 +++ loncom/interface/lonhtmlcommon.pm 2006/04/18 22:35:41 1.124 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common html routines # -# $Id: lonhtmlcommon.pm,v 1.119 2005/11/15 21:08:47 raeburn Exp $ +# $Id: lonhtmlcommon.pm,v 1.124 2006/04/18 22:35:41 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -207,6 +207,28 @@ sub checkbox { return $Str; } + +=pod + +=item radiobutton + +=cut + +############################################## +############################################## +sub radio { + my ($name,$checked,$value) = @_; + my $Str = ' 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 #in mozilla Read BUG #2665 if you want to know the whole story - &r_print($r,'"); $prog_state{'formname'}='popremain'; @@ -952,7 +979,14 @@ sub crumbs { # --------------------- A function that generates a window for the spellchecker 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(); return (< @@ -961,7 +995,7 @@ var checkwin; function spellcheckerwindow() { checkwin=window.open($nothing,'spellcheckwin','height=320,width=280,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'); - checkwin.document.writeln('$html
'); + checkwin.document.writeln('$start_page
$end_page'); checkwin.document.close(); } // END LON-CAPA Internal --> @@ -981,6 +1015,22 @@ ENDLINK # ------------------------------------------------- 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 { if (&htmlareablocked()) { return ''; } unless (&htmlareabrowser()) { return ''; } @@ -1579,13 +1629,21 @@ sub echo_form_input { # # Intended to be called by onload event. # -# Input: -# Reference to hash of echoed form elements to be set. +# 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, @@ -1593,24 +1651,42 @@ sub echo_form_input { # the DOM, e.g., document.compose sub set_form_elements { - my ($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})) { - my @values = &Apache::loncommon::get_env_multiple($key); - for (my $i=0; $i<@values; $i++) { - $values[$i] = &HTML::Entities::decode($values[$i],'<>&"'); - $values[$i] =~ s/([\r\n\f]+)/\\n/g; - $values[$i] =~ s/"/\\"/g; - } - if ($$elements{$name} eq 'text') { - my $numvalues = @values; - if ($numvalues > 1) { - my $valuestring = join('","',@values); - $output .= qq| + @{$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) { @@ -1620,67 +1696,65 @@ sub set_form_elements { courseForm.$name\[i].value = textvalues[i]; } |; - } else { - $output .= qq| - courseForm.$name.value = "$values[0]"; + } else { + $output .= qq| + courseForm.$name.value = "$values{$name}[0]"; |; - } - } else { - $output .= qq| + } + } else { + $output .= qq| var elementLength = courseForm.$name.length; if (elementLength==undefined) { |; - foreach my $value (@values) { - if ($$elements{$name} eq 'selectbox') { - $output .= qq| + 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| + } elsif (($$elements{$name} eq 'radio') || + ($$elements{$name} eq 'checkbox')) { + $output .= qq| if (courseForm.$name.value == "$value") { courseForm.$name.checked = true; }|; - } - } - $output .= qq| + } + } + $output .= qq| } else { for (var i=0; i