--- loncom/homework/optionresponse.pm 2004/05/27 04:25:13 1.110 +++ loncom/homework/optionresponse.pm 2004/09/29 05:47:33 1.120 @@ -1,7 +1,7 @@ # LearningOnline Network with CAPA # option list style responses # -# $Id: optionresponse.pm,v 1.110 2004/05/27 04:25:13 albertel Exp $ +# $Id: optionresponse.pm,v 1.120 2004/09/29 05:47:33 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,7 +38,7 @@ sub start_optionresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; #when in a option response use these - &Apache::lonxml::register('Apache::optionresponse',('foilgroup','foil','conceptgroup')); + &Apache::lonxml::register('Apache::optionresponse',('foilgroup','foil','conceptgroup','drawoptionlist')); push (@Apache::lonxml::namespace,'optionresponse'); my $id = &Apache::response::start_response($parstack,$safeeval); %Apache::hint::option=(); @@ -78,7 +78,7 @@ sub end_optionresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; &Apache::response::end_response; pop @Apache::lonxml::namespace; - &Apache::lonxml::deregister('Apache::optionresponse',('foilgroup','foil','conceptgroup')); + &Apache::lonxml::deregister('Apache::optionresponse',('foilgroup','foil','conceptgroup','drawoptionlist')); my $result; if ($target eq 'edit') { $result=&Apache::edit::end_table(); } undef(%Apache::response::foilnames); @@ -192,7 +192,7 @@ sub end_foilgroup { my $ignored=0; foreach $name (@whichopt) { my $response=&Apache::response::getresponse($temp); - if ($ENV{'form.submitted'} eq 'scantron') { + if ($ENV{'form.submitted'} eq 'scantron' && $response=~/\S/) { $response = $opt[$response]; } if ( $response =~ /[^\s]/) { @@ -238,7 +238,11 @@ sub end_foilgroup { } else { my $ad; if ($wrong==0 && $right==0) { - #nothing submitted + #nothing submitted only assign a score if we + #need to override a previous grade + if (defined($Apache::lonhomework::history{"resource.$part.$id.awarddetail"})) { + $ad='ASSIGNED_SCORE'; + } } else { $ad='ASSIGNED_SCORE'; } @@ -350,7 +354,7 @@ sub displayfoils { $text='•'.$text; } $result.=$text."\n"; - } + } if ($Apache::lonhomework::type eq 'exam') { $result.=&webbubbles(\@opt,\@alphabet,$temp,$lastopt); } @@ -453,10 +457,10 @@ sub optionlist_correction { if ($TeXlayout eq 'vertical') { $texoptionlist.=' \vskip 0 mm ', } else { - $texoptionlist.=','; + $texoptionlist.=', '; } } - chop($texoptionlist); + $texoptionlist=~s/, $//; if ($TeXlayout ne 'vertical') {$texoptionlist.='.';} } else { if ($TeXlayout ne 'vertical') {$texoptionlist='\\item [] \\vskip -5 mm';} @@ -479,8 +483,11 @@ sub webbubbles { } $result.=''.$alphabet[$ind].': '. - $opt[$ind].''; + '" value="'.$opt[$ind].'" '.$checked.' />'; + if ($alphabet[$ind]) { + $result.=$alphabet[$ind].': '; + } + $result.=$opt[$ind].''; } $result.=''; return $result; @@ -488,8 +495,8 @@ sub webbubbles { sub bubbles { - my ($ralphabit,$ropt) = @_; - my @alphabet = @$ralphabit; + my ($ralphabet,$ropt,$response) = @_; + my @alphabet = @$ralphabet; my @opt = @$ropt; my ($result,$head,$line) =('','',''); my $number_of_bubbles = $#opt + 1; @@ -505,6 +512,7 @@ sub bubbles { for (my $ind=0;$ind<=$number_of_bubbles;$ind++) { my $leftmargin; $opt[$ind]=&Apache::lonxml::latex_special_symbols($opt[$ind]); + if ($response eq 'rankresponse') {$opt[$ind]='Rank '.$opt[$ind];} if ($ind==0) {$leftmargin=6;} else {$leftmargin=10;} $current_length += (length($opt[$ind])+length($alphabet[$ind])+4)*2; if ($current_length<($textwidth-$leftmargin) and $ind!=$number_of_bubbles) { @@ -600,7 +608,7 @@ sub end_foil { my $result = ''; if ($target eq 'web' || $target eq 'tex' || $target eq 'analyze') { $text=&Apache::lonxml::endredirection; - $text=~/(\w)/; + if ($target eq 'tex') {$text=~s/\\strut\s*\\\\\s*\\strut/\\vskip 0 mm/;} if (($target eq 'tex') and ($Apache::lonhomework::type ne 'exam') and ($text=~/\S/)) {$text = '\vspace*{-2 mm}\item '.$text;} } if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' @@ -644,6 +652,20 @@ sub end_foil { return $result; } +sub start_drawoptionlist { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + if ($target ne 'meta') { + return $token->[4]; + } +} + +sub end_drawoptionlist { + my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + if ($target ne 'meta') { + return $token->[2]; + } +} + sub insert_foil { return '