--- loncom/interface/lonnavmaps.pm 2004/11/11 22:47:55 1.305
+++ loncom/interface/lonnavmaps.pm 2004/12/12 21:06:36 1.308
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Navigate Maps Handler
#
-# $Id: lonnavmaps.pm,v 1.305 2004/11/11 22:47:55 albertel Exp $
+# $Id: lonnavmaps.pm,v 1.308 2004/12/12 21:06:36 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,6 +35,7 @@ use Apache::loncommon();
use Apache::lonmenu();
use Apache::lonenc();
use Apache::lonlocal;
+use Apache::lonnet;
use POSIX qw (floor strftime);
use Data::Dumper; # for debugging, not always
@@ -376,7 +377,7 @@ ENDSUBM
-
+
");
@@ -434,7 +435,6 @@ sub removeFromFilter {
# Convenience function: Given a stack returned from getStack on the iterator,
# return the correct src() value.
-# Later, this should add an anchor when we start putting anchors in pages.
sub getLinkForResource {
my $stack = shift;
my $res;
@@ -442,14 +442,18 @@ sub getLinkForResource {
# Check to see if there are any pages in the stack
foreach $res (@$stack) {
if (defined($res)) {
+ my $anchor;
if ($res->is_page()) {
- return $res->link();
+ foreach (@$stack) { if (defined($_)) { $anchor = $_; } }
+ $anchor=&Apache::lonnet::escape($anchor->shown_symb());
+ return ($res->link(),$res->shown_symb(),$anchor);
}
# in case folder was skipped over as "only sequence"
my ($map,$id,$src)=&Apache::lonnet::decode_symb($res->symb());
if ($map=~/\.page$/) {
- return &Apache::lonnet::clutter($map).'#'.
- &Apache::lonnet::escape(&Apache::lonnet::declutter($src));
+ my $url=&Apache::lonnet::clutter($map);
+ $anchor=&Apache::lonnet::escape($src->shown_symb());
+ return ($url,$res->shown_symb(),$anchor);
}
}
}
@@ -462,7 +466,7 @@ sub getLinkForResource {
if (defined($_)) { $res = $_; }
}
- return $res->link();
+ return ($res->link(),$res->shown_symb());
}
# Convenience function: This separates the logic of how to create
@@ -1010,6 +1014,15 @@ sub render_resource {
my $nonLinkedText = ''; # stuff after resource title not in link
my $link = $params->{"resourceLink"};
+
+ # The URL part is not escaped at this point, but the symb is...
+ # The stuff to the left of the ? must have ' replaced by \' since
+ # it will be quoted with ' in the href.
+
+ my ($left,$right) = split(/\?/, $link);
+ $left =~ s/'/\\'/g;
+ $link = $left.'?'.$right;
+
my $src = $resource->src();
my $it = $params->{"iterator"};
my $filter = $it->{FILTER};
@@ -1025,7 +1038,11 @@ sub render_resource {
}
# links to open and close the folder
+
+
my $linkopen = "";
+
+
my $linkclose = "";
# Default icon: unknown page
@@ -1066,6 +1083,7 @@ sub render_resource {
'&jump=' .
&Apache::lonnet::escape($resource->symb()) .
"&folderManip=1'>";
+
} else {
# Don't allow users to manipulate folder
$icon = "navmap.$folderType." . ($nowOpen ? 'closed' : 'open') .
@@ -1093,6 +1111,7 @@ sub render_resource {
}
# Decide what to display
+
$result .= "$newBranchText$linkopen$icon$linkclose";
my $curMarkerBegin = '';
@@ -1841,22 +1860,19 @@ END
# Set up some data about the parts that the cols might want
my $filter = $it->{FILTER};
- my $src;
+ my ($src,$symb,$anchor);
if ($args->{'sort'}) {
$src = $curRes->src(); # FIXME this is wrong for .pages
+ $symb = $curRes->symb(); # FIXME this is wrong for .pages
} else {
my $stack = $it->getStack();
- $src=getLinkForResource($stack);
- }
- my $anchor='';
- if ($src=~s/(\#.*)$//) {
- $anchor=$1;
+ ($src,$symb,$anchor)=getLinkForResource($stack);
}
+ if (defined($anchor)) { $anchor='#'.$anchor; }
my $srcHasQuestion = $src =~ /\?/;
$args->{"resourceLink"} = $src.
($srcHasQuestion?'&':'?') .
- 'symb=' . &Apache::lonnet::escape($curRes->shown_symb()).
- $anchor;
+ 'symb=' . &Apache::lonnet::escape($symb).$anchor;
# Now, display each column.
foreach my $col (@$cols) {