--- loncom/homework/edit.pm 2002/10/25 19:02:38 1.37 +++ loncom/homework/edit.pm 2002/11/03 19:16:19 1.38 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # edit mode helpers # -# $Id: edit.pm,v 1.37 2002/10/25 19:02:38 albertel Exp $ +# $Id: edit.pm,v 1.38 2002/11/03 19:16:19 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -39,9 +39,11 @@ use HTML::Entities(); @Apache::edit::colorlist=('#ffffff','#ff0000','#00ff00','#0000ff','#0ff000','#000ff0','#f0000f'); # depth of nesting of edit $Apache::edit::colordepth=0; +@Apache::edit::inserttag=(); sub initialize_edit { $Apache::edit::colordepth=0; + @Apache::edit::inserttag=(); } sub tag_start { @@ -96,13 +98,22 @@ sub start_table { $color = $Apache::edit::colorlist[$Apache::edit::colordepth]; } $Apache::edit::colordepth++; - my $result=""; + push(@Apache::edit::inserttag,$token->[1]); + my $result="

"; return $result; } sub end_table { $Apache::edit::colordepth--; - my $result="
"; + my $result="

"; + $result.= + "

". + &innerinsertlist('edit', + (defined($Apache::edit::inserttag[-2])?$Apache::edit::inserttag[-2]:'problem') +, + (defined($Apache::edit::inserttag[-1])?$Apache::edit::inserttag[-1]:'')). + "

"; + pop(@Apache::edit::inserttag); return $result; } @@ -152,16 +163,16 @@ sub handle_delete { } sub get_insert_list { - my ($token) = @_; + my ($tagname) = @_; 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"} }); + if ($Apache::lonxml::insertlist{"$tagname.which"}) { + push (@tagnums, @{ $Apache::lonxml::insertlist{"$tagname.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 ($Apache::lonxml::insertlist{"$namespace".'::'."$tagname.which"}) { + push (@tagnums, @{ $Apache::lonxml::insertlist{"$namespace".'::'."$tagname.which"} }); } } if (@tagnums) { @@ -178,12 +189,21 @@ sub get_insert_list { sub insertlist { my ($target,$token) = @_; + return &innerinsertlist($target,$token->[1]); +} + +sub innerinsertlist { + my ($target,$tagname,$closingtag) = @_; my $result; + my $after=''; + if ($closingtag) { + $after='_after_'.$closingtag; + } if ($target eq 'edit') { - my $optionlist= &get_insert_list($token); + my $optionlist= &get_insert_list($tagname); if ($optionlist) { $result = "Insert: - $optionlist " } else { @@ -215,6 +235,32 @@ sub handle_insert { } } return $result; +} + +sub handle_insertafter { + my $tagname=shift; + if ($ENV{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"} eq '') + { return ''; } + my $result; + 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"}; + my $namespace; + if ($newtag =~ /::/) { ($namespace,$newtag) = split(/::/,$newtag); } + $result.="\n<$newtag>\n"; + } else { + if (defined(&$func)) { + { + no strict 'refs'; + $result.=&$func(); + } + } else { + my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"}; + &Apache::lonxml::error("Unable to insert (after) tag $newtag, $func was not defined. ($tagname $tagnum)"); + } + } + return $result; } sub insert_responseparam {