--- loncom/homework/caparesponse/caparesponse.pm 2007/01/23 22:00:16 1.206 +++ loncom/homework/caparesponse/caparesponse.pm 2007/04/17 23:25:24 1.212 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # caparesponse definition # -# $Id: caparesponse.pm,v 1.206 2007/01/23 22:00:16 albertel Exp $ +# $Id: caparesponse.pm,v 1.212 2007/04/17 23:25:24 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -61,19 +61,63 @@ sub start_answer { if (!defined($type)) { $type = 'ordered' }; $answer{$cur_name}= { 'type' => $type, 'answers' => [] }; + if ($target eq 'edit') { + $result.=&Apache::edit::tag_start($target,$token); + $result.=&Apache::edit::text_arg('Name:','name',$token); + $result.=&Apache::edit::select_arg('Type:','type', + [['ordered', 'Ordered' ], + ['unordered','Unordered'],], + $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,'name', + 'type'); + if ($constructtag) { + $result = &Apache::edit::rebuild_tag($token); + $result.= &Apache::edit::handle_insert(); + } + } return $result; } sub end_answer { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result; + if ($target eq 'edit') { + $result .= &Apache::edit::tag_end(); + } + undef($cur_name); return $result; } +sub insert_answer { + return ' + + + '; +} + sub start_answergroup { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result; + if ($target eq 'edit') { + $result.=&Apache::edit::tag_start($target,$token); + $result.=&Apache::edit::select_arg('Type:','type', + [['ordered', 'Ordered' ], + ['unordered','Unordered'],], + $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,'name', + 'type'); + if ($constructtag) { + $result = &Apache::edit::rebuild_tag($token); + $result.= &Apache::edit::handle_insert(); + } + } return $result; } @@ -88,10 +132,21 @@ sub end_answergroup { $target,$token,$tagstack,$parstack,$parser, $safeeval,-2); } + } elsif ($target eq 'edit') { + $result .= &Apache::edit::tag_end(); } return $result; } +sub insert_answergroup { + return ' + + + + + '; +} + sub start_value { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; @@ -104,6 +159,13 @@ sub start_value { push(@{ $answer{$cur_name}{'answers'} },[$bodytext]); + } elsif ($target eq 'edit') { + $result.=&Apache::edit::tag_start($target,$token); + my $bodytext = &Apache::lonxml::get_all_text("/value",$parser,$style); + $result.=&Apache::edit::editline($token->[1],$bodytext,undef,40). + &Apache::edit::end_row(); + } elsif ($target eq 'modified') { + $result=$token->[4].&Apache::edit::modifiedfield('/value',$parser); } return $result; } @@ -111,9 +173,17 @@ sub start_value { sub end_value { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result; + if ($target eq 'edit') { + $result = &Apache::edit::end_table(); + } return $result; } +sub insert_value { + return ' + '; +} + sub start_vector { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; @@ -126,6 +196,13 @@ sub start_vector { @values = split(',',$values[0]); } push(@{ $answer{$cur_name}{'answers'} },\@values); + } elsif ($target eq 'edit') { + $result.=&Apache::edit::tag_start($target,$token); + my $bodytext = &Apache::lonxml::get_all_text("/vector",$parser,$style); + $result.=&Apache::edit::editline($token->[1],$bodytext,undef,40). + &Apache::edit::end_row(); + } elsif ($target eq 'modified') { + $result=$token->[4].&Apache::edit::modifiedfield('/vector',$parser); } return $result; } @@ -133,9 +210,17 @@ sub start_vector { sub end_vector { my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_; my $result; + if ($target eq 'edit') { + $result = &Apache::edit::end_table(); + } return $result; } +sub insert_vector { + return ' + '; +} + sub start_array { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; @@ -173,6 +258,7 @@ sub start_numericalresponse { &Apache::lonxml::register('Apache::caparesponse', ('answer','answergroup','value','array','unit', 'vector')); + push(@Apache::lonxml::namespace,'caparesponse'); my $id = &Apache::response::start_response($parstack,$safeeval); my $result; undef(%answer); @@ -392,6 +478,12 @@ sub capa_formula_fix { sub end_numericalresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; + + &Apache::lonxml::deregister('Apache::caparesponse', + ('answer','answergroup','value','array','unit', + 'vector')); + pop(@Apache::lonxml::namespace); + my $increment=1; my $result = ''; if (!$Apache::lonxml::default_homework_loaded) { @@ -417,6 +509,7 @@ sub end_numericalresponse { &Apache::lonxml::debug($$parstack[-1] . "\n
"); if ( &Apache::response::submitted('scantron')) { + &add_in_tag_answer($parstack,$safeeval); my ($values,$display)=&make_numerical_bubbles($partid,$id, $target,$parstack,$safeeval); $response=$values->[$response]; @@ -508,6 +601,7 @@ sub end_numericalresponse { } } } + &Apache::response::setup_prior_tries_hash(\&format_prior_response_numerical); } elsif ($target eq 'edit') { $result.=''.&Apache::edit::end_table; } elsif ($target eq 'answer' || $target eq 'analyze') { @@ -698,6 +792,14 @@ sub end_numericalresponse { return $result; } +sub format_prior_response_numerical { + my ($mode,$answer) = @_; + #FIXME needs to support multianswer modes + return ''. + &HTML::Entities::encode($answer,'"<>&').''; + +} + sub check_for_answer_errors { my ($parstack,$safeeval) = @_; &add_in_tag_answer($parstack,$safeeval); @@ -917,6 +1019,12 @@ sub get_sigrange { return ($sig_ubound,$sig_lbound); } +sub format_prior_response_string { + my ($mode,$answer) =@_; + return ''. + &HTML::Entities::encode($answer,'"<>&').''; +} + sub start_stringresponse { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result; @@ -1094,6 +1202,8 @@ sub end_stringresponse { } } elsif ($target eq 'edit') { $result.=''.&Apache::edit::end_table; + } elsif ($target eq 'web' || $target eq 'tex') { + &Apache::response::setup_prior_tries_hash(\&format_prior_response_string); } if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' || $target eq 'tex' || $target eq 'analyze') {