💖execCode E
[EXEC-E-DATA]

/* -- コメント編集の送信 -- */
commentUpdateEntry = (uri, obj) => {
if(FxDec.visUser == null){
alert("ログインして置いて下さい");
return;
}
const par = obj.parentNode.parentNode;
const oid = uri.match(/oid=([\w\-]+);/) ? RegExp.$1 : "";
const no = uri.match(/;id=(\d+)/) ? RegExp.$1 : "";
let dat = echo(Ftag(obj.parentNode, "textarea")[0]);
dat = dat.replace(/\r?\n/g, "$");
dat = dat.replace(/[\ud800-\udbff][\udc00-\udfff]/g,
  dt => `\x26#x${dt.codePointAt(0).toString(16)};`);
echo(Ftag(par, "span")[0], dat.replace(/\$/g, "\x3cbr />").
replace(/([\w\-]+\/files\/[\w\-\._]+)\((\d)\)/g,
"\x3cimg src=\"/home/$1\" alt=\"\" class=\"img-$2\" />")
);
xhr("diary_editor", "mode=update&oid=" + FxDec.visUser +
"&type=comments&id=" + no + "&text=" + enc(dat), e => {
par.classList.remove("up-biz");
par.lastChild.remove();
});
// 送信の戻りは編集した記事。
};

/* -- コメントの新規送信 -- */
newCommentEntry = obj => {
const par = obj.parentElement;
const user = par.firstChild.value;
const dat = Ftag(par, "textarea")[0].value;
// alert(obj.parentNode.parentNode.parentNode.parentNode.className);
alert(obj.parentNode.parentNode.parentNode.className);
alert(user);
alert(user);
alert("今、頑張って構築中です、少し待ってください\n\n" + dat);

};

/* -- コメントの文字置換 -- */
commentTagsRep = s => {
s = s.replace(/(\x3cspan class="comment_body">)(.+?)(\x3c\/span>)/g,
(e0,e1,e2,e3) => e1 + e2.replace(/\$/g, "\x3cbr />") + e3 );

s = s.replace(/<form action="\/cgi\-bin\/diary_comment.cgi".+?\x3c\/form>/g, (e0) =>
"<div class=\"ax-up\"><input type=\"text\" name=\"poster_name\" />" +
"\x3ctextarea class=\"come-edit\" onclick=\"comeEditCounter(this)\">" +
"\x3c/textarea>" +
"<span class=\"come-sub\"onclick=\"newCommentEntry(this)\">送信</span>" +
"<span class=\"come-cnt\">0</span> / 200</div>"
);
return s;
};

comeEditCounter = obj => {
let str = echo(obj).replace(/[\ud800-\udbff][\udc00-\udfff]/g,
  dt => `\x26#x${dt.codePointAt(0).toString(16)};`);
echo(Ftag(obj.parentNode, "span")[1], str.length);
};

/* -- コメント編集のエントリ -- */
commentEditEntry = (e, obj) => {
const par = obj.parentNode;
if(par.classList.contains("up-biz")){
par.classList.remove("up-biz");
par.lastChild.remove();
} else {
par.classList.add("up-biz");
const msg = Ftag(par, "span")[0];
const o = Fce("div"); o.className = "ax-up";
echo(o, "\x3ctextarea class=\"come-edit\" onclick=\"comeEditCounter(this)\">" +
echo(msg).replace(/\x3cbr ?>/gi, "\n").
replace(/\x3cimg src="\/home\/([^"]+)" alt="" class="img\-(\d)".*?>/g, "$1($2)") +
"\x3c/textarea>" +
"<span class=\"come-sub\"onclick=\"commentUpdateEntry('" + e + "', this)\">更新</span> " +
"<span class=\"come-cnt\">0</span> / 200 " +
"<span class=\"come-info\">※onClickで値が更新</span>"
);
par.append(o);
}
};

