[LON-CAPA-cvs] cvs: loncom /interface lonhtmlcommon.pm
raeburn
lon-capa-cvs@mail.lon-capa.org
Wed, 22 Feb 2006 19:22:49 -0000
raeburn Wed Feb 22 14:22:49 2006 EDT
Modified files:
/loncom/interface lonhtmlcommon.pm
Log:
Setting form elements to stored values in web forms using SetFormElements() javascript function. Forgot to commit this along with loncoursegroups.pm rev 1.5.
Index: loncom/interface/lonhtmlcommon.pm
diff -u loncom/interface/lonhtmlcommon.pm:1.120 loncom/interface/lonhtmlcommon.pm:1.121
--- loncom/interface/lonhtmlcommon.pm:1.120 Mon Nov 21 16:20:06 2005
+++ loncom/interface/lonhtmlcommon.pm Wed Feb 22 14:22:49 2006
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common html routines
#
-# $Id: lonhtmlcommon.pm,v 1.120 2005/11/21 21:20:06 albertel Exp $
+# $Id: lonhtmlcommon.pm,v 1.121 2006/02/22 19:22:49 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -1601,13 +1601,21 @@
#
# 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,
@@ -1615,24 +1623,42 @@
# 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) {
@@ -1642,67 +1668,65 @@
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<courseForm.$name.length; i++) {
|;
- if ($$elements{$name} eq 'selectbox') {
- $output .= qq|
+ if ($$elements{$name} eq 'selectbox') {
+ $output .= qq|
courseForm.$name.options[i].selected = false;|;
- } elsif (($$elements{$name} eq 'radio') ||
- ($$elements{$name} eq 'checkbox')) {
- $output .= qq|
+ } elsif (($$elements{$name} eq 'radio') ||
+ ($$elements{$name} eq 'checkbox')) {
+ $output .= qq|
courseForm.$name\[i].checked = false;|;
- }
- $output .= qq|
+ }
+ $output .= qq|
}
for (var j=0; j<courseForm.$name.length; j++) {
|;
- 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[j].value == "$value") {
courseForm.$name.options[j].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\[j].value == "$value") {
courseForm.$name\[j].checked = true;
}|;
- }
- }
- $output .= qq|
+ }
+ }
+ $output .= qq|
}
}
|;
- }
- }
}
}
$output .= "