summaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-05-05 05:41:11 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-05-05 05:41:11 +0000
commit6652de5e1abcaac3ee2f4bf17e5a4b847fcadb0d (patch)
tree29c76e12b318309401a3274e13891210f275bf83 /IkiWiki
parent157df8591f03ade7504ad732446f125ae8609b05 (diff)
* Removed --sanitize and --no-sanitize, replaced with --plugin htmlscrubber
and --disable-plugin htmlscrubber.
Diffstat (limited to 'IkiWiki')
-rw-r--r--IkiWiki/Plugin/htmlscrubber.pm51
-rw-r--r--IkiWiki/Plugin/skeleton.pm14
-rw-r--r--IkiWiki/Render.pm40
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;