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 diff --git a/debian/changelog b/debian/changelog index 2ec096ee6..b057e7c56 100644 --- a/debian/changelog +++ b/debian/changelog @@ -52,8 +52,13 @@ ikiwiki (2.6) UNRELEASED; urgency=low * Call decode_form_utf8 before running formbuilder_setup hooks. * Add editdiff plugin contributed by Jeremie Koenig. * Fix it to not leak path info. + * 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. - -- Joey Hess Wed, 22 Aug 2007 16:56:22 -0400 + -- Joey Hess Thu, 23 Aug 2007 14:08:46 -0400 ikiwiki (2.5) unstable; urgency=low diff --git a/doc/plugins/embed.mdwn b/doc/plugins/embed.mdwn new file mode 100644 index 000000000..ba327da8d --- /dev/null +++ b/doc/plugins/embed.mdwn @@ -0,0 +1,45 @@ +[[template id=plugin name=embed author="[[Joey]]"]] +[[tag type/html]] + +This plugin allows embedding content from external sites on +wiki pages. + +Normally, the [[htmlscrubber]] does not allow the tags that are used for +embedding content from external sites, since ` + +(This method only allows embeddeding a simple map. To use the full +[Google Maps API](http://www.google.com/apis/maps/) from ikiwiki, including +drawing points and GPS tracks on the map, try the [[contrib/googlemaps]] +plugin.) + +## youtube + +Use html like this to embed a video: + + + + +## google video + +Use html like this to embed a video: + + + +## google calendar + +Use html like this to embed a calendar: + + + diff --git a/doc/plugins/googlecalendar.mdwn b/doc/plugins/googlecalendar.mdwn index 940918078..6d7429d14 100644 --- a/doc/plugins/googlecalendar.mdwn +++ b/doc/plugins/googlecalendar.mdwn @@ -1,6 +1,8 @@ [[template id=plugin name=googlecalendar author="[[Joey]]"]] [[tag type/special-purpose]] +*Note*: This plugin is deprecated. Please switch to the [[embed]] plugin. + This plugin allows embedding a google calendar iframe in the wiki. Normally, if the [[htmlscrubber]] is enabled, such iframes are scrubbed out of the wiki content since they're not very safe if created by malicious