Diff for /loncom/interface/lonnavmaps.pm between versions 1.95 and 1.96

version 1.95, 2002/11/01 18:47:26 version 1.96, 2002/11/01 19:50:00
Line 957  sub new_handle { Line 957  sub new_handle {
     # Here's a simple example of the iterator.      # Here's a simple example of the iterator.
     # Preprocess the map: Look for current URL, force inlined maps to display      # Preprocess the map: Look for current URL, force inlined maps to display
   
       # This currently does very little...
       my $mapEventualIterator = Apache::lonnavmaps::iterator->new($navmap, undef, undef, {},
                                                                   undef, $condition);
   
     my $mapIterator = $navmap->getIterator(undef, undef, {}, 1);      my $mapIterator = $navmap->getIterator(undef, undef, {}, 1);
     my $found = 0;      my $found = 0;
     my $depth = 1;      my $depth = 1;
Line 968  sub new_handle { Line 972  sub new_handle {
     my $counter = 0;      my $counter = 0;
           
     while ($depth > 0) {      while ($depth > 0) {
         if ($curRes == $mapIterator->BEGIN_MAP()) {          if ($curRes == $mapIterator->BEGIN_MAP()) { $depth++; }
             $depth++;          if ($curRes == $mapIterator->END_MAP()) { $depth--; }
         }  
         if ($curRes == $mapIterator->END_MAP()) {  
             $depth--;  
         }  
   
         if (ref($curRes)) { $counter++; }          if (ref($curRes)) { $counter++; }
   
Line 1058  sub new_handle { Line 1058  sub new_handle {
         if ($curRes == $mapIterator->BEGIN_BRANCH()) {          if ($curRes == $mapIterator->BEGIN_BRANCH()) {
             $isNewBranch = 1;              $isNewBranch = 1;
         }          }
         if ($curRes == $mapIterator->BEGIN_MAP()) {          if ($curRes == $mapIterator->BEGIN_MAP()) { $depth++; }
             $depth++;          if ($curRes == $mapIterator->END_MAP()) { $depth--; }
         }  
         if ($curRes == $mapIterator->END_MAP()) {  
             $depth--;  
         }  
   
         if (ref($curRes)) { $counter++; }          if (ref($curRes)) { $counter++; }
   
Line 2035  sub END_BRANCH { return 4; }   # end of Line 2031  sub END_BRANCH { return 4; }   # end of
 sub FORWARD { return 1; }      # go forward  sub FORWARD { return 1; }      # go forward
 sub BACKWARD { return 2; }  sub BACKWARD { return 2; }
   
   sub min {
       (my $a, my $b) = @_;
       if ($a < $b) { return $a; } else { return $b; }
   }
   
 sub new {  sub new {
     # magic invocation to create a class instance      # magic invocation to create a class instance
     my $proto = shift;      my $proto = shift;
Line 2065  sub new { Line 2066  sub new {
     # Now, we need to pre-process the map, by walking forward and backward      # Now, we need to pre-process the map, by walking forward and backward
     # over the parts of the map we're going to look at.      # over the parts of the map we're going to look at.
   
       my $forwardIterator = Apache::lonnavmaps::DFSiterator->new($self->{NAV_MAP}, 
                                                                  $self->{FIRST_RESOURCE},
                                                                  $self->{FINISH_RESOURCE},
                                                                  $self->{FILTER},
                                                                  undef, $self->{CONDITION},
                                                                  FORWARD());
       
       # prime the recursion
       $self->{FIRST_RESOURCE}->{DATA}->{TOP_DOWN_VAL} = 0;
       my $depth = 1;
       $forwardIterator->next();
       my $curRes = $forwardIterator->next();
       while ($depth > 0) {
           if ($curRes == $forwardIterator->BEGIN_MAP()) { $depth++; }
           if ($curRes == $forwardIterator->END_MAP()) { $depth--; }
           
           if (ref($curRes)) {
               my $topDownVal = $curRes->{DATA}->{TOP_DOWN_VAL};
               my $nextResources = $curRes->getNext();
               my $resourceCount = scalar(@{$nextResources});
               
               if ($resourceCount == 1) {
                   my $current = $nextResources->[0]->{DATA}->{TOP_DOWN_VAL} || 999999999;
                   $nextResources->[0]->{DATA}->{TOP_DOWN_VAL} = min($topDownVal, $current);
               }
               
               if ($resourceCount > 1) {
                   foreach my $res (@{$nextResources}) {
                       my $current = $res->{DATA}->{TOP_DOWN_VAL} || 999999999;
                       $res->{DATA}->{TOP_DOWN_VAL} = min($current, $topDownVal + 1);
                   }
               }
           }
           $curRes = $forwardIterator->next();
       }
   
     # Now we're ready to start iterating.      # Now we're ready to start iterating.
 }  }
   

Removed from v.1.95  
changed lines
  Added in v.1.96


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>