💖execCode F
[EXEC-F-DATA]
/* -- システムの置換関数 -- */

/* --リンクのフック -- */
axRep = s => {
s = s.replace(/(class="entry_info">)Category : <a (href="\/cgi\-bin\/diary.cgi\?oid=)([a-z0-9\-]+);c=(\d+)/g,
"$1Posted by <span class=\"oid\">$3@eclat</span> : <span class=\"cate\">C$4</span> 💚<a target=\"_blank\" $2$3;c=$4");

s = s.replace(/\x3ca target="[^"]+" href="http:\/\/www.eclat.cc/g, "<a href=\"");
s = s.replace(/(class="entry_title"><a )(href=)/g, "$1target=\"_blank\" $2");
s = s.replace(/(class="[^"]+)(" href=")([^"]+)/g, (e0,e1,e2,e3) => {
return e3.match(/\/home\/[a-z0-9\-]+\/diary\/|\/cgi\-bin\/diary/) ?
e1 + " ax\" onclick=\"mainShow('" + e3 + "', this); return false" + e2 + e3 : e0;
});

s = s.replace(/(<a )(href=")([^"]+)/g, (e0,e1,e2,e3) => {
return e3.match(/\/home\/[a-z0-9\-]+\/diary\/|\/cgi\-bin\/diary/) ?
e1 + "class=\"ax\" onclick=\"mainShow('" + e3 + "', this); return false\" " + e2 + e3 : e0;
});
return s;
};

/* -- サムネイル画像のエントリ先 -- */
m3ImgEntry = (disp, img) => {
const bef = m3ImgEntry.act;
if(bef != null) Fid(bef).classList.remove("act");
const anc = "P" + img;
Fid(anc).classList.add("act");
m3ImgEntry.act = anc;
const obj = disp == 3 ? "F2" : "M" + disp;
if(disp == 3 && msCNT != 2) dispChg(0, 2);
if(disp != 3 && mmCNT != disp) dispChg(1, disp);
Fid(img).scrollIntoView({ behavior:"smooth" });
setTimeout(() => { Fid(obj).scrollBy(0, -34); }, 1000);
};

/* -- サムネイルの生成 -- */
createThumbnail = (e, no) => {
const objPar = "ABCD".charAt(no);
const cnt = "m3img" + m3CNT;
const imgPar = Fce("div");
const w = e.naturalWidth;
const h = e.naturalHeight;

imgPar.className = "img-par";
imgPar.style.backgroundRepeat = "no-repeat";
imgPar.style.backgroundImage = "url(" + e.src + ")";
imgPar.style.backgroundSize = w > 150 && h > 150 ? "cover" : "none";
imgPar.style.backgroundPosition = "center center";

const anc = Fce("a");
anc.className = "m3w" + no;
anc.id = "P" + cnt;
anc.href = `javascript:m3ImgEntry(${no}, "${cnt}")`;

const hd = Fce("div");
hd.className = "hd";
echo(hd, `P${m3CNT}<span class="rt">${objPar}</span>`);

const ft = Fce("div");
ft.className = "ft";
echo(ft, w + " x " + h);
anc.append(hd, imgPar, ft);
Fid("m3Doc").append(anc);
e.id = cnt;
m3CNT++;
tabsCount("pTab", Ftag("m3Doc", "a").length, null);
};

/* -- dispChgからの呼び出し -- */
thumbUnLoadCheck = () => {
const par = Fid("m3Doc");
let obj = Ftag(par, "a");
for(let i = obj.length - 1; i >= 0; i--){
if(Fid(obj[i].id.substring(1)) == null) obj[i].remove();
}
tabsCount("pTab", Ftag(par, "a").length, null);
};

