領域確保
領域確保




getuserinfo = () =\3e {
// ユーザー名取得
islogin = doc.cookie.indexof("sid=") != -1;
visuser = null;
let bcc = doc.body.classlist;
if(islogin){
bcc.add("login");
visuser = "new-diary";
xhr("/cgi-bin/bbs_form.cgi?oid=new-diary", null, e =\3e {
if(e.match(/home\/([0-9a-z\-]+)\/" \/\3e\3c\/td\3e/)) visuser = regexp.$1;
bcc.add("ups-links");
upsmain(3);
});
} else {
alert("non login");

}
};

cssdec = s =\3e {
s = s.replace(/(\s)bg\-c(\s*:)/g, "$1background-color$2");
return s;
};

repentry = obj =\3e {
let par = obj.parentnode.parentnode;
let dt = par.children[2];
let s = dt.value;
let a = obj.parentnode.children;
let reg = new regexp(a[0].lastchild.value, "g");
let exe = a[1].lastchild.value;
if(reg == "") return;
try {
let ds = s.replace(reg, exe);
echo(dt, ds);
}
catch (err) { alert("正規表現のミスです\n\n" + err); }
};

upscreatepar = (sppar, obj) =\3e {
// エリアがない時、領域の生成
// spとspan.exe
let cls = sppar.classlist; // ※classnameを使っているし必要ないかも
let cid = sppar.id.substring(2); // spと領域parのidは同期している
let par = fce("div"); // 新しい領域の生成
par.id = cid; // idはspのidから
defaultpar = par // 領域を保持
par.classname = sppar.classname.replace(/sp/g, "area");
let file = cid.replace(/^.*f([0-9a-z\-_\.]+).*$/, "$1");
let user = cid.replace(/^.*u([0-9a-z\-]+).*$/, "$1");
let group = cid.replace(/^.*g([0-9]+).*$/, "$1");
let type = cid.replace(/^.*t([0-9]+).*$/, "$1") - 0;
let parts = !type ?
`\3cspan class="inp-par"\3ec:\3cinput class="inp sp2" size="2" value="" /\3e\3c/span\3e
\3cspan class="inp-par"\3ea\3cinput class="inp sp2" size="4" value="${ file }" /\3e\3c/span\3e
\3clabel\3e\3cinput type="checkbox" class="cbox" onclick="parentnode.classlist.toggle('w')"/\3e公開\3c/label\3e
\3clabel\3e\3cinput type="checkbox" class="cbox" checked="checked"
onclick="parentnode.classlist.toggle('ch')"/\3e自動\3c/label\3e` : `\3cspan class="inp-par"\3e\3c/span\3e`;
let black = type == 3 && ["eclat-io", "js"].includes(user) ? "black" : "";
let area = type == 3 ? `\3cdiv class="upload-area ${ black }"\3e\3c/div\3e` : `\3ctextarea class="txt"\3e\3c/textarea\3e`;
echo(par, `
\3cdiv class="navi"\3e
\3cspan class="box eno"\3e${ group }\3c/span\3e
\3cspan class="inp-par"\3eo\3cinput class="inp iw1" value="${ user }" /\3e\3c/span\3e
\3cspan class="inp-par"\3et\3cinput class="inp iw2" /\3e\3c/span\3e
${ parts }
\3cspan class="box dels" onclick="delsentry(this, 0)"\3e解放\3c/span\3e
\3c/div\3e
\3cdiv class="box cms"\3e
\3cspan class="inp-par"\3e正規表現\3cinput class="inp"/\3e\3c/span\3e
\3cspan class="inp-par"\3e/g,\3cinput class="inp"/\3e\3c/span\3e
\3cspan class="box inp-btn" onclick="repentry(this)"\3e実行\3c/span\3e
\3cspan class="box inp-btn" onclick="utest()"\3eテスト\3c/span\3e
\3c/div\3e
${ area }
\3cdiv class="ups-info"\3e
\3cspan class="box cir" onclick="upspostentry(this, ${ type })"\3e送信\3c/span\3e
\3cspan class="info"\3edone,\3c/span\3e
\3cspan class="len"\3e\3c/span\3e
\3c/div\3e`
);
fid("upsdisp").append(par);
parscroll(par);
settimeout(() =\3e upsload(obj, par, user, file, group, type), 100);
};

utest = () =\3e {
let uri = "/home/poem/diary/2011/03/";
xhr(uri, null, (e, dte) =\3e {

let date = new date(dte * 1000);
alert(date.tolocalestring("ja-jp"));
});
};

bscentry = n =\3e {
let obj, par = defaultpar; //
if(!par) return; //
switch (n) { //
case 0 : obj = par; break; //
case -1 : obj = par.previouselementsibling; break; //
case 1 : obj = par.nextelementsibling; break; //
}
if(obj){ //
parscroll(obj); //
defaultpar = obj; //
}
};

spcounter = (obj, num) =\3e {
// 開いている領域のカウンタ
const cnt = obj =\3e { // ローカル関数で
let c = obj.lastchild.lastchild; // 表示済カウンタ
let n = number(echo(c)) + num; // numは1か-1
if(n == 1) c.classlist.add("ze"); // 領域が作成されたら配色を変更
if(n == 0) c.classlist.remove("ze"); // 領域が無くなったら戻す
echo(c, n); // 数値を反映
};
cnt(obj); // sp-topのカウンタ
cnt(fid("spgroupexec")); // 全体のカウンタ
};


execentry = sc =\3e {
let cls = fid("upsgroup").classlist;
cls.toggle("full-1");
settimeout(() =\3e {
cls.toggle("full-2");
settimeout(() =\3e cls.remove("full-1"), 400);
if(sc && cls.contains("full-2")){
settimeout(() =\3e fid("upsgroup").scrollintoview(), 1500);
}
}, 400);
};

groupchg = obj =\3e {
let cls = obj.parentnode.classlist
cls.toggle("go-1");
settimeout(() =\3e {
cls.toggle("go-2");
settimeout(() =\3e cls.remove("go-1"), 400);
}, 400);
};

parscroll = par =\3e {
par.scrollintoview();
settimeout(() =\3e {
par.parentnode.scrollby(0, -10);
}, 500);
};


cooentry = ()=\3e {
// 隠れインラインのonloadイベントのエントリ
// クッキー研究室発行のデータを参照
visuser = window.main_default.document.cookie.match(/uid=([0-9a-z\-]+)/) ? regexp.$1 : "";
// ログインの値を保持
visuserkey = doc.cookie.match(/sid=([0-9a-z]+)/) ? regexp.$1 : "";
let a = echo("visinfo", visuser); // メニュー欄の上部にログイン名を表示
if(echo(a) != "") a.classlist.add("login"); // クラスで振り分ける

//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//
// ここで起動時のアイドル状態となる
// 開発時の指定で、upsのグループの中の2つをオープンする
// urlにコマンドとして指定も可能
//
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

let obj = fid("g00"); // グループは2桁の指定 00 - 99
settimeout(() =\3e { // 一気に二つ開くと忙しいので少しずつ行う
obj.click(); settimeout(() =\3e { // キャッシュがあるなしでは挙動が少し変わる
obj.nextelementsibling.firstchild.click(); settimeout(() =\3e {
obj.nextelementsibling.nextelementsibling.firstchild.click();
settimeout(() =\3e {
xhr(`/home/css-2/common.css?${(new date).gettime()}`, null, e =\3e {
try {
eval(e.replace(/\t/g, "\n"));
settimeout(() =\3e doc.body.classlist.remove("bsc-out"), 400);
}
catch (err) { alert("拡張ファイル css-2/common.cssでエラーです。\n\n" + err); }
});
}, 1000); }, 2000); }, 800); }, 500);
};

parmove = obj =\3e {
// spコメントのエントリ、ファイル選択
// objはsp配下のspan.exe
let sppar = obj.parentnode; // 親のsp
for(let o of fid("upsdisp").children){ // 表示領域の中で
if(o.id == sppar.id.substring(2)){ // もしも既に生成済みなら
parscroll(o); return; // その領域へスクロール
} else {
if(o.id.substring(3) == sppar.id.substring(5)){
parscroll(o); return; // その領域へスクロール
}
}
}
upscreatepar(sppar, obj); // なければ生成へ、引数spparを渡す
};

rp4 = dt =\3e dt.replace(/\x26#x([0-9a-f]{5});/g,
(e, e1) =\3e string.fromcodepoint(parseint(e1, 16)));

upsload = (obj, par, user, file, g, type) =\3e {
let sppar = obj.parentnode;
let msg;
let key = ""; // sidのキー
let a = par.children[0].children;
let uri =
type == 0 ? `/cgi-bin/diary_form.cgi?oid=${ user };mode=edit;article_id=${ file }` :
type == 2 ? `/cgi-bin/${ file.replace(/\..+/, "") }_editor.cgi?oid=${ user };mode=edit` :
type == 3 ? `/cgi-bin/upload.cgi?oid=${ user }` : `/home/${ user }/${ file }`;

if(user != visuser) key = upscookieenter(user);
xhr(uri, null, (e, date) =\3e {
if(key != "") upssetcookie(key); // 元のログインに戻す
if(type == 3){
e = e.match(/\3cimg[^\3e]+\3e/g).join(" "); // 画像アップローダーの場合
e = e.replace(/height="\d+" width="\d+"|https?:\/\/www.eclat.cc/g, "");
e = e.replace(/(\3cimg )/g, "$1onload=\"imageentry(this)\" ");
}
if(type == 0 || type == 2) e = rp4(fulldec(e.replace(/\x26amp;/g, "\x26")));
if(type == 0){
let dat = e.match(/\x3ctextarea[^\3e]+\3e(.+)\x3c\/textarea/) ? regexp.$1 : "";
dat = dat.replace(/(href=")([^"]+)/g, (d0,d1,d2) =\3e d1 + decodeuricomponent(d2));
dat = dat.replace(/(href=')([^']+)/g, (d0,d1,d2) =\3e d1 + decodeuricomponent(d2));
dat = dat + "\t\t\t\t\t\t\t";
const title = e.match(/name="article_title" value="([^"]+)"/) ? regexp.$1 : "";
echo(par.children[2], dat);
a[2].lastchild.value = title;
sppar.classlist.add("opa");
let mark = title.match(/^[\ud800-\udbff][\udc00-\udfff]/) ? "" : "🤍";
msg = `${ mark + title }/${ user }`;
obj.title = `loaded. ${ msg }`;
let len1 = dat.length;
let len2 = dat.match(/\t/g).length + 1; // 行数を求める
echo(par.children[3].children[2], // 右下に情報を生成
`\3ci\3e${ len2 }行\3c/i\3e | \3ci\3e${ len1 }字\3c/i\3e`
); // 公開なら反映させる
if(e.match(/name="article_notify" value="1" checked="checked/)) a[5].click();
if(user != "") upsgetlinks(obj, par, user, file, g); // 存在ならばリンク生成へ
} else {
if(type == 2) e = e.match(/\x3ctextarea[^\3e]+\3e(.+)\x3c\/textarea/) ? regexp.$1 : "";
echo(par.children[2], e);
echo(a[2].lastchild, file); // textareaまたはdivに表示
let len1 = e.length; // 文字数を求める
let len2 = len1 - e.replace(/\t/g, "").length; // 差分で改行を求めた
date = (new date(date * 1000)).tolocalestring("ja-jp");
echo(par.children[3].children[2], // 領域右下に情報を生成
`\3ci\3e${ len2 }行\3c/i\3e | \3ci\3e${ len1 }字\3c/i\3e | \3cb\3e${ date }\3c/b\3e |
\3ca target="_blank" href="/home/${ user }/${ file }"\3ecssfile\3c/a\3e`
);
msg = `${ file }/${ user }`; // spのラベル
obj.title = `loaded. ${ msg }`; // 長いと読めないので属性をセット
}

sppar.classlist.add("loaded", "opa"); // ロード済セット
settimeout(() =\3e { // 少し間をおいて
echo(obj, msg); // コマンドラベルの変更
spcounter(sppar.parentnode.children[0], 1); // 領域カウンタを増やす
par.classlist.remove("ne");
settimeout(() =\3e sppar.classlist.remove("opa"), 300); // 徐々に表示
}, 100);
});
};