version 1.44, 2010/11/23 17:01:28
|
version 1.47, 2010/11/24 02:53:13
|
Line 295 ENDAXESSCRIPT
|
Line 295 ENDAXESSCRIPT
|
} |
} |
|
|
sub axes_label { |
sub axes_label { |
my ($id,$xlabel,$ylabel)=@_; |
my ($id,$xmin,$xmax,$ymin,$ymax,$xlabel,$ylabel)=@_; |
unless ($xlabel || $ylabel) { return ''; } |
unless ($xlabel || $ylabel) { return ''; } |
my $return='document.ggbApplet_'.$id.'.evalCommand("topRight=Corner[3]");'; |
my $return='document.ggbApplet_'.$id.'.evalCommand("topRight=Corner[3]");'; |
if ($xlabel) { |
if ($xlabel) { |
|
if (($ymin<0) && ($ymax>0)) { |
$return.=(<<ENDXAXISLABELSCRIPT); |
$return.=(<<ENDXAXISLABELSCRIPT); |
document.ggbApplet_$id.evalCommand("Xlabel=(x(topRight)-AxisStepX[],AxisStepY[]/6)"); |
document.ggbApplet_$id.evalCommand("Xlabel=(x(topRight)-AxisStepX[],AxisStepY[]/6)"); |
document.ggbApplet_$id.setVisible("Xlabel",false); |
document.ggbApplet_$id.setVisible("Xlabel",false); |
document.ggbApplet_$id.evalCommand("Text[\\"$xlabel\\", Xlabel]"); |
document.ggbApplet_$id.evalCommand("Text[\\"$xlabel\\", Xlabel]"); |
ENDXAXISLABELSCRIPT |
ENDXAXISLABELSCRIPT |
|
} else { |
|
$return.=(<<ENDXOFFAXISLABEL); |
|
document.ggbApplet_$id.evalCommand("LowerRight=Corner[2]"); |
|
document.ggbApplet_$id.evalCommand("Text[\\"$xlabel\\", (x(LowerRight) - AxisStepX[], y(LowerRight) + AxisStepY[] / 2)]"); |
|
ENDXOFFAXISLABEL |
|
} |
} |
} |
if ($ylabel) { |
if ($ylabel) { |
|
if (($xmin<0) && ($xmax>0)) { |
$return.=(<<ENDYAXISLABELSCRIPT); |
$return.=(<<ENDYAXISLABELSCRIPT); |
document.ggbApplet_$id.evalCommand("Ylabel=(AxisStepX[]/6,y(topRight)-AxisStepY[]/3)"); |
document.ggbApplet_$id.evalCommand("Ylabel=(AxisStepX[]/6,y(topRight)-AxisStepY[]/3)"); |
document.ggbApplet_$id.setVisible("Ylabel",false); |
document.ggbApplet_$id.setVisible("Ylabel",false); |
document.ggbApplet_$id.evalCommand("Text[\\"$ylabel\\", Ylabel]"); |
document.ggbApplet_$id.evalCommand("Text[\\"$ylabel\\", Ylabel]"); |
ENDYAXISLABELSCRIPT |
ENDYAXISLABELSCRIPT |
|
} else { |
|
$return.=(<<ENDYOFFAXISLABEL); |
|
document.ggbApplet_$id.evalCommand("UpperLeft=Corner[4]"); |
|
document.ggbApplet_$id.evalCommand("Text[\\"$ylabel\\", (x(UpperLeft) + AxisStepX[] / 5, y(UpperLeft) - AxisStepY[] / 1.8)]"); |
|
ENDYOFFAXISLABEL |
|
} |
} |
} |
return $return; |
return $return; |
} |
} |
|
|
sub plot_script { |
sub plot_script { |
my ($id,$function,$fixed,$label,$xmin,$xmax)=@_; |
my ($id,$function,$fixed,$label,$color,$xmin,$xmax,$thickness)=@_; |
$label=~s/\W//g; |
$label=~s/\W//g; |
if (($label) && ($label!~/^[A-Za-z]/)) { |
if (($label) && ($label!~/^[A-Za-z]/)) { |
$label='C'.$label; |
$label='C'.$label; |
Line 328 sub plot_script {
|
Line 342 sub plot_script {
|
$Apache::functionplotresponse::counter++; |
$Apache::functionplotresponse::counter++; |
$label='C'.$Apache::functionplotresponse::counter; |
$label='C'.$Apache::functionplotresponse::counter; |
} |
} |
|
my $rc=0; |
|
my $gc=0; |
|
my $bc=0; |
|
if ($color) { |
|
my ($rh,$gh,$bh)=($color=~/(..)(..)(..)/); |
|
$rc=hex($rh); |
|
$gc=hex($gh); |
|
$bc=hex($bh); |
|
} |
if ($fixed) { |
if ($fixed) { |
return "document.ggbApplet_$id.evalCommand('$label=Function[$function,$xmin,$xmax]');\n". |
return "document.ggbApplet_$id.evalCommand('$label=Function[$function,$xmin,$xmax]');\n". |
($visible?'':"document.ggbApplet_$id.setLabelVisible('$label', false);\n"); |
($visible?'':"document.ggbApplet_$id.setLabelVisible('$label', false);\n"). |
|
($color?"document.ggbApplet_$id.setColor('$label',$rc,$gc,$bc);\n":''). |
|
($thickness?"document.ggbApplet_$id.setLineThickness('$label',$thickness);\n":''); |
} else { |
} else { |
return "document.ggbApplet_$id.evalCommand('y=$function')"; |
return "document.ggbApplet_$id.evalCommand('y=$function');\n"; |
} |
} |
} |
} |
|
|
Line 369 sub start_backgroundplot {
|
Line 394 sub start_backgroundplot {
|
my $result=''; |
my $result=''; |
my $internalid = $Apache::inputtags::part.'_'.$Apache::inputtags::response[-1]; |
my $internalid = $Apache::inputtags::part.'_'.$Apache::inputtags::response[-1]; |
my $function=&Apache::lonxml::get_param('function',$parstack,$safeeval); |
my $function=&Apache::lonxml::get_param('function',$parstack,$safeeval); |
|
my $xinitial=&Apache::lonxml::get_param('xinitial',$parstack,$safeeval); |
|
my $xfinal=&Apache::lonxml::get_param('xfinal',$parstack,$safeeval); |
my $label=&Apache::lonxml::get_param('label',$parstack,$safeeval); |
my $label=&Apache::lonxml::get_param('label',$parstack,$safeeval); |
|
my $color=&Apache::lonxml::get_param('color',$parstack,$safeeval); |
|
$color=~s/[^a-fA-F0-9]//gs; |
|
unless (length($color)==6) { $color=''; } |
my $fixed=(&Apache::lonxml::get_param('fixed',$parstack,$safeeval)=~/on|true|yes|1/i?1:0); |
my $fixed=(&Apache::lonxml::get_param('fixed',$parstack,$safeeval)=~/on|true|yes|1/i?1:0); |
|
|
unless ($function) { $function="0"; } |
unless ($function) { $function="0"; } |
if ($target eq 'web') { |
if ($target eq 'web') { |
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-3); |
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-3); |
$result.=&plot_script($internalid,$function,$fixed,$label,$xmin,$xmax); |
unless (defined($xinitial)) { $xinitial=$xmin; } |
|
unless (defined($xfinal)) { $xfinal=$xmax; } |
|
$result.=&plot_script($internalid,$function,$fixed,$label,$color,$xinitial,$xfinal); |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
$result=&Apache::edit::tag_start($target,$token,'Background Function Plot'). |
$result=&Apache::edit::tag_start($target,$token,'Background Function Plot'). |
&Apache::edit::text_arg('Function:','function', |
&Apache::edit::text_arg('Function:','function', |
$token,'16'). |
$token,'16'). |
|
&Apache::edit::text_arg('Initial x-value (optional):','xinitial', |
|
$token,'8'). |
|
&Apache::edit::text_arg('Final x-value (optional):','xfinal', |
|
$token,'8'). |
&Apache::edit::text_arg('Label on Plot:','label', |
&Apache::edit::text_arg('Label on Plot:','label', |
$token,'8'). |
$token,'8'). |
|
&Apache::edit::text_arg('Color (hex code):','color', |
|
$token,'8'). |
&Apache::edit::select_arg('Fixed location:','fixed', |
&Apache::edit::select_arg('Fixed location:','fixed', |
['yes','no'],$token). |
['yes','no'],$token). |
&Apache::edit::end_row(); |
&Apache::edit::end_row(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
$safeeval,'function','label','fixed'); |
$safeeval,'function','label','xinitial','xfinal','color','fixed'); |
if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); } |
if ($constructtag) { $result=&Apache::edit::rebuild_tag($token); } |
} |
} |
return $result; |
return $result; |
Line 797 sub start_functionplotresponse {
|
Line 835 sub start_functionplotresponse {
|
&Apache::edit::select_arg('y-axis visible:','yaxisvisible', |
&Apache::edit::select_arg('y-axis visible:','yaxisvisible', |
['yes','no'],$token).'<br />'. |
['yes','no'],$token).'<br />'. |
&Apache::edit::select_arg('Grid visible:','gridvisible', |
&Apache::edit::select_arg('Grid visible:','gridvisible', |
['yes','no'],$token). |
['yes','no'],$token).'<br />'. |
|
&Apache::edit::text_arg('Background plot(s) for answer (function:xmin:xmax,function:xmin:xmax,...):', |
|
'answerdisplay',$token,'50'); |
|
|
&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
&Apache::edit::end_row().&Apache::edit::start_spanning_row(); |
} elsif ($target eq 'modified') { |
} elsif ($target eq 'modified') { |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
my $constructtag=&Apache::edit::get_new_args($token,$parstack, |
$safeeval,'xlabel','xmin','xmax','ylabel','ymin','ymax', |
$safeeval,'xlabel','xmin','xmax','ylabel','ymin','ymax', |
'xaxisvisible','yaxisvisible','gridvisible'); |
'xaxisvisible','yaxisvisible','gridvisible','answerdisplay'); |
if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } |
if ($constructtag) { $result = &Apache::edit::rebuild_tag($token); } |
|
|
} elsif ($target eq 'meta') { |
} elsif ($target eq 'meta') { |
Line 1133 sub end_functionplotelements {
|
Line 1174 sub end_functionplotelements {
|
if ($target eq 'edit' ) { |
if ($target eq 'edit' ) { |
$result=&Apache::edit::end_table(); |
$result=&Apache::edit::end_table(); |
} elsif ($target eq 'web') { |
} elsif ($target eq 'web') { |
# Now is the time to render all of the stored splines |
|
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-2); |
my ($xmin,$xmax,$ymin,$ymax)=&boundaries($parstack,$safeeval,-2); |
|
|
|
# Are we in show answer mode? |
|
my $showanswer=&Apache::response::show_answer(); |
|
if ($showanswer) { |
|
# Render answerdisplay |
|
my $answerdisplay=&Apache::lonxml::get_param('answerdisplay',$parstack,$safeeval,-2); |
|
if ($answerdisplay=~/\S/s) { |
|
foreach my $plot (split(/\s*\,\s*/,$answerdisplay)) { |
|
my ($func,$xl,$xh)=split(/\s*\:\s*/,$plot); |
|
if ((!defined($xl)) || ($xl eq '')) { $xl=$xmin; } |
|
if ((!defined($xh)) || ($xh eq '')) { $xh=$xmax; } |
|
$result.=&plot_script($internalid,$func,1,'','00aa00',$xl,$xh,6); |
|
} |
|
} |
|
} |
|
|
|
# Now is the time to render all of the stored splines |
foreach my $label (keys(%Apache::functionplotresponse::splineorder)) { |
foreach my $label (keys(%Apache::functionplotresponse::splineorder)) { |
$result.=&generate_spline($internalid,$label,$xmin,$xmax,$ymin,$ymax); |
$result.=&generate_spline($internalid,$label,$xmin,$xmax,$ymin,$ymax); |
} |
} |
Line 1213 sub start_functionplotelements {
|
Line 1270 sub start_functionplotelements {
|
$result.=&start_init_script($internalid); |
$result.=&start_init_script($internalid); |
# put the axis commands inside |
# put the axis commands inside |
$result.=&axes_script($internalid,$xmin,$xmax,$ymin,$ymax,$xaxisvisible,$yaxisvisible,$gridvisible); |
$result.=&axes_script($internalid,$xmin,$xmax,$ymin,$ymax,$xaxisvisible,$yaxisvisible,$gridvisible); |
$result.=&axes_label($internalid,$xlabel,$ylabel); |
$result.=&axes_label($internalid,$xmin,$xmax,$ymin,$ymax,$xlabel,$ylabel); |
# init script is left open |
# init script is left open |
} |
} |
return $result; |
return $result; |