記事一覧

WebDiaryProのコメント等をツリー化する

前もって宣言していたとおり、JUGEMカスタマイズ講座さんの
ツリー化スクリプトver2」をWDPに導入するための解説です。
これを導入すると、⇒のナビゲーションのようにコメントやエントリーが
日付ごとや記事ごとにまとめられます。

ちょっとした前置きがあります。
ご了承のうえでスクリプトの追記を行ってください。

●JUGEMと同じ記述式にするため、「年」「時間・分」を
 ナビゲーションからばっさり切り捨てます。
 それが嫌だという方までは独自フォローできません。
●ナビゲーションに「new!」の表記がでるようにしている場合、
 それもばっさり切り捨てます……。
 保持する良い方法が見つかりませんでした。すいません。
●<dl><dt>を<ul><li>に書き換えます。
 CSSでリストマークを変えたり画像を使うデザインにしている場合、
 デザインが変わってしまいますので各自調節をお願いします。
●ツリー化を行うのは「最新エントリー」「最新コメント」
 「最新トラックバック」の3つです。リンクやカテゴリは
 元々WDPはツリーになっているので必要ありません。

それでは解説です。自分流ですので他にもやり方はあるかもしれません。

■ツリー化スクリプトver2を導入する■

1.「最新エントリー」部分(<!--SKIN_LIST_HEAD_START-->~<!--SKIN_LIST_FOOT_END-->)を以下のように書き換える

<!--SKIN_LIST_HEAD_START-->
<h2>最新エントリー</h2>
<div class="block" id="newentrylist">
<ul>
<!--SKIN_LIST_HEAD_END-->

<!--SKIN_LIST_START-->
<li><a href="${ARTICLE_URL}">${ARTICLE_SUBJ}</a> (${ARTICLE_MONTH}/${ARTICLE_DAY})</li>
<!--SKIN_LIST_END-->

<!--SKIN_LIST_FOOT_START-->
</ul>
</div>
<!--SKIN_LIST_FOOT_END-->

  

2.「最新コメント」部分(<!--SKIN_CMTLIST_HEAD_START-->~<!--SKIN_CMTLIST_FOOT_END-->)を以下のように書き換える

<!--SKIN_CMTLIST_HEAD_START-->
<h2>最新コメント</h2>
<div class="block" id="commentlist">
<ul>
<!--SKIN_CMTLIST_HEAD_END-->

<!--SKIN_CMTLIST_START-->
<li>${ARTICLE_SUBJ}<br />
<a href="${INFO_PATH}?mode=comment&amp;no=${ARTICLE_PNO}#comment">${ARTICLE_NAME} (${ARTICLE_MONTH}/${ARTICLE_DAY})</a></li>
<!--SKIN_CMTLIST_END-->

<!--SKIN_CMTLIST_FOOT_START-->
</ul>
</div>
<!--SKIN_CMTLIST_FOOT_END-->

3.「最新トラックバック」部分(<!--SKIN_TBLIST_HEAD_START-->~<!--SKIN_TBLIST_FOOT_END-->)を以下のように書き換える

<!--SKIN_TBLIST_HEAD_START-->
<h2>最新トラックバック</h2>
<div class="block" id="tblist">
<ul>
<!--SKIN_TBLIST_HEAD_END-->

<!--SKIN_TBLIST_START-->
<li>${TRACKBACK_TITLE}<br />
<a href="${INFO_PATH}?mode=trackback&amp;no=${TRACKBACK_PNO}#trackback">${TRACKBACK_BLOG} (${TRACKBACK_MONTH}/${TRACKBACK_DAY})</a></li>
<!--SKIN_TBLIST_END-->

<!--SKIN_TBLIST_FOOT_START-->
</ul>
</div>
<!--SKIN_TBLIST_FOOT_END-->

※改造のポイント
 ・<div id="○○"> <ul><li>~</li><ul> </div>のように、idをふったdivで
  リストタグを囲む。
 ・リスト内容のリンクタグ<a>~</a>の範囲を変えないこと。
 ・時間表記は日付のみにすること。
 ・スキンによっては違いがあるかもしれませんが、
  上の3つを最低限守っていればスクリプトが働くようです。
 ・<h2>~<h2>の間は自由に書き換えてもOK。

