--- loncom/homework/bridgetask.pm	2006/03/02 22:23:31	1.117
+++ loncom/homework/bridgetask.pm	2006/03/29 13:24:43	1.128
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # definition of tags that give a structure to a document
 #
-# $Id: bridgetask.pm,v 1.117 2006/03/02 22:23:31 albertel Exp $
+# $Id: bridgetask.pm,v 1.128 2006/03/29 13:24:43 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -176,10 +176,10 @@ sub add_grading_button {
     if (scalar(keys(%sections)) < 3) {
 	$size=scalar(keys(%sections))+2;
     }
-    my $sec_select = '<select multiple name="chosensections" size="'.$size.'">'."\n";
+    my $sec_select = '<select multiple="multiple" name="chosensections" size="'.$size.'">'."\n";
     $sec_select .= "<option value='all' selected='selected'>all</option>\n";
     foreach my $sec (sort {lc($a) cmp lc($b)} (keys(%sections))) {
-	$sec_select .= "<option name=\"$sec\">$sec</option>\n";
+	$sec_select .= "<option value=\"$sec\">$sec</option>\n";
     }
     $sec_select .= "<option value='none'>none</option></select>\n";
     
@@ -213,6 +213,7 @@ sub add_grading_button {
 						   'gradinguser',
 						   'gradingdomain');
 	$result.=&Apache::loncommon::studentbrowser_javascript();
+	$result.= '</p>';
   }
     return $result;
 }
