summaryrefslogtreecommitdiff
path: root/blog/sbs_2/blogpost.js
diff options
context:
space:
mode:
Diffstat (limited to 'blog/sbs_2/blogpost.js')
-rw-r--r--blog/sbs_2/blogpost.js103
1 files changed, 103 insertions, 0 deletions
diff --git a/blog/sbs_2/blogpost.js b/blog/sbs_2/blogpost.js
new file mode 100644
index 0000000..4c17772
--- /dev/null
+++ b/blog/sbs_2/blogpost.js
@@ -0,0 +1,103 @@
+//License: Expat (MIT)
+//Chrisoft Xiong 2017
+var prev,succ,tocid=0,headerlist=[];
+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 dfs(el,le,p)
+{
+ var e=document.createElement('li');
+ e.innerHTML='<a class="toctarg" href="#tocanch'+tocid+'">'+el.innerHTML+'</a>';
+ le.appendChild(e);
+ el.id='tocanch'+(tocid++);
+ el.classList.add('tvis');
+ var che=null,i;
+ for(i=p+1;i<headerlist.length;)
+ {
+ if(headerlist[i].tagName<=el.tagName)break;
+ if(headerlist[i].classList.contains('notoc'))continue;
+ if(che===null)
+ {
+ var te=document.createElement('li');
+ che=document.createElement('ul');
+ che.classList.add('tocnode');
+ te.appendChild(che);
+ le.appendChild(te);
+ }
+ i=dfs(headerlist[i],che,i);
+ }
+ return i;
+}
+function bpinit()
+{
+ var parr=window.location.pathname.substr(10).split('/');
+ var pflt="";ppn=0;
+ if(parr.length>1&&parr[1].length)
+ {
+ request("/blog/cgi-bin/get-post-content.cgi?p="+parr[1],
+ (r,s)=>
+ {
+ if(s>=400)window.location="/blog";
+ var p1=r.search('\n');
+ var title=r.substr(0,r.search('\n'));
+ var p2=r.substr(p1+1).search('\n');
+ var date=r.substr(p1+1,p2);
+ var p3=r.substr(p1+p2+2).search('\n');
+ var tags=r.substr(p1+p2+2,p3);
+ document.getElementById("title").innerHTML=title;
+ document.getElementById("titleh").innerHTML=title;
+ document.getElementById("datetags").innerHTML=date+"<br>"+parsetags(tags);
+ document.getElementById("article").innerHTML=r.substr(p1+p2+p3+3);
+ var l=document.getElementById("article").querySelectorAll("script");
+ for(var i of l)
+ {
+ var s=document.createElement("script");
+ s.async=true;
+ s.src=i.src;
+ document.getElementById("article").appendChild(s);
+ }
+ var tgs=tags.split(',');
+ for(var i=0;i<tgs.length;++i)
+ {
+ var l=document.createElement('li');
+ l.innerHTML='<a href="/blog/list/'+tgs[i]+'/">'+tgs[i]+"</a>";
+ document.getElementById('tagslist').appendChild(l);
+ }
+ request("/blog/cgi-bin/get-archive-list.cgi?qn="+parr[1],
+ (r,s)=>
+ {
+ if(s>=400)return;
+ var o=JSON.parse(r);
+ prev=o.prev;succ=o.succ;
+ }
+ );
+ l=document.getElementById('article').querySelectorAll('h2,h3,h4,h5,h6');
+ var tocroot=document.getElementById('tocroot');
+ for(var i of l)
+ {
+ if(!i.classList.contains('notoc'))headerlist.push(i);
+ }
+ for(var i=0;i<headerlist.length;)i=dfs(headerlist[i],tocroot,i);
+ if(!tocroot.children.length)document.getElementById('tocouter').style.display='none';
+ for(var i=0;i<tgs.length;++i)
+ footnoter();
+ if(window.location.hash.length&&document.querySelector(window.location.hash))
+ window.scroll(window.scrollX,document.querySelector(window.location.hash).getBoundingClientRect().top);
+ }
+ );
+ }
+}
+function prevpost(){if(prev.length)window.location="/blog/post/"+prev;}
+function succpost(){if(succ.length)window.location="/blog/post/"+succ;}