2020年06月の記事


💖execCode A
[EXEC-A-DATA]
win = window;
doc = document;
Fid = a => typeof(a) == "object" ? a : doc.getElementById(a);
Ftag = (...e) => (e.length > 1 ? Fid(e[0]) : doc).getElementsByTagName(e[e.length - 1]);
Fcn = (...e) => (e.length > 1 ? Fid(e[0]) : doc).getElementsByClassName(e[e.length - 1]);
Fce = a => doc.createElement(a);
Fap = (a,b) => Fid(a).appendChild(b);
Fev = (o,a,b) => o.addEventListener(a,b,false);
res = o => o.responseText.replace(/\r?\n/g, "\t");
enc = s => encodeURIComponent(s);
conBo = s => s.replace(/.+\x3cdiv id="main">/, "").replace(/<\/div>\t*<\/div><\/body>.+/, "");
isMobile = navigator.userAgent.includes("Mobile");

Fcl = (o,s,a) => {
Fid(o).classList.toggle(s);
Fid(a).classList.toggle("se");
};

echo = (...a) => {
let n = a.length;
let o = typeof(a[0]) == "string" ? Fid(a[0]) : a[0];
if(o.tagName == "SELECT"){
if(n == 1) return o.options[o.selectedIndex].value;
else {
if(typeof(a[1]) == "string"){
if(a[1] != ""){
for(let i = o.options.length - 1; i >= 0; i--){
if(o.options[i].value == a[1]) break;
}
o.selectedIndex = i > 0 ? i : 0;
} else o.selectedIndex = 0;
} else o.selectedIndex = a[1];
}
} else {
type = o.tagName == "TEXTAREA" || o.tagName == "INPUT" ? "value" : "innerHTML";
if(n == 1) return o[type];
else {
if(n == 2){
let s = a[1];
if(typeof(s) == "object") s = s.join("");
o[type] = (s + "").replace(/\t/g, "\n");
} else {
let s = o[type];
if(a[2] == "add") o[type] = s + a[1];
if(a[2] == "math") o[type] = Number(s) + a[1];
}
}
}
return o;
};

