💘足跡 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]