diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-08-18 16:18:45 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-08-18 16:18:45 +0000 |
commit | 2eac55e90efa6aa82f3159385f1398be4b3bf6da (patch) | |
tree | 02fdf42fd6022569e4d3e4a95ccf727dff85fd34 /IkiWiki/Plugin | |
parent | 4d6f5e5a144e20bbda1c8e2d7d611b945394448f (diff) |
* Add a map plugin contributed by Alessandro Dotti Contra.
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/map.pm | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm new file mode 100644 index 000000000..c65e61ac9 --- /dev/null +++ b/IkiWiki/Plugin/map.pm @@ -0,0 +1,61 @@ +#!/usr/bin/perl +# +# Produce a hyerarchical map of links. +# +# By Alessandro Dotti Contra <alessandro@hyboria.org> +# +# Revision: 0.1 +package IkiWiki::Plugin::map; + +use warnings; +use strict; +use IkiWiki; + +sub import { #{{{ + IkiWiki::hook(type => "preprocess", id => "map", + call => \&preprocess); +} # }}} + +sub preprocess (@) { #{{{ + my %params=@_; + $params{pages}="*" unless defined $params{pages}; + + # Needs to update whenever a page is added or removed, so + # register a dependency. + IkiWiki::add_depends($params{page}, $params{pages}); + + # Get all the items to map. + my @mapitems = (); + foreach my $page (keys %IkiWiki::links) { + if (IkiWiki::pagespec_match($page, $params{pages})) { + push @mapitems, $page; + } + } + + # Create the map. + my $indent=0; + my $map = "<div class='map'>\n"; + foreach my $item (sort @mapitems) { + my $depth = ($item =~ tr/\//\//) + 1; + next if exists $params{maxdepth} && $depth > $params{maxdepth}; + while ($depth < $indent) { + $indent--; + $map.="</ul>\n"; + } + while ($depth > $indent) { + $indent++; + $map.="<ul>\n"; + } + $map .= "<li>" + .IkiWiki::htmllink($params{page}, $params{destpage}, $item) + ."</li>\n"; + } + while ($indent > 0) { + $indent--; + $map.="</ul>\n"; + } + $map .= "</div>\n"; + return $map; +} # }}} + +1 |