MT4 beta4: mt.jsを思いっきり改修してみた

MIMEタイプをapplication/xhtml+xmlに変更したらコメントフォームが表示されなくなったという問題。問題の大部分はdocument.writeの使用が原因なのでそこをターゲットとして修正。

writeCommenterGreeting()は殆ど書き換えてしまいました。

function writeCommenterGreeting(commenter_name, entry_id, blog_id, commenter_id, commenter_url) {
<MTIfRegistrationAllowed>
var a = new Array(3);
var text = new Array(5);
if (document.getElementById && document.createElement) {
var cfea = document.getElementById('comment-form-external-auth');
a[0] = document.createElement('a');
a[0].setAttribute('href','<$MTCGIPath$><$MTCommentScript$>?__mode=login&entry_id=' + entry_id + '&blog_id=' + blog_id + '&static=1');
text[0] = document.createTextNode('サインイン');
a[1] = document.createElement('a');
a[1].setAttribute('href','<$MTRemoteSignOutLink static="1"$>&entry_id=' + entry_id);
text[1] = document.createTextNode('サインアウト');
text[2] = document.createTextNode(commenter_name);
if ( commenter_name &&
( !commenter_id
|| commenter_blog_ids.indexOf("'" + blog_id + "'") > -1))
{
var url;
if (commenter_id) {
url = '<$MTCGIPath$><$MTCommentScript$>?__mode=edit_profile&commenter=' + commenter_id + '&blog_id=' + blog_id;
if (entry_id) {
url += '&entry_id=' + entry_id;
} else {
url += '&static=1';
}
} else if (commenter_url) {
url = commenter_url;
} else {
url = null;
}
if (url) {
a[2] = document.createElement('a');
a[2].setAttribute('href',url);
cfea.appendChild(a[2]).appendChild(text[2]);
} else {
cfea.appendChild(text[2]);
}
text[3] = document.createTextNode('さん、コメントをどうぞ。');
cfea.appendChild(text[3]);
cfea.appendChild(a[1]).appendChild(text[1]);
} else if (commenter_name) {
text[3] = document.createTextNode('このブログにはコメントする権限を持っていません。');
cfea.appendChild(text[3]);
cfea.appendChild(a[1]).appendChild(text[1]);
} else {
<MTIfRegistrationRequired>
text[3] = document.createTextNode('してからコメントしてください。');
cfea.appendChild(a[0]).appendChild(text[0]);
cfea.appendChild(text[3]);
<MTElse>
a[2] = document.createElement('a');
a[2].setAttribute('href','javascript:void(0);');
a[2].setAttribute('onclick','showAnonymousForm();');
text[3] = document.createTextNode('してからコメントするか、');
text[4] = document.createTextNode('匿名でコメントしてください。');
cfea.appendChild(a[0]).appendChild(text[0]);
cfea.appendChild(text[3]);
cfea.appendChild(a[2]).appendChild(text[4]);
</MTIfRegistrationRequired>
}
}
</MTIfRegistrationAllowed>
}

あと一番最後の MTIfRegistrationAllowed で囲われた部分。

<MTIfRegistrationAllowed>
if ('<$MTCGIHost exclude_port="1"$>' != '<$MTBlogHost exclude_port="1"$>') {
var script = document.createElement('script');
script.setAttribute('src','<$MTCGIPath$><$MTCommentScript$>?__mode=cmtr_name_js');
cfea.appendChild(script);
} else {
commenter_name = getCookie('commenter_name');
ids = getCookie('commenter_id').split(':');
commenter_id = ids[0];
commenter_blog_ids = ids[1];
commenter_url = getCookie('commenter_url');
}
</MTIfRegistrationAllowed>

この改修によりどこかのidを掴んでタグを記載するような動きに変わるのでコメント入力フォームテンプレートも改修。

<MTIfRegistrationAllowe>
<div id="comment-form-external-auth"></div>
<script type="text/javascript">
<MTIf name="comment_preview_template">is_preview = true;</MTIf>
writeCommenterGreeting(commenter_name, <$MTEntryID$>, <MTEntryBlogID$>, {hogehoge}
</script>
<MTIfRegistrationAllowed>

これでFirefoxでは確認とれました。ただIEだとonclickイベントからの匿名コメントフォームの呼び出しができないみたい。次はここの確認か…。

先は長そう。