aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki.pm6
-rw-r--r--IkiWiki/Plugin/editpage.pm2
-rw-r--r--IkiWiki/Plugin/inline.pm4
-rw-r--r--IkiWiki/Plugin/po.pm6
-rw-r--r--IkiWiki/Plugin/sidebar.pm2
-rw-r--r--IkiWiki/Render.pm4
-rw-r--r--doc/plugins/write.mdwn4
7 files changed, 15 insertions, 13 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 0457a6c61..7b5fd283d 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -1396,14 +1396,16 @@ sub preprocess ($$$;$$) {
return $content;
}
-sub filter ($$$) {
+sub filter ($$$;$) {
my $page=shift;
my $destpage=shift;
my $content=shift;
+ my $fullpage=shift;
+ $fullpage = 0 unless defined $fullpage;
run_hooks(filter => sub {
$content=shift->(page => $page, destpage => $destpage,
- content => $content);
+ content => $content, fullpage => $fullpage);
});
return $content;
diff --git a/IkiWiki/Plugin/editpage.pm b/IkiWiki/Plugin/editpage.pm
index 1a04a72b5..706630203 100644
--- a/IkiWiki/Plugin/editpage.pm
+++ b/IkiWiki/Plugin/editpage.pm
@@ -187,7 +187,7 @@ sub cgi_editpage ($$) {
my $preview=htmlize($page, $page, $type,
linkify($page, $page,
preprocess($page, $page,
- filter($page, $page, $content), 0, 1)));
+ filter($page, $page, $content, 'fullpage'), 0, 1)));
run_hooks(format => sub {
$preview=shift->(
page => $page,
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 715a3d652..a04dd6630 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -403,7 +403,7 @@ sub preprocess_inline (@) {
linkify($page, $params{destpage},
preprocess($page, $params{destpage},
filter($page, $params{destpage},
- readfile(srcfile($file)))));
+ readfile(srcfile($file)), 'fullpage')));
}
else {
$ret.="\n".
@@ -474,7 +474,7 @@ sub get_inline_content ($$) {
linkify($page, $destpage,
preprocess($page, $destpage,
filter($page, $destpage,
- readfile(srcfile($file))))));
+ readfile(srcfile($file)), 'fullpage'))));
$nested--;
if (isinternal($page)) {
# make inlined text of internal pages searchable
diff --git a/IkiWiki/Plugin/po.pm b/IkiWiki/Plugin/po.pm
index ac4401e48..93cf6bbdf 100644
--- a/IkiWiki/Plugin/po.pm
+++ b/IkiWiki/Plugin/po.pm
@@ -259,11 +259,9 @@ sub filter (@) {
my $page = $params{page};
my $destpage = $params{destpage};
my $content = $params{content};
+ my $fullpage = $params{fullpage};
- my @caller = caller(4);
- # FIXME: need to whitelist inline as well?
- unless ($caller[3] eq "IkiWiki::render" ||
- $caller[3] eq 'IkiWiki::Plugin::sidebar::sidebar_content') {
+ unless ($fullpage) {
return $content;
}
diff --git a/IkiWiki/Plugin/sidebar.pm b/IkiWiki/Plugin/sidebar.pm
index 2d495db2c..100015cee 100644
--- a/IkiWiki/Plugin/sidebar.pm
+++ b/IkiWiki/Plugin/sidebar.pm
@@ -89,7 +89,7 @@ sub sidebar_content ($) {
return IkiWiki::htmlize($sidebar_page, $page, $sidebar_type,
IkiWiki::linkify($sidebar_page, $page,
IkiWiki::preprocess($sidebar_page, $page,
- IkiWiki::filter($sidebar_page, $page, $content))));
+ IkiWiki::filter($sidebar_page, $page, $content, 'fullpage'))));
}
}
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index a653ab2da..233d093ed 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -232,7 +232,7 @@ sub render ($$) {
linkify($page, $page,
preprocess($page, $page,
filter($page, $page,
- readfile($srcfile)))));
+ readfile($srcfile), 'fullpage'))));
my $output=htmlpage($page);
writefile($output, $config{destdir}, genpage($page, $content));
@@ -837,7 +837,7 @@ sub commandline_render () {
my $content=readfile($srcfile);
my $page=pagename($file);
$pagesources{$page}=$file;
- $content=filter($page, $page, $content);
+ $content=filter($page, $page, $content, 'fullpage');
$content=preprocess($page, $page, $content);
$content=linkify($page, $page, $content);
$content=htmlize($page, $page, $type, $content);
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index a921b9a02..15ed08d82 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -200,7 +200,9 @@ value is ignored.
Runs on the raw source of a page, before anything else touches it, and can
make arbitrary changes. The function is passed named parameters "page",
-"destpage", and "content". It should return the filtered content.
+"destpage", "content" and "fullpage". "fullpage" is a true value if,
+and only if, a full page's content is being filtered, e.g. as opposed
+to a directive parameter. It should return the filtered content.
### preprocess