/* -- ユーザーファイルのエントリー -- */
inlineEntry = () => {
const obj = window["main_" + xmlUSER].document;
let a = Ftag(obj, "a");
for(let i = 0; i < a.length; i++){
if(a[i].href.match(/\/home\/[\w\-]+\/?$/)){
a[i].href = a[i].href.replace(/(\/home\/)([\w\-]+)\/?$/g,
"$1new-diary/main.html?fn=2;user=$2");
a[i].target = "_blank";
if(a[i].innerHTML == "kumachan"){
let o = a[i].parentNode;
if(o.className == "user_id")
o.nextElementSibling.innerHTML = "言葉は控えめ";
}
}
}
setTimeout(() => {
Fid("mainDisp").classList.remove("ev0","ev1","ev2","ev3","ev4");
}, 700);

if(obj.URL.indexOf("footprint.cgi") != -1){
if(xmlUSER == "new-diary"){
obj.getElementsByTagName("link")[0].href = "/home/css-2/footprint.css";
xhr("/cgi-bin/footprint.cgi?oid=trans", null, e => {
e = e.replace(/.+\x3ctable id="days">/, "").replace(/\x3c\/table.+$/, "");
let o = obj.createElement("table");
o.id = "days2";
o.innerHTML = e;
obj.body.insertBefore(o, obj.getElementById("hours"));
setTimeout(() => {
obj.getElementById("days").scrollIntoView();
setTimeout(() => { window["main_" + xmlUSER].scrollTo(0,0)}, 3000);
}, 1000);
});
} else {
if(Fid("addCss").checked){
obj.getElementsByTagName("link")[0].href = "/home/css-2/footprint.css";
}
}
}
};

