80 lines
2.9 KiB
Markdown
80 lines
2.9 KiB
Markdown
The current basewiki is not [[self-documenting|todo/basewiki_should_be_self_documenting]]. In particular, if
|
|
[[plugins/listdirectives]] is used, it creates a list with a bunch of
|
|
broken links to directives/*, pages that do not currently exist in the
|
|
docwiki or basewiki.
|
|
|
|
This could be fixed by adding a page for each directive under to
|
|
`ikiwiki/directives`, and put those into a new underlay, which the plugin
|
|
could enable. Rather a lot of work and maintenance to document all the
|
|
directives like that.
|
|
|
|
I also considered having it link to the plugin that defined the
|
|
directive. Then all the plugins can be included in a new underlay, which
|
|
both [[plugins/listdirectives]] and [[plugins/websetup]] could enable.
|
|
(The latter could be improved by making the plugin names in the web setup
|
|
be links to docs about each plugin..)
|
|
|
|
The problem I ran into doing that is that the existing plugin pages have a
|
|
lot of stuff on them you probably don't want an underlay doing. The biggest
|
|
issues were wikilinks to other pages in the docwiki (which would end up
|
|
broken if the plugins were used as an underlay), and plugin pages that
|
|
include examples of the plugin in use, which are sometimes rather expensive
|
|
(eg, brokenlinks).
|
|
|
|
Either way requires a lot of reorganisation/doc work, and an onging
|
|
maintenance load.
|
|
|
|
> Which has now been [[done]]. -- [[Will]]
|
|
|
|
BTW, this patch would be needed for the second approach, to allow
|
|
listdirectives to map from preprocessor directives back to the plugin that
|
|
defined them: --[[Joey]]
|
|
|
|
commit 0486b46a629cae19ce89492d5ac498bbf9b84f5f
|
|
Author: Joey Hess <joey@kodama.kitenet.net>
|
|
Date: Mon Aug 25 15:38:51 2008 -0400
|
|
|
|
record which plugins registered which hooks
|
|
|
|
diff --git a/IkiWiki.pm b/IkiWiki.pm
|
|
index e476521..afe982a 100644
|
|
--- a/IkiWiki.pm
|
|
+++ b/IkiWiki.pm
|
|
@@ -493,6 +493,7 @@ sub loadplugins () {
|
|
return 1;
|
|
}
|
|
|
|
+my $loading_plugin;
|
|
sub loadplugin ($) {
|
|
my $plugin=shift;
|
|
|
|
@@ -502,14 +503,18 @@ sub loadplugin ($) {
|
|
"$installdir/lib/ikiwiki") {
|
|
if (defined $dir && -x "$dir/plugins/$plugin") {
|
|
require IkiWiki::Plugin::external;
|
|
+ $loading_plugin=$plugin;
|
|
import IkiWiki::Plugin::external "$dir/plugins/$plugin";
|
|
+ $loading_plugin=undef;
|
|
$loaded_plugins{$plugin}=1;
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
my $mod="IkiWiki::Plugin::".possibly_foolish_untaint($plugin);
|
|
+ $loading_plugin=$plugin;
|
|
eval qq{use $mod};
|
|
+ $loading_plugin=undef;
|
|
if ($@) {
|
|
error("Failed to load plugin $mod: $@");
|
|
}
|
|
@@ -1429,6 +1434,9 @@ sub hook (@) {
|
|
|
|
return if $param{no_override} && exists $hooks{$param{type}}{$param{id}};
|
|
|
|
+ # Record which plugin was being loaded when the hook was defined.
|
|
+ $param{plugin}=$loading_plugin if defined $loading_plugin;
|
|
+
|
|
$hooks{$param{type}}{$param{id}}=\%param;
|
|
return 1;
|
|
}
|