X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/069b10cc6a9714211fe7136ac6febf5c583e5549..bd103811033fa174d24d8dc5b84f0694fd9055ee:/IkiWiki/Plugin/map.pm
diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm
index f7ab291c7..af14ef5de 100644
--- a/IkiWiki/Plugin/map.pm
+++ b/IkiWiki/Plugin/map.pm
@@ -11,11 +11,20 @@ use warnings;
use strict;
use IkiWiki 2.00;
-sub import { #{{{
+sub import {
+ hook(type => "getsetup", id => "map", call => \&getsetup);
hook(type => "preprocess", id => "map", call => \&preprocess);
-} # }}}
+}
-sub preprocess (@) { #{{{
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => undef,
+ },
+}
+
+sub preprocess (@) {
my %params=@_;
$params{pages}="*" unless defined $params{pages};
@@ -26,11 +35,12 @@ sub preprocess (@) { #{{{
foreach my $page (keys %pagesources) {
if (pagespec_match($page, $params{pages}, location => $params{page})) {
if (exists $params{show} &&
+ exists $pagestate{$page} &&
exists $pagestate{$page}{meta}{$params{show}}) {
$mapitems{$page}=$pagestate{$page}{meta}{$params{show}};
}
else {
- $mapitems{$page}=$page;
+ $mapitems{$page}='';
}
# Check for a common prefix.
if (! defined $common_prefix) {
@@ -70,23 +80,24 @@ sub preprocess (@) { #{{{
my $parent="";
my $indent=0;
my $openli=0;
- my $dummy=0;
+ my $addparent="";
my $map = "
\n
\n";
- foreach my $item (sort { $mapitems{$a} cmp $mapitems{$b} } keys %mapitems) {
+ foreach my $item (sort keys %mapitems) {
+ my @linktext = (length $mapitems{$item} ? (linktext => $mapitems{$item}) : ());
$item=~s/^\Q$common_prefix\E\///
if defined $common_prefix && length $common_prefix;
my $depth = ($item =~ tr/\//\//) + 1;
my $baseitem=IkiWiki::dirname($item);
while (length $parent && length $baseitem && $baseitem !~ /^\Q$parent\E(\/|$)/) {
$parent=IkiWiki::dirname($parent);
- last if !$dummy && length $parent && $baseitem =~ /^\Q$parent\E(\/|$)/;
+ last if length $addparent && $baseitem =~ /^\Q$addparent\E(\/|$)/;
+ $addparent="";
$indent--;
$map .= "\n";
if ($indent > 0) {
$map .= "
\n";
}
}
- $dummy=0;
while ($depth < $indent) {
$indent--;
$map .= "\n";
@@ -103,11 +114,12 @@ sub preprocess (@) { #{{{
$map .= "
\n";
}
if ($depth > $indent) {
- $dummy=1;
$p.="/".shift(@bits);
+ $addparent=$p;
+ $addparent=~s/^\///;
$map .= "- "
.htmllink($params{page}, $params{destpage},
- $p, class => "mapparent",
+ "/".$common_prefix.$p, class => "mapparent",
noimageinline => 1)
."\n";
$openli=1;
@@ -120,7 +132,7 @@ sub preprocess (@) { #{{{
$map .= "
- "
.htmllink($params{page}, $params{destpage},
"/".$common_prefix."/".$item,
- linktext => $mapitems{$item},
+ @linktext,
class => "mapitem", noimageinline => 1)
."\n";
$openli=1;
@@ -132,6 +144,6 @@ sub preprocess (@) { #{{{
}
$map .= "
\n";
return $map;
-} # }}}
+}
1