[LON-CAPA-cvs] cvs: loncom /homework edit.pm

albertel lon-capa-cvs@mail.lon-capa.org
Sun, 18 Feb 2007 02:01:00 -0000


albertel		Sat Feb 17 21:01:00 2007 EDT

  Modified files:              
    /loncom/homework	edit.pm 
  Log:
  - work wth Tasks
  - strip and restore leading and trailing whitespace from textarea editors
  - Nesting multiple of the same tags did't work well
  
  
Index: loncom/homework/edit.pm
diff -u loncom/homework/edit.pm:1.104 loncom/homework/edit.pm:1.105
--- loncom/homework/edit.pm:1.104	Mon Jan 29 18:51:19 2007
+++ loncom/homework/edit.pm	Sat Feb 17 21:00:59 2007
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA 
 # edit mode helpers
 #
-# $Id: edit.pm,v 1.104 2007/01/29 23:51:19 albertel Exp $
+# $Id: edit.pm,v 1.105 2007/02/18 02:00:59 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -112,13 +112,19 @@
     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).
 	"</td></tr></table></div>";
-    pop(@Apache::edit::inserttag);
+    my $last = pop(@Apache::edit::inserttag);
     return $result;
 }
 
@@ -232,11 +238,11 @@
 	return '';
     }
     my $tagnum =$env{"form.insert_after_$tagname\_$Apache::lonxml::curdepth"};
-    return &do_insert($tagnum);
+    return &do_insert($tagnum,1);
 }
 
 sub do_insert {
-    my ($tagnum) = @_;
+    my ($tagnum,$after) = @_;
     my $result;
 
     my $newtag = $Apache::lonxml::insertlist{"$tagnum.tag"};
@@ -244,7 +250,10 @@
     if ($func eq 'default') {
 	my $namespace;
 	if ($newtag =~ /::/) { ($namespace,$newtag) = split(/::/,$newtag); }
-	$result.="\n<$newtag>\n</$newtag>";
+	my $depth = scalar(@Apache::lonxml::depthcounter);
+	$depth -- if ($after);
+	my $inset = "\t"x$depth;
+	$result.="\n$inset<$newtag>\n$inset</$newtag>";
     } else {
 	if (defined(&$func)) {
 	    {
@@ -565,6 +574,10 @@
 	&Apache::lonhtmlcommon::add_htmlareafields('homework_edit_'.
 						   $Apache::lonxml::curdepth);
     }
+    # remove typesetting whitespace from between data and the end tag
+    # to make the edit look prettier
+    $data =~ s/\n?[ \t]*$//;
+
     return $description."\n".'<textarea style="width:100%" rows="'.$rows.
 	'" cols="'.$cols.'" name="homework_edit_'.
 	$Apache::lonxml::curdepth.'" id="homework_edit_'.
@@ -577,15 +590,17 @@
 sub modifiedfield {
     my ($endtag,$parser) = @_;
     my $result;
-#  foreach my $envkey (sort keys %env) {
-#    &Apache::lonxml::debug("$envkey ---- $env{$envkey}");
-#  }
-#  &Apache::lonxml::debug("I want homework_edit_$Apache::lonxml::curdepth");
-#  &Apache::lonxml::debug($env{"form.homework_edit_$Apache::lonxml::curdepth"});
     $result=$env{"form.homework_edit_$Apache::lonxml::curdepth"};
     my $bodytext=&Apache::lonxml::get_all_text($endtag,$parser);
     # textareas throw away intial \n 
-    if ($bodytext=~/^\n/) { $result="\n".$result; }
+    if ($bodytext=~/^\n/) {
+	$result="\n".$result;
+    }
+    # if there is typesetting whitespace from between the data and the end tag
+    # restore to keep the source looking pretty
+    if ($bodytext =~ /(\n?[ \t]*)$/) {
+	$result .= $1;
+    }
     return $result;
 }