summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/htmlscrubber.pm51
-rw-r--r--IkiWiki/Plugin/skeleton.pm14
2 files changed, 63 insertions, 2 deletions
diff --git a/IkiWiki/Plugin/htmlscrubber.pm b/IkiWiki/Plugin/htmlscrubber.pm
new file mode 100644
index 000000000..41cf6c991
--- /dev/null
+++ b/IkiWiki/Plugin/htmlscrubber.pm
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+package IkiWiki::Plugin::htmlscrubber;
+
+use warnings;
+use strict;
+use IkiWiki;
+
+sub import { #{{{
+ IkiWiki::hook(type => "sanitize", id => "htmlscrubber",
+ call => \&sanitize);
+} # }}}
+
+sub sanitize ($) { #{{{
+ return scrubber()->scrub(shift);
+} # }}}
+
+my $_scrubber;
+sub scrubber { #{{{
+ return $_scrubber if defined $_scrubber;
+
+ eval q{use HTML::Scrubber};
+ # Lists based on http://feedparser.org/docs/html-sanitization.html
+ $_scrubber = HTML::Scrubber->new(
+ allow => [qw{
+ a abbr acronym address area b big blockquote br
+ button caption center cite code col colgroup dd del
+ dfn dir div dl dt em fieldset font form h1 h2 h3 h4
+ h5 h6 hr i img input ins kbd label legend li map
+ menu ol optgroup option p pre q s samp select small
+ span strike strong sub sup table tbody td textarea
+ tfoot th thead tr tt u ul var
+ }],
+ default => [undef, { map { $_ => 1 } qw{
+ abbr accept accept-charset accesskey action
+ align alt axis border cellpadding cellspacing
+ char charoff charset checked cite class
+ clear cols colspan color compact coords
+ datetime dir disabled enctype for frame
+ headers height href hreflang hspace id ismap
+ label lang longdesc maxlength media method
+ multiple name nohref noshade nowrap prompt
+ readonly rel rev rows rowspan rules scope
+ selected shape size span src start summary
+ tabindex target title type usemap valign
+ value vspace width
+ }}],
+ );
+ return $_scrubber;
+} # }}}
+
+1
diff --git a/IkiWiki/Plugin/skeleton.pm b/IkiWiki/Plugin/skeleton.pm
index d5a2125e5..346dfa5ff 100644
--- a/IkiWiki/Plugin/skeleton.pm
+++ b/IkiWiki/Plugin/skeleton.pm
@@ -15,6 +15,8 @@ sub import { #{{{
call => \&preprocess);
IkiWiki::hook(type => "filter", id => "skeleton",
call => \&filter);
+ IkiWiki::hook(type => "sanitize", id => "skeleton",
+ call => \&sanitize);
IkiWiki::hook(type => "delete", id => "skeleton",
call => \&delete);
IkiWiki::hook(type => "change", id => "skeleton",
@@ -33,11 +35,19 @@ sub preprocess (@) { #{{{
return "skeleton plugin result";
} # }}}
-sub filter ($) { #{{{
- my $content=shift;
+sub filter (@) { #{{{
+ my %params=@_;
IkiWiki::debug("skeleton plugin running as filter");
+ return $params{content};
+} # }}}
+
+sub sanitize ($) { #{{{
+ my $content=shift;
+
+ IkiWiki::debug("skeleton plugin running as a sanitizer");
+
return $content;
} # }}}