summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Hess <joey@kodama.kitenet.net>2008-10-30 13:41:19 -0400
committerJoey Hess <joey@kodama.kitenet.net>2008-10-30 13:41:19 -0400
commit354d22e27b4d9cb8207e038de4f342545435d2c6 (patch)
tree748615018538b1672fd3784600b2b4ae3138f985
parent8f5723e1d572664ecac4d0aeed079ab3365719cc (diff)
don't rely on plugin load order when determining generated directives
Instead, shortcuts will explicitly be marked as such when registered, and listdirectives can filter them out.
-rw-r--r--IkiWiki/Plugin/listdirectives.pm9
-rw-r--r--IkiWiki/Plugin/shortcut.pm1
-rw-r--r--doc/bugs/cannot_preview_shortcuts.mdwn7
3 files changed, 12 insertions, 5 deletions
diff --git a/IkiWiki/Plugin/listdirectives.pm b/IkiWiki/Plugin/listdirectives.pm
index fc8927ccb..2ab3e4665 100644
--- a/IkiWiki/Plugin/listdirectives.pm
+++ b/IkiWiki/Plugin/listdirectives.pm
@@ -30,7 +30,7 @@ sub getsetup () { #{{{
} #}}}
my @fulllist;
-my @earlylist;
+my @shortlist;
my $pluginstring;
sub checkconfig () { #{{{
@@ -40,15 +40,14 @@ sub checkconfig () { #{{{
else {
$config{directive_description_dir} =~ s/\/+$//;
}
-
- @earlylist = sort keys %{$IkiWiki::hooks{preprocess}};
} #}}}
sub needsbuild (@) { #{{{
my $needsbuild=shift;
@fulllist = sort keys %{$IkiWiki::hooks{preprocess}};
- $pluginstring = join(' ', @earlylist) . " : " . join(' ', @fulllist);
+ @shortlist = grep { ! $IkiWiki::hooks{preprocess}{$_}{shortcut} } @fulllist;
+ $pluginstring = join(' ', @shortlist) . " : " . join(' ', @fulllist);
foreach my $page (keys %pagestate) {
if (exists $pagestate{$page}{listdirectives}{shown}) {
@@ -77,7 +76,7 @@ sub preprocess (@) { #{{{
@pluginlist = @fulllist;
}
else {
- @pluginlist = @earlylist;
+ @pluginlist = @shortlist;
}
my $result = '<ul class="listdirectives">';
diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm
index 77131edb0..dec8afdb5 100644
--- a/IkiWiki/Plugin/shortcut.pm
+++ b/IkiWiki/Plugin/shortcut.pm
@@ -39,6 +39,7 @@ sub preprocess_shortcut (@) { #{{{
}
hook(type => "preprocess", no_override => 1, id => $params{name},
+ shortcut => 1,
call => sub { shortcut_expand($params{url}, $params{desc}, @_) });
#translators: This is used to display what shortcuts are defined.
diff --git a/doc/bugs/cannot_preview_shortcuts.mdwn b/doc/bugs/cannot_preview_shortcuts.mdwn
index 7c830898d..d7045b2dc 100644
--- a/doc/bugs/cannot_preview_shortcuts.mdwn
+++ b/doc/bugs/cannot_preview_shortcuts.mdwn
@@ -8,3 +8,10 @@ Shortcuts such as \[[!google foo]] do not work when previewing pages.
>> still works, but it relies on the fact that the `listdirectives` `checkconfig`
>> hook is called before the `shortcut` `checkconfig` hook.
>> -- [[Will]]
+
+>> The order plugins are loaded is effectively random. (`keys %hooks`).
+>> So I've made shortcuts pass a 'shortcut' parameter when registering
+>> them, which listdirectives can grep out of the full list of directives.
+>> That may not be the best name to give it, especially if other plugins
+>> generate directives too. Seemed better than forcing shortcut's
+>> checkconfig hook to run last tho. --[[Joey]]