--- loncom/interface/londocs.pm 2016/07/01 19:59:36 1.608
+++ loncom/interface/londocs.pm 2016/10/31 19:48:59 1.610
@@ -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.610 2016/10/31 19:48:59 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,11 +3912,28 @@ 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='';
}
}
+ } elsif ($supplementalflag) {
+ if ($isexternal) {
+ if ($url =~ /^([^#]+)#([^#]+)$/) {
+ $url = $1;
+ $anchor = $2;
+ }
+ }
}
my ($rand_pick_text,$rand_order_text);
if ($isfolder || $ispage || $extension eq 'sequence' || $extension eq 'page') {
@@ -3989,6 +4006,9 @@ $form_end;
if ((($isexternal) || ($isexttool)) && $orderidx) {
$url .= '&idx='.$orderidx;
}
+ if ($anchor ne '') {
+ $url .= '&anchor='.&HTML::Entities::encode($anchor,'"<>&');
+ }
}
my ($tdalign,$tdwidth);
if ($allowed) {
@@ -4006,13 +4026,17 @@ $form_end;
my ($cfile,$home,$switchserver,$forceedit,$forceview) =
&Apache::lonnet::can_edit_resource($fileloc,$coursenum,$coursedom,$orig_url);
if (($cfile ne '') && ($symb ne '' || $supplementalflag)) {
+ my $suppanchor;
+ if ($supplementalflag) {
+ $suppanchor = $anchor;
+ }
my $jscall =
&Apache::lonhtmlcommon::jump_to_editres($cfile,$home,
$switchserver,
$forceedit,
undef,$symb,
&escape($env{'form.folderpath'}),
- $renametitle,'','',1);
+ $renametitle,'','',1,$suppanchor);
if ($jscall) {
$editlink = ''.&mt('Edit').' '."\n";
@@ -4032,7 +4056,15 @@ $form_end;
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) {
$line.='
';
} elsif ($url) {
- $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes',
+ if ($anchor ne '') {
+ if ($supplementalflag) {
+ $anchor = '&anchor='.&HTML::Entities::encode($anchor,'"<>&');
+ } else {
+ $anchor = '#'.&HTML::Entities::encode($anchor,'"<>&');
+ }
+ }
+ $line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes'.
+ (($anchor ne '')?$anchor:''),
'
',600,500);
} else {
$line.='
';
@@ -4041,7 +4073,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 '')?$anchor:''),
$title,600,500);
} else {
$line.=$title.' '.$reinit.'';
@@ -6542,8 +6575,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';