Skip to content

Instantly share code, notes, and snippets.

@usualoma
Created November 29, 2009 07:32
Show Gist options
  • Save usualoma/244837 to your computer and use it in GitHub Desktop.
Save usualoma/244837 to your computer and use it in GitHub Desktop.
--- MTwave.pl.orig 2009-11-29 15:56:58.000000000 +0900
+++ MTwave.pl 2009-11-29 16:19:29.000000000 +0900
@@ -1,13 +1,16 @@
package MT::Plugin::MTwave;
use strict;
use MT;
+use MT::Plugin;
use MT::Entry;
+use base qw/ MT::Plugin /;
+
our $PLUGIN_NAME = 'MTwave';
our $VERSION = '0.1';
use base qw( MT::Plugin );
-my $plugin = new MT::Plugin ({
+my $plugin = new MT::Plugin::MTwave ({
name => $PLUGIN_NAME,
version => $VERSION,
author_name => 'haru1ban',
@@ -24,46 +27,44 @@
use constant DEFAULT_BC => '#fff';
use constant DEFAULT_TC => '#000';
-MT::Entry->add_callback ('pre_save', 9, $plugin, \&mt_wave);
-sub mt_wave {
- my ($cb, $obj) = @_;
- $obj->text (_wave_tag ($obj->text));
- $obj->text_more (_wave_tag ($obj->text_more));
- 1;
+sub init_registry {
+ my $plugin = shift;
+ $plugin->registry({
+ tags => {
+ function => {
+ 'wave' => \&mt_wave_tag,
+ },
+ }
+ });
}
-sub _wave_tag {
- my ($buf) = @_;
- while ($buf =~ m/<wave([^>]*)>/si) {
- my $wtag = $&;
- my $w = DEFAULT_WIDTH;
- my $h = DEFAULT_HEIGHT;
- my $bc = DEFAULT_BC;
- my $tc = DEFAULT_TC;
- my $u = undef;
-
- my %param = {};
- foreach my $pair (split /\s+/, $1) {
- my ($key, $value) = $pair =~ m!([^=]+)=["']?([^"']*)["']?!;
- $param{$key} = $value if defined $key && $key ne '';
- }
-
- next unless defined ($u = $param{'u'});
- next if $u !~ /^https?\:\/\/wave\.google\.com/i;
- my $div_id = 'waveframe' . int(rand(10000));
- $u =~ s|\.[\d]+$||i;
- $u =~ s|(^https?.*)/.*\#.*wave:(.*)%252B(.*)|$1$2$3|i;
- my $ini_url = $1 . '/';
- my $wave_id = $2 . '+' . $3;
-
- $w = int ($param{'w'}) if defined $param{'w'};
- $h = int ($param{'h'}) if defined $param{'h'};
- $w .= 'px' if $w !~ /\%$/;
- $h .= 'px' if $h !~ /\%$/;
- $bc = $param{'bc'} if defined $param{'bc'};
- $tc = $param{'tc'} if defined $param{'tc'};
-
- my $wave =<<EOF;
+sub mt_wave_tag {
+ my ($ctx, $args) = @_;
+
+ my $w = DEFAULT_WIDTH;
+ my $h = DEFAULT_HEIGHT;
+ my $bc = DEFAULT_BC;
+ my $tc = DEFAULT_TC;
+ my $u = undef;
+
+ my %param = %$args;
+
+ return unless defined ($u = $param{'u'});
+ return if $u !~ /^https?\:\/\/wave\.google\.com/i;
+ my $div_id = 'waveframe' . int(rand(10000));
+ $u =~ s|\.[\d]+$||i;
+ $u =~ s|(^https?.*)/.*\#.*wave:(.*)%252B(.*)|$1$2$3|i;
+ my $ini_url = $1 . '/';
+ my $wave_id = $2 . '+' . $3;
+
+ $w = int ($param{'w'}) if defined $param{'w'};
+ $h = int ($param{'h'}) if defined $param{'h'};
+ $w .= 'px' if $w !~ /\%$/;
+ $h .= 'px' if $h !~ /\%$/;
+ $bc = $param{'bc'} if defined $param{'bc'};
+ $tc = $param{'tc'} if defined $param{'tc'};
+
+ <<EOF;
<div id="$div_id" style="width: $w; height: $h;"></div>
<script src="http://wave-api.appspot.com/public/embed.js" type="text/javascript"></script>
<script type="text/javascript">
@@ -73,10 +74,6 @@
wavePanel.init(document.getElementById('$div_id'));
</script>
EOF
- $wave =~ s![\r\n]!!g;
- $buf =~ s!\Q$wtag\E!$wave!;
- }
- $buf;
}
1;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment