--- loncom/homework/bridgetask.pm 2006/11/14 23:04:56 1.207
+++ loncom/homework/bridgetask.pm 2006/11/28 16:43:51 1.212
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: bridgetask.pm,v 1.207 2006/11/14 23:04:56 albertel Exp $
+# $Id: bridgetask.pm,v 1.212 2006/11/28 16:43:51 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -380,6 +380,13 @@ sub nest {
}
}
+sub start_delay {
+ push(@delay,1);
+}
+sub end_delay {
+ pop(@delay);
+}
+
sub nested_parse {
my ($str,$env,$args) = @_;
my @old_env = @Apache::scripttag::parser_env;
@@ -791,6 +798,9 @@ sub start_Task {
if ($target eq 'webgrade') {
$result.="\n".'
';
&Apache::lonxml::startredirection();
+ &start_delay();
+ $dimension{$top}{'result'}=$result;
+ undef($result);
}
} elsif ($target eq 'edit') {
$result.=$form_tag_start.
@@ -1257,7 +1267,13 @@ DONEBUTTON
&Apache::structuretags::finalize_storage();
}
} elsif ($target eq 'webgrade') {
- $result.=&Apache::lonxml::endredirection();
+ if (&nest()) {
+ &Apache::lonxml::endredirection();
+ &end_delay();
+ $result.=$dimension{$top}{'result'};
+ } else {
+ $result.=&Apache::lonxml::endredirection();
+ }
my $dim = $top;
foreach my $id (@{$dimension{$dim}{'criterias'}} ) {
my $type = $dimension{$dim}{'criteria.'.$id.'.type'};
@@ -1269,7 +1285,12 @@ DONEBUTTON
[@_]);
$criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
my $internal_location=&internal_location($id);
- $result=~s/\Q$internal_location\E/$criteria/;
+ if ($result =~ m/\Q$internal_location\E/) {
+ $result=~s/\Q$internal_location\E/$criteria/;
+ } else {
+ $result.=$criteria;
+ }
+
}
}
$result.="
";
@@ -2049,7 +2070,7 @@ sub start_Setup {
my $dim = &get_id($parstack,$safeeval);
push(@Apache::bridgetask::dimension,$dim);
&Apache::lonxml::startredirection();
- return &internal_location($dim);
+ return;# &internal_location($dim);
}
{
@@ -2101,6 +2122,7 @@ sub start_Dimension {
$dimension{$top}{'criteria.'.$dim.'.mandatory'}=
&Apache::lonxml::get_param('Mandatory',$parstack,$safeeval);
push(@{$dimension{$top}{'criterias'}},$dim);
+ $dimension{$dim}{'nested'}=$top;
}
push(@Apache::bridgetask::dimension,$dim);
&Apache::lonxml::startredirection();
@@ -2228,13 +2250,15 @@ sub end_Dimension {
}
my $dim_info=
"\n\n\t";
- my $question = ('sub' x $dimension{$dim}{'depth'}).'question';
- $question =~ s/^(.)/uc($1)/e;
+ my $ucquestion =
+ my $question =
+ ('sub' x $dimension{$dim}{'depth'}).'question';
+ $ucquestion =~ s/^(.)/uc($1)/e;
if ($dim_status eq 'pass') {
- $dim_info.='
'.$question.' : you passed the above '.$mandatory.' question
';
+ $dim_info.='
'.$ucquestion.' : you passed the above '.$mandatory.' '.$question.'
';
}
if ($dim_status eq 'fail') {
- $dim_info.='
'.$question.' : you did not pass the above '.$mandatory.' question
';
+ $dim_info.='
'.$ucquestion.' : you did not pass the above '.$mandatory.' '.$question.'
';
}
my %counts = &get_counts($dim,$instance,$parstack,
$safeeval);
@@ -2272,8 +2296,20 @@ sub end_Dimension {
}
}
if ($result !~ /^\s*$/s) {
- $result = "\n".'
'.
- "\n".$result."\n
\n";
+ # FIXME? this maybe unneccssary in the future, (CSE101 BT
+ # from Fall 2006 geenrate a div that attempts to hide some
+ # of the output in an odd way, this is a workaround so
+ # those old ones will continue to work. # It puts the
+ # LC_question div to come after any starting closie div
+ # that the dimension produces
+ if ($result =~ m{^\s*
}) {
+ $result =~ s{^(\s*)}
+ {$1\n};
+ } else {
+ $result = "\n".'
'.
+ "\n".$result;
+ }
+ $result .= "\n
\n";
}
} elsif ($target eq 'webgrade') {
# in case of any side effects that we need
@@ -2297,7 +2333,11 @@ sub end_Dimension {
[@_]);
$criteria = &layout_webgrade_Criteria($dim,$id,$criteria);
my $internal_location=&internal_location($id);
- $result=~s/\Q$internal_location\E/$criteria/;
+ if ($result =~ m/\Q$internal_location\E/) {
+ $result =~ s/\Q$internal_location\E/$criteria/;
+ } else {
+ $result.=$criteria ;
+ }
}
}
if (&nest()) {
@@ -2606,7 +2646,7 @@ sub start_Criteria {
my $dim = &get_dim_id();
my $id=&get_id($parstack,$safeeval);
if ($target eq 'web' || $target eq 'webgrade') {
- if ($target eq 'webgrade' && $dim ne 'top') {
+ if ($target eq 'webgrade') {
&Apache::lonxml::debug(" for $dim $id stashing results into $dim ");
$dimension{$dim}{'result'} .= &internal_location($id);
} else {