]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/recentchangesdiff.pm
Merge remote branch 'smcv/ready/tag-test'
[git.ikiwiki.info.git] / IkiWiki / Plugin / recentchangesdiff.pm
index 3942f308b05a86b5d4e7f0524fd756534a492391..71297572d7b74a5042e18fd93128a4dca773e170 100644 (file)
@@ -3,36 +3,48 @@ package IkiWiki::Plugin::recentchangesdiff;
 
 use warnings;
 use strict;
 
 use warnings;
 use strict;
-use IkiWiki 2.00;
+use IkiWiki 3.00;
+use HTML::Entities;
 
 my $maxlines=200;
 
 
 my $maxlines=200;
 
-sub import { #{{{
+sub import {
+       hook(type => "getsetup", id => "recentchangesdiff",
+               call => \&getsetup);
        hook(type => "pagetemplate", id => "recentchangesdiff",
                call => \&pagetemplate);
        hook(type => "pagetemplate", id => "recentchangesdiff",
                call => \&pagetemplate);
-} #}}}
+}
 
 
-sub pagetemplate (@) { #{{{
+sub getsetup () {
+       return 
+               plugin => {
+                       safe => 1,
+                       rebuild => 1,
+               },
+}
+
+sub pagetemplate (@) {
        my %params=@_;
        my $template=$params{template};
        if ($config{rcs} && exists $params{rev} && length $params{rev} &&
            $template->query(name => "diff")) {
        my %params=@_;
        my $template=$params{template};
        if ($config{rcs} && exists $params{rev} && length $params{rev} &&
            $template->query(name => "diff")) {
-               my @lines=IkiWiki::rcs_diff($params{rev});
+               my @lines=IkiWiki::rcs_diff($params{rev}, $maxlines+1);
                if (@lines) {
                        my $diff;
                        if (@lines > $maxlines) {
                if (@lines) {
                        my $diff;
                        if (@lines > $maxlines) {
-                               # only include so many lines of diff
                                $diff=join("", @lines[0..($maxlines-1)])."\n".
                                        gettext("(Diff truncated)");
                        }
                        else {
                                $diff=join("", @lines);
                        }
                                $diff=join("", @lines[0..($maxlines-1)])."\n".
                                        gettext("(Diff truncated)");
                        }
                        else {
                                $diff=join("", @lines);
                        }
+                       # escape html
+                       $diff = encode_entities($diff);
                        # escape links and preprocessor stuff
                        # escape links and preprocessor stuff
-                       $diff =~ s/(?<!\\)\[\[/\\\[\[/g;
+                       $diff = encode_entities($diff, '\[\]');
                        $template->param(diff => $diff);
                }
        }
                        $template->param(diff => $diff);
                }
        }
-} #}}}
+}
 
 1
 
 1