counter = s => {
let dt = s.replace(/\r?\n/g, " ").replace(/"/g, " ").
replace(/'/g, " ").replace(/<|>/g, " ").
replace(/\x26;/g, " ");
dt = dt.replace(/[\ud800-\udbff][\udc00-\udfff]/g, " ");
return dt.length;
};

echoCounter = s => {
s = s.replace(/\x3cbr ?\/?>/gi, " ");
return counter(fullDec(s));
};

fs1 = () => {
return "";
};

/* -- 日記(/数値.html)の数値からURLを生成 -- */
dateToOnes = s => {
let d = new Date();
d.setTime((s - 0) * 1000);
return `/diary/${d.getFullYear()}/${("0"+(d.getMonth()+1)).slice(-2)}/${s}.html`;
};

pageLogs = s => {
/* xhr("/cgi-bin/footprint" + "_logger" + ".cgi?oid=" + s, null, e => {}); */
};

/* -------- 表示領域の切り替え -------- */
dispChg = (disp,no) => {
let cnt = disp ? mmCNT : msCNT;
let tab = Fid("tab" + disp).classList;
let tar = Ftag("tab" + disp, "div");
let par = disp ? "M" : "F" ;
if(cnt == no){
tab.toggle("full");
let o = doc.body.classList;
} else {
if(cnt != null){
tar[cnt].classList.remove("sel");
tab.remove("bg" + cnt);
}
if(cnt != null) Fid(par + cnt).classList.remove("sel");
Fid(par + no).classList.add("sel");
tar[no].classList.add("sel");
let obj = Fid("tabs" + disp);
obj.classList.add("sm");
tar[no].append(obj);
setTimeout(() => { obj.classList.remove("sm"); }, 50);
tab.add("bg" + no);
disp ? mmCNTbef = mmCNT : msCNTbef = msCNT;
disp ? mmCNT = no : msCNT = no;
if(disp == 1 && no == 4) getPcInfo();
if(disp == 1 && no == 3) thumbUnLoadCheck();
if(!disp){
modeOf(no == 2 ? 0 : no == 3 ? 2 : 1);
if(no == 3){
if(mmCNT != 2) dispChg(1, 2);
// let viewTop = echo("eDispText") != "" ? "eDisp" : "F3";
// Fid("F3").scrollIntoView();
}
}
}
};

dateEntry = () => {
let n = echo("dateIs");
if(!n.match(/^\d+$/)) return;
let d = new Date();
d.setTime(n);
let t = d.toLocaleString();
echo("dateText", t);
};

/* -------- 短縮エイリアス -------- */
/* -- リンク短縮置換 -- */
docDefaultRep = s => {
s = s.replace(/<\[([0-9a-z\- ]+):x1\]>/g, (e0,e1) =>
"<ul class='link_text'>" + e1.replace(/([0-9a-z\-]+)\s*/g,
`<li><a target="_blank" href="main.html?fn=3;user=$1">$1</a></li>`) + "</ul>");

s = s.replace(/\s*<\[([0-9a-z\-]+)\,(\d+)\,(.+?)\]>\s*/g,
(e0,e1,e2,e3) => {
let dt = new Date();
dt.setTime((e2 - 0) * 1000);
const uri = "/home/" + e1 + "/diary/" + dt.getFullYear() +
"/" + ("0" + (dt.getMonth() + 1)).slice(-2) + "/" + e2 + ".html";
return `<li><a class="ax" href="${uri}" onclick="mainShow('${uri}', this); return false">${e3}</a></li>`
});
s = s.replace(/Q1/g, "<div").replace(/Q2/g, "</div>");
s = s.replace(/Q3/g, "<span").replace(/Q4/g, "</span>");
return s;
};

/* -- CSS短縮置換 -- */
cssDefaultRep = s => {
s = s.replace(/\(\s*lg\-(\d+deg)/g, "background-image:linear-gradient($1");
s = s.replace(/lg\-(\d+deg)/g, "linear-gradient($1");
s = s.replace(/ bg\-c:/g, " background-color:");
return s;
};

/* ------------ extra 拡張の定義 ----------- */
extraEntry = (obj, no) => {
extraObj = obj;
befArchive = 0;
obj.classList.add("moves");
switch(no) {
case 0 :
yearListCNT = 0;
yearList = echo("yearDisp").match(/\/home\/[a-z0-9\-]+\/diary\/\d{4}/g);
yearListEntry();
break;
case 1 :
xmlCNT = 0;
createCgiCount();
break;
}
};

extraRemove = () => {
extraObj.classList.add("zero");
setTimeout(() => { extraObj.remove(); }, 1000);
};

extraMenu = (e, val) => {
Fid('index').classList.toggle(val);
e.classList.toggle("ext");
};

/* -- 全索引の生成 -- */
yearListEntry = () => {
if(yearList.length == 0){
extraRemove();
let obj = Fid("yExtra");
obj.innerHTML += `
\x3cspan onclick="extraMenu(this, 'aid-s')">番号\x3cspan>
\x3cspan onclick="extraMenu(this, 'time-s')" class="ext">日付\x3c/span>
\x3cspan onclick="extraMenu(this, 'year-s')">移動\x3c/span>`;
Fid("index").classList.add("arc-on");
Fid("sTabVis").classList.add("ex-vis");
tabsCount("sTab", "F0", "a");
} else {
yearListObj = yearList.shift();
yearListDate = yearListObj.replace(/.+(\d{4})/, "$1");
xhr(yearListObj + "/", null, yearListCreate);
}
};

yRep = (dt, fg) => {
let dat = dt.join("");
if(fg){
dat = dat.replace(/<!\-\-ARTICLE id="(\d+)"\-\->(<li>)/g, (e0,e1,e2) => {
yCNT++;
yearListCNT++;
return `${e2}<span class="vol">${yearListCNT}</span><span class="aid">A${e1}</span>`;
});
dat = dat.replace(/<!\-\-[^>]+>/g, "");
} else {
dat = dat.replace(/<\/div>.+?entry_title">/g, "</span> ").
replace(/id="(A\d+).+?entry_date">/g, (e0,e1) => {
yCNT++;
yearListCNT++;
return `<li><span class="vol">${yearListCNT}</span><span class="aid">${e1}</span><span class="time">`
});
dat = "\x3cli>" + dat.replace(/(\x3c\/a>)/g, "$1\x3c/li>") + "\x3c/li>";
}
echo("yExtra", `投稿件数 : ${ yearListCNT }件` );
return axRep(dat);
};

ydEntry = num => {
const obj = Fid("yd" + num);
if(obj){
delayScroll(obj, null);
} else {
Fid("yExtra").previousSibling.click();
}
};

ydEcho = (year, cnt) => {
echo("yd" + year, cnt);
echo("ydm" + year, "💙" + year + "年<div>" + cnt + "件</div>");
setTimeout(() => { yearListEntry(); }, 500);
};

/* -- 全索引の生成 サーバーの戻り -- */
yearListCreate = e => {
yCNT = 0;
const is1Mon = e.indexOf("/diary/" + yearListDate + "/01/") != -1;
e = conBo(e).match(/<ul.+?<\/ul>/g);
let dat = e == null ? "" : yRep(e, 1);
const obj = Fce("div");
obj.id = "Y" + yearListDate;
obj.className = "y-disp";
echo(obj, `<div class="y-head">
<span class="ydins">🧡${ yearListDate }年:</span>
全 <span id="yd${ yearListDate }">0</span>件
</div>
${ dat }`
);
Fid("indexDisp").append(obj);
if(is1Mon){
xhr(yearListObj + "/01/", null, ea => {
dat = conBo(ea).replace(/title="[^"]+"/g, "").match(/id="A\d+.+?<\/a>/g);
let ul = Fce("ul");
echo(ul, yRep(dat, 0));
obj.append(ul);
ydEcho(yearListDate, yCNT);
});
} else {
ydEcho(yearListDate, yCNT);
}
};

cgiCount = e => {
const n = e.match(/\((\d+) 件\)/) ? RegExp.$1 - 0 : 0;
const d = e.match(/>(\d{4} \d\d\/\d\d \d\d:\d\d)</) ? RegExp.$1 : "";
const o = Ftag("categories", "li");
const obj = o[xmlCNT];
echo(obj.firstChild, d);
let a = Fce("span");
a.className = "len";
Fap(obj, echo(a, n + " 件"));
if(++xmlCNT < o.length) createCgiCount();
else extraRemove();
};

createCgiCount = () => {
const o = Ftag("categories", "li");
const uri = "/cgi-bin/diary.cgi?oid=" + xmlUSER + ";c=" + o[xmlCNT].className.replace(/C/, "") + ";n=1";
xhr(uri, null, cgiCount);
};

/* ----- 1月分の索引の追加 -------- */
/*
onesData = s => {
return;
let obj = s.match(/<div class="entry C.+?<div class=">(\d{4}).+?<\/h2>/) ? RegExp.$1 : "";
let dt = s.match(/<h2>(\d{4})(.+?)<\/h2>/) ? RegExp.$1 + RegExp.$2 + " " + num + "件 C" : "";
let node = Fid("dt" + RegExp.$1);
for(let i = 0; i < obj.length; i++){
obj[i] = obj[i].replace(/<div class="entry_body/, "</li>").
replace(/<div>/, "").
replace(/<div class="entry_date">(\d{4} \d\d\/\d\d) \d\d:\d\d<\/div>/,
"<span>$1</span>").
replace(/<div class="entry C\d+" id="A(\d+)">\s/g, // \s*
"<li><span>A$1</span>");
}
obj.reverse();
s = obj.join("");
s = s.replace(/ title="[^"]+"|<\/?div[^>]*>|\t/g, "").replace(/ {2,}/g, " ");
s = axRep(s);
echo(node, dt);
echo(node.nextSibling, "<ul>\n" + s + "</ul>\n");
let par = Ftag(node.parentNode.previousSibling, "a")[0];
echo(par, echo(par).replace(/(\d+)件/, (e0,e1) => e1 + "+" + num + "= " + (Number(e1) + num) + "件"));

let mon = Fid("Mon" + year + "01");
mon.classList.add("ex");
let mo = echo(mon).replace(/^0/, "").replace("10", "a").replace("11", "b").replace("12", "c");
echo(mon, "<span>" + num + "</span><sup>" + mo + "</sup>");
xmlYearEntry();
};
*/
/* -- 月毎の文字置換 Archives呼び出し -- */
monthPageRep = s => {
s = s.replace(/\x3c!\-\-.+?\-\->/g, "").replace(/\x3chr \/>/, "");
s = s.replace(/(\x3ch2)>(.+?)(\x3c\/h2>)(.+)/, (e0,e1,e2,e3,e4) => {
let es = e4.split("\x3chr />").reverse();
return e1 + " class=\"month_all\">\x3cdiv class=\"h2_d1\">" + e2 + "\x3cspan>全" +
es.length + "件\x3c/span>\x3c/div>\x3cdiv>.\x3c/div>" + e3 +
"\x3cdiv>"+ es.join("") + "\x3c/div>";
});
return s;
};
/* -------- 数値より投稿日取り出し -------- */
uDate = s => {
let dt = "";
if(s.match(/diary\/\d{4}\/\d\d\/(\d+).html/)){
dt = new Date();
dt.setTime((RegExp.$1 - 0) * 1000);
let d = dt.getDay();
let day = "日月火水木金土".charAt(d);
dt = dt.toLocaleString('ja-JP').replace(/\/(\d) /, "/0$1 ").
replace(/ (\d:)/, " 0$1").replace(/\/(\d\/)/, "/0$1").
replace(/(\d{4})./, "$1 ") +
" (<i class=\"day" + d + "\">" + day + "</i>)";
}
return dt;
};

modeFunc = no => {
modeFunc.bef = cMode;
modeOf(no);
setTimeout(() => { modeOf(modeFunc.bef) }, 2000);
};

/* -- モードの設定 -- */
modeOf = no => {
const o = doc.body.classList;
o.remove("cen-harf", "no-tab", "zs", "za", "zf", "zn", "toright");
let cc = 2;
switch (no % 10) {
case 0 : cc = 1; break;
case 1 : o.add("zn"); cc = 0; break;
case 2 : o.add("toright", "zn"); cc = 3; break;
case 3 : o.add("zs"); cc = 0; break;
case 4 : o.add("zs", "toright"); cc = 3; break;
case 5 : o.add("za"); break;
case 6 : o.add("za", "toright"); break;
case 7 : o.add("zf"); break;
case 8 : o.add("zf", "toright"); break;
}
if(no > 99) o.add("cen-harf");
if(no % 100 > 9) o.add("no-tab");
cMode = no;
cenImage(cc);
};

getLogs = () => {
xhr("/cgi-bin/footprint.cgi?oid=new-diary", null, e => {
const user = e.match(/href="\/home\/([\w\-]+)/) ? RegExp.$1 : "";
const since = e.match(/(\d{4} \d\d\/\d\d) \d\d:\d\d/) ? RegExp.$1 : "";
const count = e.match(/総アクセス数: (\d+)/) ? RegExp.$1 : "";
alert( user + " , " + count + " , " + since);
});
};

userVoid = () => {
if(!isLogin){
alert("管理コマンドです"); return;
}
getLogs();
};

addCssEntry = () => {
const obj = window["main_" + xmlUSER].document;
if(!obj) return;
if(obj.URL.includes("footprint.cgi")){
const par = Fid("M1").classList;
par.add("trim");
setTimeout(() => {
Ftag(obj, "link")[0].href =
"/home/" + (Fid("addCss").checked ? "css-2" : xmlUSER) + "/footprint.css";
setTimeout(() => {
par.remove("trim");
}, 800);
}, 800);
}
};

[/EXEC-A-DATA]

コメント (1)

💖execCode B
[EXEC-B-DATA]


appliEntry = () => {
alert("Ok");
};


mode = no => {
let o = doc.body.classList;
o.toggle("small");
setTimeout(() => o.toggle("small"), 2000);
};

/* -------- マスコットエントリ -------- */
masEntry = () => {
tabsEntry(0,1);

};

/* -------- バインダーコマンド -------- */
cenEntry = num => {
let n1 = cMode % 10;
let n = 0;
let n2 = Math.floor(cMode / 10) * 10;
if(!num){
n2 = n2 % 100 > 0 ? n2 - 10 : n2 + 10;
n = n1;
} else n = num == 1 ? [1,3,0,5,2,7,8,0,0][n1] : [2,0,4,1,6,3,8,0,0][n1];
modeOf(n2 + n);
};


cenImage = n => {
let o = Fid("cenDisp").classList;
o.remove("cen-bg0", "cen-bg1", "cen-bg2", "cen-bg3");
o.add("cen-bg" + n);
};

dispPrefix = () => {
Fid("mainDisp").classList.toggle("pre");
Fid("M" + mmCNT).scrollIntoView();
};


headerShow = () => {
Fid("headerDisp").classList.toggle("fox");
};

formShow = o => {
Fid(o).classList.toggle("fox");
};
ending = () => {
Fid("tab1").classList.toggle("min");
Fid("mainDisp").classList.toggle("min");
};

cenCtrl = () => {
Fid("cenDisp").classList.toggle("tp");
};

dtChange = e => {
e.classList.toggle("opn");
};

newMonthChange = e => {
e.classList.toggle("opn");
};


/* --------- 汎用カウンタ --------- */

tabsCount = (obj, par, tag) => {
const tabs = Fid(obj);
let cn = tabs.classList;
let num = tag != null ? Ftag(par, tag).length : par;
if(num > 99){
num = ("0" + Math.floor(num / 100)).slice(-2) +
"<br class='' />" + ("0" + (num % 100)).slice(-2);
cn.add("w2");
} else cn.remove("w2");
echo(tabs, num);
};

tabsDelay = obj => {
setTimeout(() => { Fid(obj).classList.remove("delay"); }, 1000);
};


/* --------- TABS 関数 --------- */
tabsEntry = (n, w) => {
let obj = doc.body.classList;
const disp = w ? "M" + mmCNT : "F" + msCNT;
switch(n) {
case 0 : // Fid(disp).scrollTo(0, 0); break;
case 1 : isF2 = !isF2; isF2 ? obj.add("isf2") : obj.remove("isf2"); break;
case 2 : modeOf(cMode > 99 ? cMode % 100 : cMode + 100); break;
case 3 : obj.toggle("non-body-a"); Fid("NCB").classList.toggle("nc-on"); break;
case 4 : dispUp(); break;
case 5 : let o = document.querySelectorAll("#m3Doc .sr-fix");
o.forEach( e => {
let img = e.previousSibling;
let w = img.naturalWidth;
if(w != 0){
echo(e, w + " x " + img.naturalHeight);
if(w > 140 || h > 140) img.classList.add("cover");
} else {
echo(e, "not found");
e.classList.add("sr-err");
}
e.classList.remove("sr-fix");
});
Fid("tabsSr").classList.remove("sr");
break;
case 6 :
const o6 = Fid(w ? "m" + mmCNT + "Doc" : "f2Doc");
o6.classList.add("cls");
setTimeout(() => {
echo(o6, "");
o6.classList.remove("cls");
eTabCreate(w ? mmCNT : 3);
if(w && mmCNT == 2){
let a = Ftag("fileView", "span");
for(let i = 0; i < 12; i++) a[i].classList.remove("now", "vis");
}
}, 500);
break;
case 7 : // dispChg(1, mmCNTbef);

break;

}

};


dispUp = () => {
let obj = Fid("F1");
let info = "Top = " + obj.scrollTop + " : Height = " + obj.scrollHeight + " : offset = " + obj.offsetHeight;
echo("timeInfo", info);
obj.scrollBy(0, 30);
if(obj.scrollTop < obj.scrollHeight - obj.offsetHeight - 10) setTimeout(dispUp, 50);
else echo("timeInto", info + " done.");
};

scrollDisp = () => {
let obj = Fid("F1");
echo("timeInfo", "Top = " + obj.scrollTop + " : Height = " + obj.scrollHeight + " : offset = " + obj.offsetHeight);

};



edEntry = (no, obj) => {
alert("no." + no + " のインライン編集ルーチン\n\nまだ実装していません\nもう少し時間が掛かりそう。.");
};


/* -------- entry_bodyのラインの取り付け --------- */
createLine = s => {
s = s.replace(/(\x3cdiv class="entry_body)(".+?\x3cdiv )(class="entry_res|id="responses)/g,
(e0,e1,e2,e3) => {
return e2.match(/\x3cimg|style="/) ? e0 :
(e2.match(/\x3cdiv class="code"/) ? e1 + " code-par" + e2 + e3 : e1 + " line" + e2 + e3);
});
return s;
};


/* -------- code 文字置換 -------- */
codeAjastObj = null;
codeAjastTop = 0;

codeAjast = e => {
if(e == codeAjastObj){
e.classList.remove("jast");
codeAjastObj = null;
} else {
if(codeAjastObj) codeAjastObj.classList.remove("jast");
codeAjastObj = e;
e.classList.add("jast");
codeAjastTop = Math.floor(codeAjastObj.parentNode.getBoundingClientRect().top);
}
};

codeAjastExec = () => {
Fid("M" + mmCNT).scrollTo(0, codeAjastObj.parentNode.offsetTop - codeAjastTop);
};

/* -- JavaScriptの文字置換 -- */
codeSpc = (s1,s2,fg,js) => {
let a1 = s1, a2 = s2;
if(fg && s1.match(/(\w+)(.+)/)){
a1 = RegExp.$1;
a2 = RegExp.$2 + s2;
}
return "<div class=\"func-code ret" + fg + "\"><span class='func-name ajast' " +
"onclick=\"codeAjast(this)\">" + a1 +
"</span><span class='func-dat'>" +
a2.replace(/\t /g, "\t<i></i> ").replace(/(^[^\=]+) \{/, '<span class="nem">$1</span> \{') +
(fg ? "\t<i></i>}" + (js ? ";" : "") : "") + "</span></div>";
};

codeSec = (s1,s2,s3,s4) =>
"<div class=\"code-sec se" + s2.length + "\">" +
"<span class=\"func-op\">" + s1 + s2 + "</span>" +
"<span class=\"func-info\">" + s3 + "</span>" +
"<span class=\"func-op\">" + s4 + "</span></div>";

codeOne = (s1,s2) =>
"<div class='js-one'><span class='func-name'>" + s1 + "</span>" +
"<span class='func-dat'>" + s2 + "</span></div>";

codeEnt = s =>
"<div class=\"code-ent type-" + s.replace(/\-.+/g, "") +
"\">[" + s + "</div><div class=\"code-doc\">";

codeEnd = s => "</div><div class=\"code-end\">" + s + "</div>";
codeCol = (s1,s2,s3,str) => s1 + "<span class=\"col-" + str + "\">" + s2 + "</span>" + s3;


jsCodeRep = s => {
s = s.replace(/\[(EXEC\-[A-Z]+\-DATA\])(.+?)(\[\/\1)/g,
(e0,e1,e2,e3) => codeEnt(e1) + e2.replace(/(\/\* )(\-+ )(.+?)( \-+ \*\/)/g,
(a0,a1,a2,a3,a4) => codeSec(a1,a2,a3,a4)).replace(/\x3cbr \/>/g, "").
replace(/( )(echo|const|let|replace|return)(.)/g, (a0,a1,a2,a3) => codeCol(a1,a2,a3,"pro")).
replace(/\t(\w+)( = [\w\(\)\, ]+ =\x26gt; *\t.+?\x26quot;;)/g, (a0,a1,a2) =>
codeSpc(a1,a2,0,1)).replace(/\t([^\t\{\<]+)(\{.+?)\t\};/g, (a0,a1,a2) =>
codeSpc(a1,a2,1,1)).replace(/\t([a-zA-Z0-9]+)([^\t<]+)/g, (a0,a1,a2) =>
codeOne(a1,a2)) + codeEnd(e3)
);
return s;
};

/* -- CSSの文字置換 -- */
cssCodeRep = s => {
s = s.replace(/\[(CSS\-[A-Z]+\-DATA\])(.+?)(\[\/\1)/g,
(e0,e1,e2,e3) => codeEnt(e1) +
e2.replace(/(\/\* )(\-+ )(.+?)( \-+ \*\/)/g,
(a0,a1,a2,a3,a4) => codeSec(a1,a2,a3,a4)).replace(/\x3cbr \/>/g, "").
replace(/\t([^\t\{]+)(\{[^\t}]+\})/g, (a0,a1,a2) => codeOne(a1,a2)).
replace(/\t([^\t\{\<]+)(\{.+?)\t\}/g, (a0,a1,a2) => codeSpc(a1,a2,1,0)) +
codeEnd(e3)
);
return s;
};

/* -- DOCの文字置換 -- */
docCodeRep = s => {
s = s.replace(/\[(DOC\-[A-Z]+\-DATA\])(.+?)(\[\/\1)/g,
(e0,e1,e2,e3) => codeEnt(e1) +
e2.replace(/\x3cbr \/>/g, "").
replace(/( )(id|class|type|href|style)(=)/g, (a0,a1,a2,a3) => codeCol(a1,a2,a3,"pro")).
replace(/(\x26quot;)(.*?)(\x26quot;)/g,(a0,a1,a2,a3) => codeCol(a1,a2,a3,"str")).
replace(/(\x26lt;\[)(.+?)(\]\x26gt;)/g,(a0,a1,a2,a3) => codeCol(a1,a2,a3,"rep")).
replace(/(\x26lt;\/?)([a-z]+)/g, (a0,a1,a2) => codeCol(a1,a2,"","tag")).
replace(/\t([^\t]+)/g, "<div><i></i>$1</div>")
+ codeEnd(e3)
);
return s;
};


/* ------ 汎用領域の要素数の表示 -------- */
eTabCreate = n => {
let obj = Fid(["M0","M1","M2","F2"][n]);
echo("eTab" + n, Fcn(obj, "entry_title").length);
};


/* -- 編集エントリ -- */
archiveUpdateEntry = (no, obj, disp) => {
const form = Fid("eDisp");
echo("eDispUser", "new-diary");
const isF3 = form.parentNode.id == "F3";
if(disp != null) {
// 通常の編集コマンド
if(disp == 3) {
if(isF3) Fid("M4").append(form);
if(mmCNT != 4) dispChg(1,4);
} else {
if(!isF3) Fid("F3").append(form);
if(msCNT != 3) dispChg(0,3);
}
const par = obj.parentNode.parentNode;
if(par && par.className.match(/C(\d+)/)) echo("eDispCate", RegExp.$1);
} else {
// 直接編集の場合はカテゴリ番号を渡す
echo("eDispCate", obj);
const vol = echo(no).split(" ");
no = vol[0];
mainShow("." + dateToOnes(vol[1]), null);
}
form.scrollIntoView();
modeOf(isF3 ? 2 : 1);
xhr("/cgi-bin/diary_form.cgi?oid=" + echo(eDispUser) + ";mode=edit;article_id=" + no, null, upDateEntry);
};

/* -- 編集のデータの戻り -- */
upDateEntry = (s) => {
const rp = dt => dt.replace(/\x26#x([0-9a-f]{5});/g,
(e, e1) => String.fromCodePoint(parseInt(e1, 16)));
let dat = s.match(/\x3ctextarea[^>]+>(.+?)\x3c\/textarea/) ? RegExp.$1 : "";
dat = dat.replace(/\x26amp;/g, "\x26") + "\t\t\t\t\t\t\t";
dat = rp(dat);
const title = s.match(/name="article_title" value="([^"]+)"/) ? RegExp.$1 : "";
const article = s.match(/name="article_id"\s+value="([^"]+)"/) ? RegExp.$1 : "";
Fid("newOpen").checked = s.match(/article_notify"\svalue="1"\schecked/) ? true : false;
echo("eDispText", fullDec(dat)).scrollTop = 0;
echo("eDispTitle", rp(title));
echo("eDispArticle", article);
upDateEntry.buf = echo("eDispText");
formCounter();
Fid("execSel").disabled = false;
};

/* --------- 記事の送信 ---------- */
postEntry = () => {
const rp = dt => dt.replace(/[\ud800-\udbff][\udc00-\udfff]/g, e =>
`\x26#x${e.codePointAt(0).toString(16)};`);
let s = echo("eDispText").replace(/\n/g, "\t");
s = s.replace(/\[([A-Z0-9\-]+\-DATA\])(.+?\[\/\1)/g, (e0,e1,e2) => {
return "[" + e1 + e2.replace(/\x3c/g, "\x26lt;");
});
s = rp(s);
s = s.replace(/\t/g, "\n");
let dat = "mode=update&oid=" + echo("eDispUser") +
"&before=edit&article_notify=" + (Fid("newOpen").checked ? "1" : "0") +
"&article_id=" + echo("eDispArticle") +
"&category_id=" + echo("eDispCate") +
"&article_title=" + enc(rp(echo("eDispTitle"))) +
"&article_sentences=" + enc(s);
echo("upInfo", (new Date()).toLocaleString() + " update now....");
xhr("diary_form", dat, e => {
echo("upInfo", "done.");
});
};

/* ---------- 編集フォームの文字数 --------- */
formCounter = () => {
const obj = Fid("eDispText");
const text = echo(obj);
echo("formCnt", text.length + " / " + counter(text));
const edited = upDateEntry.buf != text;
Fid("execSel").disabled = edited;
const a = Fid("editedStatus").classList;
edited ? a.add("edited") : a.remove("edited");
};

addEntry = () => {
let s = '\x3cdiv class="sec"\x3e\x3cb\x3e\x3c/b\x3e\n\n\x3c/div\x3e\n' +
echo("eDispText");
echo("eDispText", s);
};



editEntry = no => {
let uri = "/cgi-bin/diary_form.cgi?oid=" + echo("eDispUser") +
";mode=edit;article_id=" + no;
xhr(uri, null, upEntry);
};

getEntry = () => {
let uri = "/cgi-bin/diary_form.cgi?oid=" + echo("eDispUser") +
";mode=edit;article_id=" + echo("eDispArticle");
xhr(uri, null, upEntry);
};

/* ----------- 編集フォーム関数群 ------------ */
topFixEntry = obj => {
obj.parentNode.parentNode.scrollIntoView();
};
formRows = () => Fid("eDisp").classList.toggle("rows");

[/EXEC-B-DATA]

コメント (0)

💖execCode C
[EXEC-C-DATA]
/* -------- PC情報 ログイン状態 --------- */
getPcInfo = () => {
let cook = doc.cookie + ";";
cook = cook.replace(/=(.+?);/g, (e0,e1) => {
return "=" + e1.replace(/(.{50})/g, "$1<br />") + "<br />"
});

// .replace(/;/g, "<br />");
let dat = "<ul>" +
"<li>body.offsetWidth : " + doc.body.offsetWidth + "px</li>" +
"<li>body.offsetHeight : " + doc.body.offsetHeight + "px</li>" +
"<li>#F0.offsetWidth : " + Fid("F0").offsetWidth + "px</li>" +
"<li>#F0.offsetHeight : " + Fid("F0").offsetHeight + "px</li>" +
"<li>referrer : " + doc.referrer + "</li>" +
"<li>cookie : " + cook + "</li>" +
"<li>login : <span id=\"info1\">ログアウトしています</span></li>";
dat += "</ul>";
echo("pcInfo", dat);
if(cook.indexOf("SID=") != -1){
xhr("/cgi-bin/bbs_form.cgi?oid=new-diary", null, e => {
if(e.match(/home\/([0-9a-z\-]+)\/" \/><\/td>/)) echo("info1", RegExp.$1);
});
}
};

allShow = s => {
xhr(s, null, echoAll);
};

/* -------- 新着日記エントリ -------- */
allEntry = s => {
let cate = s.replace(/.+(<div class="link_title)/,"$1").replace(/(<\/ul>).+/, "$1").split("<ul ");
cate = `${ cate[0] }
<div class="cate-cmd">
<span onclick="cateChg(0)">名前順</span>
<span onclick="cateChg(1)">番号順</span>
<span onclick="cateChg(2)">新着順</span>
</div>
<ul id="cateDisp" ${ cate[1] } `;

cate = cate.replace(/(">全カテゴリ)/, ";c=0$1");
cate = cate.replace(/(<li>)(<a .+?c=)(\d+)/g,
"$1<span class=\"vol\"></span><span class=\"cc\">$3</span><span class=\"date\"></span>$2$3");
cate = cate.replace(/(href=")([^"]+)/g, "onclick=\"allShow('$2'); return false;\" $1$2");
cate = cate.replace(/(<\/li>)[\t\s]+/g, "$1").replace(/[\t\s]+(<li)/, "$1");
cate = cate.replace(/(<\/li>)(<li)/g, "$1\t$2");
let no = 0;

cate = cate.replace(/class="vol">/g, e => e + (++no));

echo("categories", cate);
tabsCount("mTab", no, null);
dispChg(1, 0);
doc.body.classList.add("loaded");
echoAll(s);
allCNT = s.match(/oid=all;n=100;s=(\d+)/) ? Number(RegExp.$1) + 200 : null;


};

/* ------- 新着日記の書き出し ------- */
echoAll = s => {
s = s.replace(/.+<div id="main">/, "").replace(/<\/div>\t*<\/body>.+/, "");
s = s.replace(/(home\/)([0-9a-z\-]+)\/" target="_blank/g, "$1default/main.html?uri=site:/home/$2/diary/");
s = s.replace(/(home\/)([0-9a-z\-]+)\/diary\/" target="_blank/g, "$1new-diary/main.html?fn=1;user=$2");

s = s.replace(/(\/home\/[0-9a-z\-]+\/diary\/\d+\/\d\d\/\d+.html)" target="_blank/g,
"$1\" class=\"ax tb-m1\" onclick=\"mainShow('$1', this); return false");
s = s.replace(/(Category : <a href=")([^"]+)/g,
"$1$2\" class=\"ax tb-m2\" onclick=\"mainShow('$2', this); return false");
s = s.replace(/(href=")(http:\/\/www[^"]+)/g, "onclick=\"allShow('$2'); return false;\" $1$2");

if(mmCNT > 2 && !isF2) dispChg(1, 2);
if(isF2) dispChg(0, 2);
let objNo = isF2 ? 3 : mmCNT;
let objPar = "ABCD".charAt(objNo);
let obj = Fid(isF2 ? "f2Doc" : "m" + mmCNT + "Doc");
/*
const sec = Fce("div");
sec.className = "sec";
*/
echo(obj, "<div class='sec'>" + s + "</div>");
eTabCreate(objNo);




// obj.append(sec);
// sec.scrollIntoView();
};

/* -------- 新着日記のカテゴリ操作 -------- */
cateChg = no => {
let dat = echo("cateDisp");
let re = no ? /(<li>.+?\"cc\">)(\d+)/g : /(<li>.+?\"vol\">)(\d+)/g;
dat = dat.replace(re, (e0,e1,e2) => ("000" + e2).slice(-4) + e0);
dat = dat.split("\n");
dat.sort();
if(no == 2) dat.reverse();
dat = dat.join("\n");
dat = dat.replace(/\d+(<li)/g, "$1");
echo("cateDisp", dat);
};


/* -------- 投稿記事一覧 -------- */
allIndexEntry = () => {
echo("index", "<ul id='indexDoc'></ul>");
// if(allCNT == null) allCNT = 218318;
allCNT = 219430;
allLoopCNT = 0;
allLoop();
};

allLoop = () => {
if(allLoopCNT < 100){
const uri = "/cgi-bin/diary_form.cgi?oid=new-diary;mode=edit;article_id=" +
(allCNT - allLoopCNT);
xhr(uri, null, allIndexMain);
}
};

allIndexMain = s => {
const title = s.match(/name="article_title" value="([^"]+)" \/>/) ? RegExp.$1 : "";
let dat = s.match(/rows="8">(.+)<\/text/) ? RegExp.$1 : "";
let len = dat.length;
const e = Fce("li");
if(!s.match(/"1" checked="checked"/)) e.className = "nonup";
echo(e,
"<span class='up-id'>" + ("0" + allLoopCNT).slice(-2) +
"</span><span class='up-title'>" +
title + "</span><span class='up-len'>" + len + "</span>" +
"<div >" + dat + "</div>"
);

Fid("indexDoc").append(e);
allLoopCNT++;
setTimeout(allLoop, 10);

// alert(up + " : " + (allCNT - allLoopCNT) + " : " + title + " : " + len);
};

/* -- エントリ内部コマンド -- */
parMove = e => {
const par = e.parentNode.parentNode;
delayScroll(par, null);
};

/* -- メニュー内部コマンド -- */
loadDataTo = (no, user, obj) => {
const uri = "/home/" + user + dateToOnes(no);
const title = echo(obj);
xhr(uri, null, e => {
let dat = key(e, "TRANS-DATA").replace(/<br \/>/g, " ").replace(/\t/g, "");
dat = dat.replace(/^ +| +$/g, "").split(" ");
let s = "";
for(let i = 0; i < dat.length; i++){
let a = dat[i].split("_");
s += "<li><div class=\"trans-info\">" + a[1] +
"<span class=\"trans-now\">" + a[2] + "</span></div>" +
"<a target=\"_blank\" class=\"trans-lv" + (a[1] - 0 < a[2] - 50 ? "3" : "") +
"\" href=\"main.html?fn=3;user=" + a[0] + "\">" + a[0] + "</a>" +
"<div class=\"trans-date\">" + a[3] + "</div></li>";
}
s = "<div class=\"link_title\">" + title + "</div><div class=\"masMsg\">50件以上の方のリストです。\x3cbr class=\"\" />近いうちに操作関数を整えます。</div><ul>" + s + "</ul>";
echo(obj.parentNode, s);
const o = Fcn("F4", "link_title");
delayScroll(o[o.length -1]);
tabsCount("lTab", "f4Doc", "a");
});
};

transUpdate = () => {
alert("今、データを更新しています。");
return;

dispChg(1, 1);
let obj = Fid("transDisp");
if(obj){
obj.scrollIntoView();
} else {
obj = Fce("div");
obj.id = "trasnDisp";
Fid("m1Doc").append(obj);
}

const uri = "/home/new-diary/diary/2020/05/1590583861.html";
echo(obj, uri);
TRANS = [];
xhr(uri, null, e => {
let dat = key(e, "TRANS-DATA").replace(/<br \/>|\t/g, " ").
replace(/ *\(/, "").replace(/ +\(|\) : +/g, ",");
TRANS = dat.split(",");
let au = "";
for(let i = 0; i < TRANS.length; i += 2){
au += TRANS[i + 1] + "_" + TRANS[i] + " ";
}
au = au.replace(/^ +| +$/g, "").replace(/ {1,}/g, " ");
echo(obj, "<div id=\"auInfo\">done</div><div id=\"auDisp\">" + au + "</div>");
TRANS = au.split(" ");
transCNT = 0;
setTimeout(() => { transLoop() }, 500);
});
};

transLoop = () => {
const dat = TRANS[transCNT].split("_");
const user = dat[0].replace(/ /g, "");
const num = dat[1].replace(/ /g, "");;
echo("auInfo", "user : " + user + " , num = " + num + " ... cnt : " + transCNT + " / " + TRANS.length);
xhr("/cgi-bin/diary.cgi?oid=" + user + ";n=1", null, e => {
e = e.replace(/.+?<div id="main">/, "");
const no = e.match(/全カテゴリ \((\d+) 件\)/) ? RegExp.$1 : "*";
const date = e.match(/entry_date">(\d{4}) (\d\d\/\d\d)/) ? RegExp.$1 + "/" + RegExp.$2 : "*";
TRANS[transCNT] = user + "_" + num + "_" + no + "_" + date;
echo("auInfo", "user : " + user + " , num = " + num + " ... cnt : " + transCNT + " / " + TRANS.length + " : " + TRANS[transCNT]);
echo("auDisp", TRANS.join("\x3cbr />"));
transCNT++;
if(transCNT < TRANS.length) setTimeout(() => { transLoop() }, 800);

});
};

[/EXEC-C-DATA]

コメント (0)

💖execCode D
[EXEC-D-DATA]

/* -------- 全てのファイルのエントリ -------- */
mainShow = (e, obj) => {
xmlObj = obj;
if(obj && e.match(/diary_editor.cgi\?oid=([0-9a-z\-]+);type=comments;id=(\d+)/)){
commentEditEntry(e, obj);
return false;
}
if(obj && obj.classList.contains("link_year")){
xhr(e, null, createLinks);
} else {
// 履歴のセット
cueComment = e.match(/#comments/) ? true : false;
if(obj && cueComment) obj.parentNode.classList.add("ins");
if(e.match(/(home\/|oid=)([0-9a-z\-]+)/)) cueUser = RegExp.$2;
xhr(e, null, mainShowEntry);
}
};


/* -------- 年度別以外 -------- */
mainShowEntry = e => {
let s = e.replace(/.+\x3cdiv id="main">/, "").
replace(/\x3c\/div>\t*\x3c\/div>\x3c\/body>.+/, "");
s = axRep(s);
s = createLine(s);
s = commentTagsRep(s);
s = s.replace(/\{\/visUser\/\}/g, e => "ようこそ、" +
(isLogin ? "<a href=\"/home/new-diary/main.html?fn=3;user=" + FxDec["visUser"] +
"\">" + FxDec["visUser"] + "@eclat</a>さん、" : "") + " いらっしゃいませ");

if(e.match(/( id="A\d+") class="(C\d+")>\x3cdiv>/)){
let one = " " + RegExp.$2 + RegExp.$1;
s = s.replace(/(class="entry)"/, (e,e1) => e1 + one);
} else {
if(s.match(/^[\s\t]*\x3ch2>/)){
// 月別表示
s = monthPageRep(s);
if(xmlMonth != null){
xmlMonth.classList.remove("sect");
xmlMonth.classList.add("bef");
}
xmlMonth = xmlObj;
xmlObj.classList.remove("bef");
xmlObj.classList.add("sect");
} else {
// カテゴリ別の表示
// s = s.split("\x3chr />").reverse().join("");
}
}
if(isCue){ // 先行表示中
xmlObj = null;
echoMain(s);
cueLoop();
} else {
if(cueComment){
if(xmlObj){
const o = xmlObj.parentNode;
s = s.replace(/.+id="responses">/,"").replace(/\x3c\/div>[\t\s]*$/, "").
replace(/(href="\/home\/)([0-9a-z\-]+)\/(" target="_blank")/g,
"$1new-diary/main.html?fn=1;user=$2$3").
replace(/([\w\-]+\/files\/[\w\-\._]+)\((\d)\)/g,
"\x3cimg src=\"/home/$1\" alt=\"\" class=\"img-$2\" />");
setTimeout(() => {
echo(o, s);
o.classList.remove("ins"); }, 700
);
} else {
alert(s);
}
} else {
echoMain(s);
}
}
};

/* ------- メイン領域への書き込み ------- */

dlsEntry = e => {
let o = e.target;
let obj = o.parentNode.parentNode;
let no = o.textContent - 1;
delayScroll(Fcn(obj, "dateIs")[no], null);
};

echoMain = s => {
if(xmlObj && xmlObj.className.match(/tb\-m(\d)/)){
const no = RegExp.$1 - 0;
if(no != mmCNT) dispChg(1, no);
}
if(mmCNT > 2 && !isF2) dispChg(1, 2);
if(isF2 && msCNT != 2) dispChg(0, 2);
const objNo = isF2 ? 3 : mmCNT;
const objPar = "ABCD".charAt(objNo);
s = s.replace(/(id="A)(\d+)(">[\t ]*<div class="entry_date">)/g,
(e0,e1,e2,e3) => e1 + e2 + e3 + "<span class=\"edit\" onclick=\"archiveUpdateEntry(" +
e2 + ", this, " + objNo + ")\">A" + e2 + "\x3c/span> at ");
s = s.replace(/(name="C\d+" id="C\d+" href="\/home\/)([\w\-]+)\/" target="_blank/g,
"$1new-diary/main.html?;es=1;user=$2");
s = jsCodeRep(s);
s = cssCodeRep(s);
s = docCodeRep(s);
s = s.replace(/【(\d{4}.\d\d\/\d\d \d\d:\d\d)】/g,
"<span class=\"dateIs\" onclick=\"parMove(this)\">$1</span>");

s = s.replace(/(<img )src/g, (e0,e1) =>
e1 + 'onload="createThumbnail(this,' + objNo + ')" src');

s = s.replace(/(\x3cimg class="demon" )title/g, "$1onerror");

s = s.replace(/(\x3cdiv class="comment_element">)(.+?)(\x3c\/div>)/g,
(e0,e1,e2,e3) => e1 + e2.replace(/([\w\-]+\/files\/[\w\-\._]+)\((\d)\)/g,
"\x3cimg src=\"/home/$1\" alt=\"\" class=\"img-$2\" />").
replace(/絵([0-9a-z]{3})/g, "\x26#x1f$1;") + e3);

const obj = Fid(isF2 ? "f2Doc" : "m" + mmCNT + "Doc");
const o = obj.parentNode.classList;
s.match(/\x3ciframe/) ? o.add("frame") : o.remove("frame");

let exCss = evalDec(key(s, "CSS-DATA"));
if(exCss != ""){
echo("exCssDisp", cssDefaultRep(exCss));
}

if(Fid("eTab" + objNo).classList.contains("ape")){
const sec = Fce("div");
sec.className = "sec";
echo(sec, s);
obj.append(sec);
let ds = Fcn(sec, "dateIs");
for(let i = 0; i < ds.length; i++){
let a = Fce("span"); a.className = "dls";
let b = ds[i].parentNode.parentNode;
a.append((Fcn(b, "dls").length + 1));
a.addEventListener("click", dlsEntry, null);
b.childNodes[1].append(a);
}
delayScroll(sec, null);
} else {
if(obj == Fid("m2Doc")){
let a = Ftag("fileView", "span");
for(let i = 0; i < 12; i++) a[i].classList.remove("now", "vis");
}
echo(obj, "<div class='sec'>" + s + "</div>");
obj.parentNode.scrollTo(0,0);
}
eTabCreate(objNo);
};

/* -------- ユーザーエントリ -------- */
xmlEntry = () => {
xmlUSER = document.URL.match(/user=([a-z0-9\-]+)/) ? RegExp.$1 : "new-diary";
isAll = xmlUSER == "all";
xmlMonth = null;
cueUser = "new-diary";
cueComment = false;
cueDisp = 0;
let dat = xmlUSER == "new-diary" ? "/3 1570804022 /1 1570803952 /2 1591011361" :
"/2 1570803952";
Cue = dat.split(" ");
cueLoop();
};

viewEntry = no => {
if(no < 0) no = 0;
const view = Ftag("fileView", "span");
if(no >= view.length) no = 0;
setTimeout(() => {
view[no].click();
setTimeout(() => { delayScroll("fileView", null) }, 1000);
}, 1500);
};

/* -------- 先読み表示 -------- */
cueLoop = () => {
if(Cue.length == 0){ // 処理の終わりで初期値を設定
dispChg(0, 1);
dispChg(1, 1);
isCue = false; // 連続処理の終了
if(isAll) xhr("/cgi-bin/diary.cgi?oid=all;n=100", null, allEntry);
else xhr(xmlUSER == "kadoma1428" ? "/cgi-bin/diary.cgi?oid=kadoma1428;n=10" :
"/home/" + xmlUSER + "/diary/", null, createDiaryMenu);
return;
}
let dat = Cue.shift();
let a = dat.substring(0,1);
if(a == ":"){ cueUser = dat.substring(1); cueLoop(); return; }
if(a == "/"){
let no = dat.substring(1) - 0;
if(no == 3) isF2 = true;
else {
mmCNT = no;
isF2 = false;
}
cueLoop();
return;
}
isCue = true;
xhr("/home/" + cueUser + dateToOnes(dat), null, mainShowEntry);
};


[/EXEC-D-DATA]

コメント (0)

💖execCode BOOT
[EXEC-BOOT-DATA]
{
FxDec = [];
msCNT = 0;
mmCNT = 0;
msCNTbef = 0;
mmCNTbef = 0;
cenCtrlCnt = 0;
cenCNT = 0;
m3CNT = 0;
isCue = false;
Cue = new Object;
Cue = [];
cMode = 0;
modeOf(0);
window.scrollTo(0,1);
isF2 = false; // 強制領域指定フラグ
for(let i = 0; i < 4; i++) eTabCreate(i);
tabsCount("lTab", "F4", "a");
tabsCount("qTab", "M4", "a");
FxDec.visUser = null;
isLogin = doc.cookie.indexOf("SID=") != -1;
if(isLogin){
xhr("/cgi-bin/bbs_form.cgi?oid=new-diary", null, e => {
FxDec.visUser = e.match(/home\/([0-9a-z\-]+)\/" \/><\/td>/) ? RegExp.$1 : "new-diary";
xmlEntry();
});
} else {
xmlEntry();
}
}
[/EXEC-BOOT-DATA]

コメント (0)

💖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]

コメント (0)

💖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]

コメント (0)

領域確保
領域確保
コメント (0)

🤍docCode B
[DOC-B-DATA]
Q1 id="tab0" class="out tab bg2">
Q1 class="t0 tb">
<a id="sTabVis" class="tabs-hd" href="javascript:dispChg(0,0)">S</a>
Q3 id="sTab" class="tabs-sum">0Q4
Q2
Q1 class="t1 tb">
<a class="tabs-hd" href="javascript:dispChg(0,1)">M</a>
Q3 id="mTab" class="tabs-sum">0Q4
Q3 id="tabs0" class="tabs">
<a href="javascript:dispChg(0, msCNTbef)">←</a>
<a href="javascript: Fid('F' + msCNT).scrollTo(0, 0)">↑</a>
<a href="javascript:tabsEntry(1,0)" class="f2-sw tt2 only">f2</a>
<a href="javascript:tabsEntry(6,0)" id="tabs0x" class="fc fc1 tt2 only">x</a>
Q4
Q2
Q1 class="t2 tb">
<a class="tabs-hd" href="javascript:dispChg(0,2)">D</a>
Q3 id="eTab3" class="tabs-sum ape"
onclick="this.classList.toggle('ape')">0Q4
Q2
Q1 class="t3 tb">
<a class="tabs-hd" href="javascript:dispChg(0,3)">H</a>
Q3 id="hTab" class="tabs-sum">0Q4
Q2
Q1 class="t4 tb">
<a class="tabs-hd" href="javascript:dispChg(0,4)">L</a>
Q3 id="lTab" class="tabs-sum">0Q4
Q2
Q2

Q1 id="tab1" class="out tab bg1">
Q1 class="u0 tb">
<a class="tabs-hd" href="javascript:dispChg(1,0)">A</a>
Q3 id="eTab0" class="tabs-sum ape"
onclick="this.classList.toggle('ape')">0Q4
Q3 id="tabs1" class="tabs">
<a href="javascript:dispChg(1, mmCNTbef)">←</a>
<a href="javascript:tabsEntry(3,1)" class="uu0 only" id="NCB">NC</a>
<a href="javascript:Fid('M' + mmCNT).scrollTo(0, 0)">↑</a>
<a href="javascript:tabsEntry(5,1)" class="uu3 only" id="tabsSr">sr</a>
<a href="javascript:tabsEntry(2,1)" class="uu4 only">cw</a>
<a href="javascript:tabsEntry(6,1)" id="tabs1x" class="fc fc1 uu0 uu1 uu2 only">x</a>
<a href="javascript:tabsEntry(4,1)" class="fc">sc</a>
Q4
Q2
Q1 class="u1 tb">
<a class="tabs-hd" href="javascript:dispChg(1,1)">B</a>
Q3 id="eTab1" class="tabs-sum ape"
onclick="this.classList.toggle('ape')">0Q4
Q2
Q1 class="u2 tb">
<a class="tabs-hd" href="javascript:dispChg(1,2)">C</a>
Q3 id="eTab2" class="tabs-sum ape"
onclick="this.classList.toggle('ape')">0Q4
Q2
Q1 class="u3 tb">
<a class="tabs-hd" href="javascript:dispChg(1,3)">P</a>
Q3 id="pTab" class="tabs-sum">0Q4
Q2
Q1 class="u4 tb">
<a class="tabs-hd" href="javascript:dispChg(1,4)">Q</a>
Q3 id="qTab" class="tabs-sum">0Q4
Q2
Q2
[/DOC-B-DATA]


コメント (0)

🤍docCode A
[DOC-A-DATA]
<style id="cssDisp"></style>
<style id="exCssDisp"></style>
Q1 id="mainDisp" class="out disp-par">
Q1 id="main">
Q1 id="M0" class="disp sel">
Q1 id="m0Doc" class="open-disp">Q2
Q1 class="disp-ft">doneQ2
Q2
Q1 id="M1" class="disp">
Q1 id="m1Doc" class="open-disp">Q2
Q1 class="disp-ft">doneQ2
Q2
Q1 id="M2" class="disp">
Q1 id="m2Doc" class="open-disp">Q2
Q1 class="disp-ft">doneQ2
Q2
Q1 id="M3" class="disp">
Q1 class="disp-hd">画像一覧(F2 M0-3)Q2
Q1 id="m3Doc">Q2
Q1 class="disp-ft">done.Q2
Q2
Q1 id="M4" class="disp">
Q1 class="disp-hd">参考の値Q2
Q1 id="pcInfo">Q2

<a href="javascript:getPcInfo()">情報の取得</a>
Q1 class="sec">
Q1 class="disp-hd">各種コントロールQ2
<ul>
<li><a href="javascript:Fid('cenDisp').classList.toggle('bg'); void(0);">バインダーの領域の検証 色分け 2秒の遅延効果</a></li>
<li>バインダーの背景 : <a href="javascript:cenImage(0);">0:右側白色</a> | <a href="javascript:cenImage(1)">1:両方白色</a> | <a href="javascript:cenImage(2)">2:両方灰色</a> | <a href="javascript:cenImage(3)">3:左側白色</a></li>
<li><a href="javascript:doc.body.classList.toggle('cen-harf');void(0)">バインダーの幅の変更</a></li>
<li><a href="javascript:Fid('tab1').classList.toggle('min'); Fid('mainDisp').classList.toggle('min'); void(0);">汎用領域の運動 mainDispとTab1の回転と退避</a></li>
<li><a href="javascript:doc.body.classList.toggle('notbar');void(0)">disp領域のスクロールバーの表示・非表示</a></li>
<li><a href="javascript:Fid('mainDisp').classList.toggle('revbar');void(0)">#main(右領域)のスクロールバーの移動</a></li>
<li><a href="javascript:doc.body.classList.toggle('toright');void(0)">バインダーの移動方向の変更</a></li>
<li><a href="javascript:mode(1);">モードの変更</a></li>
<li><a href="javascript:transUpdate()">日記移行会員名簿の更新</a></li>
</ul>
Q1 style="height:30rem; background-color:#ffefff">testQ2
Q1 class="disp-end">endingQ2
Q2
Q2
Q2
Q2

Q1 id="cenDisp" class="cen-bg0 out">
Q1 id="cen0">Q2
Q1 id="cen1">Q2
<a id="com0" href="javascript:cenEntry(1)"></a>
<a id="com1" href="javascript:cenEntry(-1)"></a>
<a id="com2" href="javascript:cenEntry(0)"></a>
Q2

Q1 id="menuDisp" class="out disp-par">
Q1 id="F0" class="disp">
Q1 id="index" class="time-s">
<a href="javascript:allIndexEntry()">all index entry</a>
Q2
Q1 class="disp-ft">
Q1 class="masMsg"> 索引のリンクは汎用領域に追加もしくは上書きモードで「文字置換」を施したものが表示されます。上書きモードの切り替えは「TABの第2ボタン」のクリックで出来ます。トグルで作用して緑色は追記、白色は上書きのモードとなります。なお、右クリックで「新規に開く」では素のページが表示されます。Q2
Q1 class="tips"> ボタンの形のリンクは移動ボタンです。対象の先頭にスクロールします。索引が生成されていない場合には先に取得を行ってから機能します。Q2
Q2
Q2
Q1 id="F1" class="disp sel">
Q1 id="archives">Q2
Q1 id="categories">Q2
Q1 id="latest_articles">Q2
Q1 id="latest_comments">Q2
Q1 id="axCreateDisp">Q2
Q1 id="fileView">Q2
Q1 id="myLinks">Q2
Q1 class="disp-ft">doneQ2
Q2
Q1 id="F2" class="disp">
Q1 id="f2Doc" class="open-disp">Q2
Q1 class="disp-ft">doneQ2
Q2
Q1 id="F3" class="disp">
Q1 class="disp-hd">command ofQ2
<ul id="f3Doc"></ul>
Q1 class="disp-ft">doneQ2
Q1 class="disp-hd" onclick="delayScroll(this, null)">update fileQ2
Q1 class="masMsg">頻繁に更新するファイルです。<br />領域の更新は🤍docCode Aで。Q2
<ul>
<[new-diary,1591011443,💚足跡取得 3.0.1]>
<[new-diary,1591011463,💚足跡 3.0.1 関数(1)]>
<[new-diary,1591011471,💚足跡 3.0.1 関数(2)]>
<[new-diary,1591011454,💚足跡 3.0.1 CSS(1)]>
<[new-diary,1591011486,💚足跡 3.0.1 CSS(2)]>
<[new-diary,1591011479,💚足跡 3.0.1 初期設定]>

</ul>
<ul>
<[new-diary,1570804022,📄 領域D : サイトの構築用メモ]>
<[new-diary,1570803952,📄 領域B : サイトの仕様書]>
<[new-diary,1591011361,📄 領域C : 日記のメインページ]>
</ul>
<ul>
<[new-diary,1591011590,📋 A217407 execCode A]>
<[new-diary,1591011583,📋 A217406 execCode B]>
<[new-diary,1591011576,📋 A217405 execCode C]>
<[new-diary,1591011569,📋 A217404 execCode D]>
<[new-diary,1591011562,📋 A217403 execCode BOOT]>
<[new-diary,1591011554,📋 A217402 execCode E]>
<[new-diary,1591011547,📋 A217401 execCode F]>
<[new-diary,1591011539,📋 A217400 未使用・拡張領域]>
<[new-diary,1591011532,A217399 🤍docCode B]>
<[new-diary,1591011525,A217398 🤍docCode A]>
</ul><ul>
<[new-diary,1570803812,📄 A215933 予備 検証用フリー]>
</ul>
Q1 class="disp-ft">doneQ2

<form id="eDisp" name="eDisp">
Q1 class="form-hd">
Q3 onclick="topFixEntry(this)">eDisp 6.0.1Q4
<select id="execSel" onchange="archiveUpdateEntry(this, 253, null)">
<option value="">system</option>
<option value="217407 1591011590">execCode A</option>
<option value="217406 1591011583">execCode B</option>
<option value="217405 1591011576">execCode C</option>
<option value="217404 1591011569">ececCode D</option>
<option value="217403 1591011562">BOOT</option>
<option value="217402 1591011554">excCode E</option>
<option value="217401 1591011547">excCode F</option>
<option value="217399 1591011532">doc-B</option>
<option value="217398 1591011525">doc-A</option>
</select>
Q3 class="form-fix" onclick="topFixEntry(this)">FixQ4
Q3 class="form-fix" onclick="formRows(this)">RowQ4
Q2
Q1 class="row">
Q3 class="dt">title : <input type="text" id="eDispTitle" />Q4
Q2
Q1 class="row">
Q3 class="dt">user : Q4 <input type="text" id="eDispUser" size="10" value="new-diary" />
Q3 class="dt">no :Q4 <input type="text" id="eDispArticle" size="5" />
Q3 class="dt">cate :Q4 <input type="text" id="eDispCate" size="4" />
<input type="checkbox" id="newOpen" /> <label for="newOpen">新着日記へ公開</label>
Q2
<textarea id="eDispText" onclick="formCounter()"></textarea>
Q1 id="editedStatus">
<input type="button" value="送信" id="post" class="cir" onclick="postEntry()" /> |
<input type="button" value="適用" id="appli" class="cir" onclick="appliEntry(1)" />
Q3 id="formCnt">0Q4 Q3 id="upInfo">Q4
Q2
Q1 class="form-ft">done.Q2
</form>

Q2
Q1 id="F4" class="disp">
Q1 id="f4Doc">
Q1 class="link_title">📆エクラの日記Q2
<[new-diary yadokari nancyan:x1]>
 <a target="_blank" href="diary/2020/06/1591011443.html">💚足跡取得 3.0.1</a> <a target="_blank" href="/home/css-2/main.html?c=886">💚データ</a>
<br />
 <a target="_blank" href="/cgi-bin/diary.cgi?oid=new-diary;c=851">💚メモ帳・ヘルの小部屋</a><br />
 <a target="_blank" href="/home/log3/">💛新着日記研究室</a><br />
 <a target="_blank" href="main.html?uri=ex;p=298">💙BIGBBS.exP298</a><br />
 <a target="_blank" href="/home/log2/main.html?job=file;ed=1;en=31">💙ファイル研究室 file 1.31</a>
 <a target="_blank" href="/home/log2/main.html?job=bbs">💙BBS</a><br />
 <a target="_blank" href="/home/poem/">💛ポエムの小部屋</a><br />
 <a target="_blank" href="http://www.eclat.cc/home/default/?main.html?uri=bg=gaiax&archive=nakayoshi_bbs_5.html">💗クッキー研究室・なかよし5</a>
Q1 class="tips">💛と💗はフレーム定義ページです。<br />此処か上の何処かにいます。Q2

Q1 class="link_title">📖エクラの新着日記Q2
Q1 class="masMsg">システム手帳では7.0.1です。<br />全てをいつかは完成させたい。Q2
<ul class="link_text vjn"><li><a
target="_blank" href="main.html?fn=3;user=all">7.0.1</a></li><li><a
target="_blank" href="http://www.eclat.cc/home/default/main.html?uri=site:all">6.0.1</a></li><li><a
target="_blank" href="http://www.eclat.cc/home/nancyan/main.html?no=103&user=all">3.0.1</a></li><li><a
target="_blank" href="http://www.eclat.cc/home/yadokari/main.html?diary=174077">4.0.1</a></li><li><a
target="_blank" href="http://www.eclat.cc/home/yadokari/main.html?diary=177594&page=1910">5.0.1</a></li><li><a
target="_blank" href="/home/css-1/main.html?c=0">8.0.1β</a></li><li><a
target="_blank" href="/home/css-2/main.html?c=0">8.0.1</a></li>
</ul>
Q1 class="tips">全て新規に開かれます。<br />コマンドは未定です。Q2

Q1 class="link_title">リンク集Q2
<[kakei mine yu-ma mimimi jasmine midnight lady testroom kyonkk kotetti since:x1]>

Q1 class="link_title">UID検索Q2
<ul class="chin">
<[new-diary,1591011590,📋 A217407 execCode A]>
</ul>
Q1 id="uidDisp">
<input type="text" id="uidDat" />
<input type="button" value="クリア" onclick="uidReset()" />
<input type="button" value="検索" onclick="uidEntry(this)" />
Q1 id="uidArea">Q2
Q2
Q1 class="link_title">最近の新着日記よりQ2
<[kadoma1428 freehand2007 tanpopo sengoku funabinikoo sirayuki sakura1205 mikiharb voyov enmasama3 jin8t everything fugaty m-room arty-crafty tablet-fan-2074 other-e-81 yukiusagi898 abedetv funabin2ikoo izayoi fujit11230830 tranquilizer enmedia tv-tokushima-80 variety-g model:x1]>

Q1 class="load-par">
Q3 class="loader" onclick="loadDataTo(1590583861, 'new-diary', this)">移行会員名簿から取得Q4
Q2
Q2
Q2
Q2

[/DOC-A-DATA]


コメント (0)

足跡取得 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]


コメント (0)

足跡取得 3.0.1 関数(4)
 

[FOO-ADD-EXEC-DATA]
nextUserLoad = () => {
const bcc = doc.body.classList;
if(sectUser == null || !bcc.contains(`loop`)) return;
const obj = sectUser.parentNode;
userCnt++;
if(obj != obj.parentNode.lastChild){
obj.nextElementSibling.childNodes[0].click();
} else {
bcc.remove(`loop`);
naviCmd(1);
}
};

diaryDataLoad = () => {
const pardes = sectUser.parentNode.childNodes;
xhr("/cgi-bin/diary.cgi?oid=" + sectUser.id.substring(1) + ";c=0;n=1", null, e => {
if(e.match(/全カテゴリ \((\d+)/)) pardes[19].textContent = RegExp.$1;
if(e.match(/entry_date">([^<]+)/)){
pardes[21].textContent = RegExp.$1;
pardes[20].textContent = e.match(/class="C\d+"/g).length;
}
setTimeout(() => { bbsDataLoad(); }, 0);
});
};

bbsDataLoad = () => {
const pardes = sectUser.parentNode.childNodes;
xhr("/cgi-bin/bbs.cgi?oid=" + sectUser.id.substring(1) + ";n=1", null, e => {
if(e.match(/総件数: (\d+) 件/)) pardes[22].textContent = RegExp.$1;
if(e.match(/no=(\d+);mode=edit/))pardes[23].textContent = RegExp.$1;
if(e.match(/_time">([^<]+)/)) pardes[24].textContent = RegExp.$1;
setTimeout(() => { profileDataLoad(); }, 0);
});
};

profileDataLoad = () => {
const pardes = sectUser.parentNode.childNodes;
const user = sectUser.id.substring(1);
if(" nancyan yadokari poem ".indexOf(" " + user + " ") != -1){
if(user == "poem"){ pardes[25].textContent = 192; pardes[26].textContent = 217707; }
if(user == "yadokari"){ pardes[25].textContent = 191; pardes[26].textContent = 50132; }
if(user == "nancyan"){ pardes[25].textContent = 108; pardes[26].textContent = 14300; }
setTimeout(() => { nextUserLoad(); }, 0);
} else {
xhr("/home/" + user + "/profile.html", null, e => {
e = e.replace(/.+<tbody>|<\/tbody>.+/g, "");
pardes[25].textContent = e.match(/<tr>/g).length;
pardes[26].textContent = e.length;
setTimeout(() => { nextUserLoad(); }, 0);
});
}
};

delayExec = dt => {

};

bcc = dt => {

};


/* -- 更新可能にする -- */
sxExecEntry = () => {


};


xhrDataLoad = user => {
let file = ("main 50,menu 52,common 54,profile 56,footprint 58," +
"diary 60,bbs 62,bbs_form 64,friends 66,links 68,main 4,menu 10").split(",");
xhrDataLoop(user, file);
};

xmlLoad = () => {
let file = ("main 70,menu 72,common 74,profile 76,footprint 78," +
"diary 80,bbs 82,bbs_form 84,friends 86,links 88,main 4,menu 10").split(",");
if(cellCmd.c1.classList.contains("tpE"))
cellCmd.c1.nextElementSibling.childNodes[1].click();
else xmlLoop(file);
};

xmlDate = d => {
d = new Date(d * 1000).toLocaleString("ja-JP");
d = d.replace(/\d+:\d+:\d+/, "").
replace(/\d\d(\d+\d)\/(\d+)/, "'$1 $2").replace(/ (\d\/)/, " 0$1").
replace(/\/(\d )/, "/0$1");
return d;
};

/* -- レコード内のfile分を取得してセルを書き換え -- */
xhrDataLoop = (user, file) => {
let e = file.shift().split(" ");
let n = e[1] - 0;

if(n == 70) Fid("css1").click();
if(n == 80) Fid("css2").click();
if(n == 4) Fid("btnC7").click();
let isHtml = [4,10].includes(n);
let uri = `/home/${user}/${e[0]}.${isHtml ? "html" : "css"}`;

echo("parInfo", uri.replace(/^.+\//, ""));
xhr(uri, null, (s, d) => {
let dt = Fid("M" + user).parentNode.childNodes;
if(isHtml){
dt[n + 3].textContent = xmlDate(d);
dt[n + 2].textContent = String(s.match(/\x3cscript/gi).length - 1);
} else {
dt[n].textContent = xmlDate(d);
}
dt[n + 1].textContent = String(s.length).replace(/(\d+)(\d{3})$/, "$1,$2");
if(file.length > 0) setTimeout(() => { xhrDataLoop(user, file) }, 700);
else {
let par = Fid("M" + user).parentNode;
par.classList.remove("ws");
par.classList.add("ws-on");
if(xmlLoopSet){
par = par.nextElementSibling;
while(par){
if(!par.classList.contains("tpE")) break;
par = par.nextElementSibling;
}
if(par) par.firstChild.click();
else {
alert("最後まで終わりました");
}
}
}
});
};

xmlLoop = file => {
let e = file.shift().split(" ");
let user = echo("dtUser");
let n = e[1] - 0;
let isHtml = [4,10].includes(n);
let uri = `/home/${user}/${e[0]}.${isHtml ? "html" : "css"}`;
echo("parInfo", uri.replace(/^.+\//, ""));
xhr(uri, null, (s, d) => {
let o = Fcn("dtData", "e2");
let a = Fid("M" + user).parentNode.childNodes;

if(isHtml){
o[n + 3].textContent = a[n + 3].textContent = xmlDate(d);
o[n + 2].textContent = a[n + 2].textContent =
String(s.match(/\x3cscript/gi).length - 1);
} else {
o[n].textContent = a[n].textContent = xmlDate(d);
}
o[n + 1].textContent = a[n + 1].textContent =
String(s.length).replace(/(\d+)(\d{3})$/, "$1,$2");

if(file.length != 0 && file != []) setTimeout(() => { xmlLoop(file) }, 1000);
else {
if(xmlLoopSet){
setTimeout(() => {
cellCmd.c1.nextElementSibling.childNodes[1].click();
}, 1000);
}
}
});
};



[/FOO-ADD-EXEC-DATA]


コメント (0)

足跡取得 3.0.1 関数(5)
 

[FOO-ADD-EXEC-DATA]
memoBlur = e => {
const par = e.parentNode;
let dt = e.value.replace(/\r?\n/g, "<br \/>");
par.classList.add("s");
setTimeout(() => {
echo(par, dt);
par.classList.remove("e");
setTimeout(() => par.classList.remove("s"), 400);
memoUpDate();
}, 400);
};

memoTextOpen = e => {
setTimeout(() => Fid("memoText").classList.toggle("sleep"), 200);
};

memoEdit = e => {
if(!doc.body.classList.contains("edit-on")) return;
if(e.tagName != "SPAN" || e.tagName == "TEXTAREA") return;
if(e.firstChild && e.firstChild.tagName == "TEXTAREA"){
return;
}
const fcc = e.classList;
if(fcc.contains("e")) return;
let dx = e.offsetWidth;
let dy = e.offsetHeight;
let dt = fullDec(echo(e)).replace(/<br ?\/?>/gi, "\n");
let ww = `calc(${dx}px + 1rem)`;
let opt = `onblur="memoBlur(this)" style="width:${ww}; height:${dy}px; max-height:26em"`;
fcc.add("e", "s");
setTimeout(() => {
echo(e, `<textarea ${opt}>${dt}</textarea>`);
e.firstChild.focus();
setTimeout(() => fcc.remove("s"), 500);
}, 500);
};

memoSubmit = () => {
let txt = Fid("memoText").value.replace(/\x3c/g, "\x26lt;");
if(txt == "") return;

txt = txt.replace(/[\ud800-\udbff][\udc00-\udfff]/g,
  e1 => `\x26#x${e1.codePointAt(0).toString(16)};`);

let dt = ` 日記やヘルの小部屋には置けそうにないこと。\n この足跡取得3.0.1の構築にあたってメモしておきたいこと。\n\n<img src="/home/default/files/yukikko2b.gif" alt="" />\n\n <a target="_blank" href="/home/new-diary/diary/2020/06/1591011443.html">ここは足跡取得3.0.1のメモ帳の組込み領域です。</a>\n<div style="display:none">[FOO-MEMO-DATA]\n${txt}\n[/FOO-MEMO-DATA]</div>\n<a class="cp-load" href='javascript:%7Blet%20o%20=%20document.createElement(%22script%22);%20o.id%20=%20%22bootScript%22;%20o.src%20=%20%22/home/new-diary/friends.css%22;%20o.type%20=%20%22text/javascript%22;%20o.charset%20=%20%22utf-8%22;%20document.head.append(o)%7D'></a>`;

let dat = "mode=update&oid=new-diary&before=edit&article_notify=1" +
"&article_id=217394&category_id=635&article_title=" +
enc("足跡取得 3.0.1 メモ帳") +"&article_sentences=" + enc(dt);
// parInfo
// echo("parInfo", "A217394 .. update.");
xhr("diary_form", dat, e => {
setTimeout(() => {
doc.body.classList.remove("ups");
// parInfo
// echo("parInfo", "done.");
}, 400);
});
};

memoUpDate = () => {
let s1 = echo("memoText");
let s = echo("ulMemo" + 0).replace(/\x3cspan.+?(es\-\d)[^>]+>/g, "$1:");
s = s.replace(/\x3c\/span>/g, "").
replace(/\x3cimg src="([^"]+)" alt=""\s?\/?>/g, "$1(0)").
replace(/\x3cbr ?\/?>\r?\n/g, "\t").replace(/\x3cbr ?\/?>/g, "\x25");
s = s.replace(/^\s+|\s+$/g, "");
echo("memoText", s);

if(s1 != "" && echo("memoText") != s1){
doc.body.classList.add("ups");
if(!Fid("upDo").classList.contains("ac")) Fid("upDo").click();
};
}

memoDec = s => {
s = fullDec(s);
s = s.replace(/(<b>\x25<\/b>)/g, "\t");
s = s.replace(/\x25/g, "\x3cbr \/>");
s = s.replace(/\t/g, "<b>\x25</b>");
s = s.replace(/(\/home\/[0-9a-z\-]+\/files\/[0-9a-zA-Z\-_]+\.)(gif|jpg|png)\((\d)\)/g,
(e, e1, e2, e3) => `<img src="${e1+e2}" class="img${e3}" alt="" />`
);
return s;
};

/* -- メモシステムのエントリ -- */
memoEntry = () => {
const bcc = doc.body.classList;
bcc.add("memo-load");
xhr("/home/new-diary/diary/2020/06/1591011494.html", null, s => {
s = keys(s, "FOO-MEMO-DATA").replace(/\r?\n/g, "");
s = s.replace(/(e.\-\d+):([^<]+)<br \/>/g, (e, e1, e2) => {
let wn = e2.length - e2.replace(/\x25/g, "").length;
let w = wn > 6 ? "w" : wn < 1 ? "o" : "";
return `<span class="${e1} ${w}" onclick="memoEdit(this)">${ memoDec(e2) }</span>`
});
echo("ulMemo" + 0, s);
memoUpDate();
setTimeout(() => {
bcc.remove("memo-load");
setTimeout(() => Fid("ulDatMemo").scrollIntoView(), 400);
}, 700);
});
};




[/FOO-ADD-EXEC-DATA]


コメント (0)

足跡取得 3.0.1 メモ帳
 日記やヘルの小部屋には置けそうにないこと。
 この足跡取得3.0.1の構築にあたってメモしておきたいこと。



 ここは足跡取得3.0.1のメモ帳の組込み領域です。
[FOO-MEMO-DATA]
es-4:💙自己発展型メモ帳 ulMemo 1.0%%<img src="/home/default/files/yukikko2b.gif" class="img0" alt="">%%書式は es\-[0-9]+:.+$で 一行単位%改行は <b>%</b>を 割り当ててる%自動改行 だから 適度に改行を%%メモ領域は <b>inline-block</b>%そして <b>float:left</b>を 施してるの%%本文領域は 色々な 仕掛けがあるの%本文の クリックで テキストエリアに%フォーカスが 外れると 元の形に戻るの%その場で その領域を 編集できるわ%%この時点で 既に内容の変化は 反映されているの%%更新ボタンで サーバに アップ%ファイルの 取得は リアルタイム
es-1: 構築メモ%イベントのある<b>span</b>には選択禁止の<b>user-select:none</b>を施してる。%だって、クリックと同時に位置が変化すると反転状態になるから。%・タグは使える。%・画像は短縮形に置換される。クラスの追加があるから便利。%・メモの追加や挿入は上の<b>MTO</b>ボタンをクリック。直に記述が出来るの。
es-2:💗💙💛日記の記事数が多くなると%仕分けしたくなります。%%そもそも先々を考えていた人は、%最初に仕分けに入っていたことでしょう。%%何故なら溜まりにたまった記事を分類するのも%少し骨が折れるものです。

es-1:ところで、日記に「menu.html」というページがあるということを殆どの方は知らなと思います。%これ、「/home/OID/」直下にあるメニューページの「menu.htmじゃありません。%「/home/OID/diary/」直下の「menu.html」です。

es-2:クラスABのうち6名をピックアップしてみます。%まずは次の3名から。%%日記の件数は'22 08/07現在のものです。%%※リンクは新規で開かれます。以後同じです。

es-1:done

es-2:エクラの日記のカテゴリ%えくらの てほんの <a target="_blank" href="/home/freehand2007/diary/menu.html">💛F男さん</a> %よくある かたちの <a target="_blank" href="/home/yu-ma/diary/menu.html">💛Y子さん</a> %みらいが こわいの <a target="_blank" href="/home/sakura1205/diary/menu.html">💛S子さん</a> %%リストを公開したら後悔するわ きっと%%<img src="/home/default/files/yosei_2.gif" class="img1" alt=""> なぁに、そのページ% はい、日記の組み込みモジュールです

es-2:開かれたページはCSSの取り込みやヘッダーすらない%「組み込み用のモジュール」です。%だからどのページにもリンクは存在していませから知らないのは当然でしょう。%けれど、xhr通信を使って取得するときにはかなり重宝しているの。

es-4:バランス感覚が欲しい%<img src="/home/poem/files/fly.jpg" class="img0" alt="">%<a target="_blank" href="/home/new-diary/main.html?fn=3;user=yu-ma">💙Y子さん</a>の中でのこと。%%日記の記事数もかなりのもの。%でも改行で行の間隔を取るなんて%%line-heightを使って欲しい。

es-2:悲しい出来事%最近になって知ったこと。%<a target="_blank" href="/home/new-diary/main.html?fn=3;user=kadoma1428">💙K男さん</a>の中でのこと。%%「このページは権利者からの著作権侵害通告により表示を停止しています。」%こんな案内のページがあったの。%%それで調べてみました。%%HTMLファイルの<b>./diary/</b>以下がリダイレクトされてる。<a target="_blank" href="/home/kadoma1428/diary/menu.html">💛日記のメニュー</a>。%けれど、CGIからは取得が出来るわ。<a target="_blank" href="/cgi-bin/diary.cgi?oid=kadoma1428;n=1;s=138039">💛最新1件のみ表示</a>。%でも、全てが表示されるわけじゃない。制限されてる。%これ、<a target="_blank" href="/cgi-bin/diary.cgi?oid=kadoma1428;n=1;s=195780">💛A195780</a> (2014 06/24 06:18)より前のリンクが出ない。%%書き始めは、<a target="_blank" href="http://www.eclat.cc/home/yadokari/main.html?diary=177594&page=1317#A138039">💙ここだと思う</a>。% 中身は、<a target="_blank" href="http://www.eclat.cc/home/yadokari/main.html?diary=177594&article=138039">💙A138039</a>。 ※<b>diary_form.cgi</b>利用だからログイン必須です。%前後の他の人の投稿時刻は、2007 12/27 16:41と2007 12/27 19:54。%%うん、間違いない。%%日記の投稿が途絶えて1年。出向が途絶えて半年。%エクラの日記投稿件数記録保持者なのに残念です。

es-2:タイトルよりも大きな本文の文字%<a target="_blank" href="/home/new-diary/main.html?fn=3;user=haru">💙H子さん</a>の中でのこと。%%記事全体をタグで括って・・・そこに、<b>font-size:125</b><b>%</b>とは。%<font style="font-size:1.25em">こんな感じかな? 1.25倍の大きさ。%うん、<b>font</b>じゃなく<b>span</b>を使ってる。</font>%%以前は何ともなかったのに、調べてみました。%%タグを入れ始めたのは文字が小さくなったから。%それはスタイルシートを組み込んでからのこと。%cssファイルは更新時刻が取得されるから分かるよね。%%それで、%common.cssとdiary.cssの中であれっと思うところがあるの。%body,td,thやbody entry_bodyの処に記述してある <b>14px/1.2</b>。%%これはない。ありえない。%どちらも基準とするところだから <b>1em/1.6</b>位かな。%相対値が基本で絶対値にするなんて無謀すぎます。%%そもそも文字の大きさなんて環境で変わるのだから。

es-1:izayoiさんのこと 1970%poemのこと。%他にも数名の削除があること。%haruさんのこと%font-size:125%のこと%#common.css %diary.css %body entry_body 14px/1.2 %cssを切っ掛けの事。%最終更新日 : 2021 02/17 12:54:37%%$yu-maさんの改行タブの事。%さくらさんのカテゴリの事

es-4:tttttttttttttttttttttttttttt%%%done
[/FOO-MEMO-DATA]

コメント (0)

🤍足跡 3.0.1 CSS (2)
 


[LOG-CSS-DATA]

/* -- リスト下部にあるメモ欄システム -- */
#ulDatMemo {
margin:2em 1em 2em 1em;
padding:1em .5em 2em .5em;
}

/* -- メモ帳更新用テキストエリア -- */
#memoText {
font-size:100%;
line-height:1.5em;
padding:.25em;
margin:.5rem 1rem .5rem 0;
width:calc(100% - 4rem);
height:15.5em;
border-radius:4px;
outline:none;
resize:none;
transition:height .6s, background-color .6s, opacity .4s;
}

#memoText:focus {
background-color:#ffefff;
}

#memoText.sleep {
height:0;
background-color:#ffc;
opacity:0;
}

/* -- メモ送信ボタン -- */
#meUpBtn {
position:fixed; bottom:4rem; right:-5rem;
display:inline-block;
text-align:center;
font-size:90%;
width:3rem; line-height:3rem;
border:1px solid #808080;
border-radius:50%;
box-shadow:4px 4px 4px #ccc;
background-color:#fff;
transition:all .5s;
cursor:pointer;
z-index:20;
}

.edit-on #meUpBtn {
right:1rem;
}

/* -- 送信が必要な場合 -- */
.ups #meUpBtn {
background-color:#f88;
}

#meUpBtn:hover {
background-color:#ff9;
}
.ups #meUpBtn:hover {
background-color:#f00;
color:#fff;
}

#meUpBtn:active {
box-shadow:3px 3px 3px #ccc inset;
}

/* -- メモをロードして表示させる起動ボタン -- */
.memo-st {
display:inline-block;
padding:.5em 1em;
user-select:none;
border:1px solid #808080;
color:#00f;
background-color:#ffc;
box-shadow:5px 5px 5px #ccc;
cursor:pointer;
transition:all .5s;
}

.memo-st:hover {
background-color:#eef;
color:#000;
}

.memo-st:active {
box-shadow:3px 3px 3px #ccc inset;
}

/* -- 全て#ulMemo(n)のidが入るメモ本体 -- */
.memo {
position:relative;
transition:all .5s;
counter-reset:MCNT;
}

/* メモ内の要素は全てspan -- */
.memo span {
position:relative;
display:inline-block;
float:left;
padding:.5rem 1rem;
margin:1rem 2rem 1rem 5rem;
border:1px solid #000;
border-radius:.5rem;
box-shadow:3px 3px 3px #ccc;
cursor:default;
counter-increment:MCNT;
transition:all .5s;
}

.memo span.e {
padding:.25em .5em;
}
.memo span.s {
opacity:0;
}

.memo span::before {
position:absolute; left:-4.5rem; top:1rem;
display:inline-block;
font-size:.8rem; line-height:1.3rem;
text-align:center;
white-space:pre-wrap;
}

.memo span.o::before { top:.5rem; }
.memo span.w::before { top:2rem; }

.memo span::after {
position:absolute; left:-.6rem; top:1.5rem;
border-style:solid;
border-width:1px;
border-color:transparent transparent #000 #000;
display:inline-block;
width:1rem; height:1rem;
content:"";
transform:rotate(45deg);
}

.memo span.o::after { top:.8rem; }
.memo span.w::after { top:2.5rem; }

/* -- ハム太郎・緑 -- */
.es-1 { background-color:#efe; }
.es-1::before {
content:url("/home/nancyan/files/hamu_folder1.gif")
"\Aハム太郎\A" attr(class) "\A" "mc/" counter(MCNT);
}
.es-1::after { background-color:#eef8ee; }

/* -- はむはむ・ピンク -- */
.es-2 { background-color:#ffefff; }
.es-2::before {
content:url("/home/nancyan/files/hamu_folder2.gif")
"\Aはむはむ\A" attr(class) "\A" "mc/" counter(MCNT);
}
.es-2::after { background-color:#ffefff; }

/* -- 妖精・右向き -- */
.es-3 {
background-color:#fff;
font-size:1rem;
}
.es-3:first-line { color:#00f; }
.es-3::before {
content:url("/home/default/files/yosei_2.gif")
"\A" "Yosei" "\A" attr(class) "\A" "mc/" counter(MCNT);
}
.es-3::after { background-color:#fff; }

/* -- 妖精・アニメ -- */
.es-4 {
background-color:#fff;
font-family:serif;
font-size:1rem;
}
.es-4:first-line { font-weight:bold; color:brown; }
.es-4::before {
content:url("/home/default/files/angel.gif")
"\A" "Angel" "\A" attr(class) "\A" "mc/" counter(MCNT);
}
.es-4::after { background-color:#fff; }

.es-41 {
background-color:#fff;
font:bold 110%/1.5 monospace;
white-space:pre-wrap;
}
.es-41:first-line { font-weight:bold; color:brown; }
.es-41::before {
content:url("/home/default/files/angel.gif")
"\A" "Angel" "\A" attr(class) "\A" "mc/" counter(MCNT);
}
.es-41::after { background-color:#fff; }

.memo img.img1 {
float:left;
margin-right:.5em;
}
.memo img.img2 {
float:right;
}

.memo-load .memo {
opacity:0;
}

.memo .es-4 b { color:#00f; }

.memo span:hover {
box-shadow:5px 5px 5px #ccc;
}


.memo textarea {
font-family:-apple-system, BlinkMacSystemFont, "Helvetica Neue", "游ゴシック Medium", YuGothic, YuGothicM, "Hiragino Kaku Gothic ProN", メイリオ, Meiryo, sans-serif;
font-size:100%;
padding:.25em;
resize:none;
border:none;
outline:none;
border-radius:3px;
transition:all .4s;
}

.memo-off #ulDatMemo {
display:none;
}

#ulDatMemo a {
text-decoration:underline;
}



#ulDatMemo a:hover {
color:magenta;
}

#ulMemoFooter {
clear:both;
margin-bottom:8em;

}


[/LOG-CSS-DATA]


コメント (0)

🤍足跡 3.0.1 初期設定
 

リスト0のclassList。
改行、カンマの二重配列。


[CELL0-DATA]nb0Disp,,
A / B, 4.4, db, nb00,
C / D, 4.6, db, nb03,
予約, 0, db dp,,
汎用(A), 4, db dp, nb01,
データ, 4.1, db dp, nb02,
連続, 4.2, db dp,,
取得, 4.3, db dp,,
予約, 0, db cp,,
予約, 0, db cp,,
リスト, 1, db cp,,
メモ帳, 1.1, db cp,,
MeUp, 4.5, db cp, upDo,
予約, 0, db dp,,
予約, 0, db dp,,
予約, 0, db dp,,
予約, 0, db dp,,
予約, 0, db cp,,
予約, 0, db cp,,
予約, 0, db cp,,
予約, 0, db cp,
[/CELL0-DATA]


リスト1のclassList。
改行、カンマの二重配列。


[CELL1-DATA]nb1Disp,,
M&M, 7, tc-g tc0 tc eec, btnC7,
出向, 7.1, tc-g tc1 tc,,
訪問, 7.2, tc-g tc2 tc,,
日記, 7.3, tc-g tc3 tc, c1st,
予約, 7.8, tc-g tc8 tc,,

CSS1, 7.4, tc-g tc6 tb eec, css1,
CSS2, 7.5, tc-g tc4 tb, css2,
BPFL, 7.6, tc-g tc5 tb , btnC76,
選抜, 7.7, tc-g tc7 tb,,
予約, 7.9, tc-g tc9 tb,,

A, 8, ww cca, aLine,
B, 8.1, ww cca,,
C, 8.2, ww cca,,
D, 8.3, ww cca,,
E, 8.4, ww cca, eLine,
反転, 11, ww, aRev
[/CELL1-DATA]


リスト2のclassList。
カンマの配列。空行は除去される。


[CELL2-DATA]nb2Disp,,
No, 6, vol df bg1,,
UID, 6.1, uid df bg1 fx, nUid,
L, 6.2, vol tp0 tp1 tp2 tp3 tp4 tp5 tp6 tp7 bg1 w3,,
💛移行・登録, 6.3, dte tp0 tp1 tp2 tp3 tp4 tp5 tp6 tp7 bg1,,

Main, 6.4, vol tp0 w5,,
len, 6.5, vol tp0 w5,,
js, 6.6, vol tp0 w3,,
🤍Up, 6.7, dte tp0 ms,,
e1, 6.8, vol tp0 w3,,
e2, 6.9, vol tp0 w3,,

Menu, 6.10, vol tp0 w5,,
len, 6.11, vol tp0 w5,,
js, 6.12, vol tp0 w3,,
🤍Up, 6.13, dte tp0 ms,,
e3, 6.14, vol tp0 w3,,
e4, 6.15, vol tp0 w3,,

🤍出向new, 6.16, dte tp1,,
🤍new-UID, 6.17, uid tp1,,
S, 6.18, vol tp1 w3,,
🤍出向1st, 6.19, dte tp1,,
🤍1st-UID, 6.20, uid tp1,,
Ex, 6.21, vol tp1 w3,,
En, 6.22, vol tp1,,

Q1, 6.23, vol tp1,,
Q2, 6.24, vol tp1,,

訪問数, 6.25, vol tp2 w6,,
H, 6.26, vol tp2 w3,,
💚訪問new, 6.27, dte tp2,,
💚new-UID, 6.28, uid tp2,,
K, 6.29, vol tp2 w3,,
💚訪問1st, 6.30, dte tp2,,
💚1st-UID, 6.31, uid tp2,,
B, 6.32, vol tp2 w3,,
1, 6.33, vol tp2 w3,,

2, 6.34, vol tp7 w3,,
3, 6.35, vol tp7 w3,,

Post, 6.36, vol tp3 w5,,
N, 6.37, vol tp3 w3,,
💙Dnew, 6.38, dte tp3,,

BBS, 6.39, vol tp6 w5,,
spa, 6.40, vol tp6,,
💙new, 6.41, dte tp6,,
💙1st, 6.42, dte tp6,,
💙2nd, 6.43, dte tp6,,
M, 6.44, vol tp6 w3,,

6, 6.45, vol tp7 w3,,
7, 6.46, vol tp7 w3,,
8, 6.47, vol tp7 w3,,
9, 6.48, vol tp7 w3,,
0, 6.49, vol tp7 w3,,
1, 6.50, vol tp7 w3,,
2, 6.51, vol tp7 w3,,

Pro, 6.52, vol tp6,,
len, 6.53, vol tp6 w6,,

Anew, 6.54, vol tp3 w6,,
🔹D1st, 6.55, dte tp3,,
🔹D1stA, 6.56, vol tp3 w6,,
🔹C, 6.57, vol tp3,,
💜Cp, 6.58, vol tp3 w5,,
💜Co, 6.59, vol tp3 w5,,
sp, 6.60, vol tp3,,
spa, 6.61, vol tp3,,

3, 6.62, vol tp7 w3,,

Fs, 6.63, vol tp6 w3,,
Ls, 6.64, vol tp6 w3,,
Ch, 6.65, vol tp6 w3,,

7, 6.66, vol tp7 w3,,
A8, 6.67, vol tp8 w6,,
A9, 6.68, vol tp9 w6,,

T, 6.69, sec tp7,,

main, 6.70, dte tp4 ms,,
len, 6.71, vol tp4 w5,,
menu, 6.72, dte tp4 ms,,
len, 6.73, vol tp4 w5,,
common, 6.74, dte tp4 ms,,
len, 6.75, vol tp4 w5,,
profile, 6.76, dte tp4 ms,,
len, 6.77, vol tp4 w5,,
footprint, 6.78, dte tp4 ms,,
len, 6.79, vol tp4 w5,,

diary, 6.80, dte tp5 ms,,
len, 6.81, vol tp5 w5,,
bbs, 6.82, dte tp5 ms,,
len, 6.83, vol tp5 w5,,
bbs_form, 6.84, dte tp5 ms,,
len, 6.85, vol tp5 w5,,
friends, 6.86, dte tp5 ms,,
len, 6.87, vol tp5 w5,,
links, 6.88, dte tp5 ms,,
len, 6.89, vol tp5 w5,
[/CELL2-DATA]


リストのセルのclassList。
上のと対になっています。


[CELL3-DATA]
vol df b1, uid df fx,
vol tl0 tl1 tl2 tl3 tl4 tl5 tl6 tl7 w3,
dte tl0 tl1 tl2 tl3 tl4 tl5 tl6 tl7,
vol tl0 w5, vol tl0 w5,
vol tl0 w3, dte tl0 ms,
vol tl0 w3, vol tl0 w3,

vol tl0 w5, vol tl0 w5,
vol tl0 w3, dte tl0 ms,
vol tl0 w3, vol tl0 w3,
dte tl1, uid tl1,
vol tl1 w3, dte tl1,

uid tl1, vol tl1 w3,
vol tl1, vol tl1,
vol tl1, vol tl2 w6,
vol tl2 w3, dte tl2,
uid tl2, vol tl2 w3,

dte tl2, uid tl2,
vol tl2 w3, vol tl2 w3,
vol tl7 w3, vol tl7 w3,
vol tl3 w5, vol tl3 w3,
dte tl3, vol tl6 w5,

vol tl6, dte tl6,
dte tl6, dte tl6,
vol tl6 w3, vol tl7 w3,
vol tl7 w3, vol tl7 w3,
vol tl7 w3, vol tl7 w3,

vol tl7 w3, vol tl7 w3,
vol tl6, vol tl6 w6,
vol tl3 w6, dte tl3,
vol tl3 w6, vol tl3,
vol tl3 w5, vol tl3 w5,

vol tl3, vol tl3,
vol tl7 w3, vol tl6 w3,
vol tl6 w3, vol tl6 w3,
vol tl7 w3, vol tl8 w6,
vol tl9 w6, sec tp7,

dte tl4 ms, vol tl4 w5,
dte tl4 ms, vol tl4 w5,
dte tl4 ms, vol tl4 w5,
dte tl4 ms, vol tl4 w5,
dte tl4 ms, vol tl4 w5,

dte tl5 ms, vol tl5 w5,
dte tl5 ms, vol tl5 w5,
dte tl5 ms, vol tl5 w5,
dte tl5 ms, vol tl5 w5,
dte tl5 ms, vol tl5 w5
[/CELL3-DATA]


メイン領域。
機能は少しずつ追加。


[MAINDISP-DATA]
<ul id="ulDat"></ul>
<ul id="nonDat"></ul>
<div id="ulDatMemo">
<div id="ulMemoHeaer">
<span class="memo-st" onclick="memoEntry(this)">言葉は少なめ “ 誰かに ”</span>
<span class="memo-st" onclick="memoTextOpen(this)">MTO</span>
<textarea id="memoText" class="sleep"></textarea>
<div id="memoSubmit">
<span id="memoUpInfo"></span>
</div>
</div>
<div id="ulMemo0" class="memo"></div>
<div id="ulMemoFooter"></div>
</div>
[/MAINDISP-DATA]


更新領域。
機能は少しずつ追加。


[SXDISP-DATA]
<div id="sxTop">
<span id="sxTopDoc"></span> |
<label><input type="checkbox" id="sxAuto" />自動</label> |

<span id="sxTopCmd">
<a id="sxClose" href='javascript:delayToggle("", "sx-off", "nb02", "ac")'>×</a>
</span>
</div>
<div id="sxDoc">
<div id="sxPar0">
<textarea id="sxText"></textarea>
<div id="upCmdDisp"></div>
<textarea id="upText"></textarea>
<div id="exInfo">
<span class="sx" id="upBtn" onclick="upBtnEntry()">送信</span>
<span id="exUpVol"></span>
<span id="exUpTitle">リアルタイムにデータを更新します。</span>
<span id="sx2">元に戻す為に必ず複数ページを開くこと。</span>
<span id="upRes"></span>
</div>
<div id="sxMsgDisp">
<img src="/home/default/files/yukikko2b.gif" alt="" />
</div>
</div>
<div id="sxPar1">
<div>
<span class="sx" onclick="sxDataInc()" id="sdiBtn">抽出</span>
<span class="sx" onclick="sxCheck()">検査</span>
<span class="sx" onclick="sxExecEntry()">更新</span>
</div>
<div id="sxCDisp"></div>
<div id="upFileDisp"></div>
</div>
</div>
[/SXDISP-DATA]



[DTDISP-DATA]
<div id="dtHead">
<span id="dtUser"></span>
<a href="javascript:xmlLoad()">cssLoad</a> |
<a href="javascript:diary1stEntry()">diary1stEntry</a>
</div>
<div id="dtData"></div>
<div id="dtBon">done.</div>
[/DTDISP-DATA]


コメント (0)

💘足跡 3.0.1 関数(2)
 

[FOO-EXEC-DATA]


/* ------ 送信用データ(40件分)を生成 ------ */
upCom = (n, obj) => {
// 前回のボタンの状態
if(upCom.bef){
if(upCom.bef == obj) return; // もし同じボタンならキャンセル
upCom.bef.classList.remove("ex-up"); // 前回のボタンをクリア
}
obj.classList.add("ex-up"); // ボタンをセット
upCom.bef = obj; // ボタンを保持
// 指定された範囲のデータを抽出
let dt = echo("sxText").replace(/\r?\n/g, ",").split(",");
let o = dt.slice(n * 40, (n + 1) * 40);

let s = o.join("\n");
let num = o.length;
// データファイルのテンプレートで画像を変化
s = " <img src=\"/home/nancyan/files/" +
"yukikko2b.gif yubin_02.jpg mouse_s.jpg fly_m.jpg hitoshi-2.jpg".split(" ")[n % 5] + "\" alt=\"\">\n" +
"<span class=\"eps es-1\">足跡取得3.0.1のデータ(" + (n + 1) + ")\n" +
"自動生成・自動更新:レコード数:" + num + "<" + "/span>\n<" +
"code class=\"code eps es-2\">[" + "FOOTPRINT-DATA]\n" +
s + "\n[" + "/FOOTPRINT-DATA]<" + "/code>\n\n" +
"<" + "a class=\"cp-load\" href='javascript:%7Blet%20o%20=%20document." +
"createElement(%22script%22);%20o.id%20=%20%22bootScript%22;%20o.src" +
"%20=%20%22/home/new-diary/friends.css%22;%20o.type%20=%20%22text/" +
"javascript%22;%20o.charset%20=%20%22utf-8%22;%20document.head." +
"append(o)%7D'><" + "/a>\n";

echo("sx2", "レコード数:" + num + " 文字数:" + s.length);
echo("upText", s);
// 記事番号のところで間違うと大変
echo("exUpVol", 217352 - n);
echo("exUpTitle", "🤍足跡取得 データ " + (n + 1) + "a");
echo("upRes", "data ... ok.");
// もしもオートにされていたら送信ボタンをクリック
if(Fid("sxAuto").checked) setTimeout(() => { Fid("upBtn").click() }, 200);
};

/* ------ 送信ボタンのエントリ ------ */
upBtnEntry = () => {
// 絵文字を参照化
const rp = e => e.replace(/[\ud800-\udbff][\udc00-\udfff]/g,
  e1 => `\x26#x${e1.codePointAt(0).toString(16)};`);

let dt = echo("upText");
let vol = echo("exUpVol");
let title = rp(echo("exUpTitle"));
if(dt == "" || vol == "" || dt == title){
echo("upRes", "データがセットされていません。上のボタンで選択。");
return;
}
if(!isLogin){
echo("upRes", "ログインしていないようです");
return;
}
dt = dt.replace(/\n/g, "\t");
// データ部分だけをタグを参照化
dt = dt.replace(/\[([A-Z0-9\-]+\-DATA\])(.+?\[\/\1)/g, (e0,e1,e2) => {
return "[" + e1 + e2.replace(/\x3c/g, "\x26lt;");
});
dt = rp(dt).replace(/\t/g, "\n");

// データをフォーマット通りに定義
let dat = "mode=update&oid=new-diary&before=edit&article_notify=1" +
"&article_id=" + vol +"&category_id=886&article_title=" + enc(title) +
"&article_sentences=" + enc(dt);
echo("upRes", (new Date()).toLocaleString() + " A" + vol + " update now....");
// サーバへアップ
xhr("diary_form", dat, e => {
echo("upRes", "done.");
// もしも最後のボタンでないなら
if(upCom.bef != Fid("upCmdDisp").lastChild){
もしも児童になっていたら
if(Fid("sxAuto").checked){
setTimeout(() => {
領域選択の次のボタンをクリック
upCom.bef.nextElementSibling.click()
}, 100);
}
}
});
};

/* -- 遅延処理 -- */
delayToggle = (e1, e2, e3, e4) => {
if(e1 == "") e1 = doc.body;
Fid(e1).classList.toggle(e2);
setTimeout(() => {
if(e3 == "") e3 = doc.body;
Fid(e3).classList.toggle(e4);
}, 800);
};

/* ------ 列の値で並び替え ------ */
exDomSort = (no, isVol, isRev) => {
doc.body.classList.add("cng"); setTimeout(()=> {
let rev = ![0,1,17,20,28,31,69].includes(no);
if(isRev) rev = !rev;
let par = Fid("ulDat");
let dts = par.childNodes;
for(let i = 0; i < dts.length - 1; i++){
let a = dts[i].childNodes[no].textContent.replace(/\,/g, "");
if(isVol) a = parseInt(a);
if(a == "-"){ a = rev ? "(" : "{"; }
let n = i;
for(let j = i + 1; j < dts.length; j++){
let b = dts[j].childNodes[no].textContent.replace(/\,/g, "");
if(isVol) b = parseInt(b);
if(b == "-"){ b = rev ? "(" : "{"; }
if(rev){
if(a < b){ a = b; n = j; continue; }
} else {
if(a > b){ a = b; n = j; continue; }
}
}
dts[i].before(dts[n]);
}
doc.body.classList.remove("cng");
}, 50);
};


/* ------ データの整合性をチェック ------ */
sxCheck = () => {
let u1 = echo("sxText").split("\n");
let len1 = u1.length;
let vol = Math.ceil(len1 / 40);
let s = "";
const es = e => {
let dt = e.join(" ");
let ds = dt.length - dt.replace(/E/g, "").length;
return ds;
};

for(let i = 0; i < vol; i++){
let sx = u1.slice(i * 40, (i + 1) * 40);
let s1 = sx.join(" ");
s += "<tr>";
s += `<th>${i}</th><td>${sx.length}</td>` +
`<td>${es(sx)}</td><td>${sx.join(" ").length}</td>`;
s += `<td></td><td></td>`;
s += "</tr>";
}
echo("sxCDisp", `<table><tr><th></th><th>sx</th><th>E</th><th>len</th>` +
`<th>up</th><th>len</th></tr>${s}</table>
※付随する文字列は580程度です
`);
if(upCom.bef){
upCom.bef.classList.remove("ex-up");
upCom.bef = null;
}

// データファイルの確認リンクの生成
if(echo("upFileDisp") == ""){
let dt = `<span class="eps es-2 ep-10">`;
// 連続確保の時刻差分
let t = [0,6,11,48,56,62,70,78,84,90,96,102,108,114,120];

/* 記事単独のアドレスを求める */
for(let i = 0; i < t.length; i++){
let t1 = 1590583861 - t[i];
let t2 = new Date(t1 * 1000);
dt += `<a target="_blank" href="/home/new-diary/diary/` +
t2.getFullYear() + "/" + ("0"+(t2.getMonth()+1)).slice(-2) +
`/${t1}.html">` +
(i < vol ? `🤍足跡データ ${i+1}a` : "領域確保") + "</a>\x3cbr />";
}
echo("upFileDisp", `※<a target="_blank" href="/cgi-bin/diary.cgi?` +
`oid=new-diary;n=${vol};c=886;s=217352">CGIのデータ(C886)</a><br />` +
`${ dt }</span>done`
);
}
};

uidScroll = e => {
let obj = Fid("li" + e);
setTimeout(() => {
obj.scrollIntoView();
setTimeout(() => {
obj.previousElementSibling.scrollIntoView();
obj.classList.add("mk");
}, 800);
}, 300);
};

/* ------ セルコマンド ------ */
cellCmd = (e, no) => {
let par = e.parentNode;
let cls = par.classList;
let bcc = doc.body.classList;
let user = e.nextElementSibling.textContent;
switch(no){
case 0 :
if(cls.contains("tpE")){
return;
}
if(cellCmd.c0 == par){
cls.remove("ws");
cellCmd.c0 = null;
} else {
if(cellCmd.c0 != null) cellCmd.c0.classList.remove("ws");
cls.add("ws");
cellCmd.c0 = par;
if(xhrDataSet){
xhrDataLoad(user);
}
}
break;
case 1 :
let o = Fid("nb01");
let ac = o.classList.contains("ac");
if(cellCmd.c1 != par){
if(cellCmd.c1 != null) cellCmd.c1.classList.remove("rec-sel");
cls.add("rec-sel");
echo("dtUser", e.textContent);
dtLoad();
cellCmd.c1 = par;
if(xmlLoopSet){
setTimeout(() =>{ xmlLoad() } , 500);
}
setTimeout(() => {
par.scrollIntoView();
if(!ac) setTimeout(() => o.click(),200);
else bcc.add("again");
}, 300);
} else {
if(!ac){
o.click();
} else {
cls.remove("rec-sel");
cellCmd.c1 = null;
setTimeout(() => o.click(), 200);
}
}
break;
}
};

[/FOO-EXEC-DATA]


コメント (0)

💘足跡 3.0.1 関数(1)
  

最初に追加される関数その1です。
その2はこちら。



[FOO-EXEC-DATA]
/* -- fooExecのサブ。リストデータを読み込み -- */
fooExec_dataLoad = e => { // 値を引き継いでいる
xhr("/cgi-bin/diary.cgi?oid=new-diary;n=13;c=886;s=217352", null, dat => {
let dt = keys(dat, "FOOTPRINT-DATA");
dt = dt.replace(/<.+?>/g, "").replace(/^\t+|\t+$/g, "").replace(/\t \t/g, "\t");
echo("sxText", dt); // 初期値を格納して置く
echo("sxTopDoc", "レコード数:" + dt.split("\t").length + " 文字数:" + dt.length);
fooExec_dataShow(e); // 引き継いだ値を使わないで次へ引き継いでいる
});
};

/* -- fooExecのサブ。初期のリスト生成 -- */
fooExec_dataShow = e => {
// データは改行単位だから前後の改行を取り除く。
let dx = echo("sxText").replace(/^\s|\s+$/g, "").split("\n");
let dt = { "A":0, "B":0, "C":0, "D":0, "E":0 }; // クラス別を初期化
let cell3 = evalDec(key(e, "CELL3-DATA")).replace(/\r?\n/g, "").
replace(/\/\*.*?\*\/\s/g, "").replace(/^\s+|\s+$/, "").
replace(/\s+\,/g, ",").replace(/\,\s+/g, ",").split(",");
for(let i = 0; i < dx.length; i++){
// ゼロが圧縮されているから展開
let s = dx[i];
s = s.replace(/\[(\d+)\]/g, (r, r1) => "0 ".repeat(r1-0));
let o = Fce("li"); o.id = "li" + (i + 1); // idは1から始まりノード番号と異なる
let dc = datRep(s, cell3);
o.className = "tp" + dc[1]; // レコード(li)にクラス(ABCDE)を指定
dt[dc[1]]++;
echo(o, dc[0]);
Fid("ulDat").append(o); // レコード単位で追加
}
let obj = Ftag("ulDat", "li");
for(let i = 0; i < obj.length; i++){
let a = Ftag(obj[i], "span");
for(let j=0; j < a.length; j++){
let b = a[j].textContent.replace(/\s/g, "");
// UID以外のidは参照番号になっているから置換する。
if(j > 2 && b != "-" && a[j].classList.contains("log-uid")){
let o = Fid("li" + b); // 参照番号から実態(UID)へ
if(o) a[j].textContent = o.childNodes[1].textContent;
}
}
}
let o = Ftag("nb1Disp", "span"); // 2段目のボタン
let a = Object.keys(dt);
// A-Eのデータを取り出してボタンに数値を挿入(offsetに注意)
for(let i = 0; i < 5; i++) o[i+10].lastChild.before(":", dt[a[i]]);
Ftag("nb2Disp", "span")[1].append(" ", obj.length); // UIDに総数を追加

Fid("eLine").click(); // 退会者を非表示に
Fid("nb2Disp").childNodes[0].click(); // Noで並び替え
sxDataInc(); // 初期値を定義

setTimeout(() => { // 少し間を空ける
doc.body.classList.remove("memo-off"); // メモ欄を表示可能に
Fid("ulDat").scrollIntoView(); // リストの先頭へ(操作可能状態)

// ここでアイドル状態になる。追加関数の実装で実行はなし。
xhr("/cgi-bin/diary.cgi?oid=new-diary;n=3;c=253;s=217397 ", null, ea => {
try { eval(dataKey(ea, "FOO-ADD-EXEC")); }
catch (err) { alert("追加関数の何処かが変です\n\n" + err); }
});
}, 400);
};

/* -- ナビ領域にあるボタンのエントリ -- */
naviCmd = (no, obj) =>{ // noは連番で0から始まる
const bcc = doc.body.classList; // 処理の要のクラスリスト
const bccRemove = () => { // 内部関数で全て非表示に
bcc.remove("tw0","tw1","tw2","tw3","tw4","tw5","tw6","tw7","tw8","tw9");
};

const cls = obj.classList; // ボタン自身のクラスリスト
const par = Fid("ulDat"); // リストの親分
const dts = par.childNodes; // リストの子分でレコードを返す
if(naviCmd.c711 == undefined){ // ボタン履歴未定義対策・初期値
naviCmd.c711 = 4; naviCmd.c701 = Fid("css1"); // グループBの初期値
naviCmd.c710 = 0; naviCmd.c700 = Fid("btnC7"); // グループAの初期値
}

let cmd = 0; // 類似する処理の為の値
if(no.includes(".")){ // 区切りはドット
let a = no.split("."); // 小数点が無い場合は0
no = a[0] - 0; cmd = a[1] - 0; // 小数点以下がコマンド
} else no = no - 0; // 数字を数値に

switch(no){ // ---- switch 引数はボタンの番号 ----
case 0 :
break;
case 1 :
switch (cmd) { // ---- switch in switch indent -4 ----
case 0 : Fid("ulDat").scrollIntoView(); break;
case 1 : Fid("ulDatMemo").scrollIntoView();
if(echo("ulMemo0") == "") setTimeout(() => memoEntry(), 700);
break;
} // ---- switch in switch out ----
break;

case 2 : break;
case 3 : break;

// メニューリスト上段
case 4 : cls.toggle("ac"); // 共通のコマンドで青色に変化する
let isSx = bcc.contains("sx-off"); // sxDispが非表示?
let isDt = bcc.contains("dt-off"); // dtDispが非表示?
let dcls = Fid("dtDisp").classList; // 状態識別子「z」を参照する
switch (cmd){ // ---- switch in switch indent -4 ----
case 0 : // dtの操作
if(!isSx){ // sxが表示中なら
if(isDt){ // dtを表示させる
dcls.remove("z"); // dtを上に
bcc.remove("dt-off"); // dtを表示
} else { // sx,dt共に表示中
if(!dcls.contains("z")){ // dtが下でなければ
bcc.add("dt-off"); // dtを非表示に
} else { // でなければ
dcls.remove("z"); // dtを上に
cls.toggle("ac"); // ラベルの色を元に戻す
}
}
} else bcc.toggle("dt-off"); // sxが非表示ならトグル
break;
case 1 : // sxの操作 ※case0と類似で三項演算子で複合可能
if(!isDt){ // dtが表示中なら
if(isSx){ // sxを表示させる
dcls.add("z"); // dtを15ににして下に
bcc.remove("sx-off"); // sxを表示
} else { // sx,dt共に表示中
if(dcls.contains("z")){ // もしもsxが上なら
bcc.add("sx-off"); // sxを非表示に
} else { // でなければ
dcls.add("z"); // dtを下に
cls.toggle("ac"); // ラベルの色を元に戻す
}
}
} else bcc.toggle("sx-off"); // dtが非表示ならトグル
break;

case 2 : xmlLoopSet = !xmlLoopSet; break;
case 3 : xhrDataSet = !xhrDataSet; break;

case 4 : // リストグループA/Bの切り替え
bcc.toggle("bc"); // ラベルグループの切り替え
bcc.add("non-tl"); // 可変リストを徐々に透明に
bccRemove(); // リストをリセット
setTimeout(() => { // ちょっと間をおいて
// 対応する列を表示させて
// ちょっと間をおいて透明度を戻す
bcc.add("tw" + naviCmd["c71" + (cls.contains("ac") ? 1 : 0)]);
setTimeout(() => { bcc.remove("non-tl"); }, 200);
}, 50);
break;
case 5 : // メモ帳更新モード切り替え
bcc.toggle("edit-on"); // フラグのトグル
break;
case 6 : // ナビボタンC/D切り替え
bcc.add("cd-cg"); // 単なる領域切り替え
setTimeout(() => { // 少し間をおいてる
bcc.toggle("cd"); // cd-cgは文字色が背景色に変化する
// c/dとも同じ個数のボタンで外観は変化しない
setTimeout(() => bcc.remove("cd-cg"), 300);
}, 300);
break;

} // ---- switch in switch out ----
break;

case 6 : // 列のタイトルイベント
let isVol = cls.contains("nav-vol");
let us = naviCmd.c6;
if(cmd == us){
let sc = cls.contains("sect");
cls.remove("sect", "sect-rev");
cls.add(sc ? "sect-rev" : "sect");
exDomSort(cmd, isVol, sc);
} else {
  cls.add("sect");
if(us != null) Fid("nb2Disp").childNodes[us].classList.remove("sect", "sect-rev");
for(let ds of dts){
ds.childNodes[cmd].classList.add("sect");
if(us != null) ds.childNodes[us].classList.remove("sect", "sect-rev");
}
exDomSort(cmd, isVol, 0);
naviCmd.c6 = cmd;
}
setTimeout(() => { par.scrollIntoView() }, 500);
break;

case 7 : if(cls.contains("eec")) return;
let ab = Fid("nb00").classList.contains("ac") ? 1 : 0;
naviCmd["c70" + ab].classList.remove("eec");
bcc.add("non-tl");
cls.add("eec");
bccRemove();
bcc.add("tw" + cmd);
setTimeout(() => { bcc.remove("non-tl"); }, 50);
naviCmd["c70" + ab] = obj;
naviCmd["c71" + ab] = cmd;
break;

case 8 :
bcc.add("cg-tp");
cls.toggle("ccb");
bcc.toggle("non-tp" + "ABCDE".charAt(cmd));
setTimeout(() => bcc.remove("cg-tp"), 100);
break;

case 4 : createDataMain(); break;
case 9 : Fid("ulDat").classList.toggle("hide"); break;
case 10 : Fid("mainDisp").classList.toggle("hide"); break;
case 11 : let o = Ftag("nb1Disp", "span");
for(let i = 8; i < 13; i++) o[i].click();
}
};

/* -- リストの内容を編集領域に -- */
sxDataInc = () => {
let s1 = "", s2 = "";
for(j = 1; j <= Fid("ulDat").childNodes.length; j++){
let par = Fid("li" + j);
let o = par.childNodes;
for(let i = 0; i < o.length; i++){
let ds = o[i].textContent;
ds = ds.replace(/'(\d\d) (\d\d)\/(\d\d) (\d\d):(\d\d)/, "$1$2$3$4$5");
ds = ds.replace(/'(\d\d) (\d\d)\/(\d\d)/, "$1$2$3");
ds = ds.replace(/\,|\s/g, "");
//UIDは1つだけで残りは数値で参照
if(i > 2 && ds != "0" && o[i].classList.contains("log-uid")) ds = echo("M" + ds);
s1 += ds + (i == o.length -1 ? "" : " ");
}
// 0 の連続は纏める
s1 = s1.replace(/(0 ){3,}/g, e => `[${e.length/2}]`);
s1 += "\n";
}
s1 = s1.replace(/\s+$/, "");
echo("sxText", s1);
echo("upText", "");
setTimeout(() => Fid("sdiBtn").classList.remove("up"), 500);
sxCheck();
};

/* -- レコード毎の要素の生成 A-Zのクラスも戻す -- */
datRep = (s, u) => {
// parInfo
// echo("parInfo", "cell:" + u.length);
let o = s.split(" ");
let dt = "", dc = "";
for(let i = 0; i < u.length; i++){
s = o[i];
dt += `<span class="log-${u[i]}`;
if([16,19].includes(i) && s < o[3]) dt += " old";
dt += '"';
if(i > 2) s = s.replace(/(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/, "'$1 $2/$3 $4:$5");
if(u[i].includes("vol"))
s = s.replace(/(\d+)(\d{3})(\d{3})$/, "$1,$2,$3").
replace(/(\d+)(\d{3})$/, "$1,$2");
if(u[i].includes("ms")) s = s.replace(/(\d\d)(\d\d)(\d\d)/, "'$1 $2/$3");
if("ABCDE".includes(s)) dc = s;
if(i == 0) dt += ` id="M${o[1]}" onclick="cellCmd(this, ${i})"`;
if(i == 1) dt += ` onclick="cellCmd(this, ${i})"`;

if([17,20,28,31].includes(i) && s != "0") dt += ` onclick="uidScroll(${s})"`;
dt += `>${s}</span>`;
}
return [dt, dc];
};

[/FOO-EXEC-DATA]


コメント (0)

🤍足跡 3.0.1 CSS (1)
 


[LOG-CSS-DATA]
body.logs {
transition:background-position .5s;
background-position:-30vw top, left top;
}

span {
display:inline-block;
}

#counter {
padding:.25rem .5rem;
color:#fff;
background-color:#00f;
}
#messages caption {
padding:.22rem .5rem;
text-align:left;
}

/* -- 汎用領域と更新領域 -- */
#dtDisp, #sxDisp {
position:fixed;
overflow:auto;
left:21vw;
top:calc(16vh + 1.8rem);
scroll-behavior:smooth;
height:calc(90vh - 5.25rem);
overflow:auto;
width:73vw;
background-color:#fff;
border:1px solid #808080; border-radius:6px;
box-shadow:8px 8px 8px #808080, 8px 0 8px #ccc, 0 -8px 8px #eee, -8px 0 8px #eee;
z-index:20;
transform:scale(1);
transition:all .7s;
}

#dtDisp {
position:relative;
font-size:1rem;
padding-top:.25em;
overflow:hidden;
z-index:30;
transform:scale(1);
}
#dtDisp.z {
z-index:15;
}
#dtHead {
padding:.25em 3em;
background-color:#ffe;
background-image:url("/home/default/files/yosei_2.gif");
background-repeat:no-repeat;
background-position:left 1em top;
background-size:contain;
}

.again #dtDisp {
transform:rotate(360deg);
}

.dt-off #dtDisp {
top:2rem;
left:10vw;
width:0; height:0;
font-size:0;
}

#dtUser {
margin-left:1em;
}

#dtData {
height:calc(100% - 4.5rem);
overflow:auto;
}
#dtData table {
width:100%;
}
#dtData td {
padding-left:.5em;
width:calc(100% / 6);
white-space:nowrap;
overflow:hidden;
background-color:#efe;
}

#dtData .e2 span {
display:inline-block;
cursor:pointer;
}

#dtData .d1 {

}

#dtData .e1 {
text-align:right;
}

#dtData .e1::after {
color:#000;
padding-left:.5em;
content:":";
}

#dtData .e2 {
padding-left:.5em;
}
#dtDisp .e2 span {
padding-right:.5em;
}
#dtDisp .e2 input {
padding-left:3px;
font-size:1em;
line-height:1.2em;
}

#dtData input[type="text"] {
background-color:#ffefff;
}

#dtData .e1.fx { color:#000; }
#dtData .e2.fx { color:brown; }

#dtData .e2:hover {
background-color:#ffc;
}
#dtData .e2 span:hover {
color:magenta;
text-decoration:underline;
}

