aboutsummaryrefslogtreecommitdiff
path: root/generator/listrenderer.js
diff options
context:
space:
mode:
Diffstat (limited to 'generator/listrenderer.js')
-rw-r--r--generator/listrenderer.js68
1 files changed, 68 insertions, 0 deletions
diff --git a/generator/listrenderer.js b/generator/listrenderer.js
new file mode 100644
index 0000000..fd58b3a
--- /dev/null
+++ b/generator/listrenderer.js
@@ -0,0 +1,68 @@
+module.exports={
+ render:function(outf,pginfo,posts){return _render(outf,pginfo,posts);},
+ set_template:function(tmplf){return _set_template(tmplf);}
+};
+const fs=require('fs');
+const jsdom=require('jsdom');
+const path=require('path');
+let template_file='';
+let tmplcont='';
+
+function _set_template(tmplf)
+{
+ template_file=tmplf;
+ tmplcont=fs.readFileSync(template_file,'utf8');
+}
+
+async function _render(outf,pginfo,posts)
+{
+ const tr=new jsdom.JSDOM(tmplcont);
+ const trd=tr.window.document;
+
+ const tags_list=trd.getElementById('tagslist');
+ const posts_list=trd.getElementById('postslist');
+ const atag_template=trd.getElementById('active_taglist_item_template');
+ const tag_template=trd.getElementById('taglist_item_template');
+ const pitm_template=trd.getElementById('post_item_template');
+
+ for(let i of pginfo.tags)
+ {
+ const newnode=(i==pginfo.atag?atag_template:tag_template).cloneNode(true);
+ newnode.id='';
+ const a=newnode.querySelector('a');
+ a.innerHTML=i;
+ a.href=`/blog/list/${i}`;
+ tags_list.appendChild(newnode);
+ }
+
+ for(let i of posts)
+ {
+ let newnode=pitm_template.cloneNode(true);
+ newnode.id='';
+ const mdate=new Date(i.mdate);
+ const mdstr=`${mdate.getFullYear()}-${(mdate.getMonth()+1+'').padStart(2,'0')}-${(mdate.getDate()+'').padStart(2,'0')}`
+ newnode.querySelector('#title').innerHTML=i.title;
+ newnode.querySelector('#title').href=`/blog/post/${i.file}.html`;
+ newnode.querySelector('#tags').innerHTML='#'+i.tags.split(',').join(' #');
+ newnode.querySelector('#time').innerHTML=`${i.date}/${mdstr}`;
+ newnode.querySelector('#title').id=
+ newnode.querySelector('#tags').id=
+ newnode.querySelector('#time').id='';
+ posts_list.appendChild(newnode);
+ }
+
+ trd.getElementById('page').innerHTML=`${pginfo.cp+1}/${pginfo.pc}`;
+ trd.getElementById('prepage').href=pginfo.cp>0?
+ `/blog/list/${pginfo.atag?pginfo.atag+'/':''}${pginfo.cp-1}.html`
+ :'#';
+ trd.getElementById('nexpage').href=pginfo.cp<pginfo.pc-1?
+ `/blog/list/${pginfo.atag?pginfo.atag+'/':''}${pginfo.cp+1}.html`
+ :'#';
+
+ atag_template.parentNode.removeChild(atag_template);
+ tag_template.parentNode.removeChild(tag_template);
+ pitm_template.parentNode.removeChild(pitm_template);
+
+ fs.writeFileSync(outf,trd.documentElement.outerHTML,'utf8');
+ return outf;
+}