--- loncom/homework/caparesponse/caparesponse.pm 2012/01/16 11:54:37 1.249.4.1 +++ loncom/homework/caparesponse/caparesponse.pm 2015/10/30 03:49:55 1.256 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # caparesponse definition # -# $Id: caparesponse.pm,v 1.249.4.1 2012/01/16 11:54:37 foxr Exp $ +# $Id: caparesponse.pm,v 1.256 2015/10/30 03:49:55 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -296,7 +296,7 @@ sub start_numericalresponse { } elsif ($token->[1] eq 'formularesponse') { $constructtag=&Apache::edit::get_new_args($token,$parstack, $safeeval,'answer', - 'samples','preproces'); + 'samples','preprocess'); } if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); @@ -456,7 +456,6 @@ sub check_submission { my ($result,@msgs) = &Apache::run::run("&caparesponse_check_list()",$safeeval); &Apache::lonxml::debug("checking $name $result with $response took ".&Time::HiRes::tv_interval($t0)); - &Apache::lonxml::debug('msgs are '.join(':',@msgs)); my ($awards)=split(/:/,$result); my @awards= split(/,/,$awards); @@ -636,18 +635,14 @@ sub end_numericalresponse { $result.=' \textit{(in} \verb|'.$unit.'|\textit{)} '; } if ($tag eq 'numericalresponse') { - $result .= &make_latex_bubbles($bubble_values, $bubble_display); + $result .= &make_horizontal_latex_bubbles($bubble_values, $bubble_display, + '$\bigcirc$'); } else { $increment = &Apache::response::repetition(); } } } - if (($target eq 'web') && ($tag eq 'formularesponse') - && ($Apache::lonhomework::type ne 'exam') && ($Apache::inputtags::status['-1'] eq 'CAN_ANSWER') - && (&Apache::lonnet::EXT('resource.'.$partid.'_'.$id.'.turnoffeditor') ne 'yes')) { - $result.=&Apache::response::edit_mathresponse_button($id,"HWVAL_$id"); - } - + &Apache::response::setup_prior_tries_hash(\&format_prior_response_numerical); } elsif ($target eq 'edit') { $result.=''.&Apache::edit::end_table; @@ -894,7 +889,6 @@ sub get_table_sizes { my ($number_of_bubbles,$rbubble_values)=@_; my $scale=2; #mm for one digit my $cell_width=0; - &Apache::lonnet::logthis("textwidth envvar: " . $env{'form.textwidth'}); foreach my $member (@$rbubble_values) { my $cell_width_real=0; if ($member=~/(\+|-)?(\d*)\.?(\d*)\s*\$?\\times\s*10\^{(\+|-)?(\d+)}\$?/) { @@ -970,6 +964,15 @@ sub make_numerical_bubbles { my $number_of_bubbles = &Apache::response::get_response_param($part.'_'.$id,'numbubbles',8); + # + # Fixes for BZ 6519 - number of bubbles <= 0 or non-integer. + # + $number_of_bubbles = int($number_of_bubbles + 0.5); + if ($number_of_bubbles <= 0) { + $number_of_bubbles = 8; + } + + my ($format)=&Apache::lonxml::get_param_var('format',$parstack,$safeeval); my $name = (exists($answer{$tag_internal_answer_name}) ? $tag_internal_answer_name @@ -1058,18 +1061,22 @@ sub make_numerical_bubbles { } ## -# Produce LaTeX bubbles given a set of bubble values: +# Produce LaTeX bubbles laid out horizontally given a set of bubble values: # # @param bubble_values - reference to an array of bubble 'values' # @param bubble_display - reference to the array of texts to display to the user # for each bubble_value (this is mostly for numerical response # when the displayed value may not be an exact # representation of the bubble value. +# @param bubble_fragment- The LaTeX fragment that will be plugged in to make +# the bubble itself. Note that the code will autonomously +# label each bubble with a lable...and that it's perfectly +# acceptable to use "" for the bubble_fragment. # # @return string - the LaTeX fragment that produces the bubbles. # -sub make_latex_bubbles { - my ($bubble_values, $bubble_display) = @_; +sub make_horizontal_latex_bubbles { + my ($bubble_values, $bubble_display, $bubble_fragment) = @_; my $result; my $number_of_bubbles = scalar(@{$bubble_values}); @@ -1093,12 +1100,16 @@ sub make_latex_bubbles { } $result.='\noindent \setlength{\tabcolsep}{2 mm}\hskip 2pc\begin{tabular}{'; for (my $ind=0;$ind<$table_range[$j];$ind++) { - $result.='p{3 mm}p{'.$celllength.' mm}'; + $result.='p{4 mm}p{'.$celllength.' mm}'; } $result.='}'; for (my $ind=$cou;$ind<$cou+$table_range[$j];$ind++) { - $result.='\hskip -4 mm {\small \textbf{'.$alphabet[$ind].'}}$\bigcirc$ & \hskip -3 mm {\small '.$bubble_display->[$ind].'} '; - if ($ind != $cou+$table_range[$j]-1) {$result.=' & ';} + $result.='\hskip -4 mm {\small \textbf{ '.$alphabet[$ind].'}}' + . $bubble_fragment + . '& \hskip -3 mm {\small '.$bubble_display->[$ind].'} '; + if ($ind != $cou+$table_range[$j]-1) { + $result.=' & '; + } } $cou += $table_range[$j]; $j++;