* map: Render pages on the way to subpages whose parent pages
are not included in the map. Include special styling for such pages. * map: Remove common prefixes and don't over-indent. * Add class option to htmllink().master
parent
d4117e20e3
commit
7bde880fa8
|
@ -588,6 +588,9 @@ sub htmllink ($$$;@) { #{{{
|
||||||
if (defined $opts{rel}) {
|
if (defined $opts{rel}) {
|
||||||
push @attrs, ' rel="'.$opts{rel}.'"';
|
push @attrs, ' rel="'.$opts{rel}.'"';
|
||||||
}
|
}
|
||||||
|
if (defined $opts{class}) {
|
||||||
|
push @attrs, ' class="'.$opts{class}.'"';
|
||||||
|
}
|
||||||
|
|
||||||
return "<a href=\"$bestlink\"@attrs>$linktext</a>";
|
return "<a href=\"$bestlink\"@attrs>$linktext</a>";
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
|
@ -19,12 +19,34 @@ sub preprocess (@) { #{{{
|
||||||
my %params=@_;
|
my %params=@_;
|
||||||
$params{pages}="*" unless defined $params{pages};
|
$params{pages}="*" unless defined $params{pages};
|
||||||
|
|
||||||
|
my $common_prefix;
|
||||||
|
|
||||||
# Get all the items to map.
|
# Get all the items to map.
|
||||||
my @mapitems = ();
|
my %mapitems;
|
||||||
foreach my $page (keys %pagesources) {
|
foreach my $page (keys %pagesources) {
|
||||||
if (pagespec_match($page, $params{pages}, location => $params{page})) {
|
if (pagespec_match($page, $params{pages}, location => $params{page})) {
|
||||||
push @mapitems, "/".$page;
|
$mapitems{$page}=1;
|
||||||
|
|
||||||
|
# Check for a common prefix.
|
||||||
|
if (! defined $common_prefix) {
|
||||||
|
$common_prefix=$page;
|
||||||
}
|
}
|
||||||
|
elsif (length $common_prefix &&
|
||||||
|
$page !~ /^\Q$common_prefix\E(\/|$)/) {
|
||||||
|
my @a=split(/\//, $page);
|
||||||
|
my @b=split(/\//, $common_prefix);
|
||||||
|
$common_prefix="";
|
||||||
|
while (@a && @b && $a[0] eq $b[0]) {
|
||||||
|
$common_prefix.=shift(@a);
|
||||||
|
shift @b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Common prefix should not be a page in the map.
|
||||||
|
while (length $common_prefix && exists $mapitems{$common_prefix}) {
|
||||||
|
$common_prefix=IkiWiki::dirname($common_prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
# Needs to update whenever a page is added or removed, so
|
# Needs to update whenever a page is added or removed, so
|
||||||
|
@ -32,30 +54,45 @@ sub preprocess (@) { #{{{
|
||||||
add_depends($params{page}, $params{pages});
|
add_depends($params{page}, $params{pages});
|
||||||
# Explicitly add all currently shown pages, to detect when pages
|
# Explicitly add all currently shown pages, to detect when pages
|
||||||
# are removed.
|
# are removed.
|
||||||
add_depends($params{page}, join(" or ", @mapitems));
|
add_depends($params{page}, join(" or ", keys %mapitems));
|
||||||
|
|
||||||
# Create the map.
|
# Create the map.
|
||||||
my $parent="";
|
my $parent="";
|
||||||
my $indent=0;
|
my $indent=0;
|
||||||
my $openli=0;
|
my $openli=0;
|
||||||
my $map = "<div class='map'>\n";
|
my $map = "<div class='map'>\n<ul>\n";
|
||||||
foreach my $item (sort @mapitems) {
|
foreach my $item (sort keys %mapitems) {
|
||||||
my $depth = ($item =~ tr/\//\//);
|
$item=~s/^\Q$common_prefix\E\/// if length $common_prefix;
|
||||||
|
my $depth = ($item =~ tr/\//\//) + 1;
|
||||||
my $baseitem=IkiWiki::dirname($item);
|
my $baseitem=IkiWiki::dirname($item);
|
||||||
while (length $parent && length $baseitem && $baseitem !~ /^\Q$parent\E/) {
|
while (length $parent && length $baseitem && $baseitem !~ /^\Q$parent\E(\/|$)/) {
|
||||||
$parent=IkiWiki::dirname($parent);
|
$parent=IkiWiki::dirname($parent);
|
||||||
$indent--;
|
$indent--;
|
||||||
$map.="</li></ul>\n";
|
$map .= "</li>\n";
|
||||||
|
if ($indent > 0) {
|
||||||
|
$map .= "</ul>\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while ($depth < $indent) {
|
while ($depth < $indent) {
|
||||||
$indent--;
|
$indent--;
|
||||||
$map.="</li></ul>\n";
|
$map .= "</li>\n";
|
||||||
|
if ($indent > 0) {
|
||||||
|
$map .= "</ul>\n";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
my @bits=split("/", $item);
|
||||||
|
my $p="";
|
||||||
|
$p.="/".shift(@bits) for 1..$indent;
|
||||||
while ($depth > $indent) {
|
while ($depth > $indent) {
|
||||||
$indent++;
|
$indent++;
|
||||||
|
if ($indent > 1) {
|
||||||
$map .= "<ul>\n";
|
$map .= "<ul>\n";
|
||||||
|
}
|
||||||
if ($depth > $indent) {
|
if ($depth > $indent) {
|
||||||
$map .= "<li>\n";
|
$p.="/".shift(@bits);
|
||||||
|
$map .= "<li>"
|
||||||
|
.htmllink($params{page}, $params{destpage}, $p, class => "mapparent")
|
||||||
|
."</span>\n";
|
||||||
$openli=1;
|
$openli=1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -64,14 +101,15 @@ sub preprocess (@) { #{{{
|
||||||
}
|
}
|
||||||
$map .= "</li>\n" if $openli;
|
$map .= "</li>\n" if $openli;
|
||||||
$map .= "<li>"
|
$map .= "<li>"
|
||||||
.htmllink($params{page}, $params{destpage}, $item)
|
.htmllink($params{page}, $params{destpage},
|
||||||
."\n";
|
"/".$common_prefix."/".$item, class => "mapitem")
|
||||||
|
."</span>\n";
|
||||||
$openli=1;
|
$openli=1;
|
||||||
$parent=$item;
|
$parent=$item;
|
||||||
}
|
}
|
||||||
while ($indent > 0) {
|
while ($indent > 0) {
|
||||||
$indent--;
|
$indent--;
|
||||||
$map.="</li></ul>\n";
|
$map .= "</li>\n</ul>\n";
|
||||||
}
|
}
|
||||||
$map .= "</div>\n";
|
$map .= "</div>\n";
|
||||||
return $map;
|
return $map;
|
||||||
|
|
|
@ -5,11 +5,12 @@ ikiwiki (2.9) UNRELEASED; urgency=low
|
||||||
Closes: #443344
|
Closes: #443344
|
||||||
* map: Fully specify paths to links to avoid issues when the bestlink
|
* map: Fully specify paths to links to avoid issues when the bestlink
|
||||||
didn't point to the correct page.
|
didn't point to the correct page.
|
||||||
* map: Render empty nodes on the way to subpages whose parent pages
|
* map: Render pages on the way to subpages whose parent pages
|
||||||
are not included in the map.
|
are not included in the map. Include special styling for such pages.
|
||||||
* map: Fix valid html issue.
|
* map: Remove common prefixes and don't over-indent.
|
||||||
|
* Add class option to htmllink().
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Fri, 21 Sep 2007 13:28:32 -0400
|
-- Joey Hess <joeyh@debian.org> Sat, 22 Sep 2007 12:31:22 -0400
|
||||||
|
|
||||||
ikiwiki (2.8) unstable; urgency=low
|
ikiwiki (2.8) unstable; urgency=low
|
||||||
|
|
||||||
|
|
|
@ -412,7 +412,8 @@ control some options. These are:
|
||||||
* forcesubpage - set to force a link to a subpage
|
* forcesubpage - set to force a link to a subpage
|
||||||
* linktext - set to force the link text to something
|
* linktext - set to force the link text to something
|
||||||
* anchor - set to make the link include an anchor
|
* anchor - set to make the link include an anchor
|
||||||
* rel - set to add a rel attribute to the link.
|
* rel - set to add a rel attribute to the link
|
||||||
|
* class - set to add a css class to the link
|
||||||
|
|
||||||
#### `readfile($;$)`
|
#### `readfile($;$)`
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,10 @@ div.tags {
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mapparent {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
#backlinks {
|
#backlinks {
|
||||||
margin-top: 1em;
|
margin-top: 1em;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue