汎用コメント更新システム Ver1.0
[beforeExec]
updateRes = function(){
Fx.kotoMain(req.responseText);
};
msgDispShow = function(n){
Fid("entryDisp").style.display = n ? "block" : "none";
Fid("listDisp").style.display = n ? "none" : "block";
};

up2 = function(o,n){
Fx.up = false;
Fx.editNum = n;
if(Fx.act != null) Fx.act.className = "snum";
Fx.act = o.previousSibling;
Fx.act.className = "act";
Fid("postButton").value = echo(Fx.act) + "(*^(^* ) 編集!";
Fx.e(Re_uri(n), "up2e");
Fid("chatMsg").focus();
};

Lo.up2e = function(){
var s = Re.up2e.responseText;
Fid("poster_name").value = Re_user(s);
var o = Fid("chatMsg");
o.value = Re_com(s);
counter();
o.focus();
};
newPost = function(){
Fx.up = true;
Fid("postButton").value = "\(*⌒ー⌒*)/新規!";
var o = Fid("chatMsg");
o.value = "";
counter();
o.focus();
if(Fx.act != null) Fx.act.className = "snum";
Fx.act = null;
};

postSubmit = function(){
var str = Fid("chatMsg").value;
if(str == "" || str.length > 200){
alert(str == "" ? "白紙ですよ(^-^;" : "文字数が200を超えています(^-^;");
Fid("chatMsg").focus();
return;
}
var dat = Fx.up ? "article_id=" + Fx.arc +
"&" + "poster_name=" + encodeURIComponent(Fid("poster_name").value) +
"&" + "comment=" :
"mode=update" + "&" + "oid=" + Vis.oid + "&" + "type=comments" + "&" +
"id=" + Fx.editNum + "&" + "text=";
dat += encodeURIComponent(str);
Fx.ent = updateRes;
req = Freq();
req.onreadystatechange = reqEntry;
req.open("post", "/cgi-bin/diary_" + (Fx.up ? "comment" : "editor") + ".cgi", true);
req.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
req.send(dat);
};
counter = function(){
var n = Fid("chatMsg").value.length;
echo("cntInfo", " " + n);
};
Re_com = function(s){
s = s.replace(/\r?\n/g, "");
return s.match(/\x3ctextarea[^>]+>(.+?)\x3c\/textarea>/) ? RegExp.$1 : "";
};
Re_user = function(s){
s = s.match(/投稿者: ([^<]+)/) ? RegExp.$1 : "-";
return s.replace(/^\s+|\s+$/g, "");
};
Re_uri = function(n){
return "/cgi-bin/diary_editor.cgi?oid=" + Vis.oid + ";type=comments;id=" + n;
};
Lo.koto = function(){ Fx.kotoMain(Re.koto.responseText); };
Fx.kotoMain = function(s){
var s = s.replace(/\r?\n/g, "");
var s1 = s.match(/\x3cdiv class="entry">(.+?)\x3cdiv class="for-owner">/) ? RegExp.$1 : "";
s1 = s1.replace(/(\x3cdiv class="entry)/g, "$1116");
echo("entryDisp", s1);
Fx.arc = s.match(/id="A(\d+)/) ? RegExp.$1 : null;
var max = s.match(/id="comments">コメント \((\d+)\)/) ? Number(RegExp.$1) : 0;
s = s.replace(/>\s+</g, "><");
s = s.replace(/(\x3cdiv class=)"comment_element">(\x3ca)[^>]+(>編集\x3c\/a>)\x3ca.+?id="C(\d+)" href="\/home\/([a-z]+)\/" [^>]+>(.+?)\x3c\/a>/g, "$1'u_$5'>$2 class='edit' href='javascript:void(0)' title='もっと追加して♪' onclick='up2(this,$4);'$3 \x3cspan class='Res'>R$4\x3c\/span> \x3cspan class='user'>$6\x3c\/span>");
var r = s.match(/\x3cdiv class='u_[a-z]+'>.+?\x3c\/div>/g);
if(r == null) return;
for(var i = 0; i < r.length; i++){
r[i] = r[i].replace(/>/, function(e0){
return "> \x3cspan class='snum' id='s" + max + "'>[ " + (max--) + " ]\x3c/span>";});
}
r = r.join("");
r = r.replace(/(\x3cspan class=")comment_body/g, "$1msg");
echo("listDisp", Fx.col(r));
var o = Fid("chatMsg");
if(Fx.up){
o.value = "";
}
o.focus();
};
Fx.kotoba = function(){ Fx.e(Fx.pageUri, "koto");};

entry = function(){
if(Vis.login){
Fx.pageUri = Fx.loc.match(/uri=(.+)/) ? RegExp.$1 : "/home/nancyan/diary/2009/03/1236494495.html";
newPost();
if(Vis.oid == "nancyan" || Vis.oid == "botanic"){
Fid("postButton").disabled = false;
}
Fx.kotoba();
} else {
Fid("noLogin").style.display = "block";
}
};

Fx.col = function(s){
var s = s.replace(/(\(\*\^\(\^\* \))/g, "\x3cspan class='kiss1'>$1\x3c\/span>");
s = s.replace(/(\( \*\^\)\^\*\)|^^|\(#\^\-\^#\))/g, "\x3cspan class='kiss2'>$1\x3c\/span>");
s = s.replace(/(\(\^\-\^y|\(\*\^\-\^\*\)|\(\*\^_\^\*\))/g, "\x3cspan class='kao1'>$1\x3c\/span>");
s = s.replace(/(愛|大好き)/g, "\x3cspan class='big'>$1\x3c\/span>");
return s;
};

[/beforeExec]
[cssText]
.gif1 { border:1px solid #ccc; border-radius:.5em; -moz-border-radius:.5em; }
#listDisp { height:250px; overflow:scroll;}
#linkDisp { width:30%; float:right; }
.lin { margin:0em .5em 1em .5em;
border:1px solid darkgreen; padding:.5em; border-radius:1em;
-moz-border-radius:1em;
}
.lin a { text-decoration:underline; }

.linkInfo {
margin:.5em 2em; border:1px dotted #ccc;
border-radius:.8em; -moz-border-radius:.8em; padding:.25em;
text-align:left;
color:#808080;
}
#hako { margin-right:30%;}
.t1,.t2 { width:100%; }
.td1 { width:100px; text-align:center; color:#808080; }
.td1 a { color:blueviolet; }
#chatMsg { width:96%; background-color:snow;
border:1px solid #ccc; border-radius:.25em; -moz-border-radius:.25em;
}
.infoMsg { margin-bottom:.5em; }
#listdisp { margin-top:1em; }
#listDisp div {
line-height:1.4em; padding:.5em 1em;
border-top:3px dotted #ccc; font-size:10.5pt;
}
#listDisp .user { color:darkgreen; }
.snum { background-color:yellow; }
.act { background-color:#ffefff; color:red; }
.edit { margin-left:.5em; color:blueviolet;}
#update { color:darkgreen; }
#noLogin { display:none; }
.m1 { text-align:center; margin-bottom:1em;
color:#808080;
}
.now { text-decoration:underline; color:red; }
#fx_link { margin:1em; border:1px dashed skyblue;
border-radius:.8em; -moz-border-radius:.8em;
padding:.5em 1em;
}
#me_link { margin:1em; border:1px dashed magenta;
border-radius:.8em; -moz-border-radius:.8em;
padding:.5em 1em;
}
div.u_hazuki span.msg, div.u_botanic span.msg { color:#896952; }
div.u_nancyan span.msg { color:#000; }
.kiss1 { color:red; }
.kiss2 { color:magenta; }
.kao1 { color:blueviolet; }
.big { font-size:13pt; color:#b22222; }

[/cssText]
[body]
<$$div id="linkDisp">
<$$div class="m1"><$$br />
<$$a href="main.html?no=116">#116 汎用コメント更新システム<$$/a><$$br />
<$$img src="http$$://www.geocities.jp/musicgarden_jp/nancyan_hazuki_anzendaiichi.gif" alt="ヘルメット姿の二人" width="192" height="96" class="gif1" /><$$br />
<$$br />


<$$div class="linkInfo">
■<$$a href="javascript:location.reload()">再読み込み<$$/a>
<$$/div>
<$$br />

言葉の箱のコメントノート(^-^y<$$/div>
<$$div id="fx_link"><$$/div>
<$$div id="me_link"><$$/div>
<$$/div>
<$$div id="hako">
<table class="t1"><tbody><tr><td class="td1">
<$$img src="http$$://www.geocities.jp/musicgarden_jp/hazuki_utau.gif" alt="心を込めて歌うリトル葉月" /><$$br />[ <$$a href="javascript:newPost();" title="黒板消しだよ!うぅ!">(ノ><)ノCLS<$$/a> ]</td><td class="td2"><$$form accept-charset="UTF-8">

<table class="t2"><tbody>
<tr><td>お名前 : <$$input type="text" id="poster_name" size="20" class="input1" /></td>
</tr><tr><td>
<$$textarea id="chatMsg" cols="50" rows="3" onkeypress="counter()" onchange="counter()" onclick="counter()"><$$/textarea></td>
</tr><tr><td><$$input type="button" value="\(*⌒ー⌒*)/新規!" onclick="postSubmit()" id="postButton" disabled="disabled" title="言葉よ飛んでいけ~~" /> 文字数 :
<$$span id="cntInfo">0<$$/span>/200(max)</td>
</tr></tbody></table>
</form>
</td></tr></tbody></table>
<$$div id="entryMenu">
<$$a href="javascript:msgDispShow(1)">本文の表示<$$/a> |
<$$a href="javascript:msgDispShow(0)">コメントの表示<$$/a>
<$$/div>
<$$div id="entryDisp" style="display:none"><$$/div>
<$$div id="listDisp"><$$/div>

<$$div id="noLogin">
<$$img src="files/yukikko2b.gif" alt="" /><$$br />
 ログインしないと表示できない仕様です。諦めて下さい(^-^;
<$$/div>
<$$/div>
[/body]
[exec]
document.title = "汎用コメント更新システム";
entry();
[/exec]