summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-30 00:20:11 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-07-30 00:20:11 +0000
commitab75c0323bc584203a2b4a507c2a2012523354d0 (patch)
treeff4f82fd125bb7976b74d88520bd3cb847fc814d
parent584fe78075793b2b5dc2992125e88188cae0d1c7 (diff)
* Add a run_hooks function for the common task of running all hooks of a
given type. * Add a savestate hook. * Don't put blog post forms on pages if there's no cgiurl set. * Reformat front page.
-rw-r--r--IkiWiki.pm19
-rw-r--r--IkiWiki/CGI.pm6
-rw-r--r--IkiWiki/Plugin/inline.pm26
-rw-r--r--IkiWiki/Plugin/skeleton.pm6
-rw-r--r--IkiWiki/Render.pm43
-rw-r--r--debian/changelog10
-rw-r--r--doc/index.mdwn18
-rw-r--r--doc/plugins/write.mdwn8
-rw-r--r--doc/todo/aggregation.mdwn7
-rwxr-xr-xikiwiki6
10 files changed, 82 insertions, 67 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index d369d7da8..54ca84550 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -93,11 +93,7 @@ sub checkconfig () { #{{{
require IkiWiki::Rcs::Stub;
}
- if (exists $hooks{checkconfig}) {
- foreach my $id (keys %{$hooks{checkconfig}}) {
- $hooks{checkconfig}{$id}{call}->();
- }
- }
+ run_hooks(checkconfig => sub { shift->() });
} #}}}
sub loadplugins () { #{{{
@@ -503,4 +499,17 @@ sub hook (@) { # {{{
$hooks{$param{type}}{$param{id}}=\%param;
} # }}}
+sub run_hooks ($$) { # {{{
+ # Calls the given sub for each hook of the given type,
+ # passing it the hook function to call.
+ my $type=shift;
+ my $sub=shift;
+
+ if (exists $hooks{$type}) {
+ foreach my $id (keys %{$hooks{$type}}) {
+ $sub->($hooks{$type}{$id}{call});
+ }
+ }
+} #}}}
+
1
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 7360ca998..5e54c5674 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -567,11 +567,7 @@ sub cgi () { #{{{
my $q=CGI->new;
- if (exists $hooks{cgi}) {
- foreach my $id (keys %{$hooks{cgi}}) {
- $hooks{cgi}{$id}{call}->($q);
- }
- }
+ run_hooks(cgi => sub { shift->($q) });
my $do=$q->param('do');
if (! defined $do || ! length $do) {
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 427c25a96..7bb71a436 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -58,7 +58,7 @@ sub preprocess_inline (@) { #{{{
my $ret="";
- if (exists $params{rootpage}) {
+ if (exists $params{rootpage} && $config{cgiurl}) {
# Add a blog post form, with a rss link button.
my $formtemplate=template("blogpost.tmpl", blind_cache => 1);
$formtemplate->param(cgiurl => $config{cgiurl});
@@ -88,15 +88,10 @@ sub preprocess_inline (@) { #{{{
if $params{archive} eq "no";
$template->param(ctime => displaytime($pagectime{$page}));
- if (exists $hooks{pagetemplate}) {
- foreach my $id (keys %{$hooks{pagetemplate}}) {
- $hooks{pagetemplate}{$id}{call}->(
- page => $page,
- destpage => $params{page},
- template => $template,
- );
- }
- }
+ run_hooks(pagetemplate => sub {
+ shift->(page => $page, destpage => $params{page},
+ template => $template,);
+ });
$ret.=$template->output;
$template->clear_params;
@@ -181,13 +176,10 @@ sub genrss ($@) { #{{{
items => \@items,
);
- foreach my $id (keys %{$hooks{pagetemplate}}) {
- $hooks{pagetemplate}{$id}{call}->(
- page => $page,
- destpage => $page,
- template => $template,
- );
- }
+ run_hooks(pagetemplate => sub {
+ shift->(page => $page, destpage => $page,
+ template => $template);
+ });
return $template->output;
} #}}}
diff --git a/IkiWiki/Plugin/skeleton.pm b/IkiWiki/Plugin/skeleton.pm
index 27da50e6f..e63bab6d7 100644
--- a/IkiWiki/Plugin/skeleton.pm
+++ b/IkiWiki/Plugin/skeleton.pm
@@ -29,6 +29,8 @@ sub import { #{{{
call => \&change);
IkiWiki::hook(type => "cgi", id => "skeleton",
call => \&cgi);
+ IkiWiki::hook(type => "cgi", id => "savestate",
+ call => \&savestate);
} # }}}
sub getopt () { #{{{
@@ -95,4 +97,8 @@ sub cgi ($) { #{{{
IkiWiki::debug("skeleton plugin running in cgi");
} #}}}
+sub savestate () { #{{{
+ IkiWiki::debug("skeleton plugin running in savestate");
+} #}}}
+
1
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index caec7f1f0..5dbb4654c 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -31,11 +31,9 @@ sub htmlize ($$) { #{{{
error("htmlization of $type not supported");
}
- if (exists $hooks{sanitize}) {
- foreach my $id (keys %{$hooks{sanitize}}) {
- $content=$hooks{sanitize}{$id}{call}->($content);
- }
- }
+ run_hooks(sanitize => sub {
+ $content=shift->($content);
+ });
return $content;
} #}}}
@@ -206,15 +204,9 @@ sub genpage ($$$) { #{{{
styleurl => styleurl($page),
);
- if (exists $hooks{pagetemplate}) {
- foreach my $id (keys %{$hooks{pagetemplate}}) {
- $hooks{pagetemplate}{$id}{call}->(
- page => $page,
- destpage => $page,
- template => $template,
- );
- }
- }
+ run_hooks(pagetemplate => sub {
+ shift->(page => $page, destpage => $page, template => $template);
+ });
return $template->output;
} #}}}
@@ -268,14 +260,9 @@ sub filter ($$) {
my $page=shift;
my $content=shift;
- if (exists $hooks{filter}) {
- foreach my $id (keys %{$hooks{filter}}) {
- $content=$hooks{filter}{$id}{call}->(
- page => $page,
- content => $content
- );
- }
- }
+ run_hooks(filter => sub {
+ $content=shift->(page => $page, content => $content);
+ });
return $content;
}
@@ -496,15 +483,11 @@ FILE: foreach my $file (@files) {
}
}
- if (@del && exists $hooks{delete}) {
- foreach my $id (keys %{$hooks{delete}}) {
- $hooks{delete}{$id}{call}->(@del);
- }
+ if (@del) {
+ run_hooks(delete => sub { shift->(@del) });
}
- if (%rendered && exists $hooks{change}) {
- foreach my $id (keys %{$hooks{change}}) {
- $hooks{change}{$id}{call}->(keys %rendered);
- }
+ if (%rendered) {
+ run_hooks(change => sub { shift->(keys %rendered) });
}
} #}}}
diff --git a/debian/changelog b/debian/changelog
index c20b5a102..babaefff2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,13 @@
+ikiwiki (1.13) UNRELEASED; urgency=low
+
+ * Add a run_hooks function for the common task of running all hooks of a
+ given type.
+ * Add a savestate hook.
+ * Don't put blog post forms on pages if there's no cgiurl set.
+ * Reformat front page.
+
+ -- Joey Hess <joeyh@debian.org> Sat, 29 Jul 2006 20:10:51 -0400
+
ikiwiki (1.12) unstable; urgency=low
"Viva l'Italia!"
diff --git a/doc/index.mdwn b/doc/index.mdwn
index 23e60c00b..1e2ec44e5 100644
--- a/doc/index.mdwn
+++ b/doc/index.mdwn
@@ -4,15 +4,23 @@ into html pages suitable for publishing on a website. Unlike a traditional
wiki, ikiwiki does not have its own means of storing page history.
Instead it can use [[Subversion]] (or [[Git]]).
-* [[News]] is a blog (built using ikiwiki) of news items about ikiwiki. It's the best way to find out when there's a new version to [[Download]].
+* [[News]] is a blog (built using ikiwiki) of news items about ikiwiki.
+ It's the best way to find out when there's a new version to [[Download]].
-* See [[Features]] for a list of ikiwiki's features. [[RoadMap]], [[TODO]] and [[bugs]] might also be of interest. Feel free to post your thoughts about ikiwiki to [[Discussion]].
+* See [[Features]] for a list of ikiwiki's features. [[RoadMap]], [[TODO]]
+ and [[bugs]] might also be of interest. Feel free to post your thoughts
+ about ikiwiki to [[Discussion]].
-* [[Setup]] has a tutorial for setting up ikiwiki, and [[Usage]] documents the parameters and usage of the ikiwiki program. If you use ikiwiki, please add your wiki to [[IkiWikiUsers]].
+* [[Setup]] has a tutorial for setting up ikiwiki, and [[Usage]] documents
+ the parameters and usage of the ikiwiki program. If you use ikiwiki,
+ please add your wiki to [[IkiWikiUsers]].
-* [[Security]] lists potential security problems. ikiwiki is still being developed, and is being written with security as a priority, so don't expect things to stay in this list for long.
+* [[Security]] lists potential security problems. ikiwiki is still being
+ developed, and is being written with security as a priority, so don't
+ expect things to stay in this list for long.
-* Developers, please document any ikiwiki patches you have in the [[PatchQueue]].
+* Developers, please document any ikiwiki patches you have in the
+ [[PatchQueue]].
All wikis are supposed to have a [[SandBox]], so this one does too.
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index 93c6d1d5c..025a242a6 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -157,6 +157,14 @@ called in turn, and passed a CGI object. The hook should examine the
parameters, and if it will handle this CGI request, output a page and
terminate the program.
+## savestate
+
+ IkiWiki::hook(type => "savestate", id => "foo", call => \&savestate);
+
+This hook is called wheneven ikiwiki normally saves its state, just before
+the state is saved. The function can save other state, modify values before
+they're saved, etc.
+
# Wiki configuration
A plugin can access the wiki's configuration via the `%IkiWiki::config`
diff --git a/doc/todo/aggregation.mdwn b/doc/todo/aggregation.mdwn
index ce8143fa2..7d765f9e9 100644
--- a/doc/todo/aggregation.mdwn
+++ b/doc/todo/aggregation.mdwn
@@ -15,3 +15,10 @@ poor-man's news aggregator.
better would be to use preprocessor directives in a wiki page, probably
the same page that inlines all the pages together.
* Where to store when a feed was last pulled?
+
+So I need:
+
+* A way to store info from the preprocessor directives about what pages
+ to pull and expiry.
+* A way to store info on last pull time, guids, etc.
+* Switch for a mode that a) pulls b) expires old c) rebuilds wiki (for cron)
diff --git a/ikiwiki b/ikiwiki
index a10876a96..28eba6f64 100755
--- a/ikiwiki
+++ b/ikiwiki
@@ -68,11 +68,7 @@ sub getconfig () { #{{{
if (! $config{setup}) {
loadplugins();
- if (exists $hooks{getopt}) {
- foreach my $id (keys %{$hooks{getopt}}) {
- $hooks{getopt}{$id}{call}->();
- }
- }
+ run_hooks(getopt => sub { shift->() });
if (grep /^-/, @ARGV) {
print STDERR "Unknown option: $_\n"
foreach grep /^-/, @ARGV;