--- loncom/interface/lonhelper.pm 2003/04/11 17:21:18 1.6 +++ loncom/interface/lonhelper.pm 2003/04/11 17:45:37 1.7 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # .helper XML handler to implement the LON-CAPA helper # -# $Id: lonhelper.pm,v 1.6 2003/04/11 17:21:18 bowersj2 Exp $ +# $Id: lonhelper.pm,v 1.7 2003/04/11 17:45:37 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -62,8 +62,8 @@ of the helper itself, such as "Parameter =head2 State tags State tags are required to have an attribute "name", which is the symbolic -name of the state and will not be directly seen by the user. The wizard is -required to have one state named "START", which is the state the wizard +name of the state and will not be directly seen by the user. The helper is +required to have one state named "START", which is the state the helper will start with. By convention, this state should clearly describe what the helper will do for the user, and may also include the first information entry the user needs to do for the helper. @@ -95,12 +95,26 @@ use Apache::Constants qw(:common); use Apache::File; use Apache::lonxml; +# Register all the tags with the helper, so the helper can +# push and pop them + +my @helperTags; + +sub register { + my ($namespace, @tags) = @_; + + for my $tag (@tags) { + push @helperTags, [$namespace, $tag]; + } +} + BEGIN { - &Apache::lonxml::register('Apache::lonhelper', - ('helper', 'state')); + Apache::lonxml::register('Apache::lonhelper', + ('helper')); + register('Apache::lonhelper', ('state')); } -# Since all wizards are only three levels deep (wizard tag, state tag, +# Since all helpers are only three levels deep (helper tag, state tag, # substate type), it's easier and more readble to explicitly track # those three things directly, rather then futz with the tag stack # every time. @@ -145,7 +159,7 @@ sub handler { &Apache::lonxml::xmlparse($r, 'helper', $file); $r->print($helper->display()); - return OK; + return OK; } sub start_helper { @@ -154,6 +168,10 @@ sub start_helper { if ($target ne 'helper') { return ''; } + + for my $tagList (@helperTags) { + Apache::lonxml::register($tagList->[0], $tagList->[1]); + } $helper = Apache::lonhelper::helper->new($token->[2]{'title'}); return ''; @@ -165,7 +183,11 @@ sub end_helper { if ($target ne 'helper') { return ''; } - + + for my $tagList (@helperTags) { + Apache::lonxml::deregister($tagList->[0], $tagList->[1]); + } + return ''; } @@ -546,8 +568,8 @@ the helper variables, like this: =cut BEGIN { - &Apache::lonxml::register('Apache::lonhelper::element', - ('nextstate')); + &Apache::lonhelper::register('Apache::lonhelper::element', + ('nextstate')); } # Because we use the param hash, this is often a sufficent @@ -637,7 +659,7 @@ transition directly to the state in the This will display the HTML message and transition to the if -given. The HTML will be directly inserted into the wizard, so if you don't +given. The HTML will be directly inserted into the helper, so if you don't want text to run together, you'll need to manually wrap the in

tags, or whatever is appropriate for your HTML. @@ -657,7 +679,7 @@ no strict; use strict; BEGIN { - &Apache::lonxml::register('Apache::lonhelper::message', + &Apache::lonhelper::register('Apache::lonhelper::message', ('message', 'message_text')); } @@ -781,7 +803,7 @@ no strict; use strict; BEGIN { - &Apache::lonxml::register('Apache::lonhelper::choices', + &Apache::lonhelper::register('Apache::lonhelper::choices', ('choice', 'choices')); } @@ -960,7 +982,7 @@ use strict; use Time::localtime; BEGIN { - &Apache::lonxml::register('Apache::lonhelper::date', + &Apache::lonhelper::register('Apache::lonhelper::date', ('date')); } @@ -1182,7 +1204,7 @@ no strict; use strict; BEGIN { - &Apache::lonxml::register('Apache::lonhelper::resource', + &Apache::lonhelper::register('Apache::lonhelper::resource', ('resource', 'filterfunc', 'choicefunc', 'valuefunc')); } @@ -1363,7 +1385,7 @@ use strict; BEGIN { - &Apache::lonxml::register('Apache::lonhelper::student', + &Apache::lonhelper::register('Apache::lonhelper::student', ('student')); } @@ -1527,8 +1549,8 @@ no strict; use strict; BEGIN { - &Apache::lonxml::register('Apache::lonhelper::files', - ('files', 'filechoice', 'filefilter')); + &Apache::lonhelper::register('Apache::lonhelper::files', + ('files', 'filechoice', 'filefilter')); } sub new {