4.「skin>footer.html」の</body>直前にツリー化スクリプトを記入する。
  これはJUGEMカスタマイズ講座さんにあるそのままでOK。

※2008/12/26 追記
 JUGEMカスタマイズ講座さんが行方不明のため、暫定的にスクリプトを
 こちらにも記述しておきます。著作元はJUGEMカスタマイズ講座さんに
 あり、ご指摘等があった場合削除いたします。

<script type="text/javascript">
<!--
function makeTreeElements (idName,objList) {
if (!objList.innerHTML) return;
var objLink = objList.getElementsByTagName('a')[0];
var linkUrl = objLink.getAttribute('href');
if (idName.indexOf('comment') > -1 || idName.indexOf('tb') > -1) {
var tmpText = objList.innerHTML.split("⇒");
tmpText[0] = tmpText[0].slice(0,tmpText[0].search(/<BR/i));
this.base = Array('<a href="',linkUrl,'">',tmpText[0],'</a>').join('');
this.elem = objLink.innerHTML;
} else if (idName.indexOf('entry') > -1) {
var tmpText = objList.innerHTML;
tmpText.match(/\((\d\d\/\d\d)\)/);
this.base = Array('<strong>[',RegExp.$1,']</strong>').join('');
this.elem = Array('<a href="',linkUrl,'">',objLink.innerHTML,'</a>').join('');
} else if (idName.indexOf('link') > -1) {
var tmpText = objList.innerHTML;
if ( tmpText.match(/\[(.+)\](.+)/) ) {
this.base = Array('<strong>[',RegExp.$1,']</strong>').join('');
this.elem = Array('<a href="',linkUrl,'" target="_blank">',RegExp.$2,'</a>').join('');
}
}
return this;
}
function createTreeList(idName,option) { // version 2.2
var objFocus = this.document.getElementById(idName);
if (!objFocus) return;
if (!objFocus.innerHTML) return;
var objLists = objFocus.getElementsByTagName('li');
var linkList = new Array();
var outText = new Array();
if (objLists.length > 0) {
for (i=0;i<objLists.length;i++) {
var chckFlag = true;
var elemText = new makeTreeElements(idName,objLists[i]);
if (!elemText.base || !elemText.elem) return;
for (j=0;j<linkList.length;j++) {
if ( linkList[j].base.indexOf(elemText.base) > -1 ) {
chckFlag = false;
linkList[j][linkList[j].length] = elemText.elem;
}
}
if (chckFlag) {
var tmpNum = linkList.length;
linkList[tmpNum] = new Array();
linkList[tmpNum][0] = elemText.elem;
linkList[tmpNum].base = elemText.base;
}
}
if (linkList.length > 0) {
outText[outText.length] = '<ul>\n';
for (i=0;i<linkList.length;i++) {
outText[outText.length] = Array('<li>',linkList[i].base,option.top).join('');
if (linkList[i].length > 0 && option.sort) linkList[i].reverse();
for (j=0;j<linkList[i].length;j++) {
outText[outText.length] = (j == linkList[i].length - 1) ? option.end : option.list;
outText[outText.length] = Array(linkList[i][j],option.leef).join('');
}
outText[outText.length] = Array(option.btm,'</li>').join('');
}
outText[outText.length] = '</ul>\n';
objFocus.innerHTML = outText.join('');
}
}
}
var gTreeOption = new Array;
gTreeOption['sort'] = false; /* ツリー内の表示順 true:並び替える false:そのまま */
gTreeOption['list'] = '⇒ '; /* ツリー用マーク(通常) */
gTreeOption['end'] = '⇒ '; /* ツリー用マーク(末端) */
gTreeOption['leef'] = '<br />\n'; /* 各枝の末尾 */
gTreeOption['top'] = '<br />\n'; /* ツリー本体の最初 */
gTreeOption['btm'] = ''; /* ツリー本体の最後 */
createTreeList('newentrylist',gTreeOption); // 最新エントリリストのツリー化
createTreeList('entrylist',gTreeOption); // エントリリストのツリー化
createTreeList('commentlist',gTreeOption); // 最新コメントリストのツリー化
createTreeList('tblist',gTreeOption); // 最新トラックバックリストのツリー化
createTreeList('linklist',gTreeOption); // リンクリストのツリー化
// -->
</script>

  最後の部分だけ書き換えます。

