initial draft
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 29 Jul 2008 19:39:01 +0000 (15:39 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 29 Jul 2008 19:39:01 +0000 (15:39 -0400)
IkiWiki/Plugin/autoindex.pm [new file with mode: 0644]
doc/plugins/autoindex.mdwn [new file with mode: 0644]
templates/autoindex.tmpl [new file with mode: 0644]

diff --git a/IkiWiki/Plugin/autoindex.pm b/IkiWiki/Plugin/autoindex.pm
new file mode 100644 (file)
index 0000000..0a8d907
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::autoindex;
+
+use warnings;
+use strict;
+use IkiWiki 2.00;
+use Encode;
+
+sub import { #{{{
+       hook(type => "refresh", id => "autoindex", call => \&refresh);
+} # }}}
+
+sub genindex ($) { #{{{
+       my $page=shift;
+       my $file=$page.".".$config{default_pageext};
+       my $template=template("autoindex.tmpl");
+       $template->param(page => $page);
+       writefile($file, $config{srcdir}, $template->output);
+} #}}}
+
+sub refresh () { #{{{
+       eval q{use File::Find};
+       error($@) if $@;
+
+       my (%pages, %dirs);
+       find({
+               no_chdir => 1,
+               wanted => sub {
+                       $_=decode_utf8($_);
+                       if (IkiWiki::file_pruned($_, $config{srcdir})) {
+                               $File::Find::prune=1;
+                       }
+                       elsif (! -l $_) {
+                               my ($f)=/$config{wiki_file_regexp}/; # untaint
+                               return unless defined $f;
+                               $f=~s/^\Q$config{srcdir}\E\/?//;
+                               return unless length $f;
+                               if (! -d _) {
+                                       $pages{pagename($f)}=1;
+                               }
+                               else {
+                                       $dirs{$f}=1;
+                               }
+                       }
+               }
+       }, $config{srcdir});
+
+       foreach my $dir (keys %dirs) {
+               if (! exists $pages{$dir}) {
+                       genindex($dir);
+               }
+       }
+} #}}}
+
+1
diff --git a/doc/plugins/autoindex.mdwn b/doc/plugins/autoindex.mdwn
new file mode 100644 (file)
index 0000000..66e0163
--- /dev/null
@@ -0,0 +1,7 @@
+[[!template id=plugin name=autoindex core=0 author="[[Joey]]"]]
+[[!tag type/useful]]
+
+This plugin searches for [[SubPages|ikiwiki/subpage]] with a missing parent
+page, and generates a parent page for them. The generated page content is
+controlled by the autoindex [[template|wikitemplates]], which by default,
+uses a [[map]] to list the SubPages.
diff --git a/templates/autoindex.tmpl b/templates/autoindex.tmpl
new file mode 100644 (file)
index 0000000..d5ec3b8
--- /dev/null
@@ -0,0 +1 @@
+[[!map pages="<TMPL_VAR PAGE>/* and ! <TMPL_VAR PAGE>/*/*"]]