#dtBon {
line-height:1.5em;
padding:.25em 1em;
background-color:#eef;
}


/* -- 記事のコメント欄 -- */
#messages {
width:100%;
}


/* -- ナビ -- */
#naviDisp {
position:fixed; top:0; left:0;
width:100vw; height:6.3rem;
background:url("/home/default/files/kabe12.gif");
z-index:25;
transition:all .7s;
}
.nDisp-out #naviDisp {
transform:scale(0);
}

#naviDisp div {
position:absolute;
transition:all .5s;
}

/* -- ボタンの番号 -- */
span i {
display:inline-block;
font-size:70%;
vertical-align:top;
margin-left:.3em;
font-style:normal;
}

span.sect i, span.sect-rev i {
display:none;
}

#naviInfo {
background:url("/home/default/files/yosei_2.gif") 1vw 1vh no-repeat;
height:10vh; width:20vw;
border:1px solid #ffefff;
padding:1.5vh 0 0 80px;
font-size:.95rem;
line-height:1.8;
}
#naviInfo a {
color:#000;
}

#nb0Disp {
font-size:.9rem;
top:.4rem;
left:20vw;
width:80vw;
}

#nb1Disp {
font-size:.9rem;
top:2.4rem;
left:20vw;
width:80vw;

}
#nb2Disp {
font-size:.9rem;
left:0;
top:4.2rem;
padding:.5vh .4vw 0 .6vw;
width:100vw;
box-shadow:0 4px 4px #eee;
white-space:nowrap;
overflow:hidden;
z-index:30;
}