createTreeList('newentrylist',gTreeOption); // 最新エントリリストのツリー化
createTreeList('commentlist',gTreeOption); // 最新コメントリストのツリー化
createTreeList('tblist',gTreeOption); // 最新トラックバックリストのツリー化

…といっても必要のない「リンク」と「エントリー」を削るだけなのですが。

改造や設定などは元の記事そのままでできます。
ツリー化カスタマイズ応用編」もあわせて使用できますので、もしよろしければお試しくださいませ。

Web Diary Proのコメント欄に絵文字をつける

タグが使えないコメント欄でも絵文字を可能にする
「stroll::blog」さんのスクリプトです。
それに「6畳一間に魚とカメとヒト2人」さんの解説を元に、
Web Diary Proのコメント欄につける場合をメモ。

※使用にあたっての注意など、「stroll::blog」さんの記述を
 ご覧になってお使い下さい。
 また、参考にしました両サイト様に感謝です。

参考≫
 stroll::blog | コメントにカスタマイズ絵文字入力機能
 迷える子羊 | Ver4.10 絵文字入力機能設置方法

■コメント欄に絵文字を追加する■

1.画像設定スクリプトの設定
  「skin>header.html」を開き、<head>~</head>内に次の
  スクリプトを記入する。

<script type="text/javascript">
<!--
// コメントにカスタマイズ絵文字入力機能:画像設定
function getCommentEmojiList() {
var list = new Array();
// 画像名、画像URLの設定
list[list.length] = new Array('画像名', '画像URL');
list[list.length] = new Array('画像名', '画像URL');
list[list.length] = new Array('画像名', '画像URL');

return list;
}

function getCustmizeEmojiAttribute() {
// 画像タグに含める属性値(alt属性以外)
var att = 'border="0" style="vertical-align:middle"';

// ***************** 設定ここまで *****************
att = (att != '') ? (' ' + att) : '';
return att;
}
// -->
</script>

 ※太文字部分をそれぞれ書き換えてください。
  「画像名」がそのまま絵文字のalt属性になります。
  その他追記したい属性は「画像タグに含める属性値」へ。
  ここの属性はそのまま弄らなくとも問題ありません。

2.「skin>comment.html」を開き、28行目あたりにある
  formタグに次の箇所を追加。

<form action="${INFO_PATH}" method="post"
id="comment_form">
<fieldset>
<legend>投稿フォーム</legend>
  ↓
<form action="${INFO_PATH}" method="post"
id="comment_form" name="comform">
<fieldset>
<legend>投稿フォーム</legend>

3.画像リスト出力スクリプトを入れる
  同じく「skin>comment.html」内のURL用フォーム近くに
  次のソースを入れる。

<dt>URL</dt>
<dd><input type="text" name="url" size="30" value="${FORM_URL}" /></dd>

<!-- コメント欄に絵文字を追加 -->
<dt>絵文字</dt>
<dd><script type="text/javascript">
<!--
// コメントにカスタマイズ絵文字入力機能:画像リスト出力
function writeCustmizeEmojiTagList() {
// コメントを入力するテキストエリアを指定
var textarea = 'document.comform.text';

// ***************** 設定ここまで *****************
var list = getCommentEmojiList();
var att = getCustmizeEmojiAttribute();
for (var i = 0; i < list.length; i++) {
window.document.write('<a href="javascript:;" onClick="addCustmizeEmoji(' + textarea + ', \'' + list[i][0] + '\');"><img src="' + list[i][1] + '"' + att + ' alt="' + list[i][0] + '" /></a>');
}
}

// reference from jugem.jp (c)
function addCustmizeEmoji(obj, tag) {
var item = '[' + tag + ']';
if (document.selection) {
obj.focus();
sel = document.selection.createRange();
sel.text = item;
} else if (obj.selectionStart || obj.selectionStart == '0') {
var startPos = obj.selectionStart;
var endPos = obj.selectionEnd;
obj.value = obj.value.substring(0, startPos)
+ item + obj.value.substring(endPos, obj.value.length);
} else {
obj.value += item;
}
}
writeCustmizeEmojiTagList();
// -->
</script>
</dd>
<!-- コメント欄に絵文字を追加 ここまで -->

 ※太字部分は「stroll::blog」さんのところのスクリプトを
  Web Diary Pro用に書き換えてあるところです。
  スキンによってidが異なる場合は書き換えが必要ですが、
  普通ならば上記のままでOKです。

