summaryrefslogtreecommitdiff
path: root/blog/sbs_2/bloglist.js
diff options
context:
space:
mode:
Diffstat (limited to 'blog/sbs_2/bloglist.js')
-rw-r--r--blog/sbs_2/bloglist.js216
1 files changed, 0 insertions, 216 deletions
diff --git a/blog/sbs_2/bloglist.js b/blog/sbs_2/bloglist.js
deleted file mode 100644
index c117afb..0000000
--- a/blog/sbs_2/bloglist.js
+++ /dev/null
@@ -1,216 +0,0 @@
-//License: Expat(MIT)
-//Chris Xiong 2017
-var pp=5,pn=0,animating,adir=1;
-var t,c,psw,curp,cbuf,cmdtl,flt;
-function request(url,func)
-{
- var h=new XMLHttpRequest();
- h.open("GET",url);
- h.onload=()=>{func(h.response,h.status)};
- h.send();
-}
-function parsetags(tgs)
-{
- var r="";
- var a=tgs.split(",");
- r="#"+a[0];
- for(var i=1;i<a.length;++i)r+=" #"+a[i];
- return r;
-}
-function rmblk(i)
-{
- var l=c.querySelectorAll("div.pendingrm");
- if(i>=l.length)
- {
- setTimeout(function(){for(var i of l)c.removeChild(i);},500);
- return;
- }
- var e=l.item(i);
- var w=e.getBoundingClientRect().width;
- e.style.left=adir*-1.3*w+"px";
- setTimeout(rmblk,100,i+1);
-}
-function etrblk(i)
-{
- var l=c.querySelectorAll("div.block:not(.pendingrm)");
- if(!i)
- {
- for(var e of l)
- if(e.id!="ptemplate")e.style.left=(adir*1.2*e.getBoundingClientRect().width)+"px";
- }
- if(i>=l.length)
- {
- setTimeout(()=>{animating=false;},500);
- return;
- }
- var e=l.item(i);
- if(e.id!="ptemplate")
- e.style.left="0";
- setTimeout(etrblk,100,i+1);
-}
-function setfilter(f,nlp)
-{
- if(animating)return;
- if(f[0]=='#')f=f.substr(1);
- var ch=document.getElementById('tagslist').children;
- var ff=false;
- for(var i=0;i<ch.length;++i)
- if(ch[i].children[0].innerHTML=="#"+f)
- if(ch[i].children[0].classList.contains('active'))ch[i].children[0].classList.remove('active'),ff=true;
- else ch[i].children[0].classList.add('active');else ch[i].children[0].classList.remove('active');
- flt=f;if(ff)flt="";
- pn=-1;if(!nlp)loadpage(0);
-}
-function modloc()
-{
- var base=window.location.toString().substr(0,window.location.toString().search('/blog/list')+10);
- var ret=base+(flt.length?'/'+flt:'')+'/'+pn;
- window.history.replaceState("","Chrisoft::Blog",ret);
-}
-function loadpage(_pn)
-{
- if(animating||_pn==pn)return;
- if(_pn>pn)adir=1;else adir=-1;
- pn=_pn;animating=true;modloc();
- var l=c.querySelectorAll("div.block");
- for(var i of l)
- if(i.id!="ptemplate")
- {
- i.classList.add("pendingrm");
- r=i.getBoundingClientRect();
- i.style.top=(r.top-16)+"px";
- i.style.left=r.left+"px";
- i.style.width=r.width+"px";
- }
- for(var i of l)if(i.id!="ptemplate")i.style.position="fixed";
- setTimeout(rmblk,10,0);
- curp.innerHTML=(pn+1)+"/";
- request("/blog/cgi-bin/get-archive-list.cgi?pp="+pp+"&pc"+(flt.length?"&f="+flt:""),
- function(r){curp.innerHTML+=Number(r).toString();});
- request("/blog/cgi-bin/get-archive-list.cgi?pp="+pp+"&pn="+pn+(flt.length?"&f="+flt:""),
- function(r,s)
- {
- if(s!=200){animating=false;return;}
- o=JSON.parse(r);
- for(var i=0;i<o.postsOnPage;++i)
- {
- var e=t.cloneNode(true);
- e.style.display="block";e.id="";
- e.querySelector("h3").innerHTML='<a href=/blog/post/'+o.posts[i].filename+'>'+o.posts[i].title+'</a>';
- e.querySelector("span.left").innerHTML=parsetags(o.posts[i].tags);
- e.querySelector("span.right").innerHTML=o.posts[i].date;
- c.insertBefore(e,psw);
- }
- setTimeout(etrblk,10,0);
- }
- );
-}
-function lastpage(){loadpage(pn-1<0?0:pn-1);}
-function nextpage(){request("/blog/cgi-bin/get-archive-list.cgi?pp="+pp+"&pc"+(flt.length?"&f="+flt:""),function(r){var pc=Number(r);if(pn+1<pc)loadpage(pn+1);});}
-function blinit()
-{
- var parr=window.location.pathname.substr(10).split('/');
- var pflt="";ppn=0;
- if(parr.length>1&&parr[1].length)
- {
- if(!isNaN(parr[1]))ppn=Number(parr[1]);
- else if(parr.length>2&&parr[2].length&&!isNaN(parr[2])){pflt=parr[1];ppn=Number(parr[2]);}
- else if(parr.length>=2)pflt=parr[1];
- }
- t=document.getElementById("ptemplate");
- c=document.getElementById("content");
- psw=document.getElementById("insanch");
- curp=document.getElementById("curp");
- cbuf=document.getElementById("cmdbuf");
- document.onkeypress=keypress;
- document.onkeydown=(e)=>{switch(e.key){case "ArrowLeft":lastpage();break;case "ArrowRight":nextpage();break;}};
- request("/blog/cgi-bin/get-archive-list.cgi?gt",
- (r)=>
- {
- o=JSON.parse(r);
- for(var i=0;i<o.length;++i)
- {
- var l=document.createElement('li');
- l.innerHTML='<a href="javascript:void(0);" onclick="setfilter(\''+o[i]+'\');">'+o[i]+"</a>";
- document.getElementById('tagslist').appendChild(l);
- }
- pn=-1;setfilter("#"+pflt,true);loadpage(ppn);
- }
- );
-}
-
-function showcmdbuf()
-{
- cbuf.style.opacity="1";
- if(cmdtl){clearTimeout(cmdtl);cmdtl=0;}
- cmdtl=setTimeout(execcmd,1000);
-}
-function execcmd()
-{
- var v=false;
- switch(cbuf.innerHTML)
- {
- case "h":case "k":
- lastpage();v=true;
- break;
- case "j":case "l":
- nextpage();v=true;
- break;
- case "gg":
- loadpage(0);v=true;
- break;
- case "G":
- v=true;
- request("/blog/cgi-bin/get-archive-list.cgi?pp="+pp+"&pc",
- function(r){var pc=Number(r);loadpage(pc-1);}
- );
- break;
- case "xyzzy":
- cbuf.innerHTML="Going minesweeping!";
- v=true;setTimeout(()=>{window.location.href="/minesweeper";},500);
- break;
- }
- if(parseInt(cbuf.innerHTML).toString()+"G"==cbuf.innerHTML.trim())
- {
- v=true;
- request("/blog/cgi-bin/get-archive-list.cgi?pp="+pp+"&pc",
- function(r)
- {var pc=Number(r),tpn=parseInt(cbuf.innerHTML)-1;if(tpn>=pc)tpn=pc-1;if(tpn<0)tpn=0;loadpage(tpn);}
- );
- }
- if(cbuf.innerHTML[0]==':')
- {
- var sparr=cbuf.innerHTML.split(' ');
- switch(sparr[0])
- {
- case ':setfilter':
- case ':filter':
- case ':flt':
- v=true;
- if(sparr.length<2)
- {
- cbuf.innerHTML='require 1 parameter';
- }
- else setfilter(sparr[1]);
- break;
- case ':nofilter':
- case ':noflt':
- v=true;
- setfilter('');
- break;
- }
- }
- cbuf.style.opacity="0";
- if(!v)cbuf.innerHTML="Unknown command.";
-}
-function keypress(e)
-{
- if(cbuf.style.opacity=="0")cbuf.innerHTML="";
- if(e.key.length==1)
- {
- cbuf.innerHTML+=e.key;showcmdbuf();
- if(cbuf.innerHTML.length==1&&'hjkl'.search(cbuf.innerHTML)!=-1)
- execcmd();
- }
- if(e.key=="Enter")execcmd();
-}