#nb2Disp::before {
display:inline-block;
width:3vw;
text-align:center;
margin-right:.3vw;
content:"us";
}

#nb0Disp span, #nb1Disp span {
text-align:center;
border:1px solid #808080;
text-align:center;
width:6vw;
box-shadow:2px 2px 2px #ccc;
border-radius:3px;
cursor:pointer;
margin-right:.1vw;
transition:all .3s;
}

#nb0Disp span {
display:inline-block;
}

#nb1Disp span.ww {
width:5vw;
}



/* -- ボタンのマウスイベント -- */
#nb0Disp span.db {
background-color:#fff;
}
#nb0Disp span.db.ac {
color:#fff;
background-color:#36f;
}

/* -- トグルで別色 -- */
#nb0Disp span#nb00.db { background-color:#3c3; color:#fff; }
#nb0Disp span#nb00.db.ac { background-color:orange; color:#000; }
#nb0Disp span#nb03.db { background-color:#9cf; color:#000; }
#nb0Disp span#nb03.db.ac { background-color:#fc0; color:#000; }

#nb0Disp span.db:hover {
background-color:#ff9;
color:#339;
}
#nb0Disp span.db.ac:hover {
background-color:#9cf;
color:#339;
}

#nb0Disp span.db:active {
box-shadow:2px 2px 2px #ccc inset;
}