4.画像変換スクリプトの設定
  「skin>footer.html」を開き、次のソースを</body>の直前に
  入れる。

<!-- コメント絵文字用スクリプト -->
<script type="text/javascript">
<!--
// コメントにカスタマイズ絵文字入力機能:画像変換
function changeCustmizeEmojiTag() {
// (1)コメント全体のタグの id 属性
var commentAreaIdName = 'comment';
// (2)コメント全体のタグ名
var commentAreaTag = 'div';
// (3)各コメントの class 属性
var commentBodyClassName = 'text';

// ***************** 設定ここまで *****************
var list = getCommentEmojiList();
var att = getCustmizeEmojiAttribute();
var objComArea;
var classComArea;
var objComBody = new Array();
if (commentAreaIdName != '') {
objComArea = document.getElementById(commentAreaIdName);
if (!objComArea || !objComArea.innerHTML) return;
classComArea = objComArea.getElementsByTagName(commentAreaTag);
} else {
classComArea = document.getElementsByTagName('*');
}
for (var i = 0; i < classComArea.length; i++) {
if (classComArea[i].className == commentBodyClassName) objComBody[objComBody.length] = classComArea[i];
}
for (var i = 0; i < objComBody.length; i++) {
objComBody[i].innerHTML = getStringCustmizeEmojiTag(list, objComBody[i].innerHTML, att);
}
}

function getStringCustmizeEmojiTag(list, s, att) {
for (var i = 0; i < list.length; i++) {
s = s.split('[' + list[i][0] + ']').join('<img src="' + list[i][1] + '"' + att + ' alt="' + list[i][0] + '" />');
}
return s;
}
changeCustmizeEmojiTag();
// -->
</script>
<!-- コメント絵文字用スクリプトここまで -->

  ※太文字の部分が「stroll::blog」さんと
   「6畳一間に魚とカメとヒト2人」さんの説明とは異なる部分です。
   コメント欄にこのスクリプトを適用するので
   'comment'となっています。

これでコメント欄に絵文字が追加されました。
ただし、このスクリプトはコメント数が多くなると、
「画像への変換処理に時間がかかり、
 また、登録した画像の数が多すぎても同様」
とのことですので、絵文字の登録しすぎに気をつけてください。

+ + + + + + + + + + + + + + + + + + + + + + + + + +

■「コメント一覧を表示する」にすると絵文字がでません。

「コメント一覧でも絵文字を表示」をご覧下さい。

■「タグエディタで絵文字を挿入」と併用できる?

問題なく使用できます。
 スクリプトを沢山入れると、それぞれが影響して使えないものが
 でてくる場合がありますが、私が実験したところどちらも
 問題なく利用できます。

 「6畳一間に魚とカメとヒト2人」さんではタグエディタ絵文字の代わりとして
 このスクリプトを利用していましたが、その場合では
 管理人の書いた日記の内容のみしか絵文字が変換されませんでした。
 設定の仕方によっては両方ともこのスクリプトで絵文字が
 追加できるかもしれませんが、自分にはちょっと分からないです。

 ※追記:「迷える子羊」さんで
  絵文字機能を管理者&コメント欄に併用する方法が公開されました。
  管理画面で絵文字imgタグがずらずら描き込まれるのが嫌だ!
  という方にはおすすめの機能です。 

Web Diary Pro にタグエディタをつける

※初版:2006/4/18
  改定:2006/4/24 「ネタバレ」ボタンの追加方法
  改定:2006/5/16 ネタバレ短文用・長文用の追加方法&サンプル設置
  改定:2006/5/28 説明を変更、挿入タグが全てこのページで見れるようにした

このサイトはWeb Libertyさんの「Web Diary Professional」を使用しています。
普通のブログものと違いテンプレートをHTMLでいじれるため
とても外見のカスタマイズがしやすいのですが、
レンタルブログにあるようなタグエディタが付いておりません。
直タグ打ちも面倒になってきたので、フォーム部分のスキンに
タグエディタを追加することにしました。

参考にしましたスクリプト元のmugiさん、Raelianさん
ありがとうございました。

