[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 .= "