Add a fullpage arg to filter.
authorintrigeri <intrigeri@boum.org>
Tue, 29 Jun 2010 13:13:23 +0000 (15:13 +0200)
committerintrigeri <intrigeri@boum.org>
Tue, 29 Jun 2010 13:17:56 +0000 (15:17 +0200)
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().

IkiWiki.pm
IkiWiki/Plugin/editpage.pm
IkiWiki/Plugin/inline.pm
IkiWiki/Plugin/po.pm
IkiWiki/Plugin/sidebar.pm
IkiWiki/Render.pm
doc/plugins/write.mdwn

index 0457a6c611902c2ec3cfc326753596c8ec276f6f..7b5fd283d6e09782c80f86361dd72e7b7b3fed72 100644 (file)
@@ -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;
index 1a04a72b5568f2980d8a7e00d0eaaa06a62e0e0d..70663020318197396412354be7a9d7462df62e4b 100644 (file)
@@ -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,
index 715a3d6523cfcee4e57c125425d19cfdab110298..a04dd6630b9ee3f01ebc1e0887f656416c860fc8 100644 (file)
@@ -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
index ac4401e48fa1d40a75346b768628380f6c24e57f..93cf6bbdfd183eaf32edf166d8b9d56758c0f49a 100644 (file)
@@ -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;
        }
 
index 2d495db2cc0d02e1bc1abbc3653627374a8179ba..100015ceeeeb4f035e165e64713e907ee4d47eb6 100644 (file)
@@ -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'))));
        }
 
 }
index a653ab2da02e542828349c3d9f3ac200340608f4..233d093eda602387902cfade75573ee62760a3ed 100644 (file)
@@ -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);
index a921b9a0272098e191987c80066c6e7931cafa2e..15ed08d82b698baece572f1e845e13fe1808bc35 100644 (file)
@@ -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