参考≫
nicky!用 タグ入力支援機能強化版(2005/9/5版)
Mugi's Homepage

■タグ支援入力ボタンの追加法■

1.「skin>admin_form.html」を開く

2.ソース内の最初の部分(<--SKIN_FORM_START-->すぐ下)に
 ↓のスクリプトを全てコピー&ペースト。(著作権は消さないように!)

<script type="text/JavaScript">
/* Script written by Mugi (mugi@wa2.so-net.ne.jp) */
/* 2nd Edition by Raelian(2005/02/10)-(2005/08/15) */
/* http://painter.mypets.ws/~raelian/tag/enclose.html */
/* 3rd Customize by Narusawa(2005/08/16) */
/* http://caelum.skr.jp/ */
var sel_length, end_length=0, start_length=0;
var bl=0;
var el=null;
function get_pos(d){
if( bl != 1 && bl != 2 ) return;
if( d ){ el=d; }else{ return; }
var ret=0;
if( bl==1 ) {
var sel=document.selection.createRange();
if( !sel ) return;
sel_length = sel.text.length;
var r=d.createTextRange();
var all=r.text.length;
r.moveToPoint(sel.offsetLeft,sel.offsetTop);
r.moveEnd("textedit");

end_length=r.text.length;
start_length=all-end_length;
} else if( bl==2 ) {
start_length=d.selectionStart;
end_length=d.value.length - d.selectionEnd;
sel_length=d.selectionEnd-start_length;
}
}

function atach_focus(ln){
if( bl == 1 ){
var e=el.createTextRange();
var tx=el.value.substr(0, ln);
var pl=tx.split(/¥n/);
e.collapse(true);
e.moveStart("character",ln-pl.length+1);
e.text=e.text+"";
e.collapse(false);
e.select();
} else if( bl == 2 ){
el.setSelectionRange(ln, ln);
}
el.focus();
}

function enclose(s, e){
if( !el ){
if( bl != 1 && bl != 2 ){
el=document.getElementById("Message");
}else{
return;
}
}

var flag2=0;

if( bl == 1 ){
var sel=document.selection.createRange().text;
if( sel ){
var len1, len2, lens, dat;
dat=el.createTextRange().text;
len1=dat.length;
lens=sel.length;
if( len1 != lens ){
document.selection.createRange().text=sel;
len2=el.createTextRange().text.length;
}
document.selection.createRange().text=s+sel+e;
if( len1 != len2 && len1 != lens ){
document.selection.createRange().text+="¥n";
}
flag2=1;
}
}
if( bl == 4 || bl == 3 ){
var str=document.getElementById("Message").value;
document.getElementById("Message").value=str+s+e;
} else if( bl && flag2 == 0 ){
var itext=el.value;
var click_s=itext.substr(0, start_length);
var click_m=itext.substr(start_length, sel_length);
var click_e=itext.substr(start_length+sel_length, end_length);
el.value=click_s + s + click_m + e + click_e;
}

atach_focus(s.length+e.length+start_length+sel_length);
}

function convert(s, e){
if( !el ) return;
if( (bl!=1) && (bl!=2) ){
el.focus();
return;
}

if( bl == 1 ){
var flag=0;
var sel=document.selection.createRange().text;
if( sel ){
var len1=el.createTextRange().text.length;
document.selection.createRange().text=sel;
var len2=el.createTextRange().text.length;
if( len1 != len2 ){
flag = 1;
}
var cnv = sel.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
document.selection.createRange().text=cnv;
if( flag ){
document.selection.createRange().text+="¥n";
}
}
}else{
var itext=el.value;
var click_s=itext.substr(0, start_length);
var click_m=itext.substr(start_length, sel_length);
var click_e=itext.substr(start_length+sel_length, end_length);
var cnv = click_m.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
el.value=click_s + cnv + click_e;
}
atach_focus(start_length+cnv.length);
}
function fstins(af){
if( !el ) return;
if( (bl!=1) && (bl!=2) ){
el.focus();
return;
}

if( bl == 1 && start_length < 0 ){
var flag=0;
var sel=document.selection.createRange().text;
if( sel ){
var len1=el.createTextRange().text.length;
document.selection.createRange().text=sel;
var len2=el.createTextRange().text.length;
if( len1 != len2 ){
flag = 1;
}
var cnv=sel.replace(/¥n/g, "¥n"+af);
document.selection.createRange().text=cnv;
if( flag ){
document.selection.createRange().text+="¥n";
}
}
}else{
var itext=el.value;
if( start_length ){
if( itext.substr(start_length-1,1) == "¥n" ){
start_length--;
}
}
var click_s=itext.substr(0, start_length);
var click_m=itext.substr(start_length, sel_length);
var click_e=itext.substr(start_length+sel_length, end_length);
var sel = click_m.replace(/¥n/g, "¥n"+af);
if( start_length==0 ){
sel=af + sel;
}
el.value=click_s + sel + click_e;
}
atach_focus(start_length+sel.length);
}

