索引取得 3.1.2

■ソース
[diary:172206]
[beforeExec]
exec_ini = function(){
Fx.ver = "3.1.2";
Fx.moveWeit = false;
Fx.moveAllWeit = false;
Fx.moveAllCnt = 1;
Fx.imgAct = 0;
Fx.img = 0;
Fx.fullMoveNum = 0;
Fx.pageCNT = 0;
Fx.user = null;
Fx.imgViewCnt = 0;
Fx.beforeKey = "/";
Fx.before = 0;
Fx.offset = 0;
Fx.defaultUri = "";
Fx.beforePageAct = true;

Fid("indexForm").elements["diary"].value = Fx.codeNo;
echo("mainUri", document.title = "索引取得 " + Fx.ver).href = "/home/yadokari/main.html?diary=" + Fx.codeNo;

};
entry = function(){
exec_ini();
if(Fx.loc.match(/(oid|user)=([a-z0-9\-]+)/)) Fx.user = RegExp.$2;
if(Fx.user != null){
echo("indexUser", Fx.user);
Fx.cate = Fx.loc.match(/(cate|c)=(\d+)/) ? RegExp.$2 : "0";
var uri = Fx.loc.match(/uri=(.+)/) ?
RegExp.$1.replace(/n=\d+/, "n=50") :
"/cgi-bin/diary.cgi?oid=" + Fx.user + ";n=50;c=" + Fx.cate;
if(Fx.loc.match(/key=([\/0-9]+)/)){
Fx.beforeKey = RegExp.$1;
Fx.beforePageAct = false;
}
if(Fx.loc.match(/before=(\d+)/)) Fx.before = Number(RegExp.$1);
if(Fx.loc.match(/img=(\d+)/)) Fx.img = Number(RegExp.$1);

if(Fx.loc.match(/offset=(\d+)/)) Fx.offset = Number(RegExp.$1);
createBeforePageLink(uri,false);
if(Fx.before > 0) uri = uri.replace(/;s=\d+/,"") + ";s=" + Fx.beforeKey.split("/")[Fx.before];
Fx.e(uri);
} else {
indexUserClear();
}
};
nextGetLink = function(uri){ Fx.e(uri, "getBeforeInfo"); };
Lo.getBeforeInfo = function(doc){
var n, str = doc || res(Re.getBeforeInfo);
if(n = str.match(/\x3cimg.+?src="[^"]+"/gi)) echo("imgFullMax", n.length, "math");
Fx.img = Number(echo("imgFullMax"));
if(str.match(/(\/cgi\-bin\/diary\.cgi\?oid=[a-z0-9\-]+[^"]+)">\x3cspan title="より古い記事へ"/)){
createBeforePageLink(RegExp.$1, true);
} else showBeforeLink();
};
createBeforePageLink = function(uri,fg){

var num = 0;
var obj = Fid("linkDisp");
if(Fx.defaultUri == "") Fx.defaultUri = uri;
Fx.pageCNT++;
if(fg && uri.match(/s=(\d+)/)){
num = RegExp.$1;
Fx.beforeKey += num + "/";
}
echo("linkDisp", " loadding now (S" + (Fx.offset + Fx.pageCNT - 1) + ") ");

if(fg){
if(Fx.pageCNT < 11) setTimeout('nextGetLink("' + uri + '")', 50);
else showBeforeLink(num);
} else showBeforeLink(num);
};
showBeforeLink = function(num){
var str = "", no = Fx.beforeKey.split("/").length - 1;
var n = Fx.offset;
var uri = '\x3ca href="/home/yadokari/main.html?diary=' + Fx.codeNo;

for(var i = 0; i < no; i++){
if(i == 10){
str += '>> ' + uri + '&offset=' +(n + 10) + '&uri=' +
Fx.defaultUri.replace(/;?s=\d+/, '') + ';s=' + num + '">' + (n + i) + '-\x3c/a>';
} else {
str += uri + '&key=' + Fx.beforeKey +

'&before=' + i + '&img=' + Fx.img + '&uri=' + Fx.defaultUri + '"' +
(i == Fx.before ? 'class="beforeAct"' : '') + '>' + (n == 0 ? 'S' : '') + (n + i) + '\x3c/a> ';
}
}
echo("linkDisp", str);
echo("imgFullMax", Fx.img);
};
documentLoad = function(uri,no){ Fx.e(uri, "doc"); };
Lo.doc = function(){
var str = res(Re.doc);
str = str.replace(/^.+\x3cdiv id="main"\x3e/, "");
var n,s1;
echo("imgDisp", "");
if(n = str.match(/\x3cimg.+?src="[^"]+"/gi)) createImgViewer(n);
Fx.a1 = str.split("\x3chr />");

Fx.a1.shift(); Fx.a1.pop();
createIndexList(Fx.a1);
};
indexUserCheck = function(){
if(Fid("indexFormButton").disabled == false) indexUserClear();
};
indexUserClear = function(){
Fx.user = null;
Fid("indexFormButton").disabled = true;
createCateSelect("");
Fid("indexUser").focus();
};
getCateInfo = function(){
var obj = Fid("indexUser");
var user = echo(obj);
if(user == ""){
alert("IDを入力してください");
obj.focus();
} else Fx.e("/home/" + user + "/diary/menu.html", "category");
};
Lo.category = function(msg){

var str = msg || res(Re.category);
if(str.match(/Category\x3c\/div(.+?)\x3c\/div/)) createCateSelect(RegExp.$1);
else { Lo.entry.err("未登録のユーザーIDです"); return; }
};
cateSelChange = function(){
Fid("indexFormButton").focus();
}
imgClick = function(obj){
var o = Fap(document.body, Fce("span"));
o.className = "imgViewDisp";
var n = Fx.imgViewCnt;

var w = n % 5, w2 = Math.floor(n / 5);
o.style.top = ((30 * w) + 144) + (w2 * 15) + "px";
o.style.left = ((30 * w) + 60 + (200 * w2)) + "px";
Fx.imgViewCnt++;
echo(o, '\x3cimg src="' + obj.src + '" onclick="imgRemove(this)"/>');
};
imgRemove = function(obj){
document.body.removeChild(obj.parentNode);
Fx.imgViewCnt--;
};
imgLoad = function(obj){
var img = imgTrueSize(obj);

var w = img.width, h = img.height;
var dw = 79, dh = 50;
var o = obj.style,x,y;
if(w <= dw && h <= dh){
obj.width = w;
obj.height = h;
o.padding = ((dh-h)/2) + "px " + ((dw-w)/2) + "px";
} else {
if(h/w > dh/dw){

rw = obj.width = dh*w/h;
o.padding = "0 " + ((dw-rw)/2) + "px";
} else {
rh = obj.height = dw*h/w;

o.padding = ((dh-rh)/2) + "px 0";
}
}
};
createCateSelect = function(msg){
var str;
if(msg != ""){
var op = msg.match(/c=\d+">[^<]+</g);
str = '<option value="' + op.join('\/option><option value="') + '/option>';
str = str.replace(/c=(\d+)"/g, function(e0,e1){
return e1 + '"' +( e1 == Fx.cate ? ' selected="selected"' : ''); });
str = '<select name="cate" onchange="cateSelChange()" id="cateSelect"><option value="0">全カテゴリ</option>' + str + '</select>';
Fid("indexFormButton").disabled = false;
} else {
str = '\x3cinput type="button" value="チェック" onclick="getCateInfo()" />';
}
echo("cateDisp", str);
if(msg != "" && Fx.user == null) Fid("cateSelect").focus();
};
createImgViewer = function(doc){
var imgNo = doc.length;
echo("imgMax", imgNo);
var src,i,j;
for(j = 0; j < doc.length; j++){
i = j + 1;
o = Fap(Fid("imgDisp"), Fce("div"));
src = doc[j].replace(/^.+(src=)/, "$1");
echo(o, '\x3cspan>' + i + '\x3c/span>\x3cimg ' + src + ' width="79" height="50" alt="img' + i + '" onerror="imgLoadError(this,' + i + ')" onload="imgLoad(this)" onclick="imgClick(this)" />');

}
imgFullMaxCnt();
};
imgLoadError = function(obj,no){
obj.src = "files/err.jpg";
var o = Ftag(Fid("indexDisp"), "div"), cnt = 0,a;
for(var i = 0; i < o.length; i++){
if(echo(o[i]).match(/img1"?>画像\[(\d+)/)){
cnt += Number(RegExp.$1);
if(cnt >= no) break;
}
}
if(i == o.length) return;
var fg = cnt == no;
a = Ftag(o[i], "span"); a = a[a.length - 2];
a.style.color = fg ? "tomato" : "magenta";
a.title = fg ? "404 file not found" : (cnt - no + 1) + "番目がエラー";
a.style.cursor = "default";
};
Lo.entry = function(){
var str = res(Re.entry);
Lo.category(str);
str = str.replace(/^.+\x3cdiv id="main"\x3e/, "");
if(Fx.beforePageAct) Lo.getBeforeInfo(str);

var n,s1;
if(n = str.match(/\x3cimg.+?src="[^"]+"/gi)) createImgViewer(n);
str = str.replace(/http:\/\/www.eclat.cc/g, "");
Fx.a1 = str.split("\x3chr />");
if(Fx.a1.shift().match(/\((\d+) 件\)/)){
var n = Number(RegExp.$1);
var n1 = Math.floor(n / 50) + 1;
echo("linkDispInfo", "全" + n1 + "ページ (" + RegExp.$1 + " 件) ");
}
Fx.a1.pop();
createIndexList(Fx.a1);
};

createIndexList = function(code){
var s1 = "",uri1,title,date,arc,arcDate,photo = 0;
var obj = Fid("indexDisp"); echo(obj, "");
for(var i = 0; i < code.length; i++){
a = code[i];
uri1 = a.match(/(\/home\/[a-z0-9\-]+\/diary\/\d{4}\/\d\d\/\d+\.html)/) ?
'/home/yadokari/main.html?diary=172198&uri=' + RegExp.$1 : "";
title = a.match(/\x3ca[^>]+>([^<]+)/) ? RegExp.$1 : "";
arc = a.match(/id="A(\d+)/) ? RegExp.$1 : "";

var cate = a.match(/C(\d+)/) ? ("00" + RegExp.$1).slice(-3) : "000";
date = a.match(/\d\d(\d\d) (\d\d\/\d\d) \d\d:\d\d/) ? RegExp.$1 + "/" + RegExp.$2 : "";
if(a.match(/wrote A\d+ \d\d(\d\d) (\d\d\/\d\d)/)){
date = "(" + RegExp.$1 + "/" + RegExp.$2 + ")";
}
var n, o, imgNo = 0, mp3No = 0, imgAno = 0, tube = 0;
if(n = a.match(/\x3cimg.+?src="[^"]+"/gi)) imgNo = n.length;
if(n = a.match(/\x3ca[^>]+\.(gif|jpg|jpeg|png)/gi)) imgAno = n.length;
imgNo += "/" + imgAno;
var mp3Title = "";
if(n = a.match(/href="[^"]+\.(mp3|mid)"/gi)){
mp3No = n.length;
mp3Title = n.join(",").replace(/"|href=/g, "");
}
var tubeTitle = "";
if(n = a.match(/http:\/\/www.youtube.com\/watch\?v=[a-zA-Z0-9_\-]+/g)){
tube = n.length;
tubeTitle = n.join(",");
}
var c = imgNo == "0/0" ? "img0" : "img1";
var m = mp3No || tube ? "mu1" : "mu0";

var o = Fap(obj, Fce("div")); o. className = "inde";
echo(o, ['[ ' , ('0' + (i + 1)).slice(-2) , ' ] ',

'\x3ca href="/home/yadokari/main.html?diary=172231&page=', arc ,
'" class="arc">A' + arc + '\x3c/a> \x3cspan class="date">', date ,
'\x3c/span> \x3cspan class="cate">C', cate ,
'\x3c/span> \x3ca href="', uri1 , '" class="uri">', title , '\x3c/a> ',
'\x3cspan class="rt">\x3cspan class="', c , '">画像[' , imgNo , ']\x3c/span> ',
'\x3cspan class="' , m , '" ','>音楽[' ,

(mp3Title != "" ? '\x3ca href=javascript:mp3Play("' + mp3Title + '",1)>' + mp3No + '\x3c/a>' : mp3No) ,
'/' , (tubeTitle != "" ? '\x3ca href=javascript:tubePlay("' + tubeTitle + '",1)>' + tube + '\x3c/a>' : tube) ,

']\x3c/span> \x3c/span>'
]);
}
o = Fid("footerDisp"); o.style.display = "block";

Fap(Fid("bottomDisp"), o);
};
mp3DispClose = function(){ echo("mp3Disp", ""); };
mp3Play = function(uri,n){
var no = n - 1;
var o = uri.split(",");
var str = '\x3cembed width="150" height="24" src="' + o[no] +

'" autostart="true" loop="true" repeat="true">\x3c/embed> ';
if(o.length > 1){

for(var i = 0; i < o.length; i++){
str += (i == no ? (i + 1) + " " :
'\x3ca href=javascript:mp3Play("' + uri + '",' + (i + 1) + ')>' + (i + 1) + '\x3c/a> '
);
}
}
str += '\x3ca href="javascript:mp3DispClose()">とじる\x3c/a>';
echo("mp3Disp", str);
};
tubePlay = function(str,n){ return; };
imgFullMoveEntry = function(no){ imgMoveEntry(Fx.fullMoveNum * no); };
imgMoveEntry = function(no){
if(Fx.moveWeit || no == 0) return;
Fx.moveWeit = true;
var o = Fid("imgDisp"), a = o.childNodes;
if(no > 0){

o.insertBefore(a[a.length-1], a[0]);
o.style.left = (o.offsetLeft - 90) + "px";
}
moveLoop(no);
};
moveLoop = function(no){

var o = Fid("imgDisp"), x = o.offsetLeft;
var fg = no > 0;
o.style.left = (x + (fg ? 30 : -30)) + "px";
if(fg && x < 30 || !fg && x > 0) setTimeout("moveLoop(" + no + ")",40);

else {
if(!fg) Fap(o, o.childNodes[0]);
o.style.left = "60px";
Fx.moveWeit = false;
fg ? --no : ++no;
if(no != 0) setTimeout("imgMoveEntry(" + no + ")", 0);
}
};
msgShow = function(fg){
var str = "";
if(fg){
str = Fx.a1.join("");
str = str.replace(/(href="?)(\/)/g, "$1/home/yadokari/main.html?diary=172198&uri=$2");
}

echo("indexView", str);
Fid("topDisp").style.display = fg ? "none" : "block";
};
window.onresize = imgFullMaxCnt = function(){
Fx.fullMoveNum = Math.floor((Fid("rightDisp").offsetLeft - Fid("imgDisp").offsetLeft) / 90);
};
Lo.entry.err = Lo.category.err = function(msg){
echo("indexDisp", '\x3cdiv class="loadding">' + (msg || "一件も日記を書いていません(^-^;") + '\x3c/div>');

Fid("indexFormResetButton").focus();
};
[/beforeExec]
[cssText]
html { padding:0px; background-attachment:fixed; }
body { margin:0; padding:0; }
#footerDisp { display:none; }

#mainDisp {
position:absolute; top:0; left:0; width:100%; margin:0; padding:0;
}
#topDisp {
position:fixed; left:0px; top:0px; width:100%; height:140px;
background-color:#fff;
}
#mainLogo {
position:absolute; top:11px; left:64px;
font:120%/1.0 "Times New Roman"; z-index:10;
}
#menuTop {
font:80%/1.0 "Times New Roman";
}
#mp3Disp { vertical-align:top; font-size:90%; display:inline-box; }
#indexForm {
text-align:right; margin:0;
position:absolute; top:6px; right:15px;
}
a { text-decoration:none; }
a:link { color:steelblue; }
a:hover { color:magenta; }
a:visited { color:brown; }
a:active { color:red; }
#imgCont {
font-size:90%; text-align:right;
cursor:default; font-family:Verdana;
position:absolute; top:35px; right:15px;
}
#imgDisp {
width:auto; overflow:hidden; position:absolute; left:60px; min-height:76px;
white-space:pre; top:54px; padding-left:4px; min-width:100%;
background:#fff url(files/film2.jpg) repeat-x 2px bottom;
border-top:1px solid #eee;
}
#spaceDisp {
position:fixed; top:140px; right:0px; width:100%;
height:5px; background-color:#fff;
}
#imgDisp div {
display:inline-block; width:81px; padding-bottom:10px;
margin-right:4px; padding-right:4px; text-align:center; border-right:1px solid #fff;
}
#imgDisp span {
display:block; height:26px; font:bold 90%/1.0 "Times New Roman"; color:#808080;
}
#imgDisp div img {
background-color:#fff; cursor:pointer;
}
#leftDisp {
position:absolute; top:0px; left:0px; width:60px; height:145px;
background:#fff url(http://www.nancyan.net/image/futari/m/menu_line.gif) repeat-y;
}
#rightDisp {
position:absolute; top:54px; right:0px; width:17px; height:86px;
background-color:#fff;
}
#bottomDisp {
padding-left:60px; padding-right:10px; padding-bottom:1em;
}
#beforeDisp { height:150px; }
#indexDisp {
background:url(files/kabe12.gif);
border-top:1px solid #ccc;
margin-bottom:1em;
}
#indexMenu {
font:90%/1.0 Arial; padding-bottom:.25em;
}
.inde {
font:90%/1.5 Arial; border-bottom:1px solid #ccc;
}
.inde:hover { border-bottom:1px solid red; }
.arc,.cate { font-family:"Times New Roman"; }
.rt { float:right; }
.img1,.img0,.mu0,.mu1 { display:inline-block; width:85px; font-family:Verdana; }
.img0,.mu0 { color:#ccc; }

.moku_body .date { color:#808080; }
.cate { font-family:Arial; color:darkgreen; }
#menuBottom { margin-bottom:1em; font-size:90%; }
#imgCont a { color:tomato; }
#imgCont a:hover { text-decoration:underline; background-color:#ff9; color:red; }
.loadding { padding:10em 0; text-align:center; width:100%; color:#808080; }
#cateSelect:focus { background-color:#ff9; }
.imgViewDisp {
position:absolute; top:126px; left:100px; z-index:30;
padding:3px; border:4px ridge #903; display:inline-block; cursor:pointer;
background-color:#fff;
}
#linkDisp,#linkDispInfo { margin-right:.25em; padding-right:.25em; border-right:1px solid #ccc; }
#linkDisp a.beforeAct { color:#000; text-decoration:underline; }
[/cssText]
[body]
<$$div id="topDisp">
<$$div id="mainLogo">
<$$a id="mainUri"><$$/a> <$$span id="menuTop"><$$/span><$$span id="mp3Disp"><$$/span>
<$$/div>
<form id="indexForm" action="/home/yadokari/main.html" charset="utf-8" method="get" >
<input type="hidden" name="diary" />
<$$span id="cateDisp"><$$/span>
<input type="text" size="16" name="user" id="indexUser" onmousedown="indexUserCheck()"
/><input type="submit" value="取得" id="indexFormButton" disabled="disable"
/><input type="reset" value="クリア" onclick="indexUserClear()" id="indexFormResetButton" />
</form>
<$$div id="imgCont">
<$$span id="linkDispInfo"><$$/span>
<$$span id="linkDisp"><$$/span>
<$$a href="javascript:imgMoveEntry(-1)" title="moveLeft"><|<$$/a> <$$a href="javascript:imgFullMoveEntry(-1)" title="pageMoveLeft"><<<$$/a> 画像 [ <$$span id="imgFullMax">0<$$/span>/<$$span id="imgMax">0<$$/span> ] <$$a href="javascript:imgFullMoveEntry(1)" title="pageMoveRight">>><$$/a> <$$a href="javascript:imgMoveEntry(1)" title="moveRight">|><$$/a><$$/div>
<$$div id="imgDisp"><$$/div>
<$$div id="spaceDisp"><$$/div>
<$$div id="leftDisp"><$$/div>
<$$div id="rightDisp"><$$/div>
<$$/div>
<$$div id="bottomDisp">
<$$div id="beforeDisp"><$$/div>
<$$div id="indexMenu">
ページ [ <$$a href="javascript:msgShow(1)">表示<$$/a> ] [ <$$a href="javascript:msgShow(0)">とじる<$$/a> ]

<$$/div>
<$$div id="indexView"><$$/div>
<$$div id="indexDisp">
<$$div class="loadding">loadding now!<$$/div>
<$$/div>
<$$div id="menuBottom"><$$/div>
<$$/div>

[/body]
[exec]
entry();
[/exec]
[/diary:172206]

■仕様書 Wrote 2010 03/17 22:07