//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=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;ipn)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.posts[i].title+''; 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+11&&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[i]+""; 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(); }