/* -- ソースの表示・文字置換 -- */
htmlFileRep = (s, sys) => {
s = s.replace(/</g, "\x26lt;");
s = s.replace(/ (class)=(["'])([^"']+)(["'])/gi, " <span class=\"rep-pr\">$1</span>=$2<span class=\"rep-cl\">$3</span>$4");
if(sys){
s = s.replace( / (content|http\-equiv)=(["'])([^"']+)(["'])/gi,
" <span class=\"rep-pr\">$1</span>=$2<span class=\"rep-w\">$3</span>$4");
}
s = s.replace(
/ (target|name|type|width|height|charset|value)=(["'])([^"']+)(["'])/gi,
" <span class=\"rep-pr\">$1</span>=$2<span class=\"rep-w\">$3</span>$4"
);
s = s.replace(/ (href|src)=(["'])([^"']+)(["'])/gi, " <span class=\"rep-pr\">$1</span>=$2<a href=\"$3\"class=\"rep-a\">$3</a>$4");
s = s.replace(/ (href|src)=([^"' >]+)/gi, " <span class=\"rep-pr\">$1</span>=<a href=\"$2\"class=\"rep-a-err\">$2</a>");
s = s.replace(/ (id)=(["'])([^"']+)(["'])/gi, " <span class=\"rep-pr\">$1</span>=$2<span class=\"rep-id\">$3</span>$4");

if(!sys){
s = s.replace(/ (style)=(["'])([^"']+)(["'])/gi, " <span class=\"rep-pr\">$1</span>=$2<span class=\"rep-in\">$3</span>$4");

// s = s.replace(/(^|\t)(\x26lt;script.+?\x26lt;\/script>)/gi, '<div class="rep-js">$2</div>');
// s = s.replace(/ (\x26lt;script.+?\x26lt;\/script>)/gi, '<span class="rep-js">$1</span>');

s = s.replace(/(\x26lt;\/?)(link|!doctype|meta|body|html|head|title)(.*?>)/gi, "<span class=\"rep-err\">$1$2$3</span>");
s = s.replace(/(\x26lt;\/?)(font|marquee)(.*?>)/gi, "<span class=\"rep-war\">$1$2$3</span>");
s = s.replace(/ (align|valign|bgcolor)(=["'][^"']+["'])/gi, " <span class=\"rep-war\">$1$2</span>");
s = s.replace(/(\x26lt;br>)/gi, "<span class=\"rep-war\">$1</span>");
// s = s.replace(/(\x26lt;\/?)(script|iframe)/gi, "$1<span class=\"rep-tag\">$2</span>");
// s = s.replace(/(\x26lt;!\-\-.+?\-\->)/g, "<span class='rep-c'>$1</span>");
}
s = s.replace(/\t/g, "\n<i></i>");
if(s != "") s = "<i></i>" + s;
return s;
};

/* -- CSS・ソースの置換 -- */
cssFileRep = s => {
s = s.replace(/</g, "\x26lt;");
s = s.replace(/(\/\*.*?\*\/)/g, "<div class=\"code-com\">$1</div>");
s = s.replace(/\t/g, "\n");
return s;
};

/* -- ファイル表示の装飾 -- */
fileRep = (s, n, mod) => {
s = s.replace(/\t+$/, "");
let str = "";
let dt = new Date(); dt.setTime(mod * 1000);
dt = dt.toLocaleString('ja-JP').replace(/\/(\d) /, "/0$1 ").
replace(/ (\d:)/, " 0$1").replace(/\/(\d\/)/, "/0$1").replace(/(\d{4})./, "$1 ");
if(n < 2){
let s1 = "", s2 = "", s3 = "", len = 0, line = 0;
if(s.match(/(^.+?)(<div>|<div id="menu">)\t(.*)\t(<\/div>\t\t<)(div|form)(.+?$)/)){
s1 = RegExp.$1 + RegExp.$2; s2 = RegExp.$3; s3 = RegExp.$4 + RegExp.$5 + RegExp.$6;
len = s2.length; line = s2.split("\t").length - 1;
s1 = htmlFileRep(s1, 1); s2 = htmlFileRep(s2, 0); s3 = htmlFileRep(s3, 1);
}
const co = key => '<span class="rep-' + key + '">' + (s2.split('class="rep-' + key + '"').length - 1) + '</span>';
str =
'<div class="rep-msg">最終更新日 : ' + dt + '\t' + co("err") + co("war") + co("js") + co("tag") + co("id") +
line + '行 ' + len + '文字</div>' +
'<div class="rep-sys">' + s1 + '</div>' +
'<div class="rep-msg">ここからユーザーの変更領域です。\t軽く検査しています。 </div>' +
'<div class="rep-user">' + s2 + '</div>' +
'<div class="rep-msg">ここまでが変更領域です。\t次からはシステムが少し入ります。 </div>' +
'<div class="rep-sys">' + s3 + '</div>';
} else {
str = '<div class="rep-msg">最終更新日 : ' + dt + '\t' + s.split("\t").length + '行 ' + s.length + '文字</div>' + cssFileRep(s);
}
return str;
};

/* -- ファイルのソースの表示 -- */
fileViewEntry = (n, obj) => {
if(fileViewEntry.bef != null){
const vis = fileViewEntry.bef.classList;
vis.remove("now");
vis.add("vis");
}
obj.classList.add("now", "ac");
if(mmCNT != 2) dispChg(1,2);
modeOf(1);
fileViewEntry.bef = obj;
setTimeout(() => obj.classList.remove("ac"), 400);
const tar = Fid("file" + n);
if(tar){
delayScroll(tar, null);
} else {
const uri = "/home/" + xmlUSER + "/" +
("main menu common main menu profile diary bbs bbs_form friends links " +
"footprint").split(" ")[n] + "." + (n < 2 ? "html" : "css");
xhr(uri , null, (s, mod) => {
s = fileRep(s, n, mod);
echoMain(`
<div class="entry_title" id="file${n}">${uri}</div>
<div class="code-par">
<code class="code">${s}</code>
</div>`
);
});
}
};

fileShowEntry = (n, obj) => {
if(fileShowEntry.bef != null){
const vis = fileShowEntry.bef.classList;
vis.remove("now");
vis.add("vis");
}
obj.classList.add("now", "ac")
setTimeout(() => obj.classList.remove("ac"), 400);
fileShowEntry.bef = obj;
if(xmlUSER == "new-diary" && n == 3){
if(mmCNT != 0) dispChg(1,0);
return;
}
if(mmCNT != 1) dispChg(1,1);
modeOf(1);
let ani = "load";
Fid("eTab1").classList.remove("ape");
const uri = (n < 4 ? "/home/" + xmlUSER + "/" : "/cgi-bin/") +
"profile friends links diary bbs footprint".split(" ")[n] +
(n < 3 ? ".html" : n == 3 ? "/" : ".cgi?oid=" + xmlUSER);
Fid("mainDisp").classList.add("ev" + Math.floor(Math.random() * 4));
setTimeout(() => {
echoMain(`
\x3ciframe onload="inlineEntry()" class="inline"
name="main_${xmlUSER}" frameborder="0"
framespacing="0" borde="0" src="${uri}">\x3c/iframe>`
);}
, 500);
};


/* -- 遅延スクロール -- */
delayScroll = (obj, after) => {
if(typeof (obj) == "string") obj = Fid(obj);
let par = obj.parentNode;
while(!par.classList.contains("disp")) par = par.parentNode;
setTimeout(() => {
obj.scrollIntoView();
setTimeout(() => {
par.scrollBy(0, -34);
if(after) delayScroll(after);
}, 1000);
}, 700);
};

[/EXEC-E-DATA]