皆さん、いかが思われてますでしょうか。あれです。Movable Typeのあれです。
「ブログ記事の編集」画面にある、画像の挿入機能のことです。
ヤツで画像を挿入すると、こんなソースを吐きやがるんですよ。
<form mt:asset-id="71" class="mt-enclosure mt-enclosure-image" style="display: inline;">
<img alt="xxxxxxxx.jpg" src="http://blog.shimatch.jp/xxxxxxxx.jpg" width="400" height="300" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" />
</form>
form要素は仕方無いとしましょう。しかし、このclass属性は何だ?style属性は何だ?
続くimg要素に付くalt属性が、なぜ画像ファイル名なのか?そして、img要素にまでclass要素とstyle属性の二重掛け。しかも!style属性に至っては、マージン決められてますよ!勝手に20pxて!何を基準の20px?ああもう、腹立たしい!
とまぁ、以前から腹に据え兼ねているものがあったので、直してやろうと思った。
修正個所を見付け出すのが結構大変でした。/lib/MT/Asset.pm、/lib/MT/Asset/Image.pmの2つです。
まずは/lib/MT/Asset/Image.pm。258行からのサブルーチン「as_html」がimg要素の中身です。
289行のmy $wrap_styleが、あの憎き20pxの正体。
my $wrap_style = '';
if ( $param->{wrap_text} && $param->{align} ) {
$wrap_style = 'class="mt-image-' . $param->{align} . '" ';
if ( $param->{align} eq 'none' ) {
$wrap_style .= q{style=""};
}
elsif ( $param->{align} eq 'left' ) {
$wrap_style .= q{style="float: left; margin: 0 20px 20px 0;"};
}
elsif ( $param->{align} eq 'right' ) {
$wrap_style .= q{style="float: right; margin: 0 0 20px 20px;"};
}
elsif ( $param->{align} eq 'center' ) {
$wrap_style .= q{style="text-align: center; display: block; margin: 0 auto 20px;"};
}
}
見た感じで大体分かるので、ちょいちょい、っと直して上書きです。
引き続き、/lib/MT/Asset.pm。354行からのサブルーチン「enclose」がform要素(パブリッシュ時にspan要素に置き換えられる)の中身です。
sub enclose {
my $asset = shift;
my ($html) = @_;
my $id = $asset->id;
my $type = $asset->class;
return qq{<form mt:asset-id="$id" class="mt-enclosure mt-enclosure-$type" style="display: inline;">$html</form>};
}
最後のreturn文をちょちょい、と直せばOKです。
しまっちはこうしてみました。
<p>
<form mt:asset-id="195">
<img src="http://blog.shimatch.jp/xxxxxxxx.jpg" width="400" height="300" alt="" />
</form>
</p>
これが、パブリッシュされればこうなります。
<p>
<span>
<img src="http://blog.shimatch.jp/xxxxxxxx.jpg" width="400" height="300" alt="" />
</span>
</p>
無駄なspan要素が挟まるのは大目に見て進ぜる。
img要素単体がp要素を構成し得るか、という問いとはずっと向き合っていますが、今はこれでいいかなーと思っている。
まぁ、そんなわけで。蒸し暑い日が続きますが、皆様、快適なMovable Type生活を!
あ、こうした改造は個人の責任で行ってくださいね。質問されてもお答えできませーん。