--- loncom/homework/edit.pm 2001/05/04 21:22:05 1.4 +++ loncom/homework/edit.pm 2001/06/16 20:33:33 1.12 @@ -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 ($token,$target) = @_; + my ($target,$token,$description) = @_; my $result=''; - if ($target eq "web") { + if ($target eq "edit") { my $tag=$token->[1]; - $result.=" - + if (!$description) { $description="<$tag>"; } + $result.= &start_table($token)." +
<$tag>Delete: -
$descriptionDelete:". + &deletelist($target,$token) + ." ". - &insertlist($token,$target). + &insertlist($target,$token). "
\n"; } @@ -27,31 +35,123 @@ sub tag_start { } sub tag_end { - my ($token,$target) = @_; + my ($target,$token,$description) = @_; my $result=''; if ($target eq 'edit') { my $tag=$token->[1]; - $result.="
</$tag>
\n"; + if (!defined($description)) { + $result.="</$tag>"; + } else { + if ($description ne '') { $result.="$description"; } + } + $result.="".&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=""; + return $result; +} + +sub end_table { + $Apache::edit::colordepth--; + my $result="
"; + return $result; +} + +sub deletelist { + my ($target,$token) = @_; + my $result = ""; + 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"}) { + 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.='\n"; + } + if ($result) { $result=''.$result; } } return $result; } sub insertlist { - my ($token,$target) = @_; + my ($target,$token) = @_; my $result; if ($target eq 'edit') { - $result = "Insert: + my $optionlist= &get_insert_list($token); + if ($optionlist) { + $result = "Insert: " + } else { + $result=" "; + } } return $result; } +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"; + } else { + { + no strict 'refs'; + $result.=&$func(); + } + } + return $result; +} + +sub insert_optionresponse { + return ' + + + +'; +} + sub editfield { - my ($tag,$data,$description)=@_; + my ($tag,$data,$description,$minwidth,$minheight)=@_; my $count=0; my $maxlength=-1; @@ -59,10 +159,12 @@ sub editfield { if (length($_) > $maxlength) { $maxlength = length ($_); } } split ("\n", $data); if ($maxlength > 80) { $maxlength = 80; } - if ($description) { - $description="
".$description; + if ($maxlength < $minwidth) { $maxlength = $minwidth; } + if ( $count < $minheight) { $count = $minheight; } + if ($description) { + $description="
".$description."
"; } - return "$description
\n   \n"; + return "$description\n   \n"; # return "
\n<$tag>
\n   
\n</$tag>
\n"; } @@ -85,5 +187,41 @@ sub modifiedfield { return $result; } +sub insert_startouttext { + return "\n\n"; +} + +# 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 = '[1].'>'; + } + return $result; +} 1; __END__