use warnings;
use strict;
-use IkiWiki 2.00;
+use IkiWiki 3.00;
use HTML::Entities;
use IPC::Open2;
-sub import { #{{{
+sub import {
+ hook(type => "getsetup", id => "editdiff", call => \&getsetup);
hook(type => "formbuilder_setup", id => "editdiff",
call => \&formbuilder_setup);
-} #}}}
+}
-sub diff ($$) { #{{{
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => 0,
+ section => "web",
+ },
+}
+
+sub diff ($$) {
my $orig=shift;
my $content=shift;
print DIFFIN $content;
close DIFFIN;
- my $ret;
+ my $ret='';
while (<DIFFOUT>) {
if (defined $ret) {
$ret.=$_;
return "couldn't run diff\n" if $sigpipe;
return "<pre>".encode_entities($ret)."</pre>";
-} #}}}
+}
-sub formbuilder_setup { #{{{
+sub formbuilder_setup {
my %params=@_;
my $form=$params{form};
- my $page=$form->field("page");
- return if $form->title ne "editpage"
- || $form->field("do") ne "edit";
+ return if ! defined $form->field("do") || $form->field("do") ne "edit";
- $page = IkiWiki::titlepage(IkiWiki::possibly_foolish_untaint($page));
+ my $page=$form->field("page");
+ $page = IkiWiki::possibly_foolish_untaint($page);
return unless exists $pagesources{$page};
push @{$params{buttons}}, "Diff";
my $diff = diff(srcfile($pagesources{$page}), $content);
$form->tmpl_param("page_preview", $diff);
}
-} #}}}
+}
1