From 27d029113faf479464db289a71b98cbf5e672793 Mon Sep 17 00:00:00 2001 From: joey Date: Thu, 23 Aug 2007 20:14:08 +0000 Subject: * Add embed plugin, which allows embedding content from google maps, video, calendar, and youtube. Normally, the htmlsanitiser eats these since they use unsafe tags, the embed plugin overrides it for trusted sites. * The googlecalendar plugin is now deprecated, and will be removed eventually. Please switch to using the embed plugin. --- IkiWiki/Plugin/embed.pm | 68 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 IkiWiki/Plugin/embed.pm (limited to 'IkiWiki') diff --git a/IkiWiki/Plugin/embed.pm b/IkiWiki/Plugin/embed.pm new file mode 100644 index 000000000..4fc91d978 --- /dev/null +++ b/IkiWiki/Plugin/embed.pm @@ -0,0 +1,68 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::embed; + +use warnings; +use strict; +use IkiWiki 2.00; + +my $attribr=qr/[^<>"]+/; + +# regexp matching known-safe html +my $safehtml=qr{( + # google maps + <\s*iframe\s+width="\d+"\s+height="\d+"\s+frameborder="$attribr"\s+ + scrolling="$attribr"\s+marginheight="\d+"\s+marginwidth="\d+"\s+ + src="http://maps.google.com/\?$attribr"\s*>\s* + + | + + # youtube + <\s*object\s+width="\d+"\s+height="\d+"\s*>\s* + <\s*param\s+name="movie"\s+value="http://www.youtube.com/v/$attribr"\s*>\s* + \s* + <\s*param\s+name="wmode"\s+value="transparent"\s*>\s*\s* + \s*\s* + + | + + # google video + <\s*embed\s+style="\s*width:\d+px;\s+height:\d+px;\s*"\s+id="$attribr"\s+ + type="application/x-shockwave-flash"\s+ + src="http://video.google.com/googleplayer.swf\?$attribr"\s+ + flashvars=""\s*>\s* + + | + + # google calendar + <\s*iframe\s+src="http://www.google.com/calendar/embed\?src=$attribr"\s+ + style="\s*border-width:\d+\s*"\s+width="\d+"\s+frameborder="\d+"\s* + height="\d+"\s*>\s* +)}sx; + +my @embedded; + +sub import { #{{{ + hook(type => "filter", id => "embed", call => \&filter); +} # }}} + +sub embed ($) { #{{{ + hook(type => "format", id => "embed", call => \&format) unless @embedded; + push @embedded, shift; + return "
"; +} #}}} + +sub filter (@) { #{{{ + my %params=@_; + $params{content} =~ s/$safehtml/embed($1)/eg; + return $params{content}; +} # }}} + +sub format (@) { #{{{ + my %params=@_; + $params{content} =~ s/
<\/div>/$embedded[$1]/eg; + return $params{content}; +} # }}} + +1 -- cgit v1.2.3