--- loncom/homework/edit.pm 2001/06/11 16:15:37 1.9 +++ loncom/homework/edit.pm 2001/06/16 20:33:33 1.12 @@ -6,15 +6,23 @@ 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,$description) = @_; my $result=''; if ($target eq "edit") { my $tag=$token->[1]; -# my $color = sprintf("#%06lx",(hex("ffffff")) >> scalar(split(/_/,$Apache::lonxml::curdepth))); - my $color = sprintf("#%02lxffff",33* scalar(split(/_/,$Apache::lonxml::curdepth))); if (!$description) { $description="<$tag>"; } - $result.="<table bgcolor=\"$color\" width=\"100%\" border=\"2\"><tr><td>$description</td> + $result.= &start_table($token)."<tr><td>$description</td> <td>Delete:". &deletelist($target,$token) ."</td> @@ -36,11 +44,36 @@ sub tag_end { } else { if ($description ne '') { $result.="</td></tr><tr><td>$description"; } } - $result.="</td></tr></table>\n"; + $result.="</tr>".&end_table()."\n"; } return $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=\"5\">"; + 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\"> @@ -57,12 +90,10 @@ sub get_insert_list { my @tagnums= (); #&Apache::lonxml::debug("keys ".join("\n",sort(keys(%Apache::lonxml::insertlist)))); if ($Apache::lonxml::insertlist{"$token->[1].which"}) { - &Apache::lonxml::debug("Adding1 $token->[1].which"); push (@tagnums, @{ $Apache::lonxml::insertlist{"$token->[1].which"} }); } foreach my $namespace (@Apache::lonxml::namespace) { if ($Apache::lonxml::insertlist{"$namespace".'::'."$token->[1].which"}) { - &Apache::lonxml::debug("Adding2 $namespace".'::'."$token->[1].which"); push (@tagnums, @{ $Apache::lonxml::insertlist{"$namespace".'::'."$token->[1].which"} }); } } @@ -85,6 +116,8 @@ sub insertlist { <select name=\"insert_$Apache::lonxml::curdepth\"> $optionlist </select>" + } else { + $result=" "; } } return $result; @@ -158,5 +191,37 @@ sub insert_startouttext { return "\n<startouttext />\n<endouttext />"; } +# Returns a 1 if the toekn has been modified and you should rebuild the tag +# side-effects, will modify the $token if new values are found +sub get_new_args { + my ($token,$parstack,$safeeval,@args)=@_; + my $rebuild=0; + foreach my $arg (@args) { + my $value=&Apache::lonxml::get_param($arg,$parstack,$safeeval); + my $newvalue=$ENV{"form.$Apache::lonxml::curdepth.$arg"}; + &Apache::lonxml::debug(" for:$arg: cur is :$value: new is :$newvalue:"); + if ($value ne $newvalue) { + $token->[2]->{$arg}=$newvalue; + $rebuild=1; + } + } + return $rebuild; +} + +sub rebuild_tag { + my ($token) = @_; + my $result; + if ($token->[0] eq 'S') { + $result = '<'.$token->[1]; + while (my ($key,$val)= each(%{$token->[2]})) { + &Apache::lonxml::debug("setting :$key: to :$val:"); + $result.=' '.$key.'="'.$val.'"'; + } + $result.=">"; + } elsif ( $token->[0] eq 'E' ) { + $result = '</'.$token->[1].'>'; + } + return $result; +} 1; __END__