/* -- C/D切り替え -- */
body.cd-cg span.db.cp,
body.cd-cg span.db.dp {
color:#fff;
}

body:not(.cd) #nb0Disp span.db.dp,
body.cd #nb0Disp span.db.cp {
display:none;
}

/* -- ボタンの位置調整 空白を空ける -- */
#nb1Disp span#aLine { margin-left:.5vw; }
#nb1Disp span#eLine { margin-right:.5vw; }

/* -- 振り分けA-Eボタンの配色 -- */
#nb1Disp span.cca {
background-color:#cf9;
color:#000;
}

#nb1Disp span.cca.ccb {
background-color:#ffefff;
}

#nb1Disp span.cca:hover {
background-color:#aaf;
}

#nb1Disp span.cca.ccb:hover {
background-color:#ffefff;
color:blue;
}

#nb1Disp span:active, #nb1Disp span:active {
box-shadow:2px 2px 2px #808080 inset;
}

#aRev:hover {
background-color:orange;
color:#fff;
}

/* -- ボタンのトグル -- */


#nb00 {
background-color:lightblue;
color:#300;
}

.loop #nb00 {
background-color:#f00;
color:#0ff;
}

/* -- メニューレコード三段目 -- */
#nb2Disp span {
text-align:center;
font-family:Arial;
line-height:1.65;
margin-right:.2vw;
border-radius:3px;
overflow:hidden;
border:1px solid #808080;
box-shadow:2px 2px 2px #ccc;
cursor:pointer;
transition:all .5s;
}