var tmstr=0;
function gettmstr(){
var tmn=new Date();
var tms=tmn.getTime();
if( tmstr == tms ){
tms++;
}
tmstr=tms;
}
function neta_btn(){
gettmstr();
var s1='<input class="nbtn" type="button" name="nothing" value="ネタバレ" onclick="sfield_view('+"'"+tmstr+"'"+');return false;"><div id="'+tmstr+'" class="sfield">';
enclose(s1, "</div>");
}
function neta_link(){
gettmstr();
var s1='<a href="#" onclick="sfield_view('+"'"+tmstr+"'"+');return false;">ネタバレ</a><div id="'+tmstr+'" class="sfield">';
enclose(s1, "</div>");
}
</script>

3.本文用フォームを次のように書き換える。

<dt>本文</dt>
<dd><textarea name="text" cols="70" rows="20">
  ↓
<dt>本文</dt>
<dd><textarea name="text" cols="70" rows="20" id="Message"
onfocus="get_pos(Message);" onmouseup="get_pos(Message);"
onkeyup="get_pos(Message);"
>

4.本文用フォームのすぐ後ろ(</textarea></dd>のあと)に、
  ↓のソースをコピー&ペースト。
  (フォーム前にいれると動作に微妙に支障あり)

<dt>タグ支援</dt>
<dd>
<!-- 太文字・小文字など -->
<input type="button" name="strong" value="strong( b )" onclick="enclose('<strong>', '</strong>');return false;">
<input type="button" name="em" value=" em( i ) " onclick="enclose('<em>', '</em>');return false;">
<input type="button" name="del" value=" del( s ) " onclick="enclose('<del>', '</del>');return false;">
<input type="button" name="u" value=" u " onclick="enclose('<u>', '</u>');return false;">
<input type="button" name="small" value="small" onclick="enclose('<small>', '</small>');return false;">
<!-- 太文字・小文字ここまで -->

<!-- span / size / color ここから -->
<input type="button" name="spanbtn" value="span" onclick="enclose('<span style=&quot;font-size:' + spansize.options[spansize.selectedIndex].value + 'px;color:' + spancol.options[spancol.selectedIndex].value+';&quot;>', '</span>');return false;">
<select id="spansize" name="spansize">
<option value="10">10px</option><option value="11">11px</option>
<option value="12">12px</option><option value="13">13px</option>
<option value="14">14px</option><option value="15">15px</option>
<option value="16">16px</option><option value="17">17px</option>
<option value="18">18px</option>
</select>
<select id="spancol" name="spancol">
<option value="Fuchsia">Fuchsia</option><option value="Purple">Purple</option>
<option value="Red">Red</option><option value="Maroon">Maroon</option>
<option value="White">White</option><option value="Gray">Gray</option>
<option value="Silver">Silver</option><option value="Black">Black</option>
<option value="Aqua">Aqua</option><option value="Teal">Teal</option>
<option value="Blue">Blue</option><option value="Navy">Navy</option>
<option value="Yellow">Yellow</option><option value="Olive">Olive</option>
<option value="Lime">Lime</option><option value="Green">Green</option>
</select>
</dd>
<!-- span / size / color ここまで -->

<!-- ここからhref -->
<dt> </dt>
<dd>
<script type="text/JavaScript">
function add_tag_href(){
var d=document;
var str_title=d.getElementById('h2t').value;
var str=str2="";

if( str_title ){
str=' title="' + str_title + '"';
}
if( d.getElementById('h2g').checked == true ){
str2=' target="_blank"';
}
enclose('<a href="' + d.getElementById('href2').value + '"' + str + str2 + '>', '</a>');
}
</script>
<input type="button" name="hrefbtn" value=" a href "
onclick="add_tag_href();return false;">
<input type="text" name="href2" id="href2" value="http://">
title<input type="text" name="h2te" id="h2t" value="">
target<input type="checkbox" name="h2g" id="h2g" value="h2g" checked>
</dd>
<!-- hrefここまで -->

