From: intrigeri <intrigeri@boum.org>
Date: Tue, 29 Jun 2010 13:13:23 +0000 (+0200)
Subject: Add a fullpage arg to filter.
X-Git-Tag: 3.20100722~8^2~8^2~9
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/dcd57dd5c9f3265bb7a78a5696b90976698c43aa

Add a fullpage arg to filter.

Set it to true every time IkiWiki::filter is called on a full page's content.

This is a much nicer solution, for the po plugin, than previous whitelisting
using caller().
---

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