--- loncom/xml/lonplot.pm	2009/01/30 03:20:10	1.151
+++ loncom/xml/lonplot.pm	2012/02/22 10:16:39	1.155
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Dynamic plot
 #
-# $Id: lonplot.pm,v 1.151 2009/01/30 03:20:10 raeburn Exp $
+# $Id: lonplot.pm,v 1.155 2012/02/22 10:16:39 foxr Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -176,14 +176,16 @@ my %gnuplot_defaults =
 	 test        => $color_test, 
 	 description => 'Background color of image (xffffff)',
 	 edit_type   => 'entry',
-	 size        => '10'
+	 size        => '10',
+         class       => 'colorchooser'
 	 },
      fgcolor      => {
 	 default     => 'x000000',
 	 test        => $color_test,
 	 description => 'Foreground color of image (x000000)',
 	 edit_type   => 'entry',
-	 size        => '10'
+	 size        => '10',
+         class       => 'colorchooser'
 	 },
      transparent  => {
 	 default     => 'off',
@@ -455,7 +457,7 @@ my %tic_defaults =
 	 },         
      );
 
-my @axis_edit_order = ('color','xmin','xmax','ymin','ymax','xformat', 'yformat');
+my @axis_edit_order = ('color','xmin','xmax','ymin','ymax','xformat', 'yformat', 'xzero', 'yzero');
 my %axis_defaults = 
     (
      color   => {
@@ -463,7 +465,8 @@ my %axis_defaults =
 	 test => $color_test,
 	 description => 'Color of grid lines (x000000)',
 	 edit_type   => 'entry',
-	 size        => '10'
+	 size        => '10',
+         class       => 'colorchooser'
 	 },
      xmin      => {
 	 default => '-10.0',
@@ -507,7 +510,22 @@ my %axis_defaults =
          edit_type   => 'choice',
          choices     => ['on', 'off', '2e', '2f'],
          },
-
+     
+     xzero => {
+     	default => 'off',
+     	test	=> sub {$_[0]=~/^(off|line|thick-line|dotted)$/},
+     	description => 'Show x-zero (y=0) axis',
+     	edit_type  => 'choice',
+     	choices	=> ['off', 'line', 'thick-line', 'dotted'],
+     	},
+     
+     yzero => {
+     	default => 'off',
+     	test	=> sub {$_[0]=~/^(off|line|thick-line|dotted)$/},
+     	description => 'Show y-zero (x=0) axis',
+     	edit_type  => 'choice',
+     	choices	=> ['off', 'line', 'thick-line', 'dotted'],
+     	},
      );
 
 my @curve_edit_order = ('color','name','linestyle','linewidth','linetype','pointtype','pointsize','limit');
@@ -519,7 +537,8 @@ my %curve_defaults =
 	 test => $color_test,
 	 description => 'Color of curve (x000000)',
 	 edit_type   => 'entry',