@@ -258,64 +259,14 @@ sub preserve_grade_info {
 }
 
 sub style {
-    return (<<STYLE);
-<style type="text/css">
-.LC_fail, .LC_pass, .LC_neutral {
-    position: relative;
-    margin : 5px;
-    margin-bottom :10px;
-    padding : 4px;
-    padding-left : 75px;
-	border : thin solid;
-    font-weight : bolder;
-    font-size: smaller;
-    font-family: Arial;
-    background-color : rgb(255,240,225);
-}
-
-.LC_fail h4, .LC_pass h4 {
-	position:absolute;
-	left: -4px;
-	top: -8px;
-	padding:2px;
-	margin:0;
-	background-color : rgb(255,240,225);
-	border : thin solid;
-}
-
-.LC_fail {
-	color: red;
-}
-
-.LC_pass {
-    color : green;
-}
-
-.LC_neutral {
-	color : blue;
-}
-
-.LC_question {
-	border : thin solid black;
-	padding : 4px;
-	margin-bottom : 1em;
-}
-
-.LC_grade {
-	font-size: x-large;
-	font-family: Arial;
-	position:absolute;
-	left: 5px;
-	top: -5px;
-	width: 70px;
-}
-
-div#feedback h1 {
-    color : inherit;
-}
-</style>
+    my ($target) = @_;
+    if ($target eq 'web'
+	|| $target eq 'webgrade') {
+	return (<<STYLE);
+<link rel="stylesheet" type="text/css" href="/res/adm/includes/task.css" />
 STYLE
-
+    }
+    return;
 }
 
 sub show_task {
@@ -371,12 +322,15 @@ sub submission_time_stamp {
     return $result;
 }
 
-sub webgrade_standard_info {
-    my ($version)=&get_version();
-    my (undef,undef,$udom,$uname) = &Apache::lonxml::whichuser();
+sub file_list {
+    my ($files,$uname,$udom) = @_;
+    if (!defined($uname) || !defined($udom)) {
+	(undef,undef,$udom,$uname) = &Apache::lonxml::whichuser();
+    }
     my $file_url = '/uploaded/'.$udom.'/'.$uname.'/portfolio/';
-    my $file_list="<ul class=\"LC_GRADE_handininfo\">\n";
-    foreach my $partial_file (split(',',$Apache::lonhomework::history{"resource.$version.0.bridgetask.portfiles"})) {
+
+    my $file_list="<ul class=\"LC_GRADING_handininfo\">\n";
+    foreach my $partial_file (split(',',$files)) {
 	my $file=$file_url.$partial_file;
 	$file=~s|/+|/|g;
 	&Apache::lonnet::allowuploaded('/adm/bridgetask',$file);
@@ -385,13 +339,20 @@ sub webgrade_standard_info {
 	    '</a></nobr></li>'."\n";
     }
     $file_list.="</ul>\n";
+    return $file_list;
+}
 
-    my %lt=&Apache::lonlocal::texthash('done' => 'Done',
-				       'stop' => 'Stop',
+sub webgrade_standard_info {
+    my ($version)=&get_version();
+
+    my $file_list = &file_list($Apache::lonhomework::history{"resource.$version.0.bridgetask.portfiles"});
+
+    my %lt=&Apache::lonlocal::texthash('done' => 'Next Item',
+				       'stop' => 'Quit Grading',
 				       );
 				       
     my $result=<<INFO;
-  <div class="LC_GRADE_maincontrols">
+  <div class="LC_GRADING_maincontrols">
     <input type="submit" name="next" value="$lt{'done'}" />
     <input type="submit" name="stop" value="$lt{'stop'}" />
   </div>
@@ -418,7 +379,15 @@ sub start_Task {
     my ($result,$head_tag_start,$body_tag_start,$form_tag_start)=
 	&Apache::structuretags::page_start($target,$token,$tagstack,$parstack,$parser,$safeeval);
     
-    $body_tag_start = '<div class="LC_task">'."\n";
+    $head_tag_start .= &style($target);
+    $body_tag_start .= '<div class="LC_task">'."\n";
+
+    if ($target eq 'web' || $target eq 'webgrade') {
+	$head_tag_start.='<title>'.
+	    &Apache::structuretags::get_resource_name($parstack,$safeeval).
+	    '</title>';
+    }
+
     if ($target eq 'web' && $env{'request.state'} ne 'construct') {
 	if ($Apache::lonhomework::modifygrades) {
 	    $body_tag_start.='<form name="gradesubmission" method="post" action="';
@@ -528,9 +497,8 @@ DONESCREEN
 		}
 	    }
 	} elsif ($target eq 'web') {
-	    my $name= &Apache::structuretags::get_resource_name($parstack,$safeeval);
-	    $result.="$head_tag_start<title>$name</title></head>
-              $body_tag_start \n".&style();
+	    $result.="$head_tag_start</head>
+              $body_tag_start \n";
 	    
 	    $result.=&preserve_grade_info();
 	    $result.=&internal_location();
@@ -542,7 +510,11 @@ DONESCREEN
 	      $target eq 'webgrade') {
 	my $webgrade='yes';
 	if ($target eq 'webgrade') {
-	    $result.=$head_tag_start.'</head>'.$body_tag_start;
+	    $result.=$head_tag_start.
+		'</head>'.$body_tag_start.
+		"\n".'<div class="LC_GRADING_task">'."\n".
+		'<script type="text/javascript" 
+                         src="/res/adm/includes/task_grading.js"></script>';
 	    #$result.='<br />Review'.&show_queue('reviewqueue');
 	    #$result.='<br />Grade'.&show_queue('gradingqueue');
 	}
@@ -621,7 +593,7 @@ DONESCREEN
 	    if ($webgrade eq 'yes') { $result.=&webgrade_standard_info(); }
 	}
 	if ($target eq 'webgrade') {
-	    $result.="\n".'<div id="LC_GRADE_criterialist">';
+	    $result.="\n".'<div id="LC_GRADING_criterialist">';
 	}
     } elsif ($target eq 'edit') {
 	$result.=$head_tag_start."</head>".$body_tag_start.$form_tag_start.
@@ -1011,7 +983,7 @@ DONEBUTTON
 	#    &mt('Throw Away &amp; Stop Grading').'" /> ';
 	#$result.='<input type="submit" name="save" value="'.
 	#    &mt('Save Partial Grade and Continue Grading').'" /> ';
-	$result.='</form>'."\n</div>\n".
+	$result.='</form>'."\n</div>\n</div>\n".
 	    &Apache::loncommon::endbodytag().'</html>';
     } elsif ($target eq 'meta') {
 	$result.=&Apache::response::meta_package_write('Task');
@@ -1691,6 +1663,10 @@ sub get_instance {
 
 {
     my $last_link;
+    sub link {
+	my ($instance,$id) = @_;
+	return 'LC_GRADING_criteria_'.$instance.'_'.$id;
+    }
     sub end_Dimension {
 	my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
 	my $result=&Apache::lonxml::endredirection();
@@ -1785,26 +1761,26 @@ sub get_instance {
 	    @Apache::scripttag::parser_env = @_;
 	    &Apache::scripttag::xmlparse($dimension{$instance.'.text'});
 	    foreach my $id (@{$dimension{$instance.'.criterias'}}) {
-		my $link='LC_GRADE_criteria_'.$instance.'_'.$id;
+		my $link=&link($instance,$id);
 		my $status=$Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.status"};
-		$result.='<div class="LC_GRADE_criteria" id="'.$link.'">'."\n".
+		$result.='<div class="LC_GRADING_criteria" id="'.$link.'">'."\n".
 		    '<a name="'.$link.'" />'."\n".
 		    '<a name="next_'.$last_link.'" />'."\n".
-		    '<div class="LC_GRADE_criteriatext">'."\n";
+		    '<div class="LC_GRADING_criteriatext">'."\n";
 		@Apache::scripttag::parser_env = @_;
 		$result.=&Apache::scripttag::xmlparse($dimension{$instance.'.criteria.'.$id});
 		$result.='</div>'."\n".
 		    #$dimension{$instance.'.criteria.'.$id}.
-		    '<div class="LC_GRADE_grade">'."\n".
-		    '<label class="LC_GRADE_ungraded"><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label>'."\n".
-		    '<label class="LC_GRADE_fail"><input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.&mt('Fail').'</label>'."\n".
-		    '<label class="LC_GRADE_pass"><input type="radio" name="HWVAL_'.$link.'" value="pass" '.($status eq 'pass' ? 'checked="checked"':'').' />'.&mt('Pass').'</label>'."\n".
-		    '<label class="LC_GRADE_review"><input type="radio" name="HWVAL_'.$link.'" value="review" '.($status eq 'review' ? 'checked="checked"':'').' />'.&mt('Review').'</label>'."\n".
+		    '<div class="LC_GRADING_grade">'."\n".
+		    '<label class="LC_GRADING_ungraded"><input type="radio" name="HWVAL_'.$link.'" value="ungraded" '.($status eq 'ungraded' || !$status ? 'checked="checked"':'').' />'.&mt('Ungraded').'</label>'."\n".
+		    '<label class="LC_GRADING_fail"><input type="radio" name="HWVAL_'.$link.'" value="fail" '.($status eq 'fail' ? 'checked="checked"':'').' />'.&mt('Fail').'</label>'."\n".
+		    '<label class="LC_GRADING_pass"><input type="radio" name="HWVAL_'.$link.'" value="pass" '.($status eq 'pass' ? 'checked="checked"':'').' />'.&mt('Pass').'</label>'."\n".
+		    '<label class="LC_GRADING_review"><input type="radio" name="HWVAL_'.$link.'" value="review" '.($status eq 'review' ? 'checked="checked"':'').' />'.&mt('Review').'</label>'."\n".
 		    '</div>'."\n".
-		    '<label class="LC_GRADE_comment">'.&mt('Additional Comment for Student')."\n".
-		    '<textarea class="LC_GRADE_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).'</textarea>'."\n".
+		    '<label class="LC_GRADING_comment">'.&mt('Additional Comment for Student')."\n".
+		    '<textarea class="LC_GRADING_comment_area" name="HWVAL_comment_'.$link.'">'.&HTML::Entities::encode($Apache::lonhomework::history{"resource.$version.0.$dim.$instance.$id.comment"}).'</textarea>'."\n".
 		    '</label>'."\n".
-		    '<ul class="LC_GRADE_navbuttons">'."\n".
+		    '<ul class="LC_GRADING_navbuttons">'."\n".
 		    '<li><a href="#'.$last_link.'">Prev</a></li>'."\n".
 		    '<li><a href="#next_'.$link.'">Next</a></li>'."\n".
 		    '</ul>'."\n".
@@ -1818,8 +1794,9 @@ sub get_instance {
 	    my $ungraded=0;
 	    my $review=0;
 	    foreach my $id (@{$dimension{$instance.'.criterias'}}) {
-		my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.status"}=$env{'form.HWVAL_criteria_'.$instance.'_'.$id};
-		$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.comment"}=$env{'form.HWVAL_comment_criteria_'.$instance.'_'.$id};
+		my $link=&link($instance,$id);
+		my $status=$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.status"}=$env{'form.HWVAL_'.$link};
+		$Apache::lonhomework::results{"resource.$version.0.$dim.$instance.$id.comment"}=$env{'form.HWVAL_comment_'.$link};
 		my $mandatory=($dimension{$instance.'.criteria.'.$id.'.mandatory'} ne 'N');
 		if ($status eq 'pass') {
 		    if (!$mandatory) { $optional_passed++; }
@@ -1885,7 +1862,7 @@ sub grading_history {
 	}
     }
     if ($result) {
-	return '<ul class="LC_GRADE_pastgrading">'.$result.'</ul>';
+	return '<ul class="LC_GRADING_pastgrading">'.$result.'</ul>';
     }
     return '';
 }
@@ -1897,7 +1874,10 @@ sub start_IntroParagraph {
 	if ($tagstack->[-2] eq 'Dimension') {
 	    $dimension{'intro'}=&Apache::lonxml::get_all_text('/introparagraph',$parser,$style);
 	
-	} elsif ($target eq 'webgrade') {
+	} elsif ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') {
+	    &Apache::lonxml::startredirection();
+	} else {
+	    &Apache:;lonxml::error("Invalid use of <IntroParagraph> inside of <".$tagstack->[-2].">");
 	    &Apache::lonxml::get_all_text('/introparagraph',$parser,$style);
 	}
 	
@@ -1906,6 +1886,10 @@ sub start_IntroParagraph {
 }
 
 sub end_IntroParagraph {
+    my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+    if ($tagstack->[-2] eq 'Task' && $target eq 'webgrade') {
+	my $result = &Apache::lonxml::endredirection();
+    }
 }
 
 sub start_Instance {