--- loncom/xml/lonplot.pm 2001/12/28 15:49:38 1.21 +++ loncom/xml/lonplot.pm 2001/12/31 16:19:55 1.26 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Dynamic plot # -# $Id: lonplot.pm,v 1.21 2001/12/28 15:49:38 matthew Exp $ +# $Id: lonplot.pm,v 1.26 2001/12/31 16:19:55 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 Matthew +# 12/17 12/18 12/19 12/20 12/21 12/27 12/28 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 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,6 +364,11 @@ 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,'Plot Title'); + my $text=&Apache::lonxml::get_all_text("/title",$$parser[-1]); + $result.=''. + &Apache::edit::editfield('',$text,'',20,1). + &Apache::edit::end_table(); } elsif ($target eq 'modified') { my $text=$$parser[-1]->get_text("/function"); $result.=&Apache::edit::modifiedfield($token); @@ -385,6 +391,11 @@ 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,'Plot Xlabel'); + my $text=&Apache::lonxml::get_all_text("/xlabel",$$parser[-1]); + $result.=''. + &Apache::edit::editfield('',$text,'',20,1). + &Apache::edit::end_table(); } elsif ($target eq 'modified') { my $text=$$parser[-1]->get_text("/function"); $result.=&Apache::edit::modifiedfield($token); @@ -408,6 +419,11 @@ 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,'Plot Ylabel'); + my $text = &Apache::lonxml::get_all_text("/ylabel",$$parser[-1]); + $result .= ''. + &Apache::edit::editfield('',$text,'',20,1). + &Apache::edit::end_table(); } elsif ($target eq 'modified') { my $text=$$parser[-1]->get_text("/function"); $result.=&Apache::edit::modifiedfield($token); @@ -439,16 +455,20 @@ 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 .= ''. + &Apache::edit::editfield('',$text,'',20,1). + &Apache::edit::end_table(); } 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(); } - my $text=$$parser[-1]->get_text("/function"); + my $text=$$parser[-1]->get_text("/label"); $result.=&Apache::edit::modifiedfield($token); } return $result; @@ -468,19 +488,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(); @@ -492,9 +512,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); } @@ -513,11 +533,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); - my $text=&Apache::lonxml::get_all_text("/function",$$parser[-1]); - $result.=''. - &Apache::edit::editfield('',$text,'',20,1). - &Apache::edit::end_table(); + $result .= &Apache::edit::tag_start($target,$token,'Curve Function'); + my $text = &Apache::lonxml::get_all_text("/function",$$parser[-1]); + $result .= ''. + &Apache::edit::editfield('',$text,'',20,1); } elsif ($target eq 'modified') { # Why do I do this? my $text=$$parser[-1]->get_text("/function"); @@ -531,6 +550,7 @@ sub end_function { my $result = ''; if ($target eq 'web') { } elsif ($target eq 'edit') { + $result .= &Apache::edit::end_table(); } return $result; } @@ -575,6 +595,10 @@ sub start_data { } push @{$curves[-1]->{'data'}},\@data; } elsif ($target eq 'edit') { + $result .= &Apache::edit::tag_start($target,$token,'Curve Data'); + my $text = &Apache::lonxml::get_all_text("/data",$$parser[-1]); + $result .= ''. + &Apache::edit::editfield('',$text,'',20,1); } elsif ($target eq 'modified') { my $text=$$parser[-1]->get_text("/data"); $result.=&Apache::edit::modifiedfield($token); @@ -587,6 +611,7 @@ sub end_data { my $result = ''; if ($target eq 'web') { } elsif ($target eq 'edit') { + $result .= &Apache::edit::end_table(); } return $result; } @@ -599,7 +624,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') { } @@ -614,7 +639,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(); @@ -633,7 +658,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'}; } } @@ -641,7 +666,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})) { @@ -688,12 +713,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'}.'" '; @@ -743,9 +768,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 @@ -767,7 +792,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'}, @@ -780,6 +805,7 @@ sub edit_attributes { $defaults->{$attr}->{'choices'}, $token); } + $result .= '
'; } return $result; } 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.