--- loncom/homework/edit.pm 2005/12/22 22:06:54 1.99 +++ loncom/homework/edit.pm 2007/10/03 00:24:48 1.112 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # edit mode helpers # -# $Id: edit.pm,v 1.99 2005/12/22 22:06:54 albertel Exp $ +# $Id: edit.pm,v 1.112 2007/10/03 00:24:48 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -32,6 +32,9 @@ use strict; use Apache::lonnet; use HTML::Entities(); use Apache::lonlocal; +use lib '/home/httpd/lib/perl/'; +use LONCAPA; + # Global Vars # default list of colors to use in editing @@ -87,17 +90,10 @@ sub tag_end { sub start_table { my ($token)=@_; - my $tag = $token->[1]; - my $tagnum; - 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"); + my $tag = &Apache::lonxml::get_tag($token); + + my $color = $Apache::lonxml::insertlist{"$tag.color"}; + &Apache::lonxml::debug(" $tag -- $color"); if (!defined($color)) { $color = $Apache::edit::colorlist[$Apache::edit::colordepth]; } @@ -116,13 +112,19 @@ sub end_table { my ($tagname,$closingtag); if (defined($Apache::edit::inserttag[-2])) { $tagname=$Apache::edit::inserttag[-2]; - } else {$tagname='problem';} + } else { + if ($Apache::lonhomework::parsing_a_task) { + $tagname='Task'; + } else { + $tagname='problem'; + } + } if (defined($Apache::edit::inserttag[-1])) { $closingtag=$Apache::edit::inserttag[-1]; } $result.=&innerinsertlist('edit',$tagname,$closingtag). ""; - pop(@Apache::edit::inserttag); + my $last = pop(@Apache::edit::inserttag); return $result; } @@ -174,20 +176,21 @@ sub handle_delete { sub get_insert_list { my ($tagname) = @_; my $result=''; - my @tagnums= (); + my @tags= (); #&Apache::lonxml::debug("keys ".join("\n",sort(keys(%Apache::lonxml::insertlist)))); if ($Apache::lonxml::insertlist{"$tagname.which"}) { - push (@tagnums, @{ $Apache::lonxml::insertlist{"$tagname.which"} }); + push (@tags, @{ $Apache::lonxml::insertlist{"$tagname.which"} }); } foreach my $namespace (@Apache::lonxml::namespace) { if ($Apache::lonxml::insertlist{"$namespace".'::'."$tagname.which"}) { - push (@tagnums, @{ $Apache::lonxml::insertlist{"$namespace".'::'."$tagname.which"} }); + push (@tags, @{ $Apache::lonxml::insertlist{"$namespace".'::'."$tagname.which"} }); } } - if (@tagnums) { + if (@tags) { my %options; - foreach my $tagnum (@tagnums) { - my $descrip=$Apache::lonxml::insertlist{"$tagnum.description"}; + foreach my $tag (@tags) { + my $descrip=$Apache::lonxml::insertlist{"$tag.description"}; + my $tagnum =$Apache::lonxml::insertlist{"$tag.num"}; $options{$descrip} ="\n"; } @@ -225,40 +228,32 @@ sub innerinsertlist { sub handle_insert { if ($env{"form.insert_$Apache::lonxml::curdepth"} eq '') { 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 { - if (defined(&$func)) { - { - no strict 'refs'; - $result.=&$func(); - } - } else { - my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"}; - &Apache::lonxml::error("Unable to insert tag ".$Apache::lonxml::curdepth." ($tagnum) $newtag, func was not defined."); - } - } - return $result; + return &do_insert($tagnum); } sub handle_insertafter { my $tagname=shift; - if ($env{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"} eq '') - { return ''; } - my $result; + if ($env{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"} eq '') { + return ''; + } my $tagnum =$env{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"}; - my $func=$Apache::lonxml::insertlist{"$tagnum.function"}; + return &do_insert($tagnum,1); +} + +sub do_insert { + my ($tagnum,$after) = @_; + my $result; + + my $newtag = $Apache::lonxml::insertlist{"$tagnum.tag"}; + my $func = $Apache::lonxml::insertlist{"$newtag.function"}; if ($func eq 'default') { - my $newtag=$Apache::lonxml::insertlist{"$tagnum.tag"}; my $namespace; if ($newtag =~ /::/) { ($namespace,$newtag) = split(/::/,$newtag); } - $result.="\n<$newtag>\n"; + my $depth = scalar(@Apache::lonxml::depthcounter); + $depth -- if ($after); + my $inset = "\t"x$depth; + $result.="\n$inset<$newtag>\n$inset"; } else { if (defined(&$func)) { { @@ -266,8 +261,7 @@ sub handle_insertafter { $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)"); + &Apache::lonxml::error("Unable to insert tag $newtag, $func was not defined. ($tagnum)"); } } return $result; @@ -330,6 +324,56 @@ sub insert_customresponse_answer { '; } +sub insert_customhint { + return ' + + + + '; +} + +sub insert_customhint_answer { + return ' + + +'; +} + +sub insert_mathresponse { + return ' + + + + + + + + +'; +} + +sub insert_mathresponse_answer { + return ' + + +'; +} + +sub insert_mathhint { + return ' + + + + '; +} + +sub insert_mathhint_answer { + return ' + + +'; +} + sub insert_stringresponse { return ' @@ -553,7 +597,7 @@ sub textarea_sizes { sub editline { my ($tag,$data,$description,$size)=@_; $data=&HTML::Entities::encode($data,'<>&"'); - if ($description) { $description="
".$description."
"; } + if ($description) { $description=$description."
"; } my $change_code = &element_change_detection(); my $result = <<"END"; $description @@ -575,12 +619,16 @@ sub editfield { if ($cols > 80) { $cols = 80; } if ($cols < $minwidth ) { $cols = $minwidth; } if ($rows < $minheight) { $rows = $minheight; } - if ($description) { $description="
".$description."
"; } + if ($description) { $description=$description."
"; } if ($usehtmlarea) { - push @Apache::lonxml::htmlareafields,'homework_edit_'. - $Apache::lonxml::curdepth; + &Apache::lonhtmlcommon::add_htmlareafields('homework_edit_'. + $Apache::lonxml::curdepth); } - return $description."\n".'