UNPKG

steady-static

Version:

Steady is a nodeJS static site generator

81 lines (70 loc) 2.32 kB
var fs = require('fs'), marked = require('marked'), gulp = require('./gulp.js'), chalk = require('chalk'); var constructor = { buildAll: function(){ var files = fs.readdirSync('./src/_pages'); files.forEach(function(page){ var contents = fs.readFileSync('./src/_pages/' + page, 'utf8'), slicedPage = constructor.slicePage(contents), layout = fs.readFileSync('./src/_layouts/' + slicedPage.options.layout + '.html', 'utf8'), pageRender = constructor.buildPage(slicedPage, layout); constructor.movePage(pageRender, slicedPage.options); }); }, buildOne: function(path){ var page = path.split('/'), page = page[page.length-1], contents = fs.readFileSync('./src/_pages/' + page, 'utf8'), slicedPage = constructor.slicePage(contents), layout = fs.readFileSync('./src/_layouts/' + slicedPage.options.layout + '.html', 'utf8'), pageRender = constructor.buildPage(slicedPage, layout); constructor.movePage(pageRender, slicedPage.options); }, slicePage: function(contents){ var commentStart = contents.indexOf('<!--') + 4, commentEnd = contents.indexOf('-->'), options = contents.slice(commentStart, commentEnd).trim(), options = options.split('\n'), optionsArr = [], content = contents.replace(/<!--[\s\S]*?(?:-->|$)/ig, '').replace(/^\s+|\s+$/g, ''); options.forEach(function(option){ var option = option.split(':'); optionsArr[option[0]] = option[1].trim(); }); return { options: optionsArr, content: content } }, buildPage: function(page, layout){ var contentTags = layout.match(/{{\s*(.*?)+\s*}}/g).map(function(x) { return x.match(/[a-zA-Z\=\".]+/); }), contentPosition, page; contentTags.forEach(function(tag){ if(tag[0] === 'body'){ contentPosition = layout.indexOf(tag.input); page = layout.replace(tag.input, marked(page.content)); } }); return page; }, movePage: function(page, options){ if(options.url === '/'){ fs.writeFile('./site/index.html', page); }else{ var path = options.url; fs.exists('./site' + path, function(exists){ if(exists){ fs.writeFile('./site' + path + '/index.html', page) }else{ fs.mkdir('./site' + path, function(){ fs.writeFile('./site' + path + '/index.html', page); }); } }); } } } module.exports = constructor;