[LON-CAPA-cvs] cvs: loncom /interface lonhelper.pm

bowersj2 lon-capa-cvs@mail.lon-capa.org
Fri, 11 Apr 2003 17:45:37 -0000


bowersj2		Fri Apr 11 13:45:37 2003 EDT

  Modified files:              
    /loncom/interface	lonhelper.pm 
  Log:
  Dynamically register and unregister the helper tags when we see the
  <helper> and </helper> tags, making my worries about namespace pollution
  go away.
  
  
Index: loncom/interface/lonhelper.pm
diff -u loncom/interface/lonhelper.pm:1.6 loncom/interface/lonhelper.pm:1.7
--- loncom/interface/lonhelper.pm:1.6	Fri Apr 11 13:21:18 2003
+++ loncom/interface/lonhelper.pm	Fri Apr 11 13:45:37 2003
@@ -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 @@
 =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::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 @@
     &Apache::lonxml::xmlparse($r, 'helper', $file);
 
     $r->print($helper->display());
-    return OK;
+   return OK;
 }
 
 sub start_helper {
@@ -154,6 +168,10 @@
     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 @@
     if ($target ne 'helper') {
         return '';
     }
-    
+
+    for my $tagList (@helperTags) {
+        Apache::lonxml::deregister($tagList->[0], $tagList->[1]);
+    }
+
     return '';
 }
 
@@ -546,8 +568,8 @@
 =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 @@
    </message>
 
 This will display the HTML message and transition to the <nextstate> 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 <message_text>
 in <p> tags, or whatever is appropriate for your HTML.
 
@@ -657,7 +679,7 @@
 use strict;
 
 BEGIN {
-    &Apache::lonxml::register('Apache::lonhelper::message',
+    &Apache::lonhelper::register('Apache::lonhelper::message',
                               ('message', 'message_text'));
 }
 
@@ -781,7 +803,7 @@
 use strict;
 
 BEGIN {
-    &Apache::lonxml::register('Apache::lonhelper::choices',
+    &Apache::lonhelper::register('Apache::lonhelper::choices',
                               ('choice', 'choices'));
 }
 
@@ -960,7 +982,7 @@
 use Time::localtime;
 
 BEGIN {
-    &Apache::lonxml::register('Apache::lonhelper::date',
+    &Apache::lonhelper::register('Apache::lonhelper::date',
                               ('date'));
 }
 
@@ -1182,7 +1204,7 @@
 use strict;
 
 BEGIN {
-    &Apache::lonxml::register('Apache::lonhelper::resource',
+    &Apache::lonhelper::register('Apache::lonhelper::resource',
                               ('resource', 'filterfunc', 
                                'choicefunc', 'valuefunc'));
 }
@@ -1363,7 +1385,7 @@
 
 
 BEGIN {
-    &Apache::lonxml::register('Apache::lonhelper::student',
+    &Apache::lonhelper::register('Apache::lonhelper::student',
                               ('student'));
 }
 
@@ -1527,8 +1549,8 @@
 use strict;
 
 BEGIN {
-    &Apache::lonxml::register('Apache::lonhelper::files',
-                              ('files', 'filechoice', 'filefilter'));
+    &Apache::lonhelper::register('Apache::lonhelper::files',
+                                 ('files', 'filechoice', 'filefilter'));
 }
 
 sub new {