diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-05-05 05:41:11 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-05-05 05:41:11 +0000 |
commit | 6652de5e1abcaac3ee2f4bf17e5a4b847fcadb0d (patch) | |
tree | 29c76e12b318309401a3274e13891210f275bf83 /IkiWiki | |
parent | 157df8591f03ade7504ad732446f125ae8609b05 (diff) |
* Removed --sanitize and --no-sanitize, replaced with --plugin htmlscrubber
and --disable-plugin htmlscrubber.
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/htmlscrubber.pm | 51 | ||||
-rw-r--r-- | IkiWiki/Plugin/skeleton.pm | 14 | ||||
-rw-r--r-- | IkiWiki/Render.pm | 40 |
3 files changed, 67 insertions, 38 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; } # }}} diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 262e0ec29..9feaa6da7 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -19,40 +19,6 @@ sub linkify ($$) { #{{{ return $content; } #}}} -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; -} # }}} - sub htmlize ($$) { #{{{ my $type=shift; my $content=shift; @@ -71,8 +37,10 @@ sub htmlize ($$) { #{{{ error("htmlization of $type not supported"); } - if ($config{sanitize}) { - $content=scrubber()->scrub($content); + if (exists $hooks{sanitize}) { + foreach my $id (keys %{$hooks{sanitize}}) { + $content=$hooks{sanitize}{$id}{call}->($content); + } } return $content; |