1 I've found myself wanting to know which [[plugins]] are switched on so I know which pre-processor commands I can use. The attached [[patch]] adds a new plugin that generates the list of available plugins. -- [[Will]]
4 # Ikiwiki listplugins plugin.
5 package IkiWiki::Plugin::listplugins;
12 hook(type => "getsetup", id => "listplugins", call => \&getsetup);
13 hook(type => "needsbuild", id => "listplugins", call => \&needsbuild);
14 hook(type => "preprocess", id => "listplugins", call => \&preprocess);
17 sub getsetup () { #{{{
28 sub needsbuild (@) { #{{{
31 my @rawpluginlist = sort(IkiWiki::listplugins());
34 foreach my $plugin (@rawpluginlist) {
35 if ( exists $IkiWiki::hooks{preprocess}{$plugin} ) {
36 push(@pluginlist,$plugin);
40 $pluginString = join (' ', @pluginlist);
42 foreach my $page (keys %pagestate) {
43 if (exists $pagestate{$page}{listplugins}{shown}) {
44 if ($pagestate{$page}{listplugins}{shown} ne $pluginString) {
45 push @$needsbuild, $pagesources{$page};
47 if (exists $pagesources{$page} &&
48 grep { $_ eq $pagesources{$page} } @$needsbuild) {
49 # remove state, will be re-added if
50 # the version is still shown during the
52 delete $pagestate{$page}{listplugins}{shown};
58 sub preprocess (@) { #{{{
61 $pagestate{$params{destpage}}{listplugins}{shown}=$pluginString;
63 my $result = "<ul class=\"pluginlist\">";
65 foreach $thisPlugin (@pluginlist) {
66 $result .= "<li class=\"pluginlist\">$thisPlugin</li>";