--- loncom/homework/edit.pm 2001/05/13 21:40:32 1.6 +++ loncom/homework/edit.pm 2001/06/16 18:35:27 1.11 @@ -6,20 +6,28 @@ package Apache::edit; use strict; use Apache::lonnet; +# Global Vars +# default list of colors to use in editing +@Apache::edit::colorlist=('#ffffff','#ff0000','#00ff00','#0000ff','#0ff000','#000ff0','#f0000f'); +# depth of nesting of edit +$Apache::edit::colordepth=0; + +sub initialize_edit { + $Apache::edit::colordepth=0; +} + sub tag_start { - my ($target,$token) = @_; + my ($target,$token,$description) = @_; my $result=''; if ($target eq "edit") { my $tag=$token->[1]; - $result.="<table width=\"100%\" border=\"2\"><tr><td><$tag></td> -<td>Delete: -<select name=\"delete_$Apache::lonxml::curdepth\"> -<option>Nothing</option> -<option>Tag</option> -<option>Subtags</option> -</select></td> + if (!$description) { $description="<$tag>"; } + $result.= &start_table($token)."<tr><td>$description</td> +<td>Delete:". + &deletelist($target,$token) + ."</td> <td>". - &insertlist($token,$target). + &insertlist($target,$token). "</td> </tr><tr><td colspan=\"3\">\n"; } @@ -27,35 +35,71 @@ sub tag_start { } sub tag_end { - my ($target,$token) = @_; + my ($target,$token,$description) = @_; my $result=''; if ($target eq 'edit') { my $tag=$token->[1]; - $result.="</td></tr><tr><td></$tag></td></tr></table>\n"; + if (!defined($description)) { + $result.="</td></tr><tr><td></$tag>"; + } else { + if ($description ne '') { $result.="</td></tr><tr><td>$description"; } + } + $result.="</td><td> </td><td> </td></tr>".&end_table()."\n"; } return $result; } -sub get_insert_list2 { - my ($token) = @_; - my $result=''; - if ($Apache::lonxml::insertlist{"$token->[1].which"}) { - my @tagnums= @{ $Apache::lonxml::insertlist{"$token->[1].which"} }; - foreach my $tagnum (@tagnums) { - $result.='<option value="'.$tagnum.'">'.$Apache::lonxml::insertlist{"$tag.description"}."</option>\n"; - } - if ($result) { $result='<option selected="on"></option>'.$result; } +sub start_table { + my ($token)=@_; + my $tag = $token->[1]; + my $tagnum; + foreach my $namespace (reverse @Apache::lonxml::namespace) { + my $testtag=$Apache::lonxml::namespace['-1'].'::'.$tag; + $tagnum=$Apache::lonxml::insertlist{"$testtag.num"}; + if (defined($tagnum)) { last; } + } + if (!defined ($tagnum)) { $tagnum=$Apache::lonxml::insertlist{"$tag.num"}; } + my $color = $Apache::lonxml::insertlist{"$tagnum.color"}; + if (!defined($color)) { + $color = $Apache::edit::colorlist[$Apache::edit::colordepth]; } + $Apache::edit::colordepth++; + my $result="<table bgcolor=\"$color\" width=\"100%\" border=\"10\">"; + return $result; +} + +sub end_table { + $Apache::edit::colordepth--; + my $result="</table>"; + return $result; +} + +sub deletelist { + my ($target,$token) = @_; + my $result = "<select name=\"delete_$Apache::lonxml::curdepth\"> +<option>Nothing</option> +<option>Tag</option> +<option>Subtags</option> +</select>"; return $result; } sub get_insert_list { my ($token) = @_; my $result=''; + my @tagnums= (); + #&Apache::lonxml::debug("keys ".join("\n",sort(keys(%Apache::lonxml::insertlist)))); if ($Apache::lonxml::insertlist{"$token->[1].which"}) { - my @tags= @{ $Apache::lonxml::insertlist{"$token->[1].which"} }; - foreach my $tag (@tags) { - $result.='<option value="'.$tag.'">'.$Apache::lonxml::insertlist{"$tag.description"}."</option>\n"; + push (@tagnums, @{ $Apache::lonxml::insertlist{"$token->[1].which"} }); + } + foreach my $namespace (@Apache::lonxml::namespace) { + if ($Apache::lonxml::insertlist{"$namespace".'::'."$token->[1].which"}) { + push (@tagnums, @{ $Apache::lonxml::insertlist{"$namespace".'::'."$token->[1].which"} }); + } + } + if (@tagnums) { + foreach my $tagnum (@tagnums) { + $result.='<option value="'.$tagnum.'">'.$Apache::lonxml::insertlist{"$tagnum.description"}."</option>\n"; } if ($result) { $result='<option selected="on"></option>'.$result; } } @@ -63,7 +107,7 @@ sub get_insert_list { } sub insertlist { - my ($token,$target) = @_; + my ($target,$token) = @_; my $result; if ($target eq 'edit') { my $optionlist= &get_insert_list($token); @@ -72,42 +116,38 @@ sub insertlist { <select name=\"insert_$Apache::lonxml::curdepth\"> $optionlist </select>" + } else { + $result=" "; } } return $result; } -sub handle_insert2 { +sub handle_insert { if (!$ENV{"form.insert_$Apache::lonxml::curdepth"}) { return ''; } my $result; 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"}; + my $namespace; + if ($newtag =~ /::/) { ($namespace,$newtag) = split(/::/,$newtag); } $result.="\n<$newtag>\n</$newtag>"; } else { { no strict 'refs'; - $result.=&$func; + $result.=&$func(); } } return $result; } -sub handle_insert { - if (!$ENV{"form.insert_$Apache::lonxml::curdepth"}) { return ''; } - my $result; - my $newtag = $ENV{"form.insert_$Apache::lonxml::curdepth"}; - my $func=$Apache::lonxml::insertlist{"$newtag.function"}; - if ($func eq 'default') { - $result.="\n<$newtag>\n</$newtag>"; - } else { - { - no strict 'refs'; - $result.=&$func; - } - } - return $result; +sub insert_optionresponse { + return ' +<optionresponse max="10"> + <foilgroup options=""> + </foilgroup> +</optionresponse>'; } sub editfield { @@ -122,9 +162,9 @@ sub editfield { if ($maxlength < $minwidth) { $maxlength = $minwidth; } if ( $count < $minheight) { $count = $minheight; } if ($description) { - $description="<br />".$description; + $description="<br />".$description."<br />"; } - return "$description<br />\n <textarea rows=\"$count\" cols=\"$maxlength\" name=homework_edit_".$Apache::lonxml::curdepth.">$data</textarea>\n"; + return "$description\n <textarea rows=\"$count\" cols=\"$maxlength\" name=homework_edit_".$Apache::lonxml::curdepth.">$data</textarea>\n"; # return "<br />\n<$tag><br />\n <textarea rows=\"$count\" cols=\"$maxlength\" name=homework_edit_".$Apache::lonxml::curdepth.">$data</textarea><br />\n</$tag><br />\n"; }