#!/usr/bin/node
//Copyright Chris Xiong 2018
//License: Expat (MIT)
const content_dir='../content';
const template_dir='../templates';
const dest_dir='../generated';
const posts_per_listpage=5;
const fs=require('fs');
const path=require('path');
const scanner=require('./scanner');
let list=scanner.scan(content_dir,dest_dir);
const tags=scanner.build_list_index();
const taglist=Object.keys(tags).sort();
const force=process.argv.indexOf('--force')!=-1;
const postrenderer=require('./postrenderer');
postrenderer.set_template(path.join(template_dir,'post_template'));
function ensure_dir(p)
{
let needcreation=false;
try{
if(!fs.statSync(p).isDirectory())
{
needcreation=true;
fs.unlinkSync(p);
}
}catch(e){needcreation=true;}
if(needcreation)fs.mkdirSync(p);
if(!fs.statSync(p).isDirectory())throw 'shit';
}
const post_dir=path.join(dest_dir,'post');
ensure_dir(post_dir);
for(let j=0;j<list.length;++j){
const i=list[j];
if(i.needsupdate||force)
postrenderer.render(
path.join(content_dir,`${i.file}.txt`),
path.join(post_dir,`${i.file}.html`),
j?list[j-1].file:undefined,
j<list.length-1?list[j+1].file:undefined
)
.then((r)=>{console.log(`rendered: ${r}`);})
}
const listrenderer=require('./listrenderer');
listrenderer.set_template(path.join(template_dir,'list_template'));
list = list.filter((t) => (t.date.indexOf('UNLISTED') == -1));
const list_dir=path.join(dest_dir,'list');
const ppp=posts_per_listpage;
ensure_dir(list_dir);
let pc=Math.floor(list.length/ppp)+(list.length%ppp!=0);
for(let i=0;i<pc;++i)
{
const cl=list.slice(i*ppp,Math.min((i+1)*ppp,list.length));
listrenderer.render(
path.join(list_dir,`${i}.html`),
{atag:'',tags:taglist,cp:i,pc:pc},
cl
);
}
try{
fs.unlinkSync(path.join(list_dir,'index.html'));
}catch(e){};
fs.symlinkSync('0.html',path.join(list_dir,'index.html'));
for(let i of taglist)
if(tags[i].needsupdate||force)
{
const tl_dir=path.join(list_dir,i);
ensure_dir(tl_dir);
let pc=Math.floor(tags[i].posts.length/ppp)+(tags[i].posts.length%ppp!=0);
for(let j=0;j<pc;++j)
{
const cl=tags[i].posts.slice(j*ppp,Math.min((j+1)*ppp,tags[i].posts.length));
listrenderer.render(
path.join(tl_dir,`${j}.html`),
{atag:i,tags:taglist,cp:j,pc:pc},
cl
);
}
try{
fs.unlinkSync(path.join(tl_dir,'index.html'));
}catch(e){};
fs.symlinkSync('0.html',path.join(tl_dir,'index.html'));
}