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. |
} |
} |
|
|