#!/usr/bin/env perl use strict; # ====================[ flashbox.pl ]==================== =head1 NAME flashbox - An Oddmuse module for embedding offsite-hosted Flash videos within an Oddmuse Wiki page - especially those hosted by Google Videos, YouTube, and SlideShare. =head1 INSTALLATION flashbox is easily installable: move this file into the B directory of your Oddmuse Wiki. =cut package OddMuse; AddModuleDescription('flashbox.pl', 'Flashbox Extension'); our ($bol, @MyRules, %RuleOrder); # ....................{ CONFIGURATION }.................... =head1 CONFIGURATION flashbox is easily configurable: set these variables in the B file for your Oddmuse Wiki. =cut our ($FlashboxWidth, $FlashboxHeight); =head2 $FlashboxWidth The width of the HTML object "frame" for Flash videos, in pixels. The default value for this variable is (usually) fine. =cut $FlashboxWidth = 420; =head2 $FlashboxHeight The height of the HTML object "frame" for Flash videos, in pixels. For any specific width, a height roughly 83.33% of that width tends to provide a respectable frame for viewing Flash videos. The default value for this variable is (usually) fine. =cut $FlashboxHeight = 350; # ....................{ MARKUP }.................... =head1 MARKUP flashbox provides a few new markup rules. These are: =over =item [[GoogleVideo:${GoogleVideoID}]] =over =item Embeds the Google Video uniquely identified by ${GoogleVideoID} into the Oddmuse Wiki page, where ${GoogleVideoID} is the signed integer following the "docID" parameter in the Google Video URL for that video; for example, [[GoogleVideo:8649250863235826256]] embeds Derrick Jensen's "Endgame: Part I" Google Video into the Oddmuse Wiki page. =back =item [[YouTube:${YouTubeVideoID}]] =over =item Embeds the YouTube video uniquely identified by ${YouTubeVideoID} into the Oddmuse Wiki page, where ${YouTubeVideoID} is the string following the "watch?v" parameter in the YouTube URL for that video; for example, [[YouTube:Q1ZeXnmDZMQ]] embeds James Howard Kunstler's "The Tragedy of Suburbia TED Talk" YouTube video into the Oddmuse Wiki page. =back =item [[SlideShare:${SlideSharePresentationID}]] =over =item Embeds the SlideShare presentation uniquely identified by ${SlideSharePresentationID} into the Oddmuse Wiki page, where ${SlideSharePresentationID} is a string composed of the title for that presentation and an arbitrary signed integer. Unfortunately, this string is more difficult to obtain than for Google Video and YouTube; for any given presentation, see the small "Embed" box on that presentation's SlideShare page and the string following the "doc" parameter in that box. For example, [[SlideShare:the-tyranny-of-human-civilization-13479]] embeds huer1278ft's "The Tyranny of Human Civilization" SlideShare presentation into the Oddmuse Wiki page. =back =back =cut push(@MyRules, \&FlashboxRule); # "FlashboxRule" conflicts with "CreoleRule"-style interpretation of "[[...]]" # syntax; and must, thus, be applied before that rule. $RuleOrder{\&FlashboxRule} = -11; sub FlashboxRule { if (/\G\[\[googlevideo:([0-9-]+)\]\]/cgi) { return FlashboxHtml('googlevideo', "http://video.google.com/googleplayer.swf?docId=${1}&hl=en"); } elsif (/\G\[\[slideshare:([a-z0-9-]+)\]\]/cgi) { return FlashboxHtml('slideshare', "http://static.slideshare.net/swf/ssplayer2.swf?doc=${1}"); } elsif (/\G\[\[youtube:([a-z0-9-_]{11})\]\]/cgi) { return FlashboxHtml('youtube', "http://www.youtube.com/v/${1}"); } return; } sub FlashboxHtml { my ($paragraph_class, $flashbox_url) = @_; return ($bol ? CloseHtmlEnvironments().AddHtmlEnvironment('p', qq~class="flashbox ${paragraph_class}"~) : '').qq~ ~; } =head1 CSS flashbox also provides a few new HTML classes for CSS-stylizing the HTML emitted by these markup rules. Of necessity, flashbox embeds Flash videos in an "..." HTML tag-set; technically, therefore, you can stylize such videos with a CSS selector resembling: # This CSS selector selects all HTML-embedded objects (e.g., Flash videos). object { # These CSS properties are supposed to horizontally center such objects; # however, they do not. margin: 1.500em auto; padding: 1.500em 0.000em 0.500em 0.000em; text-align: center; text-indent: 0.000em; } Unfortunately, most browsers ignore most CSS properties on the CSS "object" selector (including those in the example, above). To circumvent this, flashbox enwraps all block-level, flashbox-specific markup (i.e., flashbox-specific markup preceded by at least two newlines) within an HTML paragraph having two unique classes. This HTML paragraph, unlike the "..." HTML tag-set, is styleable by all browsers via CSS selection of these classes: =over =item "flashbox"; and =item "googlevideo", "youtube", or "slideshare" - according to which offsite host a Flash video is embedded from. =back Let's illustrate with a crude example. Suppose some Oddmuse Wiki page contains this text markup: In this compelling reading of his, perhaps, most well-read poetry, Carl Sagan thunders the truth, Vangelis supplies the angel’s harp and music, and YouTube plies the photo-montage seas of "this pale, blue dot": our Earth, from afar. [[YouTube:p86BPM1GV8M]] Then, flashbox transmutes that text markup into HTML markup resembling:

In this compelling reading of his, perhaps, most well-read poetry, Carl Sagan thunders the truth, Vangelis supplies the angel’s harp and music, and YouTube plies the photo-montage seas of "this pale, blue dot": our Earth, from afar.

Then, your CSS stylesheet can style this HTML markup with CSS resembling: # This CSS selector selects flashbox-embedded Flash videos. p.flashbox { # These CSS properties horizontally center such videos. margin: 1.500em auto; padding: 1.500em 0.000em 0.500em 0.000em; text-align: center; text-indent: 0.000em; } # This CSS selector selects flashbox-embedded, YouTube-specific Flash videos. p.youtube { # These CSS properties background and border such videos. background: #334466; border: #112255 0.125em solid; } Wew! There; that wasn't so gruesomely detailed, was it? =head1 SEE ALSO The oddmuse.org "YouTube" page off which this Oddmuse extension was founded, at: L =head1 COPYRIGHT AND LICENSE The information below applies to everything in this distribution, except where noted. Copyleft 2008 by B.w.Curry . This file is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this file; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. =cut