usualoma
11/29/2009 - 7:32 AM

gistfile1.diff

--- 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;