]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/recentchangesdiff.pm
close debian bug I opened about blogspam
[git.ikiwiki.info.git] / IkiWiki / Plugin / recentchangesdiff.pm
index 71297572d7b74a5042e18fd93128a4dca773e170..eb358be67bef0e8a87146846857d5bc24cfdc396 100644 (file)
@@ -9,10 +9,12 @@ use HTML::Entities;
 my $maxlines=200;
 
 sub import {
+       add_underlay("javascript");
        hook(type => "getsetup", id => "recentchangesdiff",
                call => \&getsetup);
        hook(type => "pagetemplate", id => "recentchangesdiff",
                call => \&pagetemplate);
+       hook(type => "format", id => "recentchangesdiff.pm", call => \&format);
 }
 
 sub getsetup () {
@@ -31,13 +33,21 @@ sub pagetemplate (@) {
                my @lines=IkiWiki::rcs_diff($params{rev}, $maxlines+1);
                if (@lines) {
                        my $diff;
+                       my $trunc=0;
                        if (@lines > $maxlines) {
-                               $diff=join("", @lines[0..($maxlines-1)])."\n".
-                                       gettext("(Diff truncated)");
+                               $diff=join("", @lines[0..($maxlines-1)]);
+                               $trunc=1;
                        }
                        else {
                                $diff=join("", @lines);
                        }
+                       if (length $diff > 102400) {
+                               $diff=substr($diff, 0, 10240);
+                               $trunc=1;
+                       }
+                       if ($trunc) {
+                               $diff.="\n".gettext("(Diff truncated)");
+                       }
                        # escape html
                        $diff = encode_entities($diff);
                        # escape links and preprocessor stuff
@@ -47,4 +57,24 @@ sub pagetemplate (@) {
        }
 }
 
+sub format (@) {
+        my %params=@_;
+
+       if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
+               # no <body> tag, probably in preview mode
+               $params{content}=include_javascript(undef).$params{content};
+       }
+       return $params{content};
+}
+
+# taken verbatim from toggle.pm
+sub include_javascript ($) {
+       my $from=shift;
+       
+       return '<script src="'.urlto("ikiwiki/ikiwiki.js", $from).
+               '" type="text/javascript" charset="utf-8"></script>'."\n".
+               '<script src="'.urlto("ikiwiki/toggle.js", $from).
+               '" type="text/javascript" charset="utf-8"></script>';
+}
+
 1