[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm
bowersj2
lon-capa-cvs@mail.lon-capa.org
Fri, 01 Nov 2002 19:50:00 -0000
bowersj2 Fri Nov 1 14:50:00 2002 EDT
Modified files:
/loncom/interface lonnavmaps.pm
Log:
Confidence commit; still working towards the new iterator style. Since
violent things are going to happen to the code, I want some backups to
revert to, so expect to see some "nuisance commits" over the next couple
of hours...
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.95 loncom/interface/lonnavmaps.pm:1.96
--- loncom/interface/lonnavmaps.pm:1.95 Fri Nov 1 13:47:26 2002
+++ loncom/interface/lonnavmaps.pm Fri Nov 1 14:50:00 2002
@@ -2,7 +2,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.95 2002/11/01 18:47:26 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.96 2002/11/01 19:50:00 bowersj2 Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -957,6 +957,10 @@
# Here's a simple example of the iterator.
# 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 $found = 0;
my $depth = 1;
@@ -968,12 +972,8 @@
my $counter = 0;
while ($depth > 0) {
- if ($curRes == $mapIterator->BEGIN_MAP()) {
- $depth++;
- }
- if ($curRes == $mapIterator->END_MAP()) {
- $depth--;
- }
+ if ($curRes == $mapIterator->BEGIN_MAP()) { $depth++; }
+ if ($curRes == $mapIterator->END_MAP()) { $depth--; }
if (ref($curRes)) { $counter++; }
@@ -1058,12 +1058,8 @@
if ($curRes == $mapIterator->BEGIN_BRANCH()) {
$isNewBranch = 1;
}
- if ($curRes == $mapIterator->BEGIN_MAP()) {
- $depth++;
- }
- if ($curRes == $mapIterator->END_MAP()) {
- $depth--;
- }
+ if ($curRes == $mapIterator->BEGIN_MAP()) { $depth++; }
+ if ($curRes == $mapIterator->END_MAP()) { $depth--; }
if (ref($curRes)) { $counter++; }
@@ -2035,6 +2031,11 @@
sub FORWARD { return 1; } # go forward
sub BACKWARD { return 2; }
+sub min {
+ (my $a, my $b) = @_;
+ if ($a < $b) { return $a; } else { return $b; }
+}
+
sub new {
# magic invocation to create a class instance
my $proto = shift;
@@ -2064,6 +2065,42 @@
# 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.
+
+ 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.
}