Skip to content

Commit

Permalink
v0.0.2
Browse files Browse the repository at this point in the history
* Added image scaler
* New config object
* Improved HTML generator
* Support for YAML frontmatter
  • Loading branch information
Frank Boës committed Aug 5, 2016
1 parent 6f12e50 commit 64a8263
Show file tree
Hide file tree
Showing 9 changed files with 88 additions and 62 deletions.
3 changes: 3 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,6 @@ indent_size = 2

[*.md]
trim_trailing_whitespace = false

[*.json]
insert_final_newline = false
7 changes: 2 additions & 5 deletions converter.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
#!/usr/bin/env node
'use strict';

/* global DateSetFromIsoString */

var fs = require('fs-extra');
var pkg = JSON.parse(fs.readFileSync('./package.json'));


var glob = require("glob");
var glob = require("glob");
var readline = require("readline");
var yamljs = require('yamljs');
var yamljs = require('yamljs');

/**
* Convert given UTC string into Date object
Expand Down
6 changes: 1 addition & 5 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
#!/usr/bin/env node
'use strict';

var fs = require('fs-extra');
var pkg = JSON.parse(fs.readFileSync('./package.json'));
var config = JSON.parse(fs.readFileSync('./user/config.json'));

var Generator = require('./lib/generator');

Generator.init(config, pkg);
Generator.init();
Generator.on('articlesBuild', function (post) {
Generator.buildOtherPages();
Generator.copyImages();
Expand Down
9 changes: 9 additions & 0 deletions lib/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
'use strict';

var fs = require('fs-extra');
var config = JSON.parse(fs.readFileSync('./user/config.json'));
var pkg = JSON.parse(fs.readFileSync('./package.json'));

config.directories = pkg.directories;

module.exports = config;
55 changes: 32 additions & 23 deletions lib/generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,28 @@ var fs = require('fs-extra');
var shell = require('shelljs');
var glob = require("glob");
var PostReader = require('./post_reader');
var config = require('./config');
var gm = require('gm').subClass({imageMagick: true});

/**
* Generator used for creating the blog
* @constructor
*/
var Generator = new EventEmitter();

var config = {}, pkg = {}, templates;
var templates;
var index = require('./index')();