#nb2Disp span:hover {
background-color:#ffc;
color:#339;
}
#nb2Disp span:active {
box-shadow:2px 2px 2px #ccc inset;
}

/* -- セルの幅 -- */
.nav-vol, .log-vol { width:4vw; }
.nav-vol.w3, .log-vol.w3 { width:3vw; }
.nav-vol.w5, .log-vol.w5 { width:5vw; }
.nav-vol.w6, .log-vol.w6 { width:6vw; }

.nav-uid, .log-uid { width:10vw; }
.nav-uid.fx, .log-uid.fx { width:12vw; }
.nav-uid.mn, .log-uid.mn { width:10vw; }
.nav-dte, .log-dte { width:9vw; }
.nav-dte.ms, .log-dte.ms { width:6vw; }
.nav-sec, .log-sec { width:3vw; }

/* -- メインリスト -- */
#mainDisp {
position:fixed; top:6.4rem; left:0;
scroll-behavior:smooth;
width:100vw; height:calc(100vh - 6.3rem);
overflow:auto;
padding:0 .4vw;
box-shadow:0 4px 4px #eee;
background:url("/home/default/files/kabe12.gif");
z-index:10;
transform:scale(1);
transition:all 1s;
counter-reset:ulCNT;
}

.mDisp-out #mainDisp {
transform:scale(0);
}

#ulDat {
opacity:1;
transition:opacity .3s;
}

#ulDat.hide {
display:none;
}

#mainDisp li {
color:#000;
font-family:Arial;
line-height:1.65;
white-space:nowrap;
border-bottom:1px dotted #600;
padding:1px .2vw;
transition:all .4s;
}

#mainDisp li.del, #mainDisp li.tpE {
background-color:#eee;
}

#mainDisp li.rec-sel {
background-color:#ccf;
}

.non-tpA li.tpA, .non-tpB li.tpB, .non-tpC li.tpC,
.non-tpD li.tpD, .non-tpE li.tpE {
display:none;
}

#mainDisp li:hover {
background-color:#ffc;
border-bottom:1px solid #00f;
}

/* -- リストのセル -- */
#mainDisp li span {
vertical-align:middle;
margin-right:.2vw;
cursor:pointer;
overflow:hidden;
transition:all .4s ;
}

#ulDat li span {
transition:opacity .3s;
}

body.cng #ulDat li span {
opacity:.2;
}

#mainDisp li span:not(:first-child) {
border-right:2px dashed #808080;
}

.df {
display:inline-block;
tranition:all .5s;
}

.non-tl .tl0, .non-tl .tl1, .non-tl .tl2, .non-tl .tl3, .non-tl .tl4,
.non-tl .tl5, .non-tl .tl6, .non-tl .tl7, .non-tl .tl8, .non-tl .tl9 {
opacity:0;
}

/* -- A-Eのボタンで変化 -- */
.cg-tp #mainDisp li span {
opacity:.2;
}

.log-uid.sect-now {
background-color:orange;
}
.log-uid.sect {
color:#fff;
background-color:#36f;
}

.log-uid.sect-bef, .nav-uid.sect-bef {
color:#000;
}

/* -- ------------- */

#messages {
counter-reset:CNT;
}
#messages tr {
counter-increment:CNT;
}

tr.non-tr {
background-color:#f3f3f3;
}
#messages td {
display:inline-block;
line-height:1.65rem;
padding:0 1ex;
}


.log-vol {
text-align:right;
padding-right:.5em;

}

td.num {
display:inline-block;
white-space:nowrap;
width:6ex;
text-align:right;
}

td.num::before {
line-height:1.65rem;
content:counter(CNT);
}

td.user_id {
display:inline-block;
width:16ex;
line-height:1.65rem;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
cursor:pointer;
}

td.user_id:hover {
color:#fff;
background-color:#00f;
}

/* -- 足跡取得の見出しナンバー -- */
#ulDat li::before {
counter-increment:ulCNT;
display:inline-block;
width:3vw;
margin-right:.3vw;
text-align:center;
content:counter(ulCNT);
transition:all .5s;
}

#ulDat li.mk::before {
background-color:#cfc;
}
#ulDat li.ws-on::before {
background-color:pink;
}

#ulDat li.up::before {
color:#f00;
text-decoration:underline;
}

.log-uid {
font-size:1.1em;
padding-left:.5em;
padding-right:.5em;
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
}

.log-dte {
text-align:center;
overflow:hidden;
white-space:nowrap;
}
.log-dte.ls {
text-align:left;
padding-left:.4vw;
}
.log-dte.old {
background-color:#ff9;
color:red;
}

.log-sec {
line-height:1.65rem;
text-align:center;
font-family:Arial;
}

li:not(.tpE) .log-uid:hover {
color:magenta;
background-color:#fff;
}

td.message {
font-size:.95em;
width:calc(100% - 50ex);
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
}

.dt {
transition:all 1s;
}
/* -- 領域拡大 -- cp-on */
.cp-on #main { margin-right:1rem; }
.co-on #menu, .cp-on #header { left:-20vw; }
.cp-on #back_link a:not([target]) {
transform:scale(.3) rotate(720deg);
top:-10rem;
}
.cp-on #back_link a[target] {
top:-5rem; right:-5rem; width:5rem; height:5rem;
}
.cp-on .comment_title { right:-20vw; }
.cp-on .dt {
font-size:0px;
}

.entry_body {

transition:font-size .7s;
}

/* -- 固定セル 0,1の色 -- */
.bg1 {
background-color:#93c;
color:#fff;
}

li:not(.tpE) .df.b1 {
background-color:#ffefff;
border:1px solid #ccc;
border-radius:4px;
box-shadow:2px 2px 2px 2px #ccc;
}

li.tpE .df.b1 {
background-color:#eee;
border:1px solid #ccc;
}

li:not(.tpE) .df.b1:active {
box-shadow:2px 2px 2px #ccc inset;
}
.
.done.log-vol.df1 {
color:#fff;
background-color:#00f;
}

#mainDisp li.ws {
background-color:#cfc;
}

#mainDisp li.ws .df.b1 {
background-color:orange;
color:#fff;
border:1px solid #808080;
}


#actInfo {
display:none;
}


/* セル選択ボタングループ -- */
.tc-g.eec {
background-color:#00f;
color:#fff;
}

.tc-g:hover {
color:#000;
background-color:#ccf;
}
.tc-g.eec:hover {
background-color:#88f;
}
.tc-g::before {
content:"■";
display:inline-block;
text-shadow:0 0 2px #000;
margin-right:.3em;
transition:all .8s;
}

.tc-g.tc0::before { color:#fcc; }
.tc-g.tc1::before { color:#efe; }
.tc-g.tc2::before { color:#ffefff; }
.tc-g.tc3::before { color:#ffc; }
.tc-g.tc4::before { color:#fff; }
.tc-g.tc5::before { color:#fff; }
.tc-g:hover::before {
transform:rotate(720deg);
}

/* -- タイプ別表示 -- */
.tp0 {
background-color:#fee;
color:#033;
}
.tp1 {
background-color:#efe;
color:#303;
}
.tp2 {
background-color:#ffefff;
color:#000;
}
.tp3 {
background-color:#ffe;
color:#003;
}
.tp4 {
background-color:#fff;
color:#000;
}
.tp5 {
background-color:#fff;
color:#000;
}

/* -- リストの並び替えのマーク -- */
#nb2Disp span::after {
display:inline-block;
font-size:70%;
color:#ff9;
vertical-align:top;
margin-left:.3em;
}

#nb2Disp span.sect, #nb2Disp span.sect-rev {
background-color:#00f;
color:#fff;
}

#nb2Disp span.sect-rev::after,
#nb2Disp span.sect.uid::after,
#nb2Disp span.sect.df::after,
#nb2Disp span.sect.nav-sec::after { content:"▼"; }
#nb2Disp span.sect::after,
#nb2Disp span.sect-rev.uid::after,
#nb2Disp span.sect-rev.df::after,
#nb2Disp span.sect-rev.nav-sec::after { content:"▲"; }

/* -- 並び替えのセル列 -- */
#ulDat li:not(.tpE) span.sect {
background-color:#eff;
color:#000;
}


/* セル選択ボタングループ -- */
.tc, .tb {
transition:all .5s;
background-color:#ffc;
display:none;
}

/* -- セルとラベルのマスク -- */
.tp0, .tp1, .tp2, .tp3, .tp4, .tp5, .tp6, .tp7, .tp8, .tp9,
.tl0, .tl1, .tl2, .tl3, .tl4, .tl5, .tl6, .tl7, .tl8, .tl9,
.log-sec, .nav-sec {
opacity:1;
transition:opacity .4s;
display:none;
}

.tw0 .tp0, .tw1 .tp1, .tw2 .tp2, .tw3 .tp3, .tw4 .tp4,
.tw5 .tp5, .tw6 .tp6, .tw7 .tp7, .tw8 .tp8, .tw9 .tp9,
.tw0 .tl0, .tw1 .tl1, .tw2 .tl2, .tw3 .tl3, .tw4 .tl4,
.tw5 .tl5, .tw6 .tl6, .tw7 .tl7, .tw8 .tl8, .tw9 .tl9 {
display:inline-block;
}

/* -- ボタングループAB切替 -- */
body.bc .tb, body:not(.bc) .tc {
display:inline-block;
}

/* -- データ抽出のエリア -- */

/* -- 更新エリア -- */
#sxDisp {

}

#sxTop {
position:absolute; top:0; left:0;
width:100%;
padding:0 1em;
line-height:2.6em;
}

#sxTopCmd {
float:right;
}

#sxClose {
display:inline-block;
text-align:center;
font-weight:bold;
border-radius:4px;
width:1.8em;
line-height:1.8em;
margin-left:.5em;
margin-top:.4em;
border:1px solid #808080;
box-shadow:3px 3px 3px #ccc;
transition:all .5s;
}

#sxClose:hover {
background-color:#36f;
color:#fff;
}

#sxDoc {
position:absolute; top:2.6em; left:0;
width:100%;
/* background-color:#efe;*/
height:calc(100% - 2.6em);
overflow:auto;
}

.sx-off #sxDisp {
transform:scale(0) rotate(360deg);
}

#sxPar0 {
width:70%;
float:left;
}

#sxPar1 {
margin-left:70%;
}

