MovablTypeをちょこっと弄ってみる
最近のwebアプリはなんとも高機能になったもので、一度使いだすともう止められません。
しかし、人間不精がエスカレートするもので、これだけ楽をさせてもらってもなお面倒だと思うようになる。今日はそんな不便を解決するためにちょこっとMTのソースに手を入れてみました。
まず、「改行を変換する」ルールの微調整。ソースを見ると、
- 連続した改行で区切られた行のまとまりを一つのブロックと見なす
- ブロック要素タグの開始または終了で始まらないブロックは内部の改行を<br />タグに変換の上、<p>タグでラップ
…というルールです。しかし、ここに盲点が。
preタグのように改行をそのまま使うパターン(ソースコードの引用とか)では、タグの内部はテキストのままにしておいて欲しいことが多いわけで、このルールではちょっと困ります。そこで、フィルタをちょっと弄ってpreタグ内の処理をエスケープするように調整。こんな具合。
[Util.pm:html_text_transform]+ my $escapeFlag = 0;
+ if ($p =~ m@<pre@){ $escapeFlag = 1; }
- if ($p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|select|blockquote|address|div|hr)@) {
+ if (!$escapeFlag and $p !~ m@^</?(?:h1|h2|h3|h4|h5|h6|table|ol|dl|ul|menu|dir|p|pre|center|form|fieldset|select|blockquote|address|div|hr)@) {
$p =~ s!\r?\n!<br />\n!g;
$p = "<p>$p</p>";
}
+ if ($p =~ m@</pre@){ $escapeFlag = 0; }
ただ、<や>などのリテラル表記をしなければならないという別問題もあるので、スクリプトのソースを無条件にそのまま書けるわけではない点は要注意。ま、HTMLにするんだから仕方ないか。
あと、画像のアップロード時にパラメータをいちいち設定するのが面倒なので、BetterFileUploaderというプラグインを導入してデフォルトの設定値をセットできるようにします。ただ、当サイトでは画像と解説テキストをセットにし、決まった幅に揃えて出力することにしているのだけれど、アップロード後にそのためのタグを打つのがまた面倒。これはプラグインでは解消しないので、アップロード完了後のHTML生成部分に手を入れてタグもまとめて出力するようにしてみました。こちらはこんな感じ。
[BetterFileUploader.pm:show_upload_html] ([CMS.pm:show_upload_html]をオーバーライドしているため、こちらを修正)defined(my $text = $app->process_upload) or return;
+ $text = "<div class=\"photo\">" . $text ."<div class=\"description\">\nDESCRIPTION\n</div></div>\n";
$app->build_page('show_upload_html.tmpl',
{ upload_html => $text });
画像のアップロードがさくさく進み、本文のタグ打ちは必要な部分のみに絞れるようになったことで、記事の作成は格段に楽になります。当初の時計コンテンツなんか全てのタグをエディタで書いてたもんな。
作成側の使い勝手に一区切りついたので、次はユーザー側のインターフェースをもうちょっと何とかしようかと思います。