version 1.97, 2012/08/16 23:03:01
|
version 1.112, 2024/06/06 15:55:19
|
Line 49 BEGIN {
|
Line 49 BEGIN {
|
# Return a true value if HTML5 should be used. |
# Return a true value if HTML5 should be used. |
|
|
sub useHTML5 { |
sub useHTML5 { |
return 1; |
if ($env{'browser.type'} eq 'chrome') { |
|
if ($env{'browser.version'} >= 14) { |
|
return 1; |
|
} |
|
} elsif ($env{'browser.type'} eq 'safari') { |
|
if ($env{'browser.os'} eq 'mac') { |
|
my ($prefix,$version) = ($env{'browser.version'} =~ /^(\d*)(\d{3})\./); |
|
if ($version >= 536) { |
|
return 1; |
|
} |
|
} |
|
} elsif ($env{'browser.type'} eq 'mozilla') { |
|
if ($env{'browser.info'} =~ /^firefox\-(\d+)/) { |
|
my $firefox = $1; |
|
if ((($env{'browser.os'} eq 'mac') && ($firefox >= 20)) || |
|
(($env{'browser.os'} eq 'unix') && ($firefox >= 17)) || |
|
(($env{'browser.os'} eq 'win') && ($firefox >= 14))) { |
|
return 1; |
|
} |
|
} |
|
} elsif ($env{'browser.type'} eq 'explorer') { |
|
if (($env{'browser.os'} eq 'win') && ($env{'browser.version'} >= 10)) { |
|
return 1; |
|
} |
|
} elsif ($env{'browser.type'} eq 'opera') { |
|
if ($env{'browser.version'} >= 18) { |
|
return 1; |
|
} |
|
} |
|
return 0; |
} |
} |
|
|
|
# |
|
# HTML5 version does not understand "_" in IDs |
|
# |
|
sub appid { |
|
my ($id)=@_; |
|
$id=~s/\_/rid/gs; |
|
$id=~s/\W//gs; |
|
return $id; |
|
} |
|
|
|
# |
# Routines to start the applet (Java) or the HTML5/JavaScript |
# Routines to start the applet (Java) or the HTML5/JavaScript |
# |
# |
# There can be a number of applets on a page, each called ggbApplet_$id, |
# There can be a number of applets on a page, each called ggbApplet_$id, |
Line 88 sub geogebra_default_parameters {
|
Line 128 sub geogebra_default_parameters {
|
|
|
sub java_geogebra_startcode { |
sub java_geogebra_startcode { |
my ($id,$width,$height)=@_; |
my ($id,$width,$height)=@_; |
|
my $appid=&appid($id); |
$width=int(1.*$width); |
$width=int(1.*$width); |
$height=int(1.*$height); |
$height=int(1.*$height); |
unless ($width) { $width=700; } |
unless ($width) { $width=700; } |
unless ($height) { $height=400; } |
unless ($height) { $height=400; } |
return (<<ENDSTARTCODE); |
return (<<ENDSTARTCODE); |
<applet name="ggbApplet_$id" code="geogebra.GeoGebraApplet" archive="geogebra.jar" |
<applet name="ggbApplet$appid" code="geogebra.GeoGebraApplet" archive="geogebra.jar" |
codebase="/adm/geogebra/" width="$width" height="$height" MAYSCRIPT> |
codebase="/adm/geogebra/" width="$width" height="$height" MAYSCRIPT> |
<param name="java_arguments" value="-Xmx512m -Djnlp.packEnabled=true"/> |
<param name="java_arguments" value="-Xmx512m -Djnlp.packEnabled=true"/> |
ENDSTARTCODE |
ENDSTARTCODE |
Line 111 sub java_geogebra_code_param {
|
Line 152 sub java_geogebra_code_param {
|
|
|
sub html5_geogebra_startcode { |
sub html5_geogebra_startcode { |
my ($id,$width,$height)=@_; |
my ($id,$width,$height)=@_; |
|
my $appid=&appid($id); |
$width=int(1.*$width); |
$width=int(1.*$width); |
$height=int(1.*$height); |
$height=int(1.*$height); |
unless ($width) { $width=700; } |
unless ($width) { $width=700; } |
unless ($height) { $height=400; } |
unless ($height) { $height=400; } |
my $code=&geogebra_internal_program(); |
my $code=&geogebra_internal_program(); |
return (<<ENDSTARTCODE); |
return (<<ENDSTARTCODE); |
|
<div class="LC_left_float" style="margin:0; width:100%;"> |
<article class="geogebraweb" data-param-enableLabelDrags="false" data-param-enableShiftDragZoom="false" |
<article class="geogebraweb" data-param-enableLabelDrags="false" data-param-enableShiftDragZoom="false" |
data-param-width="$width" data-param-height="$height" data-param-id="ggbApplet_$id" |
data-param-width="$width" data-param-height="$height" data-param-id="ggbApplet$appid" |
data-param-ggbbase64="$code"></article> |
data-param-useBrowserForJS="true" data-param-ggbbase64="$code"></article> |
|
</div><div style="padding:0;clear:both;margin:0;border:0"></div> |
ENDSTARTCODE |
ENDSTARTCODE |
} |
} |
|
|
Line 136 sub geogebra_internal_program {
|
Line 180 sub geogebra_internal_program {
|
# |
# |
sub java_geogebra_default_parameters { |
sub java_geogebra_default_parameters { |
my ($id)=@_; |
my ($id)=@_; |
|
my $appid=&appid($id); |
return(<<ENDDEFAULTPARAMETERS); |
return(<<ENDDEFAULTPARAMETERS); |
<param name="image" value="/adm/lonIcons/lonanim.gif" /> |
<param name="image" value="/adm/lonIcons/lonanim.gif" /> |
<param name="boxborder" value="false" /> |
<param name="boxborder" value="false" /> |
<param name="centerimage" value="true" /> |
<param name="centerimage" value="true" /> |
<param name="cache_archive" value="geogebra.jar, geogebra_main.jar, geogebra_gui.jar, geogebra_cas.jar, geogebra_export.jar, geogebra_algos.jar, geogebra_javascript.jar, geogebra_properties.jar, jlatexmath.jar, jlm_cyrillic.jar, jlm_greek.jar" /> |
<param name="cache_archive" value="geogebra.jar, geogebra_main.jar, geogebra_gui.jar, geogebra_cas.jar, geogebra_export.jar, geogebra_algos.jar, geogebra_javascript.jar, geogebra_properties.jar, jlatexmath.jar, jlm_cyrillic.jar, jlm_greek.jar" /> |
<param name="cache_version" value="4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0,4.0.1.0" /> |
<param name="cache_version" value="4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0,4.4.3.0" /> |
<param name="framePossible" value="false" /> |
<param name="framePossible" value="false" /> |
|
|
<param name="showResetIcon" value="false" /> |
<param name="showResetIcon" value="false" /> |
Line 156 sub java_geogebra_default_parameters {
|
Line 201 sub java_geogebra_default_parameters {
|
<param name="enableShiftDragZoom" value="false" /> |
<param name="enableShiftDragZoom" value="false" /> |
<param name="allowRescaling" value="false" /> |
<param name="allowRescaling" value="false" /> |
<param name="enableLabelDrags" value="false" /> |
<param name="enableLabelDrags" value="false" /> |
<param name="ggbOnInitParam" value="applet_$id" /> |
<param name="ggbOnInitParam" value="ggbApplet$appid" /> |
ENDDEFAULTPARAMETERS |
ENDDEFAULTPARAMETERS |
} |
} |
|
|
Line 171 sub init_script {
|
Line 216 sub init_script {
|
if ($#Apache::functionplotresponse::callscripts>=0) { |
if ($#Apache::functionplotresponse::callscripts>=0) { |
my $script=''; |
my $script=''; |
foreach my $id (@Apache::functionplotresponse::callscripts) { |
foreach my $id (@Apache::functionplotresponse::callscripts) { |
$script.="if (param=='applet_$id') { loaded_$id=true; }\n"; |
$script.="if (param=='ggbApplet".&appid($id)."') { loaded_$id=true; }\n"; |
} |
} |
$script.="if (".join(' && ',map { "loaded_$_" } (@Apache::functionplotresponse::callscripts)). |
$script.="if (".join(' && ',map { "loaded_$_" } (@Apache::functionplotresponse::callscripts)). |
") { setTimeout('ggbInitAll()',200) }"; |
") { setTimeout('ggbInitAll()',200) }"; |
Line 179 sub init_script {
|
Line 224 sub init_script {
|
my $html5init=''; |
my $html5init=''; |
if (&useHTML5()) { |
if (&useHTML5()) { |
$html5init= |
$html5init= |
'<script type="text/javascript" language="javascript" src="/adm/geogebra/html5/web/test42/web/web.nocache.js"></script>'; |
'<script type="text/javascript" language="javascript" src="/adm/geogebra/web/web.nocache.js"></script>'; |
} |
} |
return (<<ENDGGBINIT); |
return (<<ENDGGBINIT); |
$html5init |
$html5init |
Line 206 ENDGGBINIT
|
Line 251 ENDGGBINIT
|
# |
# |
sub update_script { |
sub update_script { |
my ($id)=@_; |
my ($id)=@_; |
|
my $appid=&appid($id); |
return (<<ENDUPDATESCRIPT); |
return (<<ENDUPDATESCRIPT); |
<script type="text/javascript"> |
<script type="text/javascript"> |
// <![CDATA[ |
// <![CDATA[ |
function updatePointCoordinates_$id(coordinateName) { |
function updatePointCoordinates_$id(coordinateName) { |
var x = document.ggbApplet_$id.getXcoord(coordinateName); |
var x = document.ggbApplet$appid.getXcoord(coordinateName); |
var y = document.ggbApplet_$id.getYcoord(coordinateName); |
var y = document.ggbApplet$appid.getYcoord(coordinateName); |
document.lonhomework.elements["HWVAL_$id\_" + coordinateName + "_x"].value = x; |
document.lonhomework.elements["HWVAL_$id\_" + coordinateName + "_x"].value = x; |
document.lonhomework.elements["HWVAL_$id\_" + coordinateName + "_y"].value = y; |
document.lonhomework.elements["HWVAL_$id\_" + coordinateName + "_y"].value = y; |
} |
} |
Line 226 ENDUPDATESCRIPT
|
Line 272 ENDUPDATESCRIPT
|
|
|
sub update_register { |
sub update_register { |
my ($id,$variable)=@_; |
my ($id,$variable)=@_; |
return "document.ggbApplet_$id.registerObjectUpdateListener('$variable','updatePointCoordinates_$id');\n"; |
my $appid=&appid($id); |
|
return "document.ggbApplet$appid.registerObjectUpdateListener('$variable','updatePointCoordinates_$id');\n"; |
} |
} |
|
|
# |
# |
Line 234 sub update_register {
|
Line 281 sub update_register {
|
# |
# |
sub set_point_coordinate { |
sub set_point_coordinate { |
my ($id,$variable,$x,$y,$fixed)=@_; |
my ($id,$variable,$x,$y,$fixed)=@_; |
|
my $appid=&appid($id); |
my $mult=($fixed?'a*':''); |
my $mult=($fixed?'a*':''); |
# Get rid of wild exponents, make sure it's a number |
# Get rid of wild exponents, make sure it's a number |
$x=1.*$x; |
$x=1.*$x; |
Line 244 sub set_point_coordinate {
|
Line 292 sub set_point_coordinate {
|
$y=~s/[e|E]/\*10\^/; |
$y=~s/[e|E]/\*10\^/; |
$y=~s/\+//; |
$y=~s/\+//; |
return (<<ENDSETVARIABLE); |
return (<<ENDSETVARIABLE); |
document.ggbApplet_$id.evalCommand("a=1"); |
document.ggbApplet$appid.evalCommand("a=1"); |
document.ggbApplet_$id.evalCommand("$variable=$mult($x,$y)"); |
document.ggbApplet$appid.evalCommand("$variable=$mult($x,$y)"); |
document.ggbApplet_$id.setLabelVisible("$variable",false); |
document.ggbApplet$appid.setLabelVisible("$variable",false); |
ENDSETVARIABLE |
ENDSETVARIABLE |
} |
} |
|
|
Line 255 ENDSETVARIABLE
|
Line 303 ENDSETVARIABLE
|
# |
# |
sub set_slope_coordinate { |
sub set_slope_coordinate { |
my ($id,$variable,$xrel,$yrel,$xmin,$xmax,$ymin,$ymax,$pointname,$fixed)=@_; |
my ($id,$variable,$xrel,$yrel,$xmin,$xmax,$ymin,$ymax,$pointname,$fixed)=@_; |
|
my $appid=&appid($id); |
my $xvariable=$variable.'x'; |
my $xvariable=$variable.'x'; |
my $yvariable=$variable.'y'; |
my $yvariable=$variable.'y'; |
my $domain=$xmax-$xmin; |
my $domain=$xmax-$xmin; |
Line 263 sub set_slope_coordinate {
|
Line 312 sub set_slope_coordinate {
|
my $yinterval=$range/200.; |
my $yinterval=$range/200.; |
my $mult=($fixed?'a*':''); |
my $mult=($fixed?'a*':''); |
return (<<ENDSETSVARIABLE); |
return (<<ENDSETSVARIABLE); |
document.ggbApplet_$id.evalCommand("a=1"); |
document.ggbApplet$appid.evalCommand("a=1"); |
document.ggbApplet_$id.evalCommand("$xvariable=Slider[$xinterval,$domain,$xinterval]"); |
document.ggbApplet$appid.evalCommand("$xvariable=Slider[$xinterval,$domain,$xinterval]"); |
document.ggbApplet_$id.setVisible("$xvariable", false); |
document.ggbApplet$appid.setVisible("$xvariable", false); |
document.ggbApplet_$id.evalCommand("$xvariable=$xrel"); |
document.ggbApplet$appid.evalCommand("$xvariable=$xrel"); |
document.ggbApplet_$id.evalCommand("$yvariable=Slider[-$range,$range,$yinterval]"); |
document.ggbApplet$appid.evalCommand("$yvariable=Slider[-$range,$range,$yinterval]"); |
document.ggbApplet_$id.setVisible("$yvariable", false); |
document.ggbApplet$appid.setVisible("$yvariable", false); |
document.ggbApplet_$id.evalCommand("$yvariable=$yrel"); |
document.ggbApplet$appid.evalCommand("$yvariable=$yrel"); |
document.ggbApplet_$id.evalCommand("$variable=$mult($xvariable+x($pointname),$yvariable+y($pointname))"); |
document.ggbApplet$appid.evalCommand("$variable=$mult($xvariable+x($pointname),$yvariable+y($pointname))"); |
document.ggbApplet_$id.setLabelVisible("$variable", false); |
document.ggbApplet$appid.setLabelVisible("$variable", false); |
ENDSETSVARIABLE |
ENDSETSVARIABLE |
} |
} |
|
|
Line 367 ENDSTARTINIT
|
Line 416 ENDSTARTINIT
|
|
|
sub axes_script { |
sub axes_script { |
my ($id,$xmin,$xmax,$ymin,$ymax,$xvisible,$yvisible,$gvisible)=@_; |
my ($id,$xmin,$xmax,$ymin,$ymax,$xvisible,$yvisible,$gvisible)=@_; |
|
my $appid=&appid($id); |
return (<<ENDAXESSCRIPT); |
return (<<ENDAXESSCRIPT); |
// changes (xmin, xmax, ymin, ymax) |
// changes (xmin, xmax, ymin, ymax) |
document.ggbApplet_$id.setCoordSystem($xmin,$xmax,$ymin,$ymax); |
document.ggbApplet$appid.setCoordSystem($xmin,$xmax,$ymin,$ymax); |
|
|
// makes the (x,y) axis (in)visible |
// makes the (x,y) axis (in)visible |
document.ggbApplet_$id.setAxesVisible($xvisible,$yvisible); |
document.ggbApplet$appid.setAxesVisible($xvisible,$yvisible); |
// makes the grid (in)visible |
// makes the grid (in)visible |
document.ggbApplet_$id.setGridVisible($gvisible); |
document.ggbApplet$appid.setGridVisible($gvisible); |
ENDAXESSCRIPT |
ENDAXESSCRIPT |
} |
} |
|
|
sub axes_label { |
sub axes_label { |
my ($id,$xmin,$xmax,$ymin,$ymax,$xlabel,$ylabel)=@_; |
my ($id,$xmin,$xmax,$ymin,$ymax,$xlabel,$ylabel)=@_; |
|
my $appid=&appid($id); |
unless ($xlabel || $ylabel) { return ''; } |
unless ($xlabel || $ylabel) { return ''; } |
my $return='document.ggbApplet_'.$id.'.evalCommand("topRight=Corner[3]");'; |
my $return='document.ggbApplet'.$appid.'.evalCommand("topRight=Corner[3]");'; |
if ($xlabel) { |
if ($xlabel) { |
if (($ymin<0) && ($ymax>0)) { |
if (($ymin<0) && ($ymax>0)) { |
$return.=(<<ENDXAXISLABELSCRIPT); |
$return.=(<<ENDXAXISLABELSCRIPT); |
document.ggbApplet_$id.evalCommand("Xlabel=(x(topRight)-AxisStepX[],AxisStepY[]/6)"); |
document.ggbApplet$appid.evalCommand("Xlabel=(x(topRight)-AxisStepX[],AxisStepY[]/6)"); |
document.ggbApplet_$id.setVisible("Xlabel",false); |
document.ggbApplet$appid.setVisible("Xlabel",false); |
document.ggbApplet_$id.evalCommand("Text[\\"$xlabel\\", Xlabel]"); |
document.ggbApplet$appid.evalCommand("Text[\\"$xlabel\\", Xlabel]"); |
ENDXAXISLABELSCRIPT |
ENDXAXISLABELSCRIPT |
} else { |
} else { |
$return.=(<<ENDXOFFAXISLABEL); |
$return.=(<<ENDXOFFAXISLABEL); |
document.ggbApplet_$id.evalCommand("LowerRight=Corner[2]"); |
document.ggbApplet$appid.evalCommand("LowerRight=Corner[2]"); |
document.ggbApplet_$id.evalCommand("Text[\\"$xlabel\\", (x(LowerRight) - AxisStepX[], y(LowerRight) + AxisStepY[] / 2)]"); |
document.ggbApplet$appid.evalCommand("Text[\\"$xlabel\\", (x(LowerRight) - AxisStepX[], y(LowerRight) + AxisStepY[] / 2)]"); |
ENDXOFFAXISLABEL |
ENDXOFFAXISLABEL |
} |
} |
} |
} |
if ($ylabel) { |
if ($ylabel) { |
if (($xmin<0) && ($xmax>0)) { |
if (($xmin<0) && ($xmax>0)) { |
$return.=(<<ENDYAXISLABELSCRIPT); |
$return.=(<<ENDYAXISLABELSCRIPT); |
document.ggbApplet_$id.evalCommand("Ylabel=(AxisStepX[]/6,y(topRight)-AxisStepY[]/3)"); |
document.ggbApplet$appid.evalCommand("Ylabel=(AxisStepX[]/6,y(topRight)-AxisStepY[]/3)"); |
document.ggbApplet_$id.setVisible("Ylabel",false); |
document.ggbApplet$appid.setVisible("Ylabel",false); |
document.ggbApplet_$id.evalCommand("Text[\\"$ylabel\\", Ylabel]"); |
document.ggbApplet$appid.evalCommand("Text[\\"$ylabel\\", Ylabel]"); |
ENDYAXISLABELSCRIPT |
ENDYAXISLABELSCRIPT |
} else { |
} else { |
$return.=(<<ENDYOFFAXISLABEL); |
$return.=(<<ENDYOFFAXISLABEL); |
document.ggbApplet_$id.evalCommand("UpperLeft=Corner[4]"); |
document.ggbApplet$appid.evalCommand("UpperLeft=Corner[4]"); |
document.ggbApplet_$id.evalCommand("Text[\\"$ylabel\\", (x(UpperLeft) + AxisStepX[] / 5, y(UpperLeft) - AxisStepY[] / 1.8)]"); |
document.ggbApplet$appid.evalCommand("Text[\\"$ylabel\\", (x(UpperLeft) + AxisStepX[] / 5, y(UpperLeft) - AxisStepY[] / 1.8)]"); |
ENDYOFFAXISLABEL |
ENDYOFFAXISLABEL |
} |
} |
} |
} |
Line 419 ENDYOFFAXISLABEL
|
Line 470 ENDYOFFAXISLABEL
|
|
|
sub plot_script { |
sub plot_script { |
my ($id,$function,$fixed,$label,$color,$xmin,$xmax,$thickness)=@_; |
my ($id,$function,$fixed,$label,$color,$xmin,$xmax,$thickness)=@_; |
|
my $appid=&appid($id); |
$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 440 sub plot_script {
|
Line 492 sub plot_script {
|
$bc=hex($bh); |
$bc=hex($bh); |
} |
} |
if ($fixed) { |
if ($fixed) { |
return "document.ggbApplet_$id.evalCommand('$label=Function[$function,$xmin,$xmax]');\n". |
return "document.ggbApplet$appid.evalCommand('$label=Function[$function,$xmin,$xmax]');\n". |
($visible?'':"document.ggbApplet_$id.setLabelVisible('$label', false);\n"). |
($visible?'':"document.ggbApplet$appid.setLabelVisible('$label', false);\n"). |
($color?"document.ggbApplet_$id.setColor('$label',$rc,$gc,$bc);\n":''). |
($color?"document.ggbApplet$appid.setColor('$label',$rc,$gc,$bc);\n":''). |
($thickness?"document.ggbApplet_$id.setLineThickness('$label',$thickness);\n":''); |
($thickness?"document.ggbApplet$appid.setLineThickness('$label',$thickness);\n":''); |
} else { |
} else { |
return "document.ggbApplet_$id.evalCommand('y=$function');\n"; |
return "document.ggbApplet$appid.evalCommand('y=$function');\n"; |
} |
} |
} |
} |
|
|
Line 455 sub plot_script {
|
Line 507 sub plot_script {
|
|
|
sub plotobject_script { |
sub plotobject_script { |
my ($id,$label,$x,$y)=@_; |
my ($id,$label,$x,$y)=@_; |
|
my $appid=&appid($id); |
unless ($label) { |
unless ($label) { |
$Apache::functionplotresponse::counter++; |
$Apache::functionplotresponse::counter++; |
$label='O'.$Apache::functionplotresponse::counter; |
$label='O'.$Apache::functionplotresponse::counter; |
} |
} |
&generate_input_field($id,$label,$x,$y); |
&generate_input_field($id,$label,$x,$y); |
return "document.ggbApplet_$id.evalCommand('a=1');\n". |
return "document.ggbApplet$appid.evalCommand('a=1');\n". |
"document.ggbApplet_$id.setVisible('a', false);\n". |
"document.ggbApplet$appid.setVisible('a', false);\n". |
"document.ggbApplet_$id.setLabelVisible('a', false);\n". |
"document.ggbApplet$appid.setLabelVisible('a', false);\n". |
"document.ggbApplet_$id.evalCommand('$label=a*($x,$y)');\n". |
"document.ggbApplet$appid.evalCommand('$label=a*($x,$y)');\n". |
"document.ggbApplet_$id.setVisible('$label', true);\n". |
"document.ggbApplet$appid.setVisible('$label', true);\n". |
"document.ggbApplet_$id.setLabelVisible('$label', true);\n"; |
"document.ggbApplet$appid.setLabelVisible('$label', true);\n"; |
} |
} |
|
|
# |
# |
Line 474 sub plotobject_script {
|
Line 527 sub plotobject_script {
|
|
|
sub plotvector_script { |
sub plotvector_script { |
my ($id,$label,$xs,$ys,$xe,$ye,$xmin,$xmax,$fixed)=@_; |
my ($id,$label,$xs,$ys,$xe,$ye,$xmin,$xmax,$fixed)=@_; |
|
my $appid=&appid($id); |
unless ($label) { |
unless ($label) { |
$Apache::functionplotresponse::counter++; |
$Apache::functionplotresponse::counter++; |
$label='V'.$Apache::functionplotresponse::counter; |
$label='V'.$Apache::functionplotresponse::counter; |
Line 487 sub plotvector_script {
|
Line 541 sub plotvector_script {
|
&new_point_coordinate($id,$startlabel,$xs,$ys,$fixed). |
&new_point_coordinate($id,$startlabel,$xs,$ys,$fixed). |
&new_point_coordinate($id,$endlabel,$xe,$ye,$fixed). |
&new_point_coordinate($id,$endlabel,$xe,$ye,$fixed). |
(<<ENDVECTOR); |
(<<ENDVECTOR); |
document.ggbApplet_$id.evalCommand("$label=Vector[$startlabel,$endlabel]"); |
document.ggbApplet$appid.evalCommand("$label=Vector[$startlabel,$endlabel]"); |
document.ggbApplet_$id.setLabelVisible("$label",true); |
document.ggbApplet$appid.setLabelVisible("$label",true); |
document.ggbApplet_$id.setLineThickness("$label",8); |
document.ggbApplet$appid.setLineThickness("$label",8); |
document.ggbApplet_$id.evalCommand("$pointlabel=($pointx,y($startlabel))"); |
document.ggbApplet$appid.evalCommand("$pointlabel=($pointx,y($startlabel))"); |
document.ggbApplet_$id.evalCommand("$anglelabel=Angle[$pointlabel,$startlabel,$endlabel]"); |
document.ggbApplet$appid.evalCommand("$anglelabel=Angle[$pointlabel,$startlabel,$endlabel]"); |
document.ggbApplet_$id.setLabelVisible("$anglelabel",true); |
document.ggbApplet$appid.setLabelVisible("$anglelabel",true); |
document.ggbApplet_$id.setLabelStyle("$anglelabel",VALUE=2); |
document.ggbApplet$appid.setLabelStyle("$anglelabel",VALUE=2); |
ENDVECTOR |
ENDVECTOR |
} |
} |
|
|
Line 504 ENDVECTOR
|
Line 558 ENDVECTOR
|
|
|
sub answer_spline_script { |
sub answer_spline_script { |
my ($id,@points)=@_; |
my ($id,@points)=@_; |
|
my $appid=&appid($id); |
my $order=int(($#points+1)/4); |
my $order=int(($#points+1)/4); |
if ($order<2) { $order=2; } |
if ($order<2) { $order=2; } |
if ($order>8) { $order=8; } |
if ($order>8) { $order=8; } |
$Apache::functionplotresponse::counter++; |
$Apache::functionplotresponse::counter++; |
my $label='CSpline'.$Apache::functionplotresponse::counter; |
my $label='CSpline'.$Apache::functionplotresponse::counter; |
my $output='document.ggbApplet_'.$id.'.evalCommand("'.$label.'=Spline'.$order.'['; |
my $output='document.ggbApplet'.$appid.'.evalCommand("'.$label.'=Spline'.$order.'['; |
for (my $i=0;$i<=$#points;$i+=4) { |
for (my $i=0;$i<=$#points;$i+=4) { |
$output.="($points[$i],$points[$i+1]),($points[$i+2],$points[$i+3]),"; |
$output.="($points[$i],$points[$i+1]),($points[$i+2],$points[$i+3]),"; |
} |
} |
$output=~s/\,$//; |
$output=~s/\,$//; |
$output.=']");'."\n"; |
$output.=']");'."\n"; |
for (my $i=2; $i<2*$order; $i+=2) { |
for (my $i=2; $i<2*$order; $i+=2) { |
$output.='document.ggbApplet_'.$id.'.setColor("'.$label.'_'.($i>=10?'{':'').$i.($i>=10?'}':'').'",0,170,0);'."\n"; |
$output.='document.ggbApplet'.$appid.'.setColor("'.$label.'_'.($i>=10?'{':'').$i.($i>=10?'}':'').'",0,170,0);'."\n"; |
} |
} |
for (my $i=1; $i<2*$order; $i+=2) { |
for (my $i=1; $i<2*$order; $i+=2) { |
$output.='document.ggbApplet_'.$id.'.setVisible("'.$label.'_'.($i>=10?'{':'').$i.($i>=10?'}':'').'",false);'."\n"; |
$output.='document.ggbApplet'.$appid.'.setVisible("'.$label.'_'.($i>=10?'{':'').$i.($i>=10?'}':'').'",false);'."\n"; |
} |
} |
|
|
return $output; |
return $output; |
Line 531 sub answer_spline_script {
|
Line 586 sub answer_spline_script {
|
|
|
sub generate_spline { |
sub generate_spline { |
my ($id,$label,$xmin,$xmax,$ymin,$ymax,$fixed)=@_; |
my ($id,$label,$xmin,$xmax,$ymin,$ymax,$fixed)=@_; |
|
my $appid=&appid($id); |
my $result=''; |
my $result=''; |
my $order=$Apache::functionplotresponse::splineorder{$label}; |
my $order=$Apache::functionplotresponse::splineorder{$label}; |
my $x=$Apache::functionplotresponse::splineinitx{$label}; |
my $x=$Apache::functionplotresponse::splineinitx{$label}; |
Line 547 sub generate_spline {
|
Line 603 sub generate_spline {
|
$x+=$sx/(2.*($order-1)); |
$x+=$sx/(2.*($order-1)); |
push(@coords,$label.'S'.$i); |
push(@coords,$label.'S'.$i); |
} |
} |
$result.='document.ggbApplet_'.$id.'.evalCommand("Spline'.$order.'['.join(',',@coords).']");'."\n"; |
$result.='document.ggbApplet'.$appid.'.evalCommand("Spline'.$order.'['.join(',',@coords).']");'."\n"; |
return $result; |
return $result; |
} |
} |
|
|
Line 666 sub start_drawvectorsum {
|
Line 722 sub start_drawvectorsum {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my $result=''; |
my $result=''; |
my $internalid = $Apache::inputtags::part.'_'.$Apache::inputtags::response[-1]; |
my $internalid = $Apache::inputtags::part.'_'.$Apache::inputtags::response[-1]; |
|
my $internalappid=&appid($internalid); |
my $tailx=&Apache::lonxml::get_param('tailx',$parstack,$safeeval); |
my $tailx=&Apache::lonxml::get_param('tailx',$parstack,$safeeval); |
my $taily=&Apache::lonxml::get_param('taily',$parstack,$safeeval); |
my $taily=&Apache::lonxml::get_param('taily',$parstack,$safeeval); |
my $showvalue=&Apache::lonxml::get_param('showvalue',$parstack,$safeeval); |
my $showvalue=&Apache::lonxml::get_param('showvalue',$parstack,$safeeval); |
Line 694 sub start_drawvectorsum {
|
Line 751 sub start_drawvectorsum {
|
my $vectorx=$thisvector.'X'; |
my $vectorx=$thisvector.'X'; |
my $vectory=$thisvector.'Y'; |
my $vectory=$thisvector.'Y'; |
$result.=(<<ENDADDVEC); |
$result.=(<<ENDADDVEC); |
document.ggbApplet_$internalid.evalCommand("$vectorx=x($thisvector)"); |
document.ggbApplet$internalappid.evalCommand("$vectorx=x($thisvector)"); |
document.ggbApplet_$internalid.evalCommand("$vectory=y($thisvector)"); |
document.ggbApplet$internalappid.evalCommand("$vectory=y($thisvector)"); |
document.ggbApplet_$internalid.evalCommand("Include$thisvector$label=Checkbox[]"); |
document.ggbApplet$internalappid.evalCommand("Include$thisvector$label=Checkbox[]"); |
ENDADDVEC |
ENDADDVEC |
push(@sumx,"If[Include$thisvector$label,$vectorx,0]"); |
push(@sumx,"If[Include$thisvector$label,$vectorx,0]"); |
push(@sumy,"If[Include$thisvector$label,$vectory,0]"); |
push(@sumy,"If[Include$thisvector$label,$vectory,0]"); |
} |
} |
$result.="document.ggbApplet_$internalid.evalCommand(".'"'."xTot$label=".join('+',@sumx).'");'."\n"; |
$result.="document.ggbApplet$internalappid.evalCommand(".'"'."xTot$label=".join('+',@sumx).'");'."\n"; |
$result.="document.ggbApplet_$internalid.evalCommand(".'"'."yTot$label=".join('+',@sumy).'");'."\n"; |
$result.="document.ggbApplet$internalappid.evalCommand(".'"'."yTot$label=".join('+',@sumy).'");'."\n"; |
my $show=0; |
my $show=0; |
if ($showvalue=~/yes/i) { |
if ($showvalue=~/yes/i) { |
$show=1; |
$show=1; |
} |
} |
$result.=(<<ENDMAKEVECTOR); |
$result.=(<<ENDMAKEVECTOR); |
document.ggbApplet_$internalid.evalCommand("$label=Vector[($tailx,$taily),($tailx+xTot$label,$taily+yTot$label)]"); |
document.ggbApplet$internalappid.evalCommand("$label=Vector[($tailx,$taily),($tailx+xTot$label,$taily+yTot$label)]"); |
document.ggbApplet_$internalid.setLabelVisible("$label",true); |
document.ggbApplet$internalappid.setLabelVisible("$label",true); |
document.ggbApplet_$internalid.setLineThickness("$label",8); |
document.ggbApplet$internalappid.setLineThickness("$label",8); |
document.ggbApplet_$internalid.setColor("$label",255,0,0); |
document.ggbApplet$internalappid.setColor("$label",255,0,0); |
document.ggbApplet_$internalid.setLabelStyle("$label",VALUE=$show); |
document.ggbApplet$internalappid.setLabelStyle("$label",VALUE=$show); |
ENDMAKEVECTOR |
ENDMAKEVECTOR |
} |
} |
} elsif ($target eq 'edit') { |
} elsif ($target eq 'edit') { |
Line 781 sub start_backgroundplot {
|
Line 838 sub start_backgroundplot {
|
&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', |
&Apache::edit::text_arg('Color (hex code):','color', |
$token,'8'). |
$token,'8', 'colorchooser'). |
&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(); |
Line 858 sub start_functionplotrule {
|
Line 915 sub start_functionplotrule {
|
$result=&Apache::edit::tag_start($target,$token,'Function Plot Graph Rule'). |
$result=&Apache::edit::tag_start($target,$token,'Function Plot Graph Rule'). |
&Apache::edit::text_arg('Index/Name:','index', |
&Apache::edit::text_arg('Index/Name:','index', |
$token,'10').' '. |
$token,'10').' '. |
&Apache::edit::select_arg(&mt('Function:'),'derivativeorder', |
&Apache::edit::select_arg('Function:','derivativeorder', |
[['0','Function itself'], |
[['0','Function itself'], |
['1','First derivative'], |
['1','First derivative'], |
['2','Second derivative'], |
['2','Second derivative'], |
Line 1402 sub start_functionplotresponse {
|
Line 1459 sub start_functionplotresponse {
|
my $ylabel=&Apache::lonxml::get_param('ylabel',$parstack,$safeeval); |
my $ylabel=&Apache::lonxml::get_param('ylabel',$parstack,$safeeval); |
if ($target eq 'edit') { |
if ($target eq 'edit') { |
$result.=&Apache::edit::start_table($token) |
$result.=&Apache::edit::start_table($token) |
.'<tr><td><span class="LC_nobreak">'.&mt('Function Plot Question').'</span></td>' |
.'<tr><td><span class="LC_nobreak">'.&Apache::loncommon::insert_folding_button().&mt('Function Plot Question').'</span></td>' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.&Apache::edit::deletelist($target,$token).' ' |
.&Apache::edit::deletelist($target,$token).' ' |
.&Apache::edit::insertlist($target,$token).' ' |
.&Apache::edit::insertlist($target,$token).' ' |
Line 1456 sub start_functionplotresponse {
|
Line 1513 sub start_functionplotresponse {
|
$env{'form.counter'},$Apache::lonxml::curdepth); |
$env{'form.counter'},$Apache::lonxml::curdepth); |
&Apache::lonxml::add_script_result( |
&Apache::lonxml::add_script_result( |
&Apache::loncommon::modal_adhoc_window($function_name,700,500, |
&Apache::loncommon::modal_adhoc_window($function_name,700,500, |
'<pre>'.$Apache::functionplotresponse::ruleslog.'</pre>', |
'<pre style="background-color:#ffffff;">'.$Apache::functionplotresponse::ruleslog.'</pre>', |
&mt('Rules Log'))."<br />"); |
&mt('Rules Log'))."<br />"); |
} |
} |
return $result; |
return $result; |
Line 1989 sub start_functionplotruleset {
|
Line 2046 sub start_functionplotruleset {
|
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; |
if ($target eq 'edit') { |
if ($target eq 'edit') { |
return &Apache::edit::start_table($token). |
return &Apache::edit::start_table($token). |
'<tr><td><span class="LC_nobreak">'.&mt('Function Plot Rule Set').'</span></td>' |
'<tr><td><span class="LC_nobreak">'.&Apache::loncommon::insert_folding_button().&mt('Function Plot Rule Set').'</span></td>' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.&Apache::edit::deletelist($target,$token).' '. |
.&Apache::edit::deletelist($target,$token).' '. |
&Apache::edit::insertlist($target,$token).' ' |
&Apache::edit::insertlist($target,$token).' ' |
Line 2182 sub start_functionplotelements {
|
Line 2239 sub start_functionplotelements {
|
|
|
if ($target eq 'edit') { |
if ($target eq 'edit') { |
return &Apache::edit::start_table($token). |
return &Apache::edit::start_table($token). |
'<tr><td><span class="LC_nobreak">'.&mt('Function Plot Elements').'</span></td>' |
'<tr><td><span class="LC_nobreak">'.&Apache::loncommon::insert_folding_button() |
|
.&mt('Function Plot Elements').'</span></td>' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.'<td><span class="LC_nobreak">'.&mt('Delete?').' ' |
.&Apache::edit::deletelist($target,$token).' '. |
.&Apache::edit::deletelist($target,$token).' '. |
&Apache::edit::insertlist($target,$token).' ' |
&Apache::edit::insertlist($target,$token).' ' |