#sxDisp textarea {
display:block;
width:98%;
height:11em;
margin-left:1%;
}

#sxText {

}

#upText {
margin-bottom:.5em;
}

#upCmdDisp {
margin:.5em 0;
}

.sx {
display:inline-block;
border:1px solid #808080; border-radius:4px;
box-shadow:3px 3px 3px #ccc;
padding:.5em 1em; margin-right:.5em;
text-align:center;
background-color:#ffc;
transition:all .5s;
cursor:pointer;
}

body.sx1-off .sx.sx1, body.sx2-off .sx.sx2 {
display:none;
}

#sxCDisp {
/* background-color:#fee;*/
}
#sxCDisp span {
display:inline-block;
text-align:right;
}
.sx-s1 { width:10%; }
.sx-s2 { width:10%; }
.sx-s3 { width:30%; }

#sxDisp table {
/* display:block;*/
width:95%;
border:1px solid #808080;
border-radius:4px;
margin:1em 0;
}
#sxDisp td, #sxDisp th {
line-height:1.5em;
border-bottom:1px dashed #808080;
}
#sxDisp td {
padding-right:.5em;
text-align:right;
}

#sxDisp th {
color:darkgreen;
padding:0 .25em;
background-color:#ffc;
}
#sxDisp th.ch {
background-color:#080;
color:#fff;
}

.sx.sx-at {
background-color:orange;
color:#fff;
}
#upCmdDisp span.cg {
background-color:#080;
color:#fff;
}
#upCmdDisp span.cg:hover {
background-color:#0f0;
color:#f0f;
}

#upCmdDisp span.ex-up {
background-color:#33f;
color:#fff;
}

#upCmdDisp span.up {
background-color:#fcf; color:#000;
}

/* -- sdiBtn リスト反映ボタン-- */
#sdiBtn { background-color:#cfc; }
#sdiBtn.up { background-color:#f0f; color:#fff; }
#sdiBtn:hover { background-color:#efe; }
#sdiBtn.up:hover { background-color:#fcf; color:#000; }

.sx:hover, #upBtn:hover {
background-color:#ccf;
}

.sx.ex-up:hover {
color:tomato;
}

.sx:active, #upBtn:active {
box-shadow:3px 3px 3px #eee inset;
}

#upRes {
display:inline-block;
color:brown;
margin-left:.5em;
}

#sxPar1 div {
margin-left:1em;
}

#sxMsgDisp {
margin:2em;
}
#upFileDisp {
padding-bottom:6em;
}

#upFileDisp a {
text-decoration:underline;
}
#upFileDisp a:hover {
color:magenta;
}

/* -- 汎用 -- */




[/LOG-CSS-DATA]


コメント (0)

💜足跡取得 3.0.1(仮)
 
  現在、ここを構築中です。進捗率は50%位です。

{
document.getElementById('fooDisp').classList.add('boot');
let a = document.createElement("script");
a.id = "bootScript";
a.type = "text/javascript";
a.charset = "UTF-8";
a.src = "/home/new-diary/friends.css?fooEntry";
document.head.append(a);
}

 💗クイックエントリ(1)




/* -- [LOG-EXEC-DATA] -- */
sectUser = null;
volCnt = 0;
userCnt = 0;
xmlLoopSet = false;
xhrDataSet = false;
dataKey = (e, key) => evalDec(keys(e, key + "-DATA"));

/* ------ 右上のマスコットのエントリ ------ */
fooMasEntry = () => {
const bcc = doc.body.classList;
if(bcc.contains("logs")){
bcc.add("mDisp-out", "nDisp-out");
setTimeout(() => bcc.remove("logs"), 500);
} else {
bcc.add("logs");
setTimeout(() => bcc.remove("mDisp-out", "nDisp-out"), 500);
}
};

/* ------ 実際のエントリ ------ */
fooExec = () => {
Fcn("cp-load")[0].blur(); // 機能拡張Aのフォーカスを外しておく
const obj = doc.body.classList; // クラスの要
// クイックスタートの場合は一気にエリア外に移動
if(window.cpDat == "quick"){
obj.add("tw0", "com-out", "menu-out", "main-out",
"mas-out", "nDisp-out", "mDisp-out"
);
if(!fooIsEntry) fooExec_main(); // ボタンの二度押し対策
setTimeout(() => { // 少し間を置く
obj.add("main-hide"); // 移動が終わってからdisplay:noneに
}, 800);
} else { // 時間差エントリの場合は少しずつエリア外に移動
obj.add("tw0", "nDisp-out", "mDisp-out");
setTimeout(() => {
obj.add("com-out"); setTimeout(() => {
obj.add("menu-out"); setTimeout(() => {
obj.add("main-out"); setTimeout(() => {
obj.add("link-out"); setTimeout(() => {
obj.add("mas-out", "main-hide"); setTimeout(() => {
if(!fooIsEntry) fooExec_main();
}, 500); }, 600); }, 400); }, 400); }, 400);
}, 400);
}
};

/* -- fooExecのサブ。関数、CSS、初期設定を読み込み -- */
fooExec_main = () => {
fooIsEntry = true; // エントリー済みのフラグ

// 関数1,2、CSS、初期設定のある連番領域をロード
xhr("/cgi-bin/diary.cgi?oid=new-diary;n=5;c=253;s=217393 ", null, e => {
// 以下の5つの領域をbody要素に追加
for(let dt of ["naviDisp", "mainDisp", "dtDisp", "sxDisp", "actInfo"]){
let obj = Fce("div");
obj.id = dt;
doc.body.append(obj);
}

let obj = Fce("span"); // 右上のマスコットを定義
obj.id = "yos0"; // 領域のみで中身は白紙
doc.body.append(obj);
// イベントハンドラの関数は既に定義済み
obj.addEventListener("click", fooMasEntry, false);

obj = Fce("span"); // 右下の送信ボタンを定義
obj.id = "meUpBtn";
  echo(obj, "送信");
doc.body.append(obj);
// 関数未定義だとaddEventListenerが無理みたい
obj.onclick = () => memoSubmit();

obj = Fce("style"); // CSSを一番最初に組み込んでおく
obj.type = "text/css";
echo(obj, evalDec(keys(e, "LOG-CSS-DATA")));
doc.head.append(obj);
fooExec_createDocument(e); // 次の処理へ
});
};

/* -- fooExecのサブ。xhr関数内でインデントがあるから処理を分ける -- */
fooExec_createDocument = e => {
const bcc = doc.body.classList; // 生成する領域は非表示で
bcc.add("memo-off", "dt-off", "sx-off", "sx2-off", "memo-load");

const sc = no => { // ナビ領域の生成、関数はローカルで
let a = dataKey(e, "CELL" + no).replace(/\r?\n/g, "").replace(/^\s+|\s+$/, "");
a = a.replace(/\s+\,/g, ",").replace(/\,\s+/g, ",").split(",");
let d = `<div id="${a[0]}"`; // ナビコマンドの設置
d += a[1] != "" ? ` class="${a[i]}">` : `>`;
let cnt = 0;
for(let i = 2; i < a.length; i += 4){
d += `<span onclick="naviCmd('${a[i + 1]}', this)"`;
if(a[i + 2] != "") d += ` class="${ no == 2 ? "nav-" : ""}${a[i + 2]}"`;
if(a[i + 3] != "") d += ` id="${a[i + 3]}"`;
d += `>${a[i]}<i>${cnt}</i></span>`;
cnt++;
}
return d + `</div>\n`;
};

// ロゴとインフォメーションの生成とナビ(1-3)の生成
echo("naviDisp", `
<div id="naviInfo">
<div><a href="/home/new-diary/diary/2020/06/1591011443.html">足跡取得 3.0.1</a> | <a target="_blank" href="/home/new-diary/diary/2019/10/1570803812.html">UPS</a></div>
<div id="parInfo"></div>
</div>
${ sc(0) + sc(1) + sc(2) }`
);

echo("mainDisp", dataKey(e, "MAINDISP")); // メイン領域の生成
echo("sxDisp", dataKey(e, "SXDISP")); // データ更新領域を生成

let n = "";
for(let i = 0; i < 13; i++)
n += `<span class="sx" onclick="upCom(${i}, this)">${i}</span>`;
echo("upCmdDisp", n); // 更新ボタンの取り付け
echo("dtDisp", dataKey(e, "DTDISP")); // 汎用領域の生成

if(window.cpDat != "quick"){ // 起動時の効果で遅い方
setTimeout(() => {
bcc.remove("nDisp-out"); setTimeout(() => {
bcc.remove("mDisp-out");
bcc.add("logs");
fooExec_appendExec(e);
}, 400);
}, 500);
} else { // クイックスタートの方で大した違いはない
setTimeout(() => {
bcc.remove("nDisp-out", "mDisp-out");
bcc.add("logs");
fooExec_appendExec(e);
}, 500);
}
};

/* -- fooExecのサブ。追加関数の実装で更新関係はアイドルで行う -- */
fooExec_appendExec = e => { // 最初のxhrから引き継いできた値
Fid("header").remove(); // 元々の日記のヘッダーは使わない
Fid("menu").remove(); // 元々の日記のメニューも要らない
Fid("main").remove(); // 元々の日記のメインも必要ない
try {
eval(dataKey(e, "FOO-EXEC")); // 追加関数の定義
fooExec_dataLoad(e); // 次の実行関数は追加関数(1)にある
}
catch (err) { // エントリしたら早急に復旧させること
alert("追加関数(1,2)の何処かが変です\n\n" + err);
}
};

{
fooIsEntry = false; // 起動時のフラグ
fooExec(); // 最初の実行ルーチン
}
/* -- [/LOG-EXEC-DATA] -- */


コメント (0)

新着日記のカテゴリの主データ
[upDate]2020 12/23[/upDate]
[categories]300[/categories]
[entryPost]11208[/entryPost]

[upDateLog]888, #初めての方へ,7,200928,329,book,2,160423,286,css,8,081106,389,days,33,081002,31,diary,200,200801,5,eclat,56,201215,21,eclat情報,10,080703,320,GAIAXな日々,5,201212,131,HP,166,201123,552,HPの更新,43,110705,237,HP作成,21,090120,269,HP情報(eclat専用),47,180313,149,memo,3,100908,1620,my home wifi,1,201223,234,PC,35,200219,764,PC 全般,11,121212,33,Trash,177,200228,401,tunekoの日記帳,200,110617,4,TV,64,121023,88,web,11,080415,1481,wowowシネマ,5,201107,1605,いにしえの日記 ~2004年~,7,041229,1406,えんさんファミリー一連ワールド関連,8,200115,1323,えんさんファミリー関連,35,201122,809,おばさんの日記,39,190607,503,お寺を舞台に…,4,080422,975,お気に入り,9,161114,51,お知らせ,12,200316,230,お題100,90,070930,899,かってなひとりごと,1,100203,254,ご挨拶,19,201213,618,その他雑記,2,081118,531,たべもの,2,080430,73,つぶやき,29,130619,992,つぶやき。,11,190822,247,つれずれに♪,28,100622,38,つれづれ,18,201223,331,とぜんさう,200,200829,134,どうでも良いことだけど,7,050629,591,ど素人園芸と花の写真,29,090428,914,なんちゃん色の日記,7,121015,235,ひとりごと,97,181012,236,ぶたにこまる,9,080516,1163,まとめ,22,170424,282,よもやま記,200,200203,369,アニメ詳細,130,100601,1156,アプリ,20,191111,1055,アロマ,1,120519,859,ア行,1,100117,43,インターネット,3,080617,1159,インターネット・PC,53,200308,98,エクラしりとり,59,201222,373,エクラ探訪,3,080505,747,オフレコ ,7,110221,268,カテゴリ,3,071205,1240,カテゴリ一覧,42,200524,575,カレンダー,8,121107,255,カレン・システム,24,100919,587,グルメ気分 ,2,080708,1199,ゲーム,1,170930,137,コトバ,1,050426,1592,コミック,1,201111,61,コラム,71,161127,1107,コラム・情報,31,190204,1066,コラム・植物,1,130402,651,ゴルフ,23,200313,1206,サイト,11,201201,34,サイト作成,13,201219,500,シルクレボリシオン,3,080509,1305,スタイル,2,170508,1037,スポーツ,1,201110,1544,スマホ,1,200229,1211,スマートフォン,15,170329,76,スロ,11,061030,428,セブ島,90,111012,59,セリカ,2,041208,876,タイのUbonより,10,091114,308,タグがわかりません。,16,080118,1427,タブレット,1,180502,1536,タブレット-便利篇,2,200209,1545,タブレット-用途篇,1,200304,1543,タブレット-種類篇,5,201204,253,ツール,2,101001,968,テレビ,16,201215,1568,テレビ生活,2,200803,1459,テーマ,4,200615,1506,デザイン,1,190703,649,ニュース,31,190601,585,ネットで地引網日誌,16,090414,1534,ハピスロ世代,1,200107,523,ハーブ,4,150409,177,バスケ日記,1,050722,394,パソコンライフ,1,080123,1320,ビジネス書,1,170414,1617,ファミリー劇場,1,201215,851,ヘルの小部屋,7,201211,19,ポエム,19,120917,374,ポエム集,1,100907,1224,ポータルサイト,10,200103,193,マイブーム,1,060211,1591,マインド系,1,201109,872,マカオ,1,091123,160,マスター公示,8,070330,1346,メイン-サブ セオリー,5,180910,485,メモ,2,201202,1410,メルマガ,3,180823,1374,ライフログ,8,191118,1596,ランキングのメモ,1,201203,1096,リンク,22,160624,1594,リンク集,1,201120,1553,レギュラー番組,1,200404,144,レンアイ教授,7,090418,1465,レーダー照射,1,190113,1318,ログメッセージ,1,201107,1033,一日一句,25,120721,372,一行掲示板,3,080410,49,与太話,12,090509,1434,世事,1,180612,1616,中世eclat史,1,041120,580,中国野菜エンツァイ,1,080605,1580,乃木坂46,1,200908,1053,久し振りの近況報告,1,120420,42,予定は未定,3,080226,622,亜林湖の詩,5,120703,1155,人物,4,170327,1297,今日のダンディズム関連,5,190208,630,今日の出来事,2,081214,328,仕事,23,200429,904,付き合い,12,191220,887,仲間,4,191228,189,伝記,1,201211,959,体調,19,201214,990,体調管理,1,110224,1533,体重,1,200105,217,便利屋 日記,7,090112,916,俳句日記,117,150901,1361,偏向報道,9,191212,395,健康,37,171024,1413,健康法,2,181016,882,健康維持,7,200202,487,催事,148,200911,1034,入院生活,8,191106,448,写真,47,150110,684,出来事,9,190320,1527,分類,1,191204,1015,初めての日記,192,090624,1103,初めての日記 (2),161,161018,289,初日記,5,140314,1598,初老からの人生,4,201217,456,劇毒注意,13,130529,1310,北朝鮮,30,180624,774,反省,1,090923,1220,口伝 注釈書,9,190715,1613,古代eclat史,4,080305,948,同級生,4,110226,928,名言集,129,111023,1221,和歌,1,160208,516,問わず語りに,25,080927,1415,問題解決,1,180302,1054,四季彩の詩(うた),6,191126,1113,困った…,1,040925,1117,園芸,1,140722,539,地域,200,200721,1123,夏の花,2,090307,936,多様性,39,200308,625,夢物語,6,110823,1577,大河ドラマ,1,200824,1072,天候,2,130816,1058,失敗談,1,121222,1012,好きな歌,1,110806,1369,姓名判断,12,200901,868,娯楽,5,190412,1018,娯楽・趣味,9,190118,135,子供,25,190123,290,子供の空間,9,071213,321,季節,150,201013,656,孫の事,5,181016,817,宝塚歌劇,52,171002,1222,実用書,2,200515,229,家庭用ゲーム,17,121107,209,小説,13,201101,370,平成十六夜日記ダイジェスト版,200,200716,1291,幸福関連,7,201105,1518,後期高齢者の主人,2,200116,707,徒然,56,110403,900,心のつぶやき,7,100914,903,心のつぶやき(/_;),49,110809,901,心のつぶやき(^○^)♪♪,68,110809,1068,思い出す,2,130621,1092,思索,34,190722,13,情報,18,190331,1300,情報研究,5,190321,1119,想ひ,8,141116,848,想ひ..,200,150625,406,愛しいひとへ,29,101127,1604,愛読者感謝企画,1,041230,1086,戦争,2,131024,458,手作り料理,16,110505,139,手紙,5,090909,1104,技術,28,180521,1528,投薬,3,200626,192,挨拶,11,180427,1101,放送,200,201220,1298,放送大学BS放送,5,191220,1293,政治,200,201013,1093,教養・歴史,34,180614,1153,教養・経済,2,180111,799,料理,1,121222,36,新日記,19,070727,180,旅日記,32,080915,441,旅紀行,200,201214,830,旅行,6,130716,991,日々のこと,13,190801,157,日常,33,190930,1280,日常の日記,27,190514,993,日常生活,47,200714,118,日常詩,63,110913,1607,日本テレビ系,1,201204,1,日記,200,201223,579,日頃の事,124,200718,107,映画,6,170810,1526,映画・チャンネルNECO,1,191124,947,時代,200,201211,935,景観,200,200725,1177,暮らし,148,201005,9,更新履歴,124,150321,611,更新情報,4,090521,1223,書籍,5,160727,2,書評,200,201125,12,最新情報,34,201012,386,本,18,160731,75,本当にあった話,3,050208,515,植物,2,080413,228,楓絡み,25,180106,1547,楽しみ方,2,200320,1615,概要,1,201214,1567,概観,2,201118,1409,標準ガイド,1,180125,647,毎日の食事&血糖値,200,100920,626,気まま,101,110617,464,気象関係,16,100329,337,海外旅行,21,110416,729,淋しい人,1,090517,1008,温泉巡り♨,18,120404,1611,演歌百選,1,201209,147,物語,13,200827,1552,特番,1,200403,272,独り言,5,101010,663,生け花,18,090709,344,生活,200,201213,937,生活・農業,6,180802,1016,生活(体調),6,151130,1028,生活(看護),3,120619,1438,由来,1,180709,518,画像,2,190502,653,番外編,2,090514,1587,病気,1,201027,1335,皇室,11,190522,1036,看護日誌,10,160131,1102,知的生活,30,200626,1225,研究,4,201115,335,社会,200,201208,141,禁煙,1,050211,244,私信,16,120421,1590,米国大統領選,2,201215,1530,糖尿食,1,191209,471,自分用のメモ,7,100923,1134,自然,17,161017,513,花,13,130616,174,花言葉,1,050702,239,芸能,2,101129,309,芸術,1,071214,1331,若者,3,190114,532,蝶の記録,4,111002,1542,血糖値,2,201025,572,計画,1,080527,1209,記録,200,201223,62,詩,5,090301,138,詩惑抄,25,101017,74,趣味,15,160602,658,趣味の事,3,161116,1060,農作業,10,131010,839,農業,17,200415,1618,配色,1,201217,833,野球,4,190615,1079,野菜作り,20,180612,556,野菜栽培,3,080520,636,閑話休題,35,161229,1255,随想,12,161020,227,雑記,101,121011,1194,雑誌,9,190402,1281,韓国,36,200117,95,韓流,3,050116,3,音楽,13,190508,1548,音楽と芸術,1,200323,1069,音楽動画,200,171003,1090,音楽生活,21,200429,145,風待ち,44,100123,449,食べ物,10,170329,14,GOLFのページ,103,130127[/upDateLog]
コメント (0)

