--- loncom/xml/lonplot.pm 2001/12/31 19:02:00 1.28 +++ loncom/xml/lonplot.pm 2002/01/01 19:34:25 1.29 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.28 2001/12/31 19:02:00 matthew Exp $ +# $Id: lonplot.pm,v 1.29 2002/01/01 19:34:25 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -69,6 +69,28 @@ sub BEGIN { ## Tests used in checking the validitity of input ## ## ## ################################################################### + +my %linestyles = + ( + lines => 2, # Maybe this will be used in the future + linespoints => 2, # to check on whether or not they have + dots => 2, # supplied enough fields + points => 2, # to use the given line style. But for + steps => 2, # now there are more important things + fsteps => 2, # for me to deal with. + histeps => 2, + errorbars => 2, + xerrorbars => 2, + yerrorbars => 2, + xyerrorbars => 2, + boxes => 2, + boxerrorbars => 2, + boxxyerrorbars => 2, + financebars => 2, + candlesticks => 2, + vector => 2 + ); + my $int_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^\d+$/}; my $real_test = sub {$_[0]=~s/\s+//g;$_[0]=~/^[+-]?\d*\.?\d*([eE][+-]\d+)?$/}; @@ -76,7 +98,7 @@ my $color_test = sub {$_[0]=~s/\s+// my $onoff_test = sub {$_[0]=~/^(on|off)$/}; my $key_pos_test = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/}; my $sml_test = sub {$_[0]=~/^(small|medium|large)$/}; -my $linestyle_test = sub {$_[0]=~/^(lines|linespoints|dots|points|steps)$/}; +my $linestyle_test = sub {exists($linestyles{$_[0]})}; my $words_test = sub {$_[0]=~s/\s+/ /g;$_[0]=~/^([\w\(\)]+ ?)+$/}; ################################################################### @@ -89,13 +111,13 @@ my %plot_defaults = height => { default => 200, test => $int_test, - description => 'vertical size of image (pixels)', + description => 'height of image (pixels)', edit_type => 'entry' }, width => { default => 200, test => $int_test, - description => 'horizontal size of image (pixels)', + description => 'width of image (pixels)', edit_type => 'entry' }, bgcolor => { @@ -244,7 +266,11 @@ my %curve_defaults = test => $linestyle_test, description => 'Style of the axis lines', edit_type => 'choice', - choices => ['lines','linespoints','dots','points','steps'] + choices => ['lines','linespoints','dots','points','steps', + 'fsteps','histeps','errorbars','xerrorbars', + 'yerrorbars','xyerrorbars','boxes','boxerrorbars', + 'boxxyerrorbars','financebars','candlesticks', + 'vector'] } ); @@ -264,13 +290,11 @@ sub start_plot { 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]); + push (@Apache::lonxml::namespace,'lonplot'); if ($target eq 'web') { + my $inside = &Apache::lonxml::get_all_text("/plot",$$parser[-1]); $inside=&Apache::run::evaluate($inside,$safeeval,$$parstack[-1]); - } - &Apache::lonxml::newparser($parser,\$inside); - if ($target eq 'web') { + &Apache::lonxml::newparser($parser,\$inside); &get_attributes(\%plot,\%plot_defaults,$parstack,$safeeval, $tagstack->[-1]); } elsif ($target eq 'edit') { @@ -300,7 +324,7 @@ sub end_plot { ## Determine filename my $tmpdir = '/home/httpd/perl/tmp/'; my $filename = $ENV{'user.name'}.'_'.$ENV{'user.domain'}. - '_'.time.'_'.$$.'_plot.data'; + '_'.time.'_'.$$.int(rand(1000)).'_plot.data'; ## Write the plot description to the file my $fh=Apache::File->new(">$tmpdir$filename"); print $fh &write_gnuplot_file(); @@ -362,7 +386,7 @@ sub start_title { $result.=''. &Apache::edit::editfield('',$text,'',20,1); } elsif ($target eq 'modified') { - my $text=$$parser[-1]->get_text("/function"); + my $text=$$parser[-1]->get_text("/title"); $result.=&Apache::edit::modifiedfield($token); } return $result; @@ -389,7 +413,7 @@ sub start_xlabel { $result.=''. &Apache::edit::editfield('',$text,'',20,1); } elsif ($target eq 'modified') { - my $text=$$parser[-1]->get_text("/function"); + my $text=$$parser[-1]->get_text("/xlabel"); $result.=&Apache::edit::modifiedfield($token); } return $result; @@ -417,7 +441,7 @@ sub start_ylabel { $result .= ''. &Apache::edit::editfield('',$text,'',20,1); } elsif ($target eq 'modified') { - my $text=$$parser[-1]->get_text("/function"); + my $text=$$parser[-1]->get_text("/ylabel"); $result.=&Apache::edit::modifiedfield($token); } return $result; @@ -619,6 +643,12 @@ sub start_axis { $result .= &Apache::edit::tag_start($target,$token,'Plot Axes'); $result .= &edit_attributes($target,$token,\%axis_defaults); } elsif ($target eq 'modified') { + my $constructtag=&Apache::edit::get_new_args + ($token,$parstack,$safeeval,keys(%axis_defaults)); + if ($constructtag) { + $result = &Apache::edit::rebuild_tag($token); + $result.= &Apache::edit::handle_insert(); + } } return $result; } @@ -630,12 +660,6 @@ sub end_axis { } elsif ($target eq 'edit') { $result.=&Apache::edit::tag_end($target,$token); } elsif ($target eq 'modified') { - my $constructtag=&Apache::edit::get_new_args - ($token,$parstack,$safeeval,keys(%axis_defaults)); - if ($constructtag) { - $result = &Apache::edit::rebuild_tag($token); - $result.= &Apache::edit::handle_insert(); - } } return $result; } @@ -811,24 +835,20 @@ sub edit_attributes { #------------------------------------------------ insert_xxxxxxx sub insert_plot { - my $result; + my $result = ''; # plot attributes - $result .= '{'default'}\"\n"; } $result .= ">\n"; # Add the components $result .= &insert_key(); $result .= &insert_axis(); - $result .= &insert_label(); - $result .= &insert_curve(); - $result .= &insert_function(); - $result .= "\n"; + $result .= &insert_title(); + $result .= &insert_xlabel(); + $result .= &insert_ylabel(); $result .= &insert_curve(); - $result .= &insert_data(); - $result .= "\n"; # close up the $result .= "\n"; return $result; @@ -836,10 +856,9 @@ sub insert_plot { sub insert_key { my $result; - $result .= ' {'default'}\"\n"; } $result .= " />\n"; return $result; @@ -849,16 +868,15 @@ sub insert_axis{ my $result; $result .= ' {'default'}\"\n"; } $result .= " />\n"; return $result; } sub insert_title { return " \n"; } -sub insert_title { return " \n"; } -sub insert_title { return " \n"; } +sub insert_xlabel { return " \n"; } +sub insert_ylabel { return " \n"; } sub insert_label { my $result; @@ -878,7 +896,7 @@ sub insert_curve { $result .= ' '.$attr.'="'. $curve_defaults{$attr}->{'default'}."\"\n"; } - $result .= " >\n"; + $result .= " >\n"; } sub insert_function {