<!-- ここからimg -->
<dt> </dt>
<dd>
<script type="text/JavaScript">
function add_tag_img(){
var str_width=document.getElementById('imgwidth').value;
var str1="";
if( str_width ){
str1=' width="' + str_width + '"';
}

var str_height=document.getElementById('imgheight').value;
var str2="";
if( str_height ){
str2=' height="' + str_height + '"';
}

var str_alt=document.getElementById('imgalt').value;
var str3="";
if( str_alt ){
str3=' alt="' + str_alt + '"';
}
enclose('<img src="' + document.getElementById('imghref').value + '"' + str1 + str2 + str3 + '>', '');
}
</script>
<input type="button" name="imgbtn" value=" img "
onclick="add_tag_img();return false;">
<input type="text" name="img" id="imghref" value="http://">
width<input type="text" name="imgwidth" id="imgwidth" size="4" value="">
height<input type="text" name="imgheight" id="imgheight" size="4" value="">
alt<input type="text" name="imgalt" id="imgalt" value="">
</dd>
<!-- imgここまで -->

<!-- タグ変換ここまで -->
<dt> </dt>
<dd>
<input type="button" name="cnv" value=" < >を&amp;lt;&amp;gt;に変換 " onclick="convert();return false;">
<input type="button" name="fins" value=" 行頭に # を挿入 " onclick="fstins('# ');return false;">
<input type="button" name="fins" value=" 行頭に&amp;gt;を挿入 " onclick="fstins('&amp;gt;&amp;nbsp;');return false;"></dd>
<!-- タグ変換ここまで -->

<!-- ネタバレボタン用 -->
<dt> </dt>
<dd>
<input type="button" value="ネタバレ(ボタン)" onclick="neta_btn();return false;">
<input type="button" value="ネタバレ(リンク)" onclick="neta_link();return false;">
</dd>
<!-- ネタバレボタン用ここまで -->

<script type="text/JavaScript">
if( String("jadge") ){
bl=3;
} else if( document.getElementById ){
bl=4;
}
if( document.getElementById("Message").setSelectionRange ){
bl=2;
} else if( document.selection.createRange ){
bl=1;
}
</script>

以上でタグ入力支援用のボタンが生成されているはずです。
使い方や不具合については、上記参照ページの説明を参考にしてください。

■ネタバレボタンの作り方■ …タグエディタ実装後に追加可能

ネタバレリンク。説明の折りたたみにも。≫

このようにリンクでも隠すことが出来ます。
「続きを読む」の別バージョンのようにも使えるかも。

こんなやつです。

1.上記の手順でタグ入力支援の実装を済ませる。

2.「skin>header.html」を開き、<head>~</head>内に以下を追加。

