steady-static
Version:
Steady is a nodeJS static site generator
81 lines (70 loc) • 2.32 kB
JavaScript
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;