aboutsummaryrefslogtreecommitdiff
path: root/generator/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'generator/main.js')
-rw-r--r--generator/main.js86
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'));
+}