diff options
Diffstat (limited to 'generator/main.js')
-rw-r--r-- | generator/main.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/generator/main.js b/generator/main.js new file mode 100644 index 0000000..0d86ca5 --- /dev/null +++ b/generator/main.js @@ -0,0 +1,86 @@ +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'); +const 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')); + +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')); +} |