Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
tommy351 committed Apr 4, 2013
2 parents 6905a88 + 8c1fb00 commit bc7462d
Show file tree
Hide file tree
Showing 36 changed files with 673 additions and 168 deletions.
34 changes: 19 additions & 15 deletions lib/generate.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ var util = require('./util'),
renderFn = require('./render'),
render = renderFn.render,
renderFile = renderFn.renderFile,
isRenderable = renderFn.isRenderable,
getOutput = renderFn.getOutput,
model = require('./model'),
dbAssets = model.assets,
extend = require('./extend'),
renderer = extend.renderer.list(),
generator = extend.generator.list(),
route = require('./route'),
i18n = require('./i18n').i18n,
Expand All @@ -21,6 +22,8 @@ var util = require('./util'),
baseDir = hexo.base_dir,
sourceDir = hexo.source_dir,
themeDir = hexo.theme_dir,
urlConfig = config.url,
rootConfig = config.root,
layoutDir = themeDir + 'layout/';

var hiddenFileRegex = /^[^\.](?:(?!\/\.).)*$/,
Expand All @@ -39,7 +42,7 @@ module.exports = function(options, callback){
},
function(next){
async.forEach(generator, function(item, next){
item(model, function(layout, locals, callback){
item(model, function(path, layout, locals){
if (!Array.isArray(layout)) layout = [layout];

var newLocals = {
Expand All @@ -48,6 +51,8 @@ module.exports = function(options, callback){
config: config,
theme: themeConfig,
__: themei18n.get,
path: path,
url: urlConfig + rootConfig + path,
layout: 'layout',
cache: !watch
};
Expand All @@ -60,9 +65,8 @@ module.exports = function(options, callback){
}
}

renderFile(layoutPath, newLocals, function(err, result){
if (err) throw err;
callback(null, result);
route.set(path, function(fn){
renderFile(layoutPath, newLocals, fn);
});
}, next);
}, next);
Expand Down Expand Up @@ -103,8 +107,8 @@ module.exports = function(options, callback){
},
// Load theme source
function(next){
var sourceDir = themeDir + 'source/',
list = Object.keys(renderer);
var sourceDir = themeDir + 'source/';/*,
list = Object.keys(renderer);*/

fs.exists(sourceDir, function(exist){
if (!exist) return next();
Expand Down Expand Up @@ -135,16 +139,10 @@ module.exports = function(options, callback){
dbAssets.insert({source: source.substring(baseDir.length), mtime: mtime});
}

if (list.indexOf(extname) === -1){
var content = function(fn){
fn(null, fs.createReadStream(source));
};
content.latest = latest;
route.set(item, content);
} else {
if (isRenderable(extname)){
var filename = item.substring(0, item.length - extname.length - 1),
fileext = pathFn.extname(filename),
dest = filename + '.' + (fileext ? fileext.substring(1) : renderer[extname].output);
dest = filename + '.' + (fileext ? fileext.substring(1) : getOutput(extname));

var content = function(fn){
render({path: source}, function(err, result){
Expand All @@ -154,6 +152,12 @@ module.exports = function(options, callback){
};
content.latest = latest;
route.set(dest, content);
} else {
var content = function(fn){
fn(null, fs.createReadStream(source));
};
content.latest = latest;
route.set(item, content);
}

next();
Expand Down
85 changes: 83 additions & 2 deletions lib/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,68 @@ var async = require('async'),
route = require('./route'),
util = require('./util');

var defaults = {
// Site
title: 'Hexo',
subtitle: '',
description: '',
author: 'John Doe',
email: '',
language: '',
// URL
url: 'http://yoursite.com',
root: '/',
permalink: ':year/:month/:day/:title/',
tag_dir: 'tags',
archive_dir: 'archives',
category_dir: 'categories',
// Writing
new_post_name: ':title.md',
default_layout: 'post',
auto_spacing: false,
titlecase: false,
max_open_file: 100,
filename_case: 0,
highlight: {
enable: true,
backtick_code_block: true,
line_number: true,
tab_replace: '',
},
// Category & Tag
default_category: 'uncategorized',
category_map: {},
tag_map: {},
// Archives
archive: 2,
category: 2,
tag: 2,
// Server
port: 4000,
logger: false,
logger_format: '',
// Date / Time format
date_format: 'MMM D YYYY',
time_format: 'H:mm:ss',
// Pagination
per_page: 10,
pagination_dir: 'page',
// Disqus
disqus_shortname: '',
// Extensions
theme: 'light',
exclude_generator: [],
// Deployment
deploy: {}
};

module.exports = function(args){
var safe = args.safe ? true : false,
debug = args.debug ? true : false,
dirname = __dirname,
baseDir = process.cwd() + '/',
db = new Database(baseDir + 'db.json'),
version = require('../package.json').version,
config = {};

var hexo = global.hexo = {
Expand All @@ -30,7 +86,7 @@ module.exports = function(args){
get scaffold_dir(){return baseDir + 'scaffolds/'},
get core_dir(){return path.dirname(dirname) + '/'},
get lib_dir(){return dirname + '/'},
get version(){return require('../package.json').version},
get version(){return version},
get env(){return env},
get safe(){return safe},
get debug(){return debug},
Expand Down Expand Up @@ -65,7 +121,7 @@ module.exports = function(args){
if (exist){
render.render({path: configPath}, function(err, result){
if (err) return new Error('Config compiled error');
config = result;
config = _.extend(defaults, result);
Object.freeze(config);
next(null, true);
});
Expand All @@ -74,6 +130,31 @@ module.exports = function(args){
}
});
},
// Update package.json
update: ['config', function(next, results){
if (!results.config) return next();

var packagePath = baseDir + 'package.json';

fs.exists(packagePath, function(exist){
if (exist){
var obj = require(packagePath);

if (version === obj.version) return next();

obj.version = version;
} else {
var obj = {
name: 'hexo',
version: version,
private: true,
dependencies: {}
};
}

fs.writeFile(packagePath, JSON.stringify(obj, null, ' '), next);
});
}],
// Load plugins
load_plugins: ['config', function(next, results){
if (safe || !results.config) return next();
Expand Down
8 changes: 4 additions & 4 deletions lib/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ var moment = require('moment'),
config = hexo.config,
siteUrl = config.url + '/',
sourceDir = hexo.source_dir,
catDir = (config.category_dir || 'categories') + '/',
tagDir = (config.tag_dir || 'tags') + '/',
defaultCategory = config.default_category || 'uncategorized',
configLink = config.permalink || ':year/:month/:day/:title/';
catDir = config.category_dir + '/',
tagDir = config.tag_dir + '/',
defaultCategory = config.default_category ,
configLink = config.permalink;

var schemaPosts = new Schema({
id: Number,
Expand Down
2 changes: 1 addition & 1 deletion lib/plugins/console/generate.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ var extend = require('../../extend'),
config = hexo.config,
publicDir = hexo.public_dir,
sourceDir = hexo.source_dir,
maxOpenFile = config && config.max_open_file ? config.max_open_file : 100;
maxOpenFile = config.max_open_file;

extend.console.register('generate', 'Generate static files', function(args, callback){
var watch = args.w || args.watch ? true : false,
Expand Down
3 changes: 2 additions & 1 deletion lib/plugins/console/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ require('./deploy');
require('./migrate');
require('./new');
require('./routes');
require('./version');
require('./version');
require('./render');
4 changes: 2 additions & 2 deletions lib/plugins/console/new.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ extend.console.register('new', 'Create a new article', function(args, callback){
}

var config = hexo.config,
defaultLayout = config.default_layout || 'post',
defaultLayout = config.default_layout,
title = args._.pop(),
layout = args._.length ? args._[0] : defaultLayout,
now = moment(),
Expand All @@ -53,7 +53,7 @@ extend.console.register('new', 'Create a new article', function(args, callback){
if (layout === 'page'){
target += escape(title) + '/index.md';
} else {
var filename = (config.new_post_name || ':title.md')
var filename = config.new_post_name
.replace(':year', now.year())
.replace(':month', now.format('MM'))
.replace(':day', now.format('DD'))
Expand Down
77 changes: 77 additions & 0 deletions lib/plugins/console/render.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
var extend = require('../../extend'),
renderFn = require('../../render'),
render = renderFn.render,
isRenderable = renderFn.isRenderable,
getOutput = renderFn.getOutput,
util = require('../../util'),
file = util.file,
fs = require('graceful-fs'),
pathFn = require('path'),
_ = require('lodash'),
async = require('async');

extend.console.register('render', 'Render file', {init: true}, function(args, callback){
var baseDir = hexo.base_dir,
outputDir = args.o || args.output || baseDir;

if (!args._.length){
console.log('No input files.');
return callback();
}

var resolve = function(path){
return pathFn.resolve(outputDir, path);
};

var getItemPath = function(path){
var extname = pathFn.extname(path);
return resolve(path.substring(0, path.length - extname.length + 1) + getOutput(extname));
};

var renderItem = function(path, callback){
if (!isRenderable(path)) return callback();

render({path: path}, args, function(err, result){
if (err) throw err;
if (!result) return callback();

if (_.isObject(result)) result = JSON.stringify(result, null, ' ');

fs.writeFile(getItemPath(path), result, callback);
});
};

async.forEach(args._, function(item, next){
item = item.toString();

async.waterfall([
function(cb){
fs.exists(item, function(exist){
if (!exist) return next();
cb();
});
},
function(cb){
fs.stat(item, function(err, stats){
if (err) throw err;

cb(null, stats.isDirectory());
});
},
function(isDirectory, cb){
if (isDirectory){
file.dir(item, function(files){
async.forEach(files, function(i, cb){
renderItem(item + '/' + i, cb);
}, next);
});
} else {
renderItem(item, next);
}
}
]);
}, function(){
console.log('Render complete.');
callback();
});
});
7 changes: 4 additions & 3 deletions lib/plugins/console/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ extend.console.register('server', 'Run server', function(args){

var startServer = function(){
app.use(config.root, express.static(publicDir));
if (hexo.debug) app.use(express.errorHandler());

if (config.root !== '/'){
app.get('/', function(req, res){
Expand Down Expand Up @@ -144,13 +145,13 @@ extend.console.register('server', 'Run server', function(args){
target = route.get(uri);

if (!target){
if (uri.substr(uri.length - 1, 1) === '/') return next();
res.redirect(req.url + '/');
if (/\/(index\.html?)?$/.test(uri)) return next();
res.redirect(uri + '/');
return;
}

target(function(err, result){
if (err) throw new Error('Route Error: ' + uri);
if (err) throw err;

res.type(path.extname(uri));

Expand Down
Loading

0 comments on commit bc7462d

Please sign in to comment.