--- loncom/xml/lonplot.pm	2001/12/28 19:04:56	1.22
+++ loncom/xml/lonplot.pm	2001/12/31 17:30:09	1.27
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Dynamic plot
 #
-# $Id: lonplot.pm,v 1.22 2001/12/28 19:04:56 matthew Exp $
+# $Id: lonplot.pm,v 1.27 2001/12/31 17:30:09 matthew Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -26,7 +26,7 @@
 # http://www.lon-capa.org/
 #
 # 12/15/01 Matthew
-# 12/17 12/18 12/19 12/20 12/21 12/27 12/28 Matthew
+# 12/17 12/18 12/19 12/20 12/21 12/27 12/28 12/30 Matthew
 package Apache::lonplot;
 
 use strict;
@@ -263,32 +263,32 @@ my %curve_defaults =
 my (%plot,%key,%axis,$title,$xlabel,$ylabel,@labels,@curves);
 
 sub start_plot {
-    %plot    = undef;   %key     = undef;   %axis   = undef; 
+    %plot    = ();      %key     = ();      %axis   = (); 
     $title   = undef;   $xlabel  = undef;   $ylabel = undef;
     $#labels = -1;      $#curves = -1;
     #
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
+    &Apache::lonxml::register('Apache::lonplot',
+	     ('title','xlabel','ylabel','key','axis','label','curve'));
+    push (@Apache::lonxml::namespace,'plot');
+    my $inside = &Apache::lonxml::get_all_text("/plot",$$parser[-1]);
     if ($target eq 'web') {
-	&Apache::lonxml::register('Apache::lonplot',
-	      ('title','xlabel','ylabel','key','axis','label','curve'));
-	push (@Apache::lonxml::namespace,'plot');
-	## Always evaluate the insides of the <plot></plot> tags
-	my $inside = &Apache::lonxml::get_all_text("/plot",$$parser[-1]);
 	$inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]);
-	&Apache::lonxml::newparser($parser,\$inside);
-	##-------------------------------------------------------
+    }
+    &Apache::lonxml::newparser($parser,\$inside);
+    if ($target eq 'web') {
 	&get_attributes(\%plot,\%plot_defaults,$parstack,$safeeval,
 			$tagstack->[-1]);
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Plot');
 	$result .= &edit_attributes($target,$token,\%plot_defaults);
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
-	    ($token,$parstack,$safeeval,keys %plot_defaults);
+	    ($token,$parstack,$safeeval,keys(%plot_defaults));
 	if ($constructtag) {
 	    $result = &Apache::edit::rebuild_tag($token);
-	    $result.= &Apache::edit::handle_insert();
+#	    $result.= &Apache::edit::handle_insert();
 	}
     }
     return $result;