<!-- 以下ネタバレ用 -->
<style type="text/css">
.sfield{
display:none;
border:solid 1px #888;
background:#eee;
padding:1em;
margin-top:1em;
}
.nbtn{ background:#eee; border:double 3px #000; }
</style>

<script type="text/JavaScript">
function sfield_view(id){
if( document.getElementById(id).style.display != "block" ){
document.getElementById(id).style.display="block";
}else{
document.getElementById(id).style.display="none";
}
}
</script>
<noscript>
<style type="text/css">
.sfield{ display:block; background:#eee; color:#eee; }
</style>
</noscript>
<!-- ネタバレ用ここまで -->

以上でOKです。
他にも短文用・長文用のネタバレボタンがありますが、
また追加方法が違うので下記で簡単に説明します。

ネタバレ短文用もこのように追加できます。

1.ネタバレボタンの実装を済ませる。

2.「skin>header.html」を開き、こちらの説明の「2」の内容を
  ネタバレ用スクリプトの最後(</script>の直前)に入れる。

3.「skin>admin_form.html」を開き、上記説明の「3」の内容を
  <--SKIN_FORM_START-->すぐ下に入れたスクリプトの最後
  (</script>の直前)に入れる。

4.タグ支援&ネタバレ生成ボタンを置いたところ(本文入力フォーム)の側に
  「3」の2つめのタグをペースト。

ネタバレ長文用のサンプル。このようになります。
「閉じる」ボタンが文章の最後につくので、沢山のネタバレを作っても
ひとつづつが見やすくなります。

ネタバレ長文リンク。アレンジver ≫

ボタンでなくすには少し改造が必要ですが、解説必要でしょうか?
ご要望がありましたら書いてみようと思います。

↑実装の仕方は短文用のものとほとんどかわりません。
こちらの説明を参考に、各スキンにスタイル設定やタグを
入れてください。

以上でOKです。
テンプレートを弄るのでHTMLのタグ弄りに
ある程度慣れていると良いかと。
参照ページの解説ほぼそのままでいけますので、
特に自分で改造を加えたところはありません。

WebDiaryProに絵文字ボタンを作る

※初版:5/16
  改定:5/18 「コメント欄にも絵文字機能を付けたいのですが…」を追加。
  改定:5/19 IMGタグがXHTMLとして正しくなかったので修正
  改定:5/28 ソースを見やすく書き換え、コメント欄の絵文字について追記

前にやった「タグエディタとネタバレボタン」の応用で、
いささか強引ではありますが「絵文字ボタン」を作ってみました。

こんな感じになりますハート

参考: タグ入力支援にICONを追加する[nicky!用]
    stroll::blog | コメントにカスタマイズ絵文字入力機能
    .:. PEPPER .:.(アイコン元)

■絵文字ボタンを投稿画面に加える■

1.タグエディタを実装する。

2.「skin」フォルダに新しく「emoji」フォルダを作り、
  こちらからダウンロードした絵文字アイコンをアップする。
  (FREE GRAPHICS>D.BALLOON>01を今回使用)

3.「skin>admin_form.html」を開き、
  タグ支援ボタンの手前に↓のタグを入れる。

<!--絵文字入力ボタン-->
<dt>絵文字</dt>
<dd>
<img src="./skin/emoji/pp_00.gif" width="17" height="17" alt="…" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_00.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;…&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_01.gif" width="17" height="17" alt="ハート" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_01.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;ハート&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_02.gif" width="17" height="17" alt="汗" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_02.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;汗&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_03.gif" width="17" height="17" alt="蒼ざめ" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_03.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;蒼ざめ&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_04.gif" width="17" height="17" alt="怒" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_04.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;怒&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_05.gif" width="17" height="17" alt="♪" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_05.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;♪&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_06.gif" width="17" height="17" alt="?" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_06.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;?&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_07.gif" width="17" height="17" alt="!" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_07.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;!&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_08.gif" width="17" height="17" alt="滝汗" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_08.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;滝汗&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_09.gif" width="17" height="17" alt="ひらめき" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_09.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;ひらめき&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_10.gif" width="17" height="17" alt="ハートブレイク" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_10.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;ハートブレイク&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
<img src="./skin/emoji/pp_11.gif" width="17" height="17" alt="LOVE LOVE" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_11.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;LOVE LOVE&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;">
<img src="./skin/emoji/pp_12.gif" width="17" height="17" alt="ドクロ" onclick="enclose('<img src=&quot;${INFO_URL}skin/emoji/pp_12.gif&quot; width=&quot;17&quot; height=&quot;17&quot; alt=&quot;ドクロ&quot; border=&quot;0&quot; style=&quot;vertical-align:middle&quot; />','');return false;" />
</dd>
<!--絵文字入力ボタンここまで-->

4.
  ファイル 56-1.jpg
  このようになっていれば成功です。

あとはHTMLタグを多少なりともかじった方なら、好みのアイコンに
入れ替えることも簡単だと思われます。
あまりスマートではない方法ですが、手軽に絵文字を使いたい!という
方はお試しください。

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

■絵文字入力をコメント欄にも付けれませんか?

このままでは使用できません。
 このスクリプトはimgタグで絵文字を挿入しています。
 コメント欄ではタグが変換されないので、そのままタグが出てきて
 しまうのです。

 ですが「stroll::blog」さんの方法で
 コメント欄に絵文字を追加することができるようになりましたので、
 別件でまた解説したく思います。こちらをご覧ください。

ページ移動