From 27d029113faf479464db289a71b98cbf5e672793 Mon Sep 17 00:00:00 2001 From: joey Date: Thu, 23 Aug 2007 20:14:08 +0000 Subject: [PATCH] * 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 +++++++++++++++++++++++++++++++++ debian/changelog | 7 +++- doc/plugins/embed.mdwn | 45 ++++++++++++++++++++++ doc/plugins/googlecalendar.mdwn | 2 + 4 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 IkiWiki/Plugin/embed.pm create mode 100644 doc/plugins/embed.mdwn 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 -- 2.39.5