--- loncom/homework/edit.pm	2004/09/30 21:47:21	1.87
+++ loncom/homework/edit.pm	2005/11/15 15:57:45	1.96
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # edit mode helpers
 #
-# $Id: edit.pm,v 1.87 2004/09/30 21:47:21 albertel Exp $
+# $Id: edit.pm,v 1.96 2005/11/15 15:57:45 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -29,7 +29,7 @@
 package Apache::edit; 
 
 use strict;
-use Apache::lonnet();
+use Apache::lonnet;
 use HTML::Entities();
 use Apache::lonlocal;
 
@@ -68,10 +68,9 @@ sub tag_start {
 #    "</tr><tr><td colspan=\"3\">\n";
 	my @help = Apache::lonxml::helpinfo($token);
 	if ($help[0]) {
-	    $result .= '<td align="right" valign="top">' .
-		Apache::loncommon::help_open_topic(@help) .
-		'</td>';
-	} else { $result .= "<td>&nbsp;</td>"; }
+	    $result .= '</td><td align="right" valign="top">' .
+		Apache::loncommon::help_open_topic(@help);
+	} else { $result .= "</td><td>&nbsp;"; }
 	$result .= &end_row().&start_spanning_row();
     }
     return $result;
@@ -93,10 +92,12 @@ sub start_table {
     foreach my $namespace (reverse @Apache::lonxml::namespace) {
 	my $testtag=$namespace.'::'.$tag;
 	$tagnum=$Apache::lonxml::insertlist{"$testtag.num"};
+	&Apache::lonxml::debug(" $testtag ");
 	if (defined($tagnum)) { last; }
     }
     if (!defined ($tagnum)) {$tagnum=$Apache::lonxml::insertlist{"$tag.num"};}
     my $color = $Apache::lonxml::insertlist{"$tagnum.color"};
+    &Apache::lonxml::debug(" $tagnum -- $color");
     if (!defined($color)) {
 	$color = $Apache::edit::colorlist[$Apache::edit::colordepth];
     }
@@ -110,7 +111,7 @@ sub start_table {
 sub end_table {
     $Apache::edit::colordepth--;
     my $result='</table></div>';
-    $result.="<table><tr><td>";
+    $result.='<div align="left"><table><tr><td>';
 
     my ($tagname,$closingtag);
     if (defined($Apache::edit::inserttag[-2])) {
@@ -120,7 +121,7 @@ sub end_table {
 	$closingtag=$Apache::edit::inserttag[-1];
     }
     $result.=&innerinsertlist('edit',$tagname,$closingtag).
-	"</td></tr></table>";
+	"</td></tr></table></div>";
     pop(@Apache::edit::inserttag);
     return $result;
 }
@@ -148,7 +149,7 @@ sub deletelist {
 }
 
 sub handle_delete {
-    if (!$ENV{"form.delete_$Apache::lonxml::curdepth"}) { return ''; }
+    if (!$env{"form.delete_$Apache::lonxml::curdepth"}) { return ''; }
     my ($space,$target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result=0;
     if ($space) {
@@ -191,7 +192,7 @@ sub get_insert_list {
 		$descrip."</option>\n";
 	}
 	foreach my $option (sort(keys(%options))) {$result.=$options{$option};}
-	if ($result) { $result='<option selected="on"></option>'.$result; }
+	if ($result) { $result='<option selected="selected"></option>'.$result; }
     }
     return $result;
 }
@@ -223,9 +224,9 @@ sub innerinsertlist {
 }
 
 sub handle_insert {
-    if ($ENV{"form.insert_$Apache::lonxml::curdepth"} eq '') { return ''; }
+    if ($env{"form.insert_$Apache::lonxml::curdepth"} eq '') { return ''; }
     my $result;
-    my $tagnum = $ENV{"form.insert_$Apache::lonxml::curdepth"};
+    my $tagnum = $env{"form.insert_$Apache::lonxml::curdepth"};
     my $func=$Apache::lonxml::insertlist{"$tagnum.function"};
     if ($func eq 'default') {
 	my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"};
@@ -240,7 +241,7 @@ sub handle_insert {
 	    }
 	} else {
 	    my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"};
-	    &Apache::lonxml::error("Unable to insert tag $newtag, $func was not defined.");
+	    &Apache::lonxml::error("Unable to insert tag ".$Apache::lonxml::curdepth." ($tagnum) $newtag, func was not defined.");
 	}
     }
     return $result;
@@ -248,10 +249,10 @@ sub handle_insert {
 
 sub handle_insertafter {
     my $tagname=shift;
-    if ($ENV{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"} eq '')
+    if ($env{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"} eq '')
     { return ''; }
     my $result;
-    my $tagnum =$ENV{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"};
+    my $tagnum =$env{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"};
     my $func=$Apache::lonxml::insertlist{"$tagnum.function"};
     if ($func eq 'default') {
 	my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"};
@@ -301,6 +302,8 @@ sub insert_formularesponse {
 sub insert_numericalresponse {
     return '
 <numericalresponse answer="">
+<responseparam type="tolerance" default="5%" name="tol" description="Numerical Tolerance" />
+<responseparam name="sig" type="int_range,0-16" default="0,15" description="Significant Figures" />
     <textline />
     <hintgroup>
     <startouttext /><endouttext />
@@ -308,6 +311,25 @@ sub insert_numericalresponse {
 </numericalresponse>';
 }
 
+sub insert_customresponse {
+    return '
+<customresponse>
+    <answer type="loncapa/perl">
+    </answer>
+    <textline />
+    <hintgroup>
+    <startouttext /><endouttext />
+    </hintgroup>
+</customresponse>';
+}
+
+sub insert_customresponse_answer {
+    return '
+    <answer type="loncapa/perl">
+    </answer>
+';
+}
+
 sub insert_stringresponse {
     return '
 <stringresponse answer="" type="">
@@ -329,6 +351,8 @@ sub insert_imageresponse {
     return '
 <imageresponse max="1">
     <foilgroup>
+      <foil>
+      </foil>
     </foilgroup>
     <hintgroup>
     <startouttext /><endouttext />
@@ -340,6 +364,9 @@ sub insert_optionresponse {
     return '
 <optionresponse max="10">
     <foilgroup options="">
+      <foil>
+         <startouttext /><endouttext />
+      </foil>
     </foilgroup>
     <hintgroup>
     <startouttext /><endouttext />
@@ -367,6 +394,9 @@ sub insert_radiobuttonresponse {
     return '
 <radiobuttonresponse max="10">
     <foilgroup>
+      <foil>
+         <startouttext /><endouttext />
+      </foil>
     </foilgroup>
     <hintgroup>
     <startouttext /><endouttext />
@@ -388,6 +418,9 @@ sub insert_rankresponse {
     return '
 <rankresponse max="10">
     <foilgroup options="">
+      <foil>
+         <startouttext /><endouttext />
+      </foil>
     </foilgroup>
     <hintgroup>
     <startouttext /><endouttext />
@@ -401,6 +434,9 @@ sub insert_matchresponse {
     <foilgroup options="">
       <itemgroup>
       </itemgroup>
+      <foil>
+         <startouttext /><endouttext />
+      </foil>
     </foilgroup>
     <hintgroup>
     <startouttext /><endouttext />
@@ -413,8 +449,7 @@ sub insert_displaytitle   { return '<dis
 sub insert_hintpart {
     return '
 <hintpart on="default">
-    <startouttext/>
-    <endouttext />
+    <startouttext/><endouttext />
 </hintpart>';
 }
 
@@ -506,7 +541,7 @@ sub editfield {
 	push @Apache::lonxml::htmlareafields,'homework_edit_'.
 	    $Apache::lonxml::curdepth;
     }
-    return $description."\n".'&nbsp;&nbsp;&nbsp;<textarea rows="'.$rows.
+    return $description."\n".'&nbsp;&nbsp;&nbsp;<textarea style="width:100%" rows="'.$rows.
 	'" cols="'.$cols.'" name="homework_edit_'.
 	$Apache::lonxml::curdepth.'" id="homework_edit_'.
 	$Apache::lonxml::curdepth.'">'.
@@ -518,12 +553,12 @@ sub editfield {
 sub modifiedfield {
     my ($endtag,$parser) = @_;
     my $result;
-#  foreach my $envkey (sort keys %ENV) {
-#    &Apache::lonxml::debug("$envkey ---- $ENV{$envkey}");
+#  foreach my $envkey (sort keys %env) {
+#    &Apache::lonxml::debug("$envkey ---- $env{$envkey}");
 #  }
 #  &Apache::lonxml::debug("I want homework_edit_$Apache::lonxml::curdepth");
-#  &Apache::lonxml::debug($ENV{"form.homework_edit_$Apache::lonxml::curdepth"});
-    $result=$ENV{"form.homework_edit_$Apache::lonxml::curdepth"};
+#  &Apache::lonxml::debug($env{"form.homework_edit_$Apache::lonxml::curdepth"});
+    $result=$env{"form.homework_edit_$Apache::lonxml::curdepth"};
     my $bodytext=&Apache::lonxml::get_all_text($endtag,$parser);
     # textareas throw away intial \n 
     if ($bodytext=~/^\n/) { $result="\n".$result; }
@@ -539,7 +574,7 @@ sub get_new_args {
 	#just want the string that it was set to
 	my $value=$token->[2]->{$arg};
 	my $element=&html_element_name($arg);
-	my $newvalue=$ENV{"form.$element"};
+	my $newvalue=$env{"form.$element"};
 	&Apache::lonxml::debug("for:$arg: cur is :$value: new is :$newvalue:");
 	if (defined($newvalue) && $value ne $newvalue) {
 	    if (ref($newvalue) eq 'ARRAY') {
@@ -613,7 +648,7 @@ sub checked_arg {
 	    &html_element_name($name)."'";
 	foreach my $selected (split(/,/,$allselected)) {
 	    if ( $selected eq $option ) {
-		$result.=" checked='on' ";
+		$result.=" checked='checked' ";
 		last;
 	    }
 	}
@@ -640,15 +675,15 @@ sub select_arg {
     foreach my $option (@$list) {
 	my ($text,$value);
 	if ( ref($option) eq 'ARRAY') {
-	    $value='value="'.$$option[0].'"';
+	    $value='value="'.&HTML::Entities::encode($$option[0]).'"';
 	    $text=$$option[1];
 	    $option=$$option[0];
 	} else {
 	    $text=$option;
-	    $value='value="'.$option.'"';
+	    $value='value="'.&HTML::Entities::encode($option,'\'"&<>').'"';
 	}
 	if ( $selected eq $option ) {
-	    $optionlist.="<option $value selected=\"on\">$text</option>\n";
+	    $optionlist.="<option $value selected=\"selected\">$text</option>\n";
 	} else {
 	    $optionlist.="<option $value >$text</option>\n";
 	}
@@ -669,22 +704,22 @@ sub select_or_text_arg {
     foreach my $option (@$list) {
 	my ($text,$value);
 	if ( ref($option) eq 'ARRAY') {
-	    $value='value="'.$$option[0].'"';
+	    $value='value="'.&HTML::Entities::encode($$option[0]).'"';
 	    $text=$$option[1];
 	    $option=$$option[0];
 	} else {
 	    $text=$option;
-	    $value='value="'.$option.'"';
+	    $value='value="'.&HTML::Entities::encode($option,'\'"&<>').'"';
 	}
 	if ( $selected eq $option ) {
-	    $optionlist.="<option $value selected=\"on\">$text</option>\n";
+	    $optionlist.="<option $value selected=\"selected\">$text</option>\n";
 	    $found=1;
 	} else {
 	    $optionlist.="<option $value>$text</option>\n";
 	}
     }
     $optionlist.="<option value=\"TYPEDINVALUE\"".
- 	((!$found)?' selected="on"':'').
+ 	((!$found)?' selected="selected"':'').
  	">".&mt('Type-in value')."</option>\n";
 #
     my $element=&html_element_name($name);