-	 size        => '10'
+	 size        => '10',
+	 class       => 'colorchooser'
 	 },
      name      => {
 	 default => '',
@@ -605,7 +624,18 @@ sub start_gnuplot {
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
 	    ($token,$parstack,$safeeval,keys(%gnuplot_defaults));
+
 	if ($constructtag) {
+	    #
+	    # The color chooser does not prepent x to the color values
+	    # Do that here:
+	    #
+	    foreach my $attribute ('bgcolor', 'fgcolor') {
+		my $value = $token->[2]{$attribute};
+		if (defined $value && !($value =~ /^x/)) {
+		    $token->[2]{$attribute} = 'x' . $value;
+		}
+	    }
 	    $result = &Apache::edit::rebuild_tag($token);
 	}
     }
@@ -619,6 +649,8 @@ sub end_gnuplot {
 	('title','xlabel','ylabel','key','axis','label','curve'));
     my $result = '';
     my $randnumber;
+    my $tmpdir =LONCAPA::tempdir(); # Where temporary files live:
+
     # need to call rand everytime start_script would evaluate, as the
     # safe space rand number generator and the global rand generator 
     # are not separate
@@ -630,7 +662,6 @@ sub end_gnuplot {
 	&check_inputs(); # Make sure we have all the data we need
 	##
 	## Determine filename
-	my $tmpdir = '/home/httpd/perl/tmp/';
 	my $filename = $env{'user.name'}.'_'.$env{'user.domain'}.
 	    '_'.time.'_'.$$.$randnumber.'_plot';
 	## Write the plot description to the file
@@ -651,7 +682,7 @@ ENDIMAGE
 	    #might be inside the safe space, register the URL for later
 	    &Apache::lonxml::register_ssi("/cgi-bin/plot.gif?file=$filename.data&output=eps");
 	    $result  = "%DYNAMICIMAGE:$Apache::lonplot::plot{'width'}:$Apache::lonplot::plot{'height'}:$Apache::lonplot::plot{'texwidth'}\n";
-	    $result .= '\graphicspath{{/home/httpd/perl/tmp/}}'."\n";
+	    $result .= '\graphicspath{{'.$tmpdir.'}}'."\n";
 	    $result .= '\includegraphics[width='.$Apache::lonplot::plot{'texwidth'}.' mm]{'.&unescape($filename).'.eps}';
 	}
     } elsif ($target eq 'edit') {
@@ -1335,6 +1366,13 @@ sub start_curve {
 	my $constructtag=&Apache::edit::get_new_args
 	    ($token,$parstack,$safeeval,keys(%curve_defaults));
 	if ($constructtag) {
+	    #
+	    # Fix up the color attribute as jcolor does not prepend an x
+	    #
+	    my $value = $token->[2]{'color'};
+	    if (defined $value && !($value =~ /^x/)) {
+		$token->[2]{'color'} = 'x' . $value;
+	    }
 	    $result = &Apache::edit::rebuild_tag($token);
 	}
     }
@@ -1481,7 +1519,17 @@ sub start_axis {
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
 	    ($token,$parstack,$safeeval,keys(%axis_defaults));
+
 	if ($constructtag) {
+	    #
+	    #  Fix up the color attribute since jchooser does not
+	    #  prepend an x to the color:
+	    #
+	    my $value = $token->[2]{'color'};
+	    if (defined $value && !($value =~ /^x/)) {
+		$token->[2]{'color'} = 'x' . $value;
+	    }
+
 	    $result = &Apache::edit::rebuild_tag($token);
 	}
     }
@@ -1574,6 +1622,7 @@ sub write_gnuplot_file {
 		       $curve->{'color'}       : 
 		       $Apache::lonplot::plot{'fgcolor'}        );
     }
+    
     # set term
     if ($target eq 'web') {
 	$gnuplot_input .= 'set terminal png enhanced nocrop ';
@@ -1594,7 +1643,7 @@ sub write_gnuplot_file {
 	}
 	$gnuplot_input .= ' "'.$font_properties->{'printname'}.'" ';
 	$gnuplot_input .= $fontsize;
-	$gnuplot_input .= "\nset output \"/home/httpd/perl/tmp/".
+	$gnuplot_input .= "\nset output \"".$tmpdir.
 	    &unescape($filename).".eps\"\n";
 	$gnuplot_input .= "set encoding iso_8859_1\n"; # Get access to extended font.
 
@@ -1735,6 +1784,26 @@ sub write_gnuplot_file {
         }
 	$gnuplot_input .= "set xrange \[$axis{'xmin'}:$axis{'xmax'}\]\n";
 	$gnuplot_input .= "set yrange \[$axis{'ymin'}:$axis{'ymax'}\]\n";
+		if ($axis{'xzero'} ne 'off') {
+			$gnuplot_input .= "set xzeroaxis ";
+			if ($axis{'xzero'} eq 'line' || $axis{'xzero'} eq 'thick-line') {
+				$gnuplot_input .= "lt -1 ";
+				if ($axis{'xzero'} eq 'thick-line') {
+					$gnuplot_input .= "lw 3 ";
+				}
+			}
+			$gnuplot_input .= "\n";
+		}
+		if ($axis{'yzero'} ne 'off') {
+			$gnuplot_input .= "set yzeroaxis ";
+			if ($axis{'yzero'} eq 'line' || $axis{'yzero'} eq 'thick-line') {
+				$gnuplot_input .= "lt -1 ";
+				if ($axis{'yzero'} eq 'thick-line') {
+					$gnuplot_input .= "lw 3 ";
+				}
+			}
+			$gnuplot_input .= "\n";
+		}
     }
     # Key
     if (%key) {
@@ -1894,7 +1963,8 @@ sub edit_attributes {
 	if ($defaults->{$attr}->{'edit_type'} eq 'entry') {
 	    $result .= &Apache::edit::text_arg
 		($description,$attr,$token,
-		 $defaults->{$attr}->{'size'});
+		 $defaults->{$attr}->{'size'},
+		$defaults->{$attr}->{'class'});
 	} elsif ($defaults->{$attr}->{'edit_type'} eq 'choice') {
 	    $result .= &Apache::edit::select_or_text_arg
 		($description,$attr,$defaults->{$attr}->{'choices'},$token);