[LON-CAPA-cvs] cvs: loncom /homework matchresponse.pm

albertel lon-capa-cvs@mail.lon-capa.org
Thu, 20 Feb 2003 09:55:07 -0000


albertel		Thu Feb 20 04:55:07 2003 EDT

  Modified files:              
    /loncom/homework	matchresponse.pm 
  Log:
  - Fixes most of BUG#1260, but uncertain how to provide access to table color/alignment/border, leaning towards naming the elements and then letting the instructor use CSS
  
  
Index: loncom/homework/matchresponse.pm
diff -u loncom/homework/matchresponse.pm:1.3 loncom/homework/matchresponse.pm:1.4
--- loncom/homework/matchresponse.pm:1.3	Thu Feb 20 04:30:42 2003
+++ loncom/homework/matchresponse.pm	Thu Feb 20 04:55:07 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Full matching style response
 #
-# $Id: matchresponse.pm,v 1.3 2003/02/20 09:30:42 albertel Exp $
+# $Id: matchresponse.pm,v 1.4 2003/02/20 09:55:07 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -85,11 +85,24 @@
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result;
     %Apache::response::itemgroup=();
+    %Apache::matchresponse::itemtable=();
     if ($target eq 'edit') {
 	$result=&Apache::edit::tag_start($target,$token);
 	$result.=&Apache::edit::select_arg('Randomize Order:','randomize',
 					   ['yes','no'],$token);
+	$result.=&Apache::edit::select_arg('Items Display Location:',
+					   'location',
+					   ['top','bottom','left','right'],
+					   $token);
 	$result.=&Apache::edit::end_row().&Apache::edit::start_spanning_row();
+    } elsif ($target eq 'modified') {
+	my $constructtag=&Apache::edit::get_new_args($token,$parstack,
+						     $safeeval,'randomize',
+						     'location');
+	if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); }
+    } elsif ($target eq 'web') {
+	$Apache::matchresponse::itemtable{'location'}=
+	    &Apache::lonxml::get_param('location',$parstack,$safeeval);
     }
     return $result;
 }
@@ -117,15 +130,16 @@
     $Apache::response::itemgroup{'letter_name_map'}=\%letter_name_map;
     $Apache::response::itemgroup{'name_letter_map'}=\%name_letter_map;
     if ($target eq 'web') {
-	$result.='<table>';
+	my $table='<table>';
 	my $i=0;
 	foreach my $name (@names) {
-	    $result.='<tr><td>'.$alphabet[$i].'</td><td>'.
+	    $table.='<tr><td>'.$alphabet[$i].'</td><td>'.
 		$Apache::response::itemgroup{$name.'.text'}.
 		    '</td></tr>';
 	    $i++;
 	}
-	$result.='</table>';
+	$table.='</table>';
+	$Apache::matchresponse::itemtable{'display'}=$table;
     } elsif ($target eq 'edit') { $result=&Apache::edit::end_table(); }
     return $result;
 }
@@ -306,9 +320,21 @@
     &Apache::response::handle_previous(\%previous,$ad);
 }
 
+sub itemdisplay {
+    my ($location)=@_;
+    if ($location eq 'top' &&
+	!defined($Apache::matchresponse::itemtable{'location'})) {
+	return $Apache::matchresponse::itemtable{'display'};
+    }
+    if ($Apache::matchresponse::itemtable{'location'} eq $location) {
+	return $Apache::matchresponse::itemtable{'display'};
+    }
+    return undef;
+}
 sub displayfoils {
     my ($target,$max,$randomize)=@_;
     my $result;
+    my $question;
     my (@whichfoils)=&whichorder(&getfoilcounts($max),$randomize,
 				 &Apache::response::showallfoils(),
 				 \%Apache::response::foilgroup);
@@ -330,7 +356,7 @@
 	    my $text=$Apache::response::foilgroup{$name.'.text'};
 	    my $value=$Apache::response::foilgroup{$name.'.value'};
 	    my $letter=$name_letter_map{$value};
-	    $result.='<br />'.$letter.':'.$text;
+	    $question.='<br />'.$letter.':'.$text;
 	}
     } else {
 	my $i = 0;
@@ -355,9 +381,20 @@
 		$Apache::inputtags::response[-1].':'.$temp.'">'.
 		    $optionlist."</select>\n";
 	    my $text=$Apache::response::foilgroup{$name.'.text'};
-	    $result.='<br />'.$optionlist.$text."\n";
+	    $question.='<br />'.$optionlist.$text."\n";
 	    $temp++;
 	}
+    }
+    if ($result=&itemdisplay('top')) {
+	$result.=$question;
+    } elsif ($result=&itemdisplay('bottom')) {
+	$result=$question.$result;
+    } elsif ($result=&itemdisplay('right')) {
+	$result='<table><tr><td>'.$question.'</td><td>'.$result.
+	    '</td></tr></table>';
+    } elsif ($result=&itemdisplay('left')) {
+	$result='<table><tr><td>'.$result.'</td><td>'.$question.
+	    '</td></tr></table>';
     }
     $result.="<br />";
     return $result;