stroll::blogさんで公開されている「コメントをプレビュー表示」をlivedoorBlog用に設置する方法を解説させて頂きます。
コメントで絵文字機能をと同様にこちらで公開しているスクリプトの権利など諸々はstorllさんに帰属します。
2006.09.02:最近のテンプレートへの対応策と、標準絵文字をプレビューさせる方法を追記しました。
はじめに
基本赤文字部分をコピーして貼り付けていくだけで設置が可能ですが一度メモ帳などのテキストエディタに個別記事のHTMLテンプレートをコピーし、エディタ側で編集した後
もう一度HTMLテンプレート編集ウィンドウにコピーする形をとったほうが失敗しづらいと思います。
また、引用表示幅が狭い為に自動的に改行されている所がありますのでご注意くださいませ。
では解説はじめます。まず個別記事のHTMLテンプレートの
<td><textarea id="text" name="body" rows="10" cols="50"></textarea></td>ここに
<td><textarea id="text" name="body" rows="10" cols="50" onkeyup="doCommentPreview()" onblur="doCommentPreview()"></textarea></td>
このように赤文字部分を追加します。
つぎにプレビューを表示する場所を作成します。
<td><textarea id="text" name="body" rows="10" cols="50" onkeyup="doCommentPreview()" onblur="doCommentPreview()"></textarea></td>この下に
</tr>
<td><textarea id="text" name="body" rows="10" cols="50" onkeyup="doCommentPreview()" onblur="doCommentPreview()"></textarea></td>のように赤文字部分を追加します。
</tr>
<tr>
<td valign="top"><label for="coment_preview">プレビュー: </label></td>
<td><div class="comments-body" id="comment_preview" style="padding:0;margin:0;">ご利用のブラウザ、設定ではご利用になれません。</div></td>
</tr>
ただし、最近のテンプレートではコメントフォームのテーブルの構造が若干違うようですので、上の当該部分を
<td valign="top" nowrap><label for="coment_preview">プレビュー: </label></td>このように青文字部分を追加されると良いかと思います。
<td colspan="3"><div class="comments-body" id="comment_preview" style="padding:0;margin:0;">ご利用のブラウザ、設定ではご利用になれません。</div></td>
他にも構造が違うコメントフォームがある事も考えられますので適宜対応してください。
次に表示する為にjavascriptを記述していきます。
</form>この下に
</table>
</form>この赤文字部分を追加してください。
</table>
<script type="text/javascript">
<!--
function doCommentPreview(mode) {
//コメントプレビュー
var textAreaId = 'text'; //textareaのidとあわせてください。
var previewAreaId = 'comment_preview';
var initString = 'ここにコメントのプレビューが表示されます。';
if (!isDoCommentPreview()) return;
if (!getElementCommentPreview(textAreaId) || !getElementCommentPreview(previewAreaId)) {
return;
} else if (null != mode && mode == 'init') {
getElementCommentPreview(previewAreaId).innerHTML = initString;
return;
}
var s = getStringCommentPreview(textAreaId);
if (null == s || '' == s || '<br />' == s) {
s = initString;
}
if (getElementCommentPreview(previewAreaId)) {
getElementCommentPreview(previewAreaId).innerHTML = s;
}
}
function getStringCommentPreview(e) {
var s = '';
s = getElementCommentPreview(e).value;
s = s.split('&').join('&');
s = s.split('<').join('<');
s = s.split('>').join('>');
s = s.split('\'').join('"');
s = s.split('\n').join('<br />');
return s;
}
function getElementCommentPreview(e, f) {
var l = (document.layers) ? 1 : 0;
if(l) {
f=(f) ? f : self;
var a = f.document.layers;
if (a[e]) return a[e];
for (var w = 0; w < a.length;) {
return getElementCommentPreview(e, a[w++]);
}
}
if (document.all) return document.all[e];
return document.getElementById(e);
}
function isDoCommentPreview() {
var ua = navigator.userAgent;
var doNotAgentList = [
ua.indexOf('Opera/6') != -1,
ua.indexOf('Mac') != -1 && ua.indexOf('MSIE 5') != -1
]
for (var i = 0; i < doNotAgentList.length; i++) {
if (doNotAgentList[i]) return false;
}
return true;
}
doCommentPreview('init');
//-->
</script>
livedoor Blog標準の絵文字もプレビューさせるには。
livedoor Blogには標準で絵文字がついていますが、コメントに挿入してもこのプレビューには <emoji:sun> などとそのまま表示されてしまいます。このままだと完璧なプレビューとはいえませんので、これを画像に変換してプレビューにも反映させる方法を紹介します。
※絵文字のプレビューが必要ない方はこの手順は必要ありません。
まず、上記スクリプト部分の
var s = getStringCommentPreview(textAreaId);この直後に
var s = getStringCommentPreview(textAreaId);と入力します。
// livedoor Blog標準絵文字用
s = getStringEmojiTag (s);
つづいて
doCommentPreview('init');この直前に
function getStringEmojiTag (s) {こちらの赤文字部分を入力します。
for (var i = 0; i < emojiList.length; i++) {
var imageUrl = emojiImages[emojiList[i]].src;
s = s.split('<emoji:' + emojiList[i] + '>').join('<img src="' + imageUrl + '" alt="' + emojiList[i] + '" />');
}
return s;
}
doCommentPreview('init');
ココまで編集が終りましたら、エディタから全て選択してコピーし、個別記事HTMLテンプレートの編集ウィンドウに全て貼り付けて保存してください。
つぎにBlogを再構築するわけですが、エラーが出る可能性もありますのでまず「最新記事」のみを再構築して
ブログのトップページより一番上の記事にアクセスして確認してみてください。
確認して何もエラーが出ないようでしたら最後に「全アーカイブ」で再構築をしてあげて下さい。
以上で設置完了です。
こんな感じで大丈夫かな?>みやきちさん
SpecialThanks stroll::blog様!

みやきち Says...
#1 at April 14, 2005 05:18