--- loncom/interface/londocs.pm 2016/07/01 19:59:36 1.608
+++ loncom/interface/londocs.pm 2016/10/31 12:59:03 1.609
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Documents
#
-# $Id: londocs.pm,v 1.608 2016/07/01 19:59:36 raeburn Exp $
+# $Id: londocs.pm,v 1.609 2016/10/31 12:59:03 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -3888,7 +3888,7 @@ END
}
}
- my ($editlink,$extresform);
+ my ($editlink,$extresform,$anchor);
my $orig_url = $url;
$orig_url=~s{http(:|:)//https(:|:)//}{https$2//};
$url=~s{^http(|s)(:|:)//}{/adm/wrapper/ext/};
@@ -3912,7 +3912,17 @@ END
$url='/adm/wrapper'.$url;
}
if (&Apache::lonnet::symbverify($symb,$url)) {
- $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
+ my $shownsymb = $symb;
+ if ($isexternal) {
+ if ($url =~ /^([^#]+)#([^#]+)$/) {
+ $url = $1;
+ $anchor = $2;
+ if ($symb =~ m{^([^#]+)\Q#$anchor\E$}) {
+ $shownsymb = $1.&escape('#').$anchor;
+ }
+ }
+ }
+ $url.=(($url=~/\?/)?'&':'?').'symb='.&HTML::Entities::encode($shownsymb,'"<>&');
} else {
$url='';
}
@@ -4032,7 +4042,8 @@ $form_end;
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
$line.='';
} elsif ($url) {
- $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes',
+ $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
+ (($anchor ne '')?'#'.&HTML::Entities::encode($anchor,'"<>&'):''),
'',600,500);
} else {
$line.='';
@@ -4041,7 +4052,8 @@ $form_end;
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
$line.=''.$title.'';
} elsif ($url) {
- $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes',
+ $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
+ (($anchor ne '')?'#'.&HTML::Entities::encode($anchor,'"<>&'):''),
$title,600,500);
} else {
$line.=$title.' '.$reinit.'';
@@ -6542,8 +6554,19 @@ sub editing_js {
my ($map,$id,$res)=&Apache::lonnet::decode_symb($caller);
$res = &Apache::lonnet::clutter($res);
if (&Apache::lonnet::is_on_map($res)) {
- $backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($res),'<>&"').'?symb='.
+ my ($url,$anchor);
+ if ($res =~ /^([^#]+)#([^#]+)$/) {
+ $url = $1;
+ $anchor = $2;
+ if (($caller =~ m{^([^#]+)\Q#$anchor\E$})) {
+ $caller = $1.&escape('#').$anchor;
+ }
+ }
+ $backtourl = &HTML::Entities::encode(&Apache::lonnet::clutter($url),'<>&"').'?symb='.
&HTML::Entities::encode($caller,'<>&"');
+ if ($anchor ne '') {
+ $backtourl .= '#'.&HTML::Entities::encode($anchor,'<>&"');
+ }
$backtourl = &Apache::loncommon::escape_single($backtourl);
} else {
$backtourl = '/adm/navmaps';