@@ -296,6 +296,7 @@ sub start_plot {
 
 sub end_plot {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
+
     pop @Apache::lonxml::namespace;
     &Apache::lonxml::deregister('Apache::lonplot',
 	('title','xlabel','ylabel','key','axis','label','curve'));
@@ -333,11 +334,11 @@ sub start_key {
 	&get_attributes(\%key,\%key_defaults,$parstack,$safeeval,
 		    $tagstack->[-1]);
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Plot Key');
 	$result .= &edit_attributes($target,$token,\%key_defaults);
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
-	    ($token,$parstack,$safeeval,keys %key_defaults);
+	    ($token,$parstack,$safeeval,keys(%key_defaults));
 	if ($constructtag) {
 	    $result = &Apache::edit::rebuild_tag($token);
 	    $result.= &Apache::edit::handle_insert();
@@ -363,11 +364,10 @@ sub start_title {
     if ($target eq 'web') {
 	$title = &Apache::lonxml::get_all_text("/title",$$parser[-1]);
     } elsif ($target eq 'edit') {
-	$result.=&Apache::edit::tag_start($target,$token);
+	$result.=&Apache::edit::tag_start($target,$token,'Plot Title');
 	my $text=&Apache::lonxml::get_all_text("/title",$$parser[-1]);
 	$result.='</td></tr><tr><td colspan="3">'.
-	    &Apache::edit::editfield('',$text,'',20,1).
-	    &Apache::edit::end_table();
+	    &Apache::edit::editfield('',$text,'',20,1);
     } elsif ($target eq 'modified') {
 	my $text=$$parser[-1]->get_text("/function");
 	$result.=&Apache::edit::modifiedfield($token);
@@ -391,11 +391,10 @@ sub start_xlabel {
     if ($target eq 'web') {
 	$xlabel = &Apache::lonxml::get_all_text("/xlabel",$$parser[-1]);
     } elsif ($target eq 'edit') {
-	$result.=&Apache::edit::tag_start($target,$token);
+	$result.=&Apache::edit::tag_start($target,$token,'Plot Xlabel');
 	my $text=&Apache::lonxml::get_all_text("/xlabel",$$parser[-1]);
 	$result.='</td></tr><tr><td colspan="3">'.
-	    &Apache::edit::editfield('',$text,'',20,1).
-	    &Apache::edit::end_table();
+	    &Apache::edit::editfield('',$text,'',20,1);
     } elsif ($target eq 'modified') {
 	my $text=$$parser[-1]->get_text("/function");
 	$result.=&Apache::edit::modifiedfield($token);
@@ -420,11 +419,10 @@ sub start_ylabel {
     if ($target eq 'web') {
 	$ylabel = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]);
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Plot Ylabel');
 	my $text = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]);
 	$result .= '</td></tr><tr><td colspan="3">'.
-	    &Apache::edit::editfield('',$text,'',20,1).
-	    &Apache::edit::end_table();
+	    &Apache::edit::editfield('',$text,'',20,1);
     } elsif ($target eq 'modified') {
 	my $text=$$parser[-1]->get_text("/function");
 	$result.=&Apache::edit::modifiedfield($token);
@@ -457,15 +455,14 @@ sub start_label {
 	}
 	push(@labels,\%label);
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Plot Label');
 	$result .= &edit_attributes($target,$token,\%label_defaults);
 	my $text = &Apache::lonxml::get_all_text("/label",$$parser[-1]);
 	$result .= '</td></tr><tr><td colspan="3">'.
-	    &Apache::edit::editfield('',$text,'',20,1).
-	    &Apache::edit::end_table();
+	    &Apache::edit::editfield('',$text,'',20,1);
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
-	    ($token,$parstack,$safeeval,keys %label_defaults);
+	    ($token,$parstack,$safeeval,keys(%label_defaults));
 	if ($constructtag) {
 	    $result = &Apache::edit::rebuild_tag($token);
 	    $result.= &Apache::edit::handle_insert();
@@ -490,19 +487,19 @@ sub end_label {
 sub start_curve {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result='';
+    &Apache::lonxml::register('Apache::lonplot',('function','data'));
+    push (@Apache::lonxml::namespace,'curve');
     if ($target eq 'web') {
 	my %curve;
 	&get_attributes(\%curve,\%curve_defaults,$parstack,$safeeval,
 		    $tagstack->[-1]);
 	push (@curves,\%curve);
-	&Apache::lonxml::register('Apache::lonplot',('function','data'));
-	push (@Apache::lonxml::namespace,'curve');
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Curve');
 	$result .= &edit_attributes($target,$token,\%curve_defaults);
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
-	    ($token,$parstack,$safeeval,keys %label_defaults);
+	    ($token,$parstack,$safeeval,keys(%label_defaults));
 	if ($constructtag) {
 	    $result = &Apache::edit::rebuild_tag($token);
 	    $result.= &Apache::edit::handle_insert();
@@ -514,9 +511,9 @@ sub start_curve {
 sub end_curve {
     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
     my $result = '';
+    pop @Apache::lonxml::namespace;
+    &Apache::lonxml::deregister('Apache::lonplot',('function','data'));
     if ($target eq 'web') {
-	pop @Apache::lonxml::namespace;
-	&Apache::lonxml::deregister('Apache::lonplot',('function','data'));
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_end($target,$token);
     }
@@ -535,12 +532,10 @@ sub start_function {
 	$curves[-1]->{'function'} = 
 	    &Apache::lonxml::get_all_text("/function",$$parser[-1]);
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Curve Function');
 	my $text = &Apache::lonxml::get_all_text("/function",$$parser[-1]);
 	$result .= '</td></tr><tr><td colspan="3">'.
-	    &Apache::edit::editfield('',$text,'',20,1).
-	    &Apache::edit::end_table();
-
+	    &Apache::edit::editfield('',$text,'',20,1);
     } elsif ($target eq 'modified') {
 	# Why do I do this?
 	my $text=$$parser[-1]->get_text("/function");
@@ -554,6 +549,7 @@ sub end_function {
     my $result = '';
     if ($target eq 'web') {
     } elsif ($target eq 'edit') {
+	$result .= &Apache::edit::end_table();
     }
     return $result;
 }
@@ -598,11 +594,10 @@ sub start_data {
 	}
 	push  @{$curves[-1]->{'data'}},\@data;
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Curve Data');
 	my $text = &Apache::lonxml::get_all_text("/data",$$parser[-1]);
 	$result .= '</td></tr><tr><td colspan="3">'.
-	    &Apache::edit::editfield('',$text,'',20,1).
-	    &Apache::edit::end_table();
+	    &Apache::edit::editfield('',$text,'',20,1);
     } elsif ($target eq 'modified') {
 	my $text=$$parser[-1]->get_text("/data");
 	$result.=&Apache::edit::modifiedfield($token);
@@ -615,6 +610,7 @@ sub end_data {
     my $result = '';
     if ($target eq 'web') {
     } elsif ($target eq 'edit') {
+	$result .= &Apache::edit::end_table();
     }
     return $result;
 }
@@ -627,7 +623,7 @@ sub start_axis {
 	&get_attributes(\%axis,\%axis_defaults,$parstack,$safeeval,
 			$tagstack->[-1]);
     } elsif ($target eq 'edit') {
-	$result .= &Apache::edit::tag_start($target,$token);
+	$result .= &Apache::edit::tag_start($target,$token,'Plot Axes');
 	$result .= &edit_attributes($target,$token,\%axis_defaults);
     } elsif ($target eq 'modified') {
     }
@@ -642,7 +638,7 @@ sub end_axis {
 	$result.=&Apache::edit::tag_end($target,$token);
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
-	    ($token,$parstack,$safeeval,keys %axis_defaults);
+	    ($token,$parstack,$safeeval,keys(%axis_defaults));
 	if ($constructtag) {
 	    $result = &Apache::edit::rebuild_tag($token);
 	    $result.= &Apache::edit::handle_insert();
@@ -661,7 +657,7 @@ sub end_axis {
 sub set_defaults {
     my ($var,$defaults) = @_;
     my $key;
-    foreach $key (keys %$defaults) {
+    foreach $key (keys(%$defaults)) {
 	$var->{$key} = $defaults->{$key}->{'default'};
     }
 }
@@ -669,7 +665,7 @@ sub set_defaults {
 ##------------------------------------------------------------------- misc
 sub get_attributes{
     my ($values,$defaults,$parstack,$safeeval,$tag) = @_;
-    foreach my $attr (keys %{$defaults}) {
+    foreach my $attr (keys(%{$defaults})) {
 	$values->{$attr} = 
 	    &Apache::lonxml::get_param($attr,$parstack,$safeeval);
 	if ($values->{$attr} eq '' | !defined($values->{$attr})) {
@@ -716,12 +712,12 @@ sub write_gnuplot_file {
     $gnuplot_input .= "set title  \"$title\"\n"  if (defined($title)) ;
     $gnuplot_input .= "set xlabel \"$xlabel\"\n" if (defined($xlabel));
     $gnuplot_input .= "set ylabel \"$ylabel\"\n" if (defined($ylabel));
-    if (defined(%axis)) {
+    if (%axis) {
 	$gnuplot_input .= "set xrange \[$axis{'xmin'}:$axis{'xmax'}\]\n";
 	$gnuplot_input .= "set yrange \[$axis{'ymin'}:$axis{'ymax'}\]\n";
     }
     # Key
-    if (defined(%key)) {
+    if (%key) {
 	$gnuplot_input .= 'set key '.$key{'pos'}.' ';
 	if ($key{'title'} ne '') {
 	    $gnuplot_input .= 'title "'.$key{'title'}.'" ';
@@ -771,9 +767,9 @@ sub write_gnuplot_file {
 sub check_inputs {
     ## Note: no inputs, no outputs - this acts only on global variables.
     ## Make sure we have all the input we need:
-    if (! defined(%plot  )) { &set_defaults(\%plot,\%plot_defaults); }
-    if (! defined(%key   )) {} # No key for this plot, thats okay
-    if (! defined(%axis  )) { &set_defaults(\%axis,\%axis_defaults); }
+    if (! %plot) { &set_defaults(\%plot,\%plot_defaults); }
+    if (! %key ) {} # No key for this plot, thats okay
+    if (! %axis) { &set_defaults(\%axis,\%axis_defaults); }
     if (! defined($title )) {} # No title for this plot, thats okay
     if (! defined($xlabel)) {} # No xlabel for this plot, thats okay
     if (! defined($ylabel)) {} # No ylabel for this plot, thats okay
@@ -795,7 +791,7 @@ sub check_inputs {
 sub edit_attributes {
     my ($target,$token,$defaults) = @_;
     my $result;
-    foreach my $attr (%$defaults) {
+    foreach my $attr (sort keys(%$defaults)) {
 	if ($defaults->{$attr}->{'edit_type'} eq 'entry') {
 	    $result .= &Apache::edit::text_arg(
                  $defaults->{$attr}->{'description'},
@@ -808,6 +804,7 @@ sub edit_attributes {
 		 $defaults->{$attr}->{'choices'},
 		 $token);
 	}
+	$result .= '<br />';
     }
     return $result;
 }
@@ -825,7 +822,7 @@ sub insert_plot {
     #  plot attributes
     $result .= '<plot ';
     foreach my $attr (%plot_defaults) {
-	$result .= '     '.$attr.' "'.$plot_defaults{$attr}->{'default'}.
+	$result .= '     '.$attr.'="'.$plot_defaults{$attr}->{'default'}.
 	    "\"\n";
     }
     $result .= ">\n";
@@ -848,7 +845,7 @@ sub insert_key {
     my $result;
     $result .= '    <key ';
     foreach my $attr (%key_defaults) {
-	$result .= '         '.$attr.' "'.$key_defaults{$attr}->{'default'}.
+	$result .= '         '.$attr.'="'.$key_defaults{$attr}->{'default'}.
 	    "\"\n";
     }
     $result .= "   />\n";
@@ -859,7 +856,7 @@ sub insert_axis{
     my $result;
     $result .= '    <axis ';
     foreach my $attr (%axis_defaults) {
-	$result .= '         '.$attr.' "'.$axis_defaults{$attr}->{'default'}.
+	$result .= '         '.$attr.'="'.$axis_defaults{$attr}->{'default'}.
 	    "\"\n";
     }
     $result .= "   />\n";
@@ -870,7 +867,7 @@ sub insert_label {
     my $result;
     $result .= '    <label ';
     foreach my $attr (%label_defaults) {
-	$result .= '         '.$attr.' "'.
+	$result .= '         '.$attr.'="'.
 	    $label_defaults{$attr}->{'default'}."\"\n";
     }
     $result .= "   ></label>\n";
@@ -881,7 +878,7 @@ sub insert_curve {
     my $result;
     $result .= '    <curve ';
     foreach my $attr (%curve_defaults) {
-	$result .= '         '.$attr.' "'.
+	$result .= '         '.$attr.'="'.
 	    $curve_defaults{$attr}->{'default'}."\"\n";
     }
     $result .= "    >\n";