From 9d3c8c0e6e1a7ba43bf3dc19350d1dca68b657a3 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sun, 10 Feb 2019 11:16:07 +0800 Subject: Initial commit. --- blog/sbs_2/bloglist.js | 216 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 blog/sbs_2/bloglist.js (limited to 'blog/sbs_2/bloglist.js') diff --git a/blog/sbs_2/bloglist.js b/blog/sbs_2/bloglist.js new file mode 100644 index 0000000..c117afb --- /dev/null +++ b/blog/sbs_2/bloglist.js @@ -0,0 +1,216 @@ +//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(); +} -- cgit v1.2.3