/**
* [init description]
* @param {[type]} Cconfig [description]
* @param {[type]} Cpkg [description]
* @return {[type]} [description]
*/
Generator.init = function ( Cconfig, Cpkg ) {
config = Cconfig;
pkg = Cpkg;
Generator.init = function ( ) {
templates = {
post: fs.readFileSync(pkg.directories.theme+'/post.html', 'utf8'),
index: fs.readFileSync(pkg.directories.theme+'/index.html', 'utf8'),
rss: fs.readFileSync(pkg.directories.theme+'/rss.xml', 'utf8'),
sitemap: fs.readFileSync(pkg.directories.theme+'/sitemap.xml', 'utf8')
post: fs.readFileSync(config.directories.theme+'/post.html', 'utf8'),
index: fs.readFileSync(config.directories.theme+'/index.html', 'utf8'),
rss: fs.readFileSync(config.directories.theme+'/rss.xml', 'utf8'),
sitemap: fs.readFileSync(config.directories.theme+'/sitemap.xml', 'utf8')
};

Object.keys(templates).map(function (template) {
Expand All @@ -42,12 +40,12 @@ Generator.init = function ( Cconfig, Cpkg ) {
* @return {[type]} [description]
*/
Generator.buildArticles = function () {
glob(pkg.directories.data + "/**/*.md", function (er, files) {
glob(config.directories.data + "/**/*.md", function (er, files) {
var i, finished = 0;

PostReader.on('parsed', function (post) {
shell.mkdir('-p', pkg.directories.htdocs + '/' + post.meta.Url);
fs.writeFile(pkg.directories.htdocs + '/' + post.meta.Url + 'index.html', Mustache.render(templates.post, {
shell.mkdir('-p', config.directories.htdocs + '/' + post.meta.Url);
fs.writeFile(config.directories.htdocs + '/' + post.meta.Url + 'index.html', Mustache.render(templates.post, {
meta: post.meta,
content: post.html,
config: config
Expand All @@ -74,49 +72,49 @@ Generator.buildArticles = function () {
Generator.buildOtherPages = function ( ) {
var pagedPosts = index.getPagedPosts(5), page, indexFilename;

fs.writeFile(pkg.directories.htdocs + '/sitemap.json', JSON.stringify(index.getPosts()), function() {
fs.writeFile(config.directories.htdocs + '/sitemap.json', JSON.stringify(index.getPosts()), function() {
console.log("Wrote sitemap.json");
});

fs.remove(pkg.directories.htdocs + '/index*', function (err) {
fs.remove(config.directories.htdocs + '/index*', function (err) {
for (page = 0; page < pagedPosts.length; page ++) {
var curPageObj = index.getPageData(page, pagedPosts.length);
curPageObj.index = pagedPosts[page];
curPageObj.config = config;
fs.writeFile(pkg.directories.htdocs + '/' + curPageObj.currentUrl, Mustache.render(templates.index, curPageObj), function() {
fs.writeFile(config.directories.htdocs + '/' + curPageObj.currentUrl, Mustache.render(templates.index, curPageObj), function() {
console.log("Wrote index file");
});
}
});

fs.writeFile(pkg.directories.htdocs + '/posts.rss', Mustache.render(templates.rss, {
fs.writeFile(config.directories.htdocs + '/posts.rss', Mustache.render(templates.rss, {
index: index.getPosts(10),
config: config
}), function () {
console.log("Wrote posts.rss");
});

fs.writeFile(pkg.directories.htdocs + '/sitemap.xml', Mustache.render(templates.sitemap, {
fs.writeFile(config.directories.htdocs + '/sitemap.xml', Mustache.render(templates.sitemap, {
index: index.getPosts(10),
config: config
}),function () {
console.log("Wrote sitemap.xml");
});

var tags = index.getTags();
fs.remove(pkg.directories.htdocs + '/tagged', function (err) {
fs.remove(config.directories.htdocs + '/tagged', function (err) {
Object.keys(tags).map(function (key) {
shell.mkdir('-p', pkg.directories.htdocs + '/tagged/' + tags[key].id);
shell.mkdir('-p', config.directories.htdocs + '/tagged/' + tags[key].id);
tags[key].config = config;
fs.writeFile(pkg.directories.htdocs + '/tagged/' + tags[key].id + '/index.html', Mustache.render(templates.index, tags[key]), function() {
fs.writeFile(config.directories.htdocs + '/tagged/' + tags[key].id + '/index.html', Mustache.render(templates.index, tags[key]), function() {
console.log("Wrote tagged/" + tags[key].id + '/index.html');
});
});
});
};

Generator.copyImages = function () {
glob(pkg.directories.data + "/**/*.{png,jpg,gif}", function (er, files) {
glob(config.directories.data + "/**/*.{png,jpg,gif}", function (er, files) {
var i, copiedFiles = 0;
var copyEnd = function () {
copiedFiles ++;
Expand All @@ -125,7 +123,18 @@ Generator.copyImages = function () {
}
};
for (i = 0; i < files.length; i++) {
fs.copy(files[i], files[i].replace(/^user\//, 'htdocs/'), copyEnd);
var targetFile = files[i].replace(/^user\//, config.directories.htdocs + '/');
fs.copy(files[i], targetFile, copyEnd);
config.imageSizes.forEach(function(imageSize) {
// console.log(targetFile.replace(/(\.[a-z]+$)/,'-'+imageSize[0]+'x'+imageSize[1]+'$1'));
gm(files[i])
.resize(imageSize[0], imageSize[1])
.noProfile()
.write(targetFile.replace(/(\.[a-z]+$)/,'-'+imageSize[0]+'x'+imageSize[1]+'$1'),function() {

})
;
})
}
});
};
Expand Down
44 changes: 24 additions & 20 deletions lib/post.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,17 @@
'use strict';

var fs = require('fs');
var fs = require('fs');
var markdownConvert = require('marked');
var config = JSON.parse(fs.readFileSync('./user/config.json'));
var dateFormat = require('dateformat');
var toolshed = require('./js-toolshed/src/js-toolshed');
var config = require('./config');
var dateFormat = require('dateformat');
var toolshed = require('./js-toolshed/src/js-toolshed');

var markyMark = function (html, relUrl) {
if (relUrl) {
html = html.replace(/(!\[.+?\]\()/g, '$1'+relUrl);
}
return markdownConvert(html)
.replace(/<p>===<\/p>/g,'')
.replace(/(<\/?h)3/g,'$14')
.replace(/(<\/?h)2/g,'$13')
.replace(/(<\/?h)1/g,'$12')
.replace(
/(<p>)\s*(?:<a.+>)?[^<]*?youtube.+v=([a-zA-Z0-9\-_]+)[^>]*?(?:<\/a>)?\s*(<\/p>)/g,
'<div class="video-player youtube"><iframe allowfullscreen="true" src="https://www.youtube.com/embed/$2?enablejsapi=1"></iframe></div>'
)
.replace(
/(<p>)\s*(?:<a.+>)?[^<]*?vimeo.com\/(\d+)[^>]*?(?:<\/a>)?\s*(<\/p>)/g,
'<div class="video-player vimeo"><iframe allowfullscreen="true" src="https://player.vimeo.com/video/$2"></iframe></div>'
)
.replace(/--/g, '—')
html = html
.replace(/\s--\s/g, ' — ')
.replace(/\.\.\./g, '…')
.replace(/… …/g, '… ')
.replace(/\(C\)/g, '©')
Expand All @@ -40,6 +28,22 @@ var markyMark = function (html, relUrl) {
.replace(/(\d)\s*-\s*(\d)/g,'$1–$2')
.replace(/(\s)-(\s)/g,'$1–$2')
.replace(/(\d\s*)(x|\*)(\s*\d)/g,'$1×$3')
.replace(/"(\S.*?\S)"/g,'„$1“')
.replace(/'(\S.*?\S)'/g,'‚$1‘')
;
return markdownConvert(html)
.replace(/<p>===<\/p>/g,'<!-- more -->')
.replace(/(<\/?h)3/g,'$14')
.replace(/(<\/?h)2/g,'$13')
.replace(/(<\/?h)1/g,'$12')
.replace(
/(<p>)\s*(?:<a.+>)?[^<]*?youtube.+v=([a-zA-Z0-9\-_]+)[^>]*?(?:<\/a>)?\s*(<\/p>)/g,
'<div class="video-player youtube"><iframe allowfullscreen="true" src="https://www.youtube.com/embed/$2?enablejsapi=1"></iframe></div>'
)
.replace(
/(<p>)\s*(?:<a.+>)?[^<]*?vimeo.com\/(\d+)[^>]*?(?:<\/a>)?\s*(<\/p>)/g,
'<div class="video-player vimeo"><iframe allowfullscreen="true" src="https://player.vimeo.com/video/$2"></iframe></div>'
)
;
};

Expand All @@ -48,7 +52,7 @@ var markyMark = function (html, relUrl) {
* @constructor
*/
var Post = function (markdown, meta) {
var htmlTeaser = markyMark(meta.Description.trim() || '', config.basePath + meta.Url);
var htmlTeaser = markyMark(meta.Description.trim() || '', meta.Url);
if (meta.Keywords !== undefined) {
meta.Tags = [];
meta.Keywords.trim().split(/,\s+/).forEach(function(tag){
Expand All @@ -73,7 +77,7 @@ var Post = function (markdown, meta) {
return {
markdown: markdown,
meta: meta,
html: markyMark(markdown),
html: markyMark(markdown, meta.Url),
htmlTeaser: htmlTeaser
};
};
Expand Down
16 changes: 9 additions & 7 deletions lib/post_reader.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
'use strict';

var EventEmitter = require( "events" ).EventEmitter;
var fs = require('fs');
var config = require('./config');
var Post = require('./post');
var readline = require("readline");
var yamljs = require('yamljs');
var util = require('util');

/**
* Represents a single blog item.
Expand All @@ -9,12 +15,6 @@ var EventEmitter = require( "events" ).EventEmitter;
var PostReader = new EventEmitter();

PostReader.parse = function ( file ) {
var Post = require('./post');
var fs = require('fs');
var readline = require("readline");
var yamljs = require('yamljs');
var util = require('util');

EventEmitter.call(this);
var readYaml = true,
yamlBuffer = '',
Expand All @@ -36,6 +36,8 @@ PostReader.parse = function ( file ) {
}).on('line', function (line) {
if (readYaml && line.match(/\S+:[\s\S]/)) {
yamlBuffer += line + "\n";
} else if(readYaml && line.match(/^---$/)) {
// do nothing
} else {
if (readYaml) {
readYaml = false;
Expand Down Expand Up @@ -71,7 +73,7 @@ PostReader.parse = function ( file ) {
exports.meta.Date = fileStat.mtime;
}

exports.meta.Url = file.replace(/user\//,'').replace(/\.md$/,'/');
exports.meta.Url = file.replace(/user\//,config.basePath).replace(/\.md$/,'/');

//console.log(exports);
PostReader.emit('parsed', Post(exports.markdown, exports.meta));
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "blogophon",
"version": "0.0.1",
"version": "0.0.2",
"description": "Most-simple blog",
"main": "index.js",
"scripts": {
Expand All @@ -13,6 +13,7 @@
],
"devDependencies": {
"beepbeep": "^1.2.0",
"gm": "^1.23.0",
"gulp": "^3.9.1",
"gulp-jshint": "^2.0.1",
"gulp-livereload": "^3.8.1",
Expand Down
7 changes: 6 additions & 1 deletion user/_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,10 @@
"basePath": "/",
"description": "Most-simple blog",
"language": "en",
"deploy":""
"deploy":"",
"imageSizes": [
[200,200],
[320,640],
[800,600]
]
}

0 comments on commit 64a8263

Please sign in to comment.