/* -------- メニューの生成 -------- */
createDiaryMenu = e => {
let isAcc = ["kadoma1428"].includes(xmlUSER);
let lev = e.match(/div class="entry C"/) ? -1 :
(e.match(/div class="entry C\d+"/) ? 1 :
(e.match(/oid=[\w\-]+;s="/) ? -2 : 0));
isF2 = false;
if(msCNT != 1) dispChg(0,1);
if(mmCNT != 0) dispChg(1,0);
if(lev == 0) {
doc.body.classList.add("loaded");
echo("m0Doc", `<div class="user-dels">
<p>とっても残念なお知らせ</p>
<p><strong>${xmlUSER}@eclat</strong>さんは退会または未登録です。</p>
<p>履歴で戻るか「左側」のリンク集で進んで下さい。</p></div>`);
dispChg(0,4);
return;
}
echo("fileView", `
<div class="link_title">Source & Page</div>
<div class="masMsg">
HTML構文で全文表示されます。<br />
色分けしています。
</div>
<div class="btn-ul">
<span onclick="fileViewEntry(0, this);">メイン</span>
<span onclick="fileViewEntry(1, this);">メニュ</span>
</div>
<div class="masMsg">
CSSファイルです。<br />
色分けしています。
</div>
<div class="btn-ul">
<span onclick="fileViewEntry(2, this);">共 通</span>
<span onclick="fileViewEntry(3, this);">メイン</span>
<span onclick="fileViewEntry(4, this);">メニュ</span>
<span onclick="fileViewEntry(5, this);">プロフ</span>
<span onclick="fileViewEntry(6, this);">日記帳</span>
<span onclick="fileViewEntry(7, this);">掲示板</span>
<span onclick="fileViewEntry(8, this);">投 稿</span>
<span onclick="fileViewEntry(9, this);">友 達</span>
<span onclick="fileViewEntry(10, this);">リンク</span>
<span onclick="fileViewEntry(11, this);">足 跡</span>
</div>
<div class="masMsg">
コンテンツはインラインです。<br />
領域Bに上書きモードで表示します。
</div>
<div class="btn-ul">
<span onclick="fileShowEntry(0, this)">プロフ</span>
<span onclick="fileShowEntry(3, this)">日記帳</span>
<span onclick="fileShowEntry(4, this)">掲示板</span>
<span onclick="fileShowEntry(1, this)">友 達</span>
<span onclick="fileShowEntry(2, this)">リンク</span>
<span onclick="fileShowEntry(5, this)">足 跡</span>
</div>
<label id="addCssDisp"><input type="checkbox" id="addCss" onclick="addCssEntry()" checked="checked" />足跡でユーザのCSSを変更</label>
<div class="tips">ユーザーリンク(/home/)は<br />
システムへ置換されます。</div>`
);

echo("myLinks", `<div class="link_title">関連リンク</div><ul>
<li>※<a href="/home/log2/main.html?job=bbs;user=${xmlUSER}" target="_blank">log2:bbsで「汎用掲示板」を開く</a></li>
<li>※<a href="/home/log2/main.html?job=bbs;user=kakei;p=4;po=77" target="_blank">job=bbs;user=kakei;p=4;po=77</a></li>
<li>※<a href="/home/${xmlUSER}/" target="_blank">標準のサイトを新規で開く</a></li>
</ul>`
);
if(lev < 0) {
tabsCount("mTab", "F1", "a");
doc.body.classList.add("loaded");
echo("m0Doc", `<div class="user-dels">
残念ですが『 <strong>${xmlUSER}</strong> 』さんは日記を<strong>
${ lev == -1 ? "書いていません" : "全て削除しています"}</strong>。<br />
他のコンテンツは「左側」のファイルの表示でどうぞ。</div>`
);

if(doc.URL.match(/view=(\d+)/)){
viewEntry(RegExp.$1 - 0);
}
return;
}

echo("axCreateDisp", `
<div class="link_title">axLinks Create</div><div class="create-info">Create by <span>${xmlUSER}@eclat</span></div>
<div class="masMsg">目的のArticle_idを指定して<br />axコマンドリンクを生成します</div>
件数:<input type="text" value="10" size="4" id="axcLen" /><br />
番号:<input type="text" value="" size="10" id="axcSt" /> <input type="button" onclick="axcEntry()" value="生成" />
<div id="axcDisp"></div>`
);

if(isAcc){
setTimeout(() => {
xhr(`/cgi-bin/diary.cgi?oid=${xmlUSER};n=10`, null, mainShowEntry);
// setTimeout(() => viewEntry(1), 800);
}, 1000);
tabsCount("hTab", "F3", "a");
doc.body.classList.add("loaded");
return;
} else {
let s = e.replace(/.+?(<ul c)/, "$1").replace(/<div id="main".+/, "");
s = s.replace(/link_title">.+?</g, "");
s = s.replace(/<\/?(div|ul)[^>]*>/g, "");
let dat = s.split("\x3chr />");

const info = `<div class="create-info">Create by <span>${xmlUSER}@eclat</span></div>`;
dat[2] = dat[2].replace(/ title=[^>]+>/g, ">");
let arc = dat[2];
let ind = dat[2];
let inde = ind.match(/<a class="link_year.+?<\/a>/g);
inde = inde.join(" ").replace(/>(\d{4})/g,
" id=\"ydm$1\" onclick=\"ydEntry($1);return false\">💛$1年<div>--</div>");
echo("index",`
<div class="link_title">Index of</div>
${ info }
<div class="extra" onclick="extraEntry(this, 0)">
Index of の拡張\x3cbr />
全ての日記の索引を取得します。\x3cbr />
</div><div id="yExtra"></div>
<ul id=\"yearDisp" class=\"link_text"><li> ${ inde } </li></ul>
<div id="indexDisp"></div>`
);

arc = arc.replace(/a class="link_year[^>]+>(\d+)(.+?)(\x3c\/li)/g,
(e0,e1,e2,e3) => {
let n1,n2,s = "";
for(let i = 12; i > 0; i--){
n1 = e2.indexOf(">" + ("0" + i).slice(-2) + "\x3c/a");
s += n1 == -1 ? "\x3ci>" + i + "\x3c/i>" :
e2.substring(e2.lastIndexOf("\x3ca", n1), n1 + 7);
if(i == 7) s += `\x3c/div>\x3cdiv class="arc-n2">\x3cspan class="arc">\x3c/span>`;
}
return `div class="arc-n1">\x3cspan class="arc">${e1}\x3c/span>` +
s.replace(/>0(\d)\x3c/g, ">$1\x3c") + "\x3c/div>" + e3;
});

echo("archives",`
<div class="link_title">Archives</div>
${ info }
<div class="masMsg">
月毎は降順で表示されます。<br />
追記フラグを随時クリアして。
</div>
<ul class=\"link_text"> ${ axRep(arc) } </ul>
<div class="tips">
件数と文字数の制限はありません。<br />
確保した領域には注意が必要です。
</div>`
);

dat[3] = "<li class=\"C0\"><a class=\"category\" href=\"/cgi-bin/diary.cgi?oid=" +
xmlUSER + ";n=10\">全カテゴリ</a></li>" + dat[3];
dat[3] = dat[3].replace(/(>)(<a )/g, "$1<span class=\"date\"></span>$2");
echo("categories",`
<div class="link_title">Categories</div>
${ info }
<div class="extra" onclick="extraEntry(this, 1)">カテゴリの拡張</div>
<ul class=\"link_text"> ${ axRep(dat[3]) } </ul>`
);
echo("latest_articles",`
<div class="link_title">Latest_articles</div>
${ info }
<ul class=\"link_text"> ${ axRep(dat[0]) } </ul>`
);
echo("latest_comments",`
<div class="link_title">Latest_comments</div>
${ info }
<ul class=\"link_text"> ${ axRep(dat[1]) } </ul>`
);
tabsCount("sTab", "F0", "a");
tabsCount("mTab", "F1", "a");
tabsCount("hTab", "F3", "a");
mainShowEntry(e);
doc.body.classList.add("loaded");
}

if(xmlUSER == "new-diary"){
if(doc.referrer.includes("profile")){
viewEntry(12);
} else {
if(doc.URL.match(/view=(\d+)/)){
viewEntry(RegExp.$1 - 0);
} else {
dispChg(0,2);
const obj = Fcn("f2Doc", "comment_element")[0];
const m = Fcn(Fcn("m0Doc", "entry")[0], "dateIs");
const len = m.length;
setTimeout(() => {
dispChg(0,1);
delayScroll(obj, m ? m[len - 1] : null);
setTimeout(() => {
modeOf(1);
setTimeout(() => {
delayScroll("fileView", null)
}, 500);
}, 1500);
}, 1500);
}
}
} else {
if(xmlUSER != "all"){
if(doc.URL.match(/view=(\d+)/)){
viewEntry(RegExp.$1 - 0);
} else {
setTimeout(() => {
modeOf(1);
setTimeout(() => {
// delayScroll("categories", "archives");
}, 1500);
}, 500);
}
}
}
if(doc.URL.includes("view=pic")) setTimeout(() => dispChg(1,3), 1500);
};

/* -- axリンク生成 -- */
axcEntry = () => {
let s = echo("axcSt"), len = echo("axcLen");
let uri = `/cgi-bin/diary.cgi?oid=${xmlUSER};n=${len};s=${s}`;
echo("axcDisp", `<a class="ax" onclick="mainShow('${uri}', this); return false"
href="${uri}">ax(${len},${s})</a>`);
};


/* -- F4 UID検索 -- */
uidEntry = e => {
let uid = Fid("uidDat").value;
echo("uidArea", `<ul class="link_text"><li><a target="_blank" href="main.html?fn=3;user=${uid}">${uid}</a></li></ul>`)
};

uidReset = () => {
let o = Fid("uidDat");
o.value = "";
o.focus();
};

[/EXEC-F-DATA]