--- loncom/homework/functionplotresponse.pm 2010/10/04 19:26:39 1.4 +++ loncom/homework/functionplotresponse.pm 2010/10/04 20:47:29 1.5 @@ -1,7 +1,7 @@ # LearningOnline Network with CAPA # option list style responses # -# $Id: functionplotresponse.pm,v 1.4 2010/10/04 19:26:39 www Exp $ +# $Id: functionplotresponse.pm,v 1.5 2010/10/04 20:47:29 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,11 @@ BEGIN { &Apache::lonxml::register('Apache::functionplotresponse',('functionplotresponse','backgroundplot')); } +# +# There can be a number of applets on a page, each called ggbApplet_$id, +# where $id is the "_"-concatenated part and responseid +# + sub geogebra_startcode { my ($id)=@_; return (<\n"; } +# +# This is the internal GeoGebra bytecode which defines the spline functions +# sub geogebra_spline_program { return (< ENDSPLINEPROGRAM } +# +# The standard set of parameters inside +# sub geogebra_default_parameters { my ($id)=@_; return(< +# Each applet on the page will call function ggbOnInit when it is done loading +# This function in turn will call the respective function registered by start_init_script +# Which one of the registered functions is called is determined by ggbOnInitParam, which GeoGebra passes to ggbOnInit +# + sub init_script { if ($Apache::functionplotresponse::callscripts) { return (< +// + +ENDUPDATESCRIPT +} + +# +# Register the above update-handler for a variable +# + +sub update_register { + my ($id,$variable)=@_; + return "document.ggbApplet_$id.registerObjectUpdateListener('$variable','updatePointCoordinates_$id')"; +} + +# +# This registers the init-function call for ggbOnInit, which LON-CAPA will place at +# It then starts the right headers +# sub start_init_script { my ($id)=@_; +# Add a line to ggbOnInit-function which calls the right function based on parameter passed from GeoGebra $Apache::functionplotresponse::callscripts.="if (param=='applet_$id') { ggbInit_$id(); }\n"; +# ... and open this function return (< // +# sub start_backgroundplot { my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_; my $result=''; @@ -165,10 +227,14 @@ sub start_functionplotresponse { my $yaxisvisible=(&Apache::lonxml::get_param('yaxisvisible',$parstack,$safeeval)=~/on|true|1/i?'true':'false'); my $gridvisible=(&Apache::lonxml::get_param('gridvisible',$parstack,$safeeval)=~/on|true|1/i?'true':'false'); - if ($target eq 'web') { +# paste in the update routine to receive stuff back from the applet + $result.=&update_script($internalid); +# start the initscript for this applet $result.=&start_init_script($internalid); +# put the axis commands inside $result.=&axes_script($internalid,$xmin,$xmax,$ymin,$ymax,$xaxisvisible,$yaxisvisible,$gridvisible); +# init script is left open } return $result; } @@ -182,10 +248,15 @@ sub end_functionplotresponse { # if ($target eq 'edit') { $result=&Apache::edit::end_table(); } if ($target eq 'web') { +# close the init script $result.=&end_init_script(); +# actually start the -tag $result.=&geogebra_startcode($internalid); +# load the spline bytecode $result.=&geogebra_spline_program(); +# set default parameters $result.=&geogebra_default_parameters($internalid); +# close the -tag $result.=&geogebra_endcode(); } return $result;