diff options
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/htmlscrubber.pm | 51 | ||||
-rw-r--r-- | IkiWiki/Plugin/skeleton.pm | 14 |
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; } # }}} |