「Movable Type」はとても便利だけど、少し不満に思っていた点が二つほどあった。
- Entry作成時、右上「URL」ボタンで選択した文字列を<a>タグで囲むことができるが、ターゲットが指定されない。
- 「Bookmarklet」で<blockquote>タグを挿入するよう改造したが、「改行を自動的に挿入する」機能をオンにしていると<p>タグの内側に<blockquote>タグが入ってしまい、文法的に具合が悪い。
一つ目は好みの問題。バカバカWindowが開くのは嫌だと言う人もいる。俺もそっち派(必要なら右クリックや長押しだけで別Windowを開けば良い)だったが、タブブラウザの登場により、複数Windowを開いておいてから、順に読んでは閉じていくようにスタイルが変わった。なので自分のサイトもこういう形をとる。
二つ目については、先の改造を加えていなければ関係ない。また、「HTMLの文法なんて糞食らえ」という人にも関係ない。(<blockquote>タグ以外にも、ブロック要素を<p>タグ内に含めるのは間違い。らしい)
この為、独自に改造を加えてみた。かなり強引だし、改造と言うより改悪かもしれない。誰にでも適用できるとも思わない。ただ、来るべきバージョンアップに備え、どこをどういじくったのか記しておく。興味のある方は読んで欲しい。
まず、一つ目に関する改造。いじるファイルは二つ。
■{MT_HOME}/tmpl/cms/bm_entry.tmpl
130行目あたり、「function insertLink () {」下の以下の行、
document.selection.createRange().text = '<a href="' + my_link + '">' + str + '</a>';
を、
document.selection.createRange().text = '<a href="' + my_link + '" target="_blank">' + str + '</a>';
と書き換える。同様に、
■{MT_HOME}/tmpl/cms/edit_entry.tmpl
111行目あたり、「function insertLink () {」下の以下の行、
document.selection.createRange().text = '<a href="' + my_link + '">' + str + '</a>';
を、
document.selection.createRange().text = '<a href="' + my_link + '" target="_blank">' + str + '</a>';
と書き換える。
次に、二つ目に関する改造。いじるファイルは一つ。
■{MT_HOME}/lib/MT/Util.pm
183行目あたり、「sub html_text_transform」中の以下の行、
$p =~ s!\r?\n!<br />\n!g;
$p = "<p>$p</p>";
を、
$p =~ s/&/&/g;
$p =~ s/amp;lt;/lt;/g;
$p =~ s/amp;gt;/gt;/g;
if ($p !~ /<ol>/ && $p !~ /<ul>/) {
$p =~ s!\r?\n!<br />\n!g;
if ($p !~ /blockquote>/) {
$p = "<p>$p</p>";
}
}
と書き換える。
− 以上 −
余談だが、本文中にハイパーリンクを埋め込む際、URLに「&」が含まれていたりするとこれまた文法的にエラーが発生することに今気が付いた。これもそのうちなんとかできる、かな?(逆にここまで至れり尽せりのシステムが、どうしてそれくらい対応してないのが謎)
→早速反映した。上記「Util.pm」のとこを修正済み。「&」と、<ol>タグなんかにも対応してみた。つくづく正規表現の使い方が甘い気もするけれど。
milano
あー、ワタシも同じことやってます。
target="_blank" をつけるヤツ。
あと、改行2個連続やると<p>〜</p>で囲んでしまうのがなんとなくイヤなので、
sub html_text_transform {
my $str = shift;
$str ||= '';
$str =~ s!\r?\n!<br />\n!g;
return "<p>$str</p>";
}
ってやってます。
文法面は無視。
管理人
確かに文法なんて、ブラウザによって解釈違うんで守ったからって必ずしも正しく表示される訳じゃないんですけどね。
や、ただ、僕の場合は、今右下に貼ってあるバナーを貼りたいからやっただけ、です。
ミーハーなんですな。(ちと違うか)