--- loncom/homework/functionplotresponse.pm 2010/10/04 18:28:53 1.3 +++ 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.3 2010/10/04 18:28:53 www Exp $ +# $Id: functionplotresponse.pm,v 1.5 2010/10/04 20:47:29 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,9 +33,14 @@ use Apache::lonlocal; use Apache::lonnet; BEGIN { - &Apache::lonxml::register('Apache::functionplotresponse',('functionplotresponse')); + &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=''; + my $internalid = $Apache::inputtags::part.'_'.$Apache::inputtags::response[-1]; + my $function=&Apache::lonxml::get_param('function',$parstack,$safeeval); + unless ($function) { $function="0"; } + if ($target eq 'web') { + $result.=&plot_script($internalid,$function); + } + return $result; +} + +sub end_backgroundplot { +} + sub end_init_script { return (<-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;