新着日記のエントリーデータ
[upDate]2020 12/14[/upDate]
[userEntry]402[/userEntry]
[entryPost]11208[/entryPost]
[userDat]arrows-tab-fan 2 2 C0 C1615,midnight 111 11 C0 C1608 C5 C320 C1605 C38 C98 C34 C1318 C1613 C1604,sengoku 186 13 C0 C649 C1465 C1361 C1310 C1369 C192 C1293 C1280 C1302 C1335 C1590 C1281,mimimi 30 3 C0 C485 C1,tanpopo 6 3 C0 C73 C1,kadoma1428 104 2 C0 C1,freehand2007 1230 18 C0 C1155 C328 C487 C1220 C539 C936 C321 C1104 C1101 C441 C947 C935 C2 C344 C335 C1134 C1209,yukiusagi898 140 8 C0 C959 C684 C656 C1518 C579 C729 C658,meyacat 22 3 C0 C98 C1,sirayuki 20 2 C0 C1,new-diary 32 5 C0 C888 C1240 C851 C1,bs12-fan-87 4 3 C0 C1614 C1612,radiofan-wider-4-fmkagawa-90 2 2 C0 C254,other-e-81 6 4 C0 C1575 C98 C1567,webkyoto 146 5 C0 C975 C1 C626 C636,funabin2ikoo 2 2 C0 C1,hakuho 2 2 C0 C189,ensan5 88 13 C0 C131 C1212 C1163 C1159 C98 C1211 C968 C395 C1092 C1093 C1513 C449,funabinikoo 9 2 C0 C1,enmasama3 471 33 C0 C131 C1163 C1156 C1159 C1176 C61 C1091 C1107 C1125 C1095 C1066 C1197 C1216 C1150 C1124 C1087 C1568 C1459 C1249 C1598 C1092 C1160 C1152 C1093 C1153 C1089 C1177 C1441 C1102 C1065 C1079 C1090,jin8t 24 3 C0 C61 C1,bs11-fan-86 2 2 C0 C1611,mikiharb 51 15 C0 C73 C1055 C523 C580 C948 C1072 C1058 C1012 C1068 C799 C830 C1 C513 C1060,tablet-fan-2074 9 4 C0 C1536 C1545 C1543,coming-movie-viewers 5 4 C0 C131 C1607 C1526,ensan100 64 7 C0 C1417 C131 C1323 C1156 C1374 C1596,kyonkk 4 2 C0 C1,everything 2 2 C0 C1,zero03 11 5 C0 C131 C1206 C1305 C1297,object-not-found 4 2 C0 C98,lady 2 2 C0 C98,boonyan 48 9 C0 C234 C531 C73 C236 C1 C1008 C471 C556,xhinax 2 2 C0 C1,inaget 3 3 C0 C1103 C1,ensan-f-s-world 35 5 C0 C131 C1406 C395 C157,chromebook-82 2 2 C0 C1594,coming-drama-viewers 2 2 C0 C131,enmedia2cwm 9 4 C0 C1206 C968 C192,portal-study 17 4 C0 C1224 C192 C1225,amazonfan 8 6 C0 C1593 C1512 C1494 C254 C968,shimo 1 1 C0,log3 37 2 C888 C1240,144fm 100 1 C155,a1vvv-0 305 8 C1264 C1268 C1262 C1260 C1266 C1265 C1269 C1263,alexa-google-clova 14 7 C1482 C1485 C1491 C1539 C1477 C254 C649,entamefree 4 3 C1495 C1540 C254,nighty9 9 2 C1357 C209,music-ensemble1 12 5 C1296 C1186 C1271 C1355 C1247,m-room 12 2 C1204 C1200,dancyu 5 3 C329 C968 C430,voyov 102 2 C329 C331,dancewebgroove 6 2 C286 C5,bihadakirei 123 7 C286 C250 C445 C234 C395 C458 C663,edensnow 33 1 C389,tv-record 4 4 C1489 C1490 C1579 C1558,fugaty 23 2 C31 C378,sky-wind 1 1 C31,labyrinth 123 4 C31 C1195 C490 C1250,fuga 1 1 C31,38476257 1 1 C170,eca 19 2 C164 C1015,kakei 104 3 C117 C5 C33,abedetv 8 5 C1492 C1571 C131 C254 C1473,michelle 42 3 C232 C196 C36,titose 27 3 C5 C88 C98,eclatinfo 25 3 C21 C49 C42,francetei 100 1 C495,myiyan2 6 2 C320 C107,enfas-special 2 1 C131,black-pink 2 2 C131 C1456,omomuki 26 9 C131 C1199 C1037 C1544 C1346 C1434 C1177 C518 C3,ukiukiuzuz 12 7 C131 C234 C1488 C254 C1487 C1499 C3,arty-crafty-7ipods 9 4 C131 C1362 C1343 C254,arty-crafty 246 18 C131 C1071 C1163 C1186 C1099 C1187 C1151 C1096 C1270 C1070 C13 C386 C1294 C1511 C3 C1100 C1069 C1090,happylifespaces 165 16 C131 C1198 C1189 C1185 C51 C1163 C1199 C1591 C1214 C1325 C1291 C1251 C1177 C1207 C1203 C386,design-s 22 4 C131 C1096 C386 C1246,juke-box-19 4 2 C131 C1331,enmasama3i 6 2 C131 C1300,life-style-3 2 2 C1388 C1502,st3401 43 1 C552,ikanago 127 7 C237 C4 C591 C235 C98 C585 C3,abasan 160 3 C269 C282 C991,azimut 1 1 C199,yadokari 44 9 C149 C51 C914 C255 C253 C886 C19 C532 C3,karasaifuu2 4 3 C149 C19 C1123,3rd-world 21 2 C810 C1052,mimi 9 4 C1064 C640 C830 C513,mickey0623 1 1 C119,maikeru 19 2 C234 C464,dewberry 239 7 C764 C4 C456 C229 C228 C244 C227,sakuzou 11 2 C403 C360,bookreadings 2 2 C1463 C1466,windswept 58 2 C212 C744,m-d-user 2 2 C1493 C254,tuneko-3 101 2 C401 C1103,variety-g 10 6 C1456 C254 C1429 C1554 C1569 C1469,althjp 310 12 C1205 C924 C278 C369 C1063 C447 C883 C9 C1019 C666 C1056 C318,umi-zaru 3 1 C969,hatahira 1 1 C884,piyo 6 2 C88 C515,oheso 7 4 C101 C1015 C107 C95,homes-2 2 1 C1311,enmedia 96 18 C1185 C1420 C51 C1163 C1156 C1219 C1201 C1206 C1179 C1208 C1180 C1355 C1181 C107 C386 C1243 C344 C1194,wowow1 12 4 C1481 C1422 C1340 C1486,benkei 1 1 C1248,w-beauty 3 3 C1497 C254 C1462,azteca777chiri 40 8 C112 C134 C61 C76 C78 C173 C75 C74,bunchan00 91 2 C809 C817,reikamama 5 3 C784 C78 C814,otelat 9 4 C503 C254 C43 C394,artlife1 3 2 C51 C1548,responsive 2 2 C51 C1409,p0286 4 2 C51 C630,pure1 3 2 C976 C980,kazedayori 258 9 C230 C144 C139 C118 C147 C140 C138 C148 C145,samuasura 1 1 C899,izayoi 198 10 C459 C473 C747 C587 C516 C1054 C370 C406 C611 C653,power-bass7 1 1 C699,my-healthy 6 4 C254 C1413 C1419 C1398,e-books-center-life 1 1 C254,fansports-info 8 5 C254 C1386 C1349 C1347 C833,ph801fy 1 1 C254,seisaizakaya 2 1 C387,suamahime 4 2 C18 C1015,lotus 2 1 C618,tv-tokushima-80 3 2 C1570 C1566,maruko 1 1 C73,xxkintaxx 2 1 C73,syoumei 10 2 C73 C1086,pianissimo 1 1 C73,tuntun 12 2 C992 C1217,kokoro227 28 1 C247,june 30 1 C235,mam-kiss 26 2 C235 C157,radiofan-wider-2-nhk77 1 1 C1549,chi-gonta 2 2 C859 C1103,n-kagaku 1 1 C43,shunpei 11 1 C98,piyoko 25 2 C98 C135,nancyan 24 8 C373 C255 C253 C851 C19 C635 C372 C573,madamfam 3 1 C268,snow 54 2 C575 C448,treason 19 2 C185 C160,seaco-w 1 1 C137,ayabun-happy-cottage 20 8 C1592 C1206 C1320 C1410 C1221 C1222 C209 C1223,ontai75 9 1 C61,office101miura 16 1 C61,tenyou 3 2 C61 C1103,mitch-29 2 1 C61,fujit1123 176 19 C651 C904 C887 C990 C882 C1034 C774 C868 C1018 C157 C993 C344 C937 C1016 C1028 C1036 C239 C74 C839,masamim 115 4 C651 C428 C872 C337,tatujinnsp 13 3 C500 C1103 C290,e-pclife 17 3 C1211 C1427 C1415,riv7 2 1 C59,shizu-thai 10 1 C876,hibari-neko 17 2 C308 C1015,tv-life120 5 2 C968 C192,gontango 1 1 C968,easy-jazzy-life-room 3 2 C1459 C1547,botanical-e 1 1 C1506,saeba-room 7 3 C649 C13 C272,shumijin-masa 2 2 C1534 C1177,karubi 1 1 C177,smile-for-you 2 1 C19,moonrabbit 3 2 C19 C1103,flash 4 1 C19,white-rabbit 2 2 C374 C1103,ter-sky-b 6 2 C193 C62,radiofan-wider-1 2 2 C1553 C1552,hanano55renge 183 5 C1033 C916 C1103 C707 C1017,83red-idols-room 1 1 C1580,nekomilk3 1 1 C1053,arinko3 5 1 C622,281105 132 5 C328 C289 C900 C903 C901,fight-for-tounyou 5 3 C1533 C1527 C1528,0sachy 7 1 C217,shaw 3 3 C448 C3 C449,oppo27 1 1 C1015,y-cosmos0414 1 1 C1015,ibuchan 1 1 C1015,heesun 1 1 C1015,kintyan 1 1 C1015,younagi 1 1 C1015,tombokk 2 2 C1015 C1103,piccolo-nonbe 1 1 C1015,teruka3 1 1 C1015,hot-chocolate 1 1 C1015,karakurenai 1 1 C1015,kuroneko 1 1 C1015,rei-aqua 1 1 C1015,nonnonon 1 1 C1015,nekomilk1 1 1 C1015,novels-love 1 1 C1015,kannnaduki 1 1 C1015,kabi25 1 1 C1015,sally-b 1 1 C1015,rouzu-yuki 1 1 C1015,eclair 1 1 C1015,ka54320 1 1 C1015,edguy 1 1 C1015,makichan 1 1 C1015,yatcha-s 1 1 C1015,yam-tea 1 1 C1015,jas-39 1 1 C1015,creator-0007 1 1 C1015,horafuki-inazuma 1 1 C1015,momochan 1 1 C1015,rafaero 1 1 C1015,hi-yan-24 1 1 C1015,alone-aa 1 1 C1015,creator-0001 1 1 C1015,dandelion 1 1 C1015,inthezone 1 1 C1015,banksiaelutea 1 1 C1015,6knights-sksk-show-yan 1 1 C1015,gonke2 1 1 C1015,sasamoto 1 1 C1015,kana-ria 1 1 C1015,1152 1 1 C1015,sasacyan 1 1 C1015,blackstraycatblasina 1 1 C1015,sora-ai 1 1 C1015,maturi615 1 1 C1015,kayou1492 1 1 C1015,mami1975 1 1 C1015,sk-trp 1 1 C1015,mikann555 1 1 C1015,yoochin 1 1 C1015,yoo 1 1 C1015,hidebou 1 1 C1015,luminar 1 1 C1015,anzu0825 1 1 C1015,lmix-fz10 1 1 C1015,satomi3977 1 1 C1015,plover 1 1 C1015,creator-007 1 1 C1015,masyupuri 1 1 C1015,sakula2 1 1 C1015,robanomimi 1 1 C1015,pet-is-my-life 1 1 C1015,umejyou2 1 1 C1015,umejyou 1 1 C1015,shazna1107 1 1 C1015,2324 1 1 C1015,mamipapi 1 1 C1015,moonflower 1 1 C1015,kashima3d 1 1 C1015,eetomo 1 1 C1015,usako705 1 1 C1015,himeko 1 1 C1015,skull16 1 1 C1015,kotafu 1 1 C1015,ken-saki 1 1 C1015,ozkiku 1 1 C1015,diary4 1 1 C1015,hirokichi14 1 1 C1015,ozanari 1 1 C1015,kunpuu 1 1 C1015,notti55 1 1 C1015,girlspop 1 1 C1015,19630403 1 1 C1015,hoiko 1 1 C1015,diary3 1 1 C1015,diary2 1 1 C1015,diary5 1 1 C1015,ituki 1 1 C1015,nikuniku29 1 1 C1015,skavaty-tennis-club 1 1 C1015,densya 1 1 C1015,vivace2002 1 1 C1015,mamechi 1 1 C1015,lucky92san 1 1 C1015,tottii01 1 1 C1015,daichan8929 1 1 C1103,karin 1 1 C1103,hokuto894yu 1 1 C1103,hottyan 1 1 C1103,kazu 1 1 C1103,you--nagi 1 1 C1103,you--na-gi 1 1 C1103,chj56790 1 1 C1103,lovelovelove333 1 1 C1103,kankuu3t 1 1 C1103,sorou5 1 1 C1103,sumaino1 1 1 C1103,sumai 1 1 C1103,angels-egg-07 1 1 C1103,noren 1 1 C1103,tatujinn 1 1 C1103,rashoumon 1 1 C1103,rapit77 1 1 C1103,noripee823 2 2 C1103 C513,yamakusa 1 1 C1103,kengo 1 1 C1103,otoboke-kakky 1 1 C1103,chizu-701 1 1 C1103,koji1234 1 1 C1103,akira-ojisan 1 1 C1103,leica 1 1 C1103,kirarin1992 1 1 C1103,bearshouse 1 1 C1103,totannneko 1 1 C1103,suzukikun 1 1 C1103,uncle-elvis 1 1 C1103,hyama47 1 1 C1103,cherry109 1 1 C1103,a-tarou 1 1 C1103,kawasemi 1 1 C1103,kohana-11-5 1 1 C1103,toppo63 1 1 C1103,popochan 1 1 C1103,nami171717 1 1 C1103,fiorentinareiko 1 1 C1103,yattyan 1 1 C1103,lifting222 1 1 C1103,156deac2 1 1 C1103,sgm-kei 1 1 C1103,sensya 1 1 C1103,heritage51 1 1 C1103,kappy 1 1 C1103,emi0226 1 1 C1103,emirin0226 1 1 C1103,junnibu 1 1 C1103,arichan 1 1 C1103,daytona 1 1 C1103,day107 1 1 C1103,daytona21 1 1 C1103,jun-ka520 1 1 C1103,junka520 1 1 C1103,takkamin 1 1 C1103,miti1935 1 1 C1103,non525 1 1 C1103,takuro-tada1123 1 1 C1103,nana418 1 1 C1103,nanapon418 1 1 C1103,akiko1030 1 1 C1103,mikecat 1 1 C1103,monju59 1 1 C1103,milkyway 1 1 C1103,milky-way 1 1 C1103,ituka100mile 1 1 C1103,motozosenya 1 1 C1103,shymoon 1 1 C1103,a-crescent-moon 1 1 C1103,rinko 1 1 C1103,kokosama 1 1 C1103,kokosama2006 1 1 C1103,asura 1 1 C1103,sizuka2 1 1 C1103,dream-and-hope 1 1 C1103,yattyan61 1 1 C1103,junpeco 1 1 C1103,lovelovehamayu 1 1 C1103,ica07185 1 1 C1103,meeranz 1 1 C1103,nandemomami 1 1 C1103,bilham53 1 1 C1103,bilham 1 1 C1103,nanakamado 1 1 C1103,mizuguruma 1 1 C1103,chobikk 1 1 C1103,shok369 1 1 C1103,fuji-san 1 1 C1103,shion 1 1 C1103,misaki 100 1 C928,masaki-iwasa 1 1 C1113,mint 1 1 C1117,fund 38 2 C838 C837,sepianet 1 1 C1123,saikourin3 6 1 C625,yellow-room-kibou 1 1 C1577,child-box-32 1 1 C135,jade-space 6 1 C113,ojisaninomoide 129 4 C938 C1013 C1005 C565,s-pro 42 2 C13 C12,cats-eye2 8 1 C1119,emu 100 1 C848,sanx2 2 1 C192,douja-douga-channel 5 1 C1298,model 71 1 C1293,hikasan 32 1 C180,fujit11230830 1 1 C993,kazutoko11 1 1 C107,wild-beast 3 2 C9 C272,suitoyaji 100 1 C647,lovelovelove334 1 1 C272,photo-up 1 1 C1438,historyhoihoi 1 1 C1587,sansejp 8 1 C141,fighter-for-tounyou 3 2 C1530 C1542,nori-pee 7 1 C513,minami 1 1 C174,georges 1 1 C239,hope777 1 1 C309,young-love2 3 2 C153 C104,spirit1018 1 1 C572,tmaki33 1 1 C74,toko 11 1 C409,sazare7 1 1 C311,cherry-garden 12 1 C1255,w246 1 1 C227,buru 100 1 C14[/userDat]
コメント (0)

領域確保
領域確保
コメント (0)

領域確保
領域確保

・取得ルーチン1,2とは異なり足跡のページじゃなくて足跡を主体とすること。
・掲示板をデータ領域に使わないこと。
・日記の中に埋め込んで自動アップデートさせること。
・多くの機能は組み込まないこと。
・取得は現存するログの一番古い日付と新しい日付を含めること。
・残した足跡のサイト数と件数を含めること。
・足跡の種類を数えること。
・言葉は少なめの数を数えること。
・足跡のサイトが存在していること。
・最新1週間を纏めること。
 ログを開く。
 足跡を配列に入れる。new-diary以外の足跡が求まる。
 ユーザ名の配列を作成。

 ・(A) データファイル 足跡に出てくる UID 退会した人も含む。
 ・(B) データファイル (B) 存在している UID
 ・(C) メッセージファイル ログメが無い時は「言葉は少なめ」となる。

 ・詳細ファイル
 B,no , 日付、訪問先、ログメ → 2021 11/24 01:49, 0, 1; 日付を数値化すると省エネ。

 誰が、いつ、どこに、ログメを残したか。全て数値で表す。
 最初のレコード 1, 1591011443, 0, 1

 div#responses
  div.comment
   div.comment_element
    a 編集
a.comment_auther#Cxxxxxx 名前
     → uid : no.記事番号だと欠番がでる。管理番号とセットで登録。
    : span.comment_body 60字
 フォーマット

 登録日時 16 最新日付 16 足跡先 4 足跡数 3 サイト数 3
 件数 3 カウンター:6 前日 3 過去平均 3

 名前を new-diary:1 ←管理番号を付ける。
 

  No. UID番号(3) 番号 登録日付 件数   最新訪問日付 最新訪問先
 123 new-diary  1 2019 10/11 100 2022 01/09 19:07 UID番号(3)

 登録日付  件数  最新訪問日付    最新訪問先 足跡先UID数 足跡数
 2019 10/11 100  2022 01/09 19:07 UID番号(3) 3 3



 最新の足跡




/* -- 汎用システム 基本関数 -- */ 
win = window;
doc = document;
Fid = a => typeof(a) == "object" ? a : doc.getEelementByid(a);
Ftag = (...a) => (a.length > 1 ? fid(a[0]) : doc).getElementsBytagName(a[a.length - 1]);
Fce = a => doc.createElement(a);
Fap = (a,b) => Fid(a).appendChild(b);
Fcn = (...a) => (a.length > 1 ? Fid(a[0]) : doc).getElementsByClassName(a[a.length - 1]);
Fres = o => o.responseText.replace(/\r?\n/g, "\t");
enc = s => encodeURIComponent(s);
tagDec = s => s.replace(/</g, "<").replace(/>/g, ">").replace(/”/g, "\x22");

/* -- 参照文字を実体に置換 -- */
fullDec = e => e.replace(/\x26quot;/g, "\"").
replace(/\x26amp;/g, "\x26").replace(/\x26lt;/g, "<").
replace(/\x26gt;/g, ">").replace(/\x26#39;/g, "'");

/* -- コードを実行可能に -- */
evalDec = e => fullDec(e).replace(/\/\*.*?\*\/\s/g, "").replace(/\x3cbr\s?\/?>/gi, "\n");

/* データの送受信の要で機能限定版。戻りにファイル更新日が入る */
xhr = (d1,d2,d3) => {
xmlPath = d1;
const a = new xmlHttpRequest();
a.onreadystatechange = () => {
if(a.readyState == 4){
if(a.status == 200){
d3(a.responseText.replace(/\r?\n/g, "\t"),
Math.floor((new Date(a.getResponseHeader("last-modified"))).getTime() / 1000)
);
} else d3("");
}
};
const mode = d1.match(/^[a-z0-9_]+$/) ? "post" : "get";
a.open(mode, mode == "get" ? d1.replace(/#.*$/, "") : "/cgi-bin/" + d1 + ".cgi", true);
a.setRequestHeader("content-type","application/x-www-form-urlencoded; charset=utf-8");
a.send(d2);
};

echo = (...a) => {
let n = a.length;
let o = typeof(a[0]) == "string" ? Fid(a[0]) : a[0];
if(o.tagName == "SELECT"){
if(n == 1) return o.options[o.selectedIndex].value;
else {
if(typeof(a[1]) == "string"){
if(a[1] != ""){
for(let i = o.options.length - 1; i >= 0; i--){
if(o.options[i].value == a[1]) break;
}
o.selectedIndex = i > 0 ? i : 0;
} else o.selectedIndex = 0;
} else o.selectedIndex = a[1];
}
} else {
type = o.tagName == "TEXTAREA" || o.tagName == "INPUT" ? "value" : "innerHTML";
if(n == 1) return o[type];
else {
if(n == 2){
let s = a[1];
if(typeof(s) == "object") s = s.join("");
o[type] = (s + "").replace(/\t/g, "\n");
} else {
let s = o[type];
if(a[2] == "add") o[type] = s + a[1];
if(a[2] == "math") o[type] = Number(s) + a[1];
}
}
}
return o;
};

/* -- キーのデータ取り出し -- */
keysn = (a,b,c) => {
let ex = "";
let dat = a.match(new regExp("\\[(" + b + "\\])" +
(c ? ".*?" : "(.*?)") + "\\[\\/\\1",c ? "g" : "")
);
if(!c){
if(dat) ex = regExp.$2;
} else {
let re = new regExp("\\[\\/?" + b + "\\]", "g");
if(c == 1) ex = dat.join(" ").replace(re, "");
else {
dat.forEach((e,i,o) => o[i] = e.replace(re, ""));
ex = dat;
}
}
return ex;
};

key = (a, b) => keysn(a, b, 0);
keys = (a, b) => keysn(a, b, 1);
keysArray = (a, b) => keysn(a, b, 2);

{
xhr(`/home/new-diary/links.css?${(new Date()).getTime()}`, null, e => {
try { eval(e.replace(/\t/g, "\n")); }
catch (err) { alert("new-diary/links.cssのプログラムエラーです\n\n" + err); }
});
}




/* */
コメント (0)

CSS Gen 1.0.1


 ・CSSの食い込み



コメント (0)

webPiano full 1.0.1

 ・遊び心を満たす便利な小物。
 ・知識が豊かになる構築のしかた。
 ・CSS3とjavaScriptのコーティング。
 ・88鍵のキーボードが2段です。

 ・次のボタンからどうぞ。オープニングを兼ねています。
 <音量>
変化なし
<音量>
6割低下
取り込み
スキップ



コメント (0)

youTubeの考察







🧡画像の話
動画には生成された各種のサイズの画像がある。
default.jpg
mqdefault.jpg 320 × 180
hqdefault.jpg 480 × 360
sddefault.jpg 640 × 480
maxresdefault.jpg 1280 × 720


コメント (0)

web Piano の作業用













コメント (0)

web Piano の考察












コメント (0)

日記のメインページ
 このページをメモ帳のメインページとして構築します。
 構成などはCSSを組み込みながら少しずつ行います。

 
 💚高機能アップデートシステム・UPS1.0(開発中) ※ログイン必須

 💚足跡取得3.0.1(開発中) ここの「メモ帳」に常駐しています。
 💙エクラの日記 7.0.1

 💚素の新着日記全カテゴリ 💙7.0.1💙8.0.1:C0 💙8.0.1β:C0

 💚足跡 メモ帳では素のログです
 💚プロフィール
 💙BIG.BBS Ex   💙BBS exP299 💙BBS exP298-1

 💚サイトの構築用メモ

 💚絵文字の考察 ~文字取得~
 💚絵文字の考察 ~国旗~
 💚絵文字の考察 ~麻雀牌~

 メモ帳のリンクからはシステム手帳に変移します。
 それ以外はメモ帳のメインページ、つまり、ここに変移します。

 このサイトの目的は「新着日記の管理」と「スパムコメント」の削除です。
 構築が整い次第進めたいと思います。

 💛暫くは、こちら。


 https://とhttp://の切り替え。このサイトはhttps://でも大丈夫です。もしもURL欄がhttp://になっていたなら下のリンクで切り替えて下さい。フルパスになっています。

 💚メモ帳のメインページ(https://フルパス)

 ただし、サイトの旗艦に位置する💗クッキー研究室は、過去の掲示板を表示するにあたって異なるドメインから取得しているのでhttp://じゃないといけません。

 こんな感じに 💗過去記事:なかよし5(http://フルパス)


 💚領域確保 ※カテゴリから引っ越し   💚新規投稿







.
コメント (0)