diff options
-rwxr-xr-x | IkiWiki/Plugin/comments.pm | 36 | ||||
-rw-r--r-- | IkiWiki/Render.pm | 12 | ||||
-rwxr-xr-x | t/comments.t | 57 |
3 files changed, 89 insertions, 16 deletions
diff --git a/IkiWiki/Plugin/comments.pm b/IkiWiki/Plugin/comments.pm index 9fb81d15a..3ad2a0e13 100755 --- a/IkiWiki/Plugin/comments.pm +++ b/IkiWiki/Plugin/comments.pm @@ -21,7 +21,8 @@ my %commentstate; sub import { hook(type => "checkconfig", id => 'comments', call => \&checkconfig); hook(type => "getsetup", id => 'comments', call => \&getsetup); - hook(type => "preprocess", id => 'comment', call => \&preprocess); + hook(type => "preprocess", id => 'comment', call => \&preprocess, + scan => 1); hook(type => "preprocess", id => 'commentmoderation', call => \&preprocess_moderation); # here for backwards compatability with old comments hook(type => "preprocess", id => '_comment', call => \&preprocess); @@ -143,22 +144,27 @@ sub preprocess { } $content =~ s/\\"/"/g; - if ($config{comments_allowdirectives}) { - $content = IkiWiki::preprocess($page, $params{destpage}, - $content); - } + if (defined wantarray) { + if ($config{comments_allowdirectives}) { + $content = IkiWiki::preprocess($page, $params{destpage}, + $content); + } - # no need to bother with htmlize if it's just HTML - $content = IkiWiki::htmlize($page, $params{destpage}, $format, $content) - if defined $format; + # no need to bother with htmlize if it's just HTML + $content = IkiWiki::htmlize($page, $params{destpage}, $format, $content) + if defined $format; - IkiWiki::run_hooks(sanitize => sub { - $content = shift->( - page => $page, - destpage => $params{destpage}, - content => $content, - ); - }); + IkiWiki::run_hooks(sanitize => sub { + $content = shift->( + page => $page, + destpage => $params{destpage}, + content => $content, + ); + }); + } + else { + IkiWiki::preprocess($page, $params{destpage}, $content, 1); + } # set metadata, possibly overriding [[!meta]] directives from the # comment itself diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 5288abc6d..05132a8a8 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -475,8 +475,18 @@ sub find_changed ($) { $pagemtime{$page}=$stat[9]; if (isinternal($page)) { + my $content = readfile($srcfile); + # Preprocess internal page in scan-only mode. - preprocess($page, $page, readfile($srcfile), 1); + preprocess($page, $page, $content, 1); + + run_hooks(scan => sub { + shift->( + page => $page, + content => $content, + ); + }); + push @internal_changed, $file; } else { diff --git a/t/comments.t b/t/comments.t new file mode 100755 index 000000000..4721d7a9c --- /dev/null +++ b/t/comments.t @@ -0,0 +1,57 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Test::More 'no_plan'; +use IkiWiki; + +ok(! system("rm -rf t/tmp")); +ok(mkdir "t/tmp"); +ok(! system("cp -R t/tinyblog t/tmp/in")); +ok(mkdir "t/tmp/in/post" or -d "t/tmp/in/post"); + +my $comment; + +$comment = <<EOF; +[[!comment username="neil" + date="1969-07-20T20:17:40Z" + content="I landed"]] +EOF +#ok(eval { writefile("post/comment_3._comment", "t/tmp/in", $comment); 1 }); +writefile("post/comment_3._comment", "t/tmp/in", $comment); + +$comment = <<EOF; +[[!comment username="christopher" + date="1492-10-12T07:00:00Z" + content="I explored"]] +EOF +writefile("post/comment_2._comment", "t/tmp/in", $comment); + +$comment = <<EOF; +[[!comment username="william" + date="1066-10-14T12:00:00Z" + content="I conquered"]] +EOF +writefile("post/comment_1._comment", "t/tmp/in", $comment); + +# Give the files mtimes in the wrong order +ok(utime(111111111, 111111111, "t/tmp/in/post/comment_3._comment")); +ok(utime(222222222, 222222222, "t/tmp/in/post/comment_2._comment")); +ok(utime(333333333, 333333333, "t/tmp/in/post/comment_1._comment")); + +# Build the wiki +ok(! system("make -s ikiwiki.out")); +ok(! system("perl -I. ./ikiwiki.out -verbose -plugin comments -url=http://example.com -cgiurl=http://example.com/ikiwiki.cgi -rss -atom -underlaydir=underlays/basewiki -set underlaydirbase=underlays -set comments_pagespec='*' -templatedir=templates t/tmp/in t/tmp/out")); + +# Check that the comments are in the right order + +sub slurp { + open my $fh, "<", shift or return undef; + local $/; + my $content = <$fh>; + close $fh or return undef; + return $content; +} + +my $content = slurp("t/tmp/out/post/index.html"); +ok(defined $content); +ok($content =~ m/I conquered.*I explored.*I landed/s); |