* Add a map plugin contributed by Alessandro Dotti Contra.
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 18 Aug 2006 16:18:45 +0000 (16:18 +0000)
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>
Fri, 18 Aug 2006 16:18:45 +0000 (16:18 +0000)
IkiWiki/Plugin/map.pm [new file with mode: 0644]
Makefile.PL
debian/changelog
doc/ikiwiki.setup
doc/plugins/map.mdwn [new file with mode: 0644]

diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm
new file mode 100644 (file)
index 0000000..c65e61a
--- /dev/null
@@ -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
index 1f46e9c957e9fff375b2ff308e05425768416d92..2ef99fa80a93ccfd18ea7fe17ce59ea2694fbad5 100755 (executable)
@@ -23,7 +23,7 @@ extra_build:
                --plugin=brokenlinks --plugin=pagecount \
                --plugin=orphans --plugin=haiku --plugin=meta \
                --plugin=tag --plugin=polygen --plugin=pagestats \
-               --plugin=fortune --plugin=aggregate
+               --plugin=fortune --plugin=aggregate --plugin=map
        ./mdwn2man ikiwiki 1 doc/usage.mdwn > ikiwiki.man
        ./mdwn2man ikiwiki-mass-rebuild 8 doc/ikiwiki-mass-rebuild.mdwn > ikiwiki-mass-rebuild.man
                
index d1dac85e15fe820de2dddb309cedb28364e9dfaf..787faa9284d2e92223910396020b81e56191a2ec 100644 (file)
@@ -9,8 +9,9 @@ ikiwiki (1.21) UNRELEASED; urgency=low
   * Clean up yes/no parameter parsing in inline plugin.
   * Implemented better cycle detection in the inline plugin; nested inlines
     will now work.
+  * Add a map plugin contributed by Alessandro Dotti Contra.
 
- -- Joey Hess <joeyh@debian.org>  Thu, 17 Aug 2006 23:27:38 -0400
+ -- Joey Hess <joeyh@debian.org>  Fri, 18 Aug 2006 12:10:37 -0400
 
 ikiwiki (1.20) unstable; urgency=low
 
index a0ce5a468a3fb32243141d162906bc59ce09defd..678dece2359066e05e9311c7231cd245cd4a75eb 100644 (file)
@@ -81,7 +81,7 @@ use IkiWiki::Setup::Standard {
        # To add plugins, list them here.
        #add_plugins => [qw{meta tag pagecount brokenlinks search smiley
        #                   wikitext camelcase pagestats htmltidy fortune
-       #                   sidebar}],
+       #                   sidebar map}],
        # If you want to disable any of the default plugins, list them here.
        #disable_plugins => [qw{inline htmlscrubber}],
 }
diff --git a/doc/plugins/map.mdwn b/doc/plugins/map.mdwn
new file mode 100644 (file)
index 0000000..039ed55
--- /dev/null
@@ -0,0 +1,16 @@
+This plugin generates a hierarchical page map for the wiki. Example usage:
+
+       \[[map pages="* and !blog/*" maxdepth=2]]
+
+If the pages to include are not specified, all pages (and other files) in
+the wiki are mapped. If the maxdepth parameter is passed, only pages nested
+less than that many levels deep will be included in the map.
+
+This plugin is included in ikiwiki, but is not enabled by default.
+
+If this plugin is enabled, here is a page map for the plugins section
+of this wiki:
+
+[[map pages="plugins or plugins/*" maxdepth=3]]
+
+[[tag type/meta]]