足跡取得 3.0.1 関数(3)
 

[FOO-ADD-EXEC-DATA]

fooRes = no => {
const obj = doc.body.classList;
obj.add("tw0", "com-out", "menu-out", "main-out", "link-out", "nDisp-out", "mDisp-out");
};

logsRep = e =>{
let dt = e.replace(/.+\(\)">|\x3cdiv id="back_.+/g, "").replace(/<colgroup>.+?<\/colgroup>/g, "").
replace(/<td class="add".+?<\/td>|<\/?a[^>]*>/g, "");

dt = dt.replace(/<table id="messages"/, "$& cellspacing=\"0\" cellpadding=\"0\"");
dt = dt.replace(/<table id="hours">.+/, "");
dt = dt.replace(/(message">)(\s*)(<\/td>)/g, (e0,e1,e2,e3) =>
`cls ${e1}言葉は少なめ(${e2 == "" ? "白紙" : "半角空白"})${e3}`);
dt = dt.replace(/(<td class="date">[0-9:\/\s]+<\/td>)[\s\t]*(<td class="user_id">[0-9a-z\-]+<\/td>)/g,
"<td class=\"num\"><\/td>$2$1");
dt = dt.replace(/<td class="user_id"/g, "$& onclick=\"dtUserEntry(this)\"");
dt = dt.replace(/[\s\t]+(<td)/g, "$1");
return dt;
};

appendUser = (user, num, vol) => {
let u = "vol w0 b1,user,vol w2,date,vol w1,user tl0 ls,date tl0,vol tl0,date tl0,user tl0 ls,vol tl0,vol tl0,vol tl1,user tl1 ls,date tl1,vol tl1,date tl1,user tl1 ls,vol tl1,vol w2 tl2,vol w0 tl2,date tl2,vol w2 tl2,vol w2 tl2,date tl2,vol w1 tl2,vol w1 tl2,sec".split(",");
let dt = "";
for(let i = 0; i < u.length; i++){
dt += `<span class="log-${u[i]}"`;
if(i == 0) dt += ` id="M${user}" onclick="getFootprint(this)">${num}`;
if(i == 1) dt += ` title="${user}">${user}`;
if(i == 2) dt += `>${volCnt}`;
if(i > 2) dt += [3,5,6,8,9,13,14,16,17,21,24].includes(i) ? `>` : i == 27 ? `>A` : `>0`;
dt += `</span>`;
}
return dt;
};

/* -- footprint.cgiの取得 -- */
getFootprint = obj => {
const cn = obj.classList;
const par = obj.parentNode.childNodes;
const bcc = doc.body.classList;
if(cn.contains("sect")){
cn.remove("sect");
cn.add("sect-bef");
return;
}
const user = par[1].textContent;
if(befDat.indexOf(" " + user + " ") == -1) befDat += user + " ";
cn.remove("sect-bef", "sect");
cn.add("sect-now");
xhr("/cgi-bin/footprint.cgi?oid=" + user, null, e => {
if(e.indexOf("ERROR - eclat cyber city") != -1){
if(sectUser != null){
sectUser.classList.remove("sect");
sectUser.classList.add("sect-bef");
}
obj.parentNode.classList.add("del");
cn.remove("sect-now", "sect");
cn.add("sect-bef");
sectUser = obj;
nextUserLoad();
} else {
cn.add("done");
volCnt++;
actUserLogs(e, user, obj);
}
});
};

actUserLogs = (e, user, obj) => {
const bcc = doc.body.classList;
const cn = obj.classList;
const list = Fid("M" + user).parentNode.childNodes;
if(e.match(/総アクセス数: (\d+) HIT \(since ([^\)]+)/)){
list[3].textContent = RegExp.$2;
list[4].textContent = RegExp.$1;
}
if(e.match(/caption>最近(\d+)人の足跡/)) list[12].textContent = RegExp.$1;
let o = Fid("dtDisp");
echo(o, logsRep(e));
o.scrollTop = 0;
let o1 = Fcn("days", "count");
list[18].textContent = o1[o1.length > 1 ? 1 : 0].textContent;
let u = Fcn("messages", "user_id");
list[15].textContent = u.length;

let en = " ";
for(let i = u.length - 1; i >= 0; i--){
let vis = u[i].textContent;
let usa = " " + vis + " ";
if(befDat.indexOf(usa) != -1) u[i].classList.add("sect-bef");
if(Fid("D" + vis)) u[i].parentNode.classList.add("non-tr");
let ex, us = Fid("M" + vis);
if(!us || us == null){
let par = Fid("ulDat");
let c = Fce("li");
echo(c, appendUser(vis, Ftag(par, "li").length + 1, Number(obj.nextElementSibling.nextElementSibling.textContent) + 1));
par.append(c);
ex = c.childNodes;
} else {
ex = us.parentNode.childNodes;
}

let d1 = u[i].nextElementSibling.textContent;
if(i == u.length - 1){
list[17].textContent = vis;
list[16].textContent = d1;
}
if(i == 0){
list[13].textContent = vis;
list[14].textContent = d1;
}

let d2 = ex[6].textContent;
if(d2 == "" || d1 > d2){
ex[6].textContent = d1;
ex[5].textContent = user;
}
d2 = ex[8].textContent;
if(d2 == "" || d1 < d2){
ex[8].textContent = d1;
ex[9].textContent = user;
}
ex[7].textContent = Math.floor(
((new Date(ex[6].textContent)) - (new Date(ex[8].textContent))) / 2592000000);

d1 = Number(ex[10].textContent);
d2 = Number(ex[11].textContent);
ex[11].textContent = d2 + 1;
if(en.indexOf(usa) == -1){
ex[10].textContent = d1 + 1;
en += usa;
}
}
if(sectUser != null){
sectUser.classList.remove("sect");
sectUser.classList.add("sect-bef");
}
cn.remove("sect-now", "sect-bef");
cn.add("sect");
sectUser = obj;
diaryDataLoad();
};

/* -- ユーザーのデータ一覧での更新 -- */
dtChg = e => {
let par = e.parentNode;
let cls = par.classList;
// 状態で処理を振り分け
if(!cls.contains("cg")){
let dt = e.textContent;
let w = dt.length + 3;
if(w > 16) w = 16;
if(w < 8) w = 8;
// spanをinput(サイズは可変)に置き換え
echo(par, `<input size="${w}" onblur="dtChg(this)" value ="${dt}" />`);
cls.add("cg");
// 初期でフォーカス済み、外れるともう一度関数を呼び出す
par.firstChild.focus();
} else {
let dt = e.value;
let cs = "";
if(dt == ""){
dt = "0";
cs = "err";
}
// inputをspanに置き換え
echo(par, `<span class="${cs}" onclick="dtChg(this)">${dt}</span>`);
// 対応する要素の指定 絶対位置から相対位置へ
let c = par.previousElementSibling.firstChild.lastChild.textContent;
let obj = Fid("M" + echo("dtUser")).parentNode;
let a = obj.childNodes[c];

// もしも変更箇所があったら
if(a.textContent != dt){
a.textContent = dt;
obj.classList.add("up"); // リストを変更してレコードにクラスを追加
Fid("sdiBtn").classList.add("up"); // SDI取得ボタンをセット
// 編集領域ボタンをセット
let up = Math.floor((obj.firstChild.textContent - 1) / 40);
Fid("upCmdDisp").childNodes[up].classList.add("up");
}
cls.remove("cg");
}
};

diary1stEntry = () => {
let user = echo("dtUser");
// parinfo
// echo("parInfo", "diary/menu.html");
const es = d => d.replace(/(\d+)(\d{3})$/, "$1,$2");
xhr(`/home/${user}/diary/menu.html`, null, e => {
echo("parInfo", "done.");
e = e.replace(/.+link_month" href="/g, "").replace(/".+$/, "");
if(!e.match(/diary\/\d{4}\/\d\d/)) return;
// parInfo
// echo("parInfo", e);
xhr(e, null, e1 => {
e1 = e1.replace(/^.+<hr \/>/g, "");
let aid = e1.match(/A(\d+)/) ? es(RegExp.$1) : "0";
let c = e1.match(/C(\d+)/) ? es(RegExp.$1) : "0";
let dte = e1.match(/\d\d(\d\d \d\d\/\d\d \d\d:\d\d)/) ? "'"+ RegExp.$1 : "0";
let par = Fid("M" + user).parentNode;
let o = par.childNodes;
let a = Ftag("dtData", "span");
o[55].textContent = a[111].textContent = dte;
o[56].textContent = a[113].textContent = aid;
o[57].textContent = a[115].textContent = c;
par.classList.add("up");
});
});
};

/* -- ユーザー毎のデータ一覧の生成 -- */
dtLoad = () => {
let o = Ftag("nb2Disp", "span");
let a = Fid("M" + echo("dtUser")).parentNode.childNodes;
let dt = "<table>";
for(let i = 0; i < o.length; i += 3){
dt += "<tr>";
for(let j = 0; j < 3; j++){
dt += `<td class="e1"><span>${echo(o[i+j])}</span></td>` +
`<td class="e2"><span onclick="dtChg(this)">${echo(a[i+j])}</span></td>`;
}
dt += "</tr>";
}
echo("dtData", `${dt}</table>`);
};

[/FOO-ADD-EXEC-DATA]