mirror of
https://github.com/vale981/metalsmith-layouts
synced 2025-03-05 09:31:39 -05:00
Update eslint config
This commit is contained in:
parent
1978ef4c62
commit
222a27de59
5 changed files with 121 additions and 35 deletions
|
@ -8,7 +8,6 @@ rules:
|
||||||
quotes: [2, "single", "avoid-escape"]
|
quotes: [2, "single", "avoid-escape"]
|
||||||
|
|
||||||
# Relax rules to allow current code-style
|
# Relax rules to allow current code-style
|
||||||
curly: [2, "multi"]
|
|
||||||
new-cap: 0
|
new-cap: 0
|
||||||
no-shadow: 0
|
no-shadow: 0
|
||||||
no-unused-vars: 0
|
no-unused-vars: 0
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,4 +1,4 @@
|
||||||
eslint=node_modules/.bin/eslint lib/index.js test/index.js
|
eslint=node_modules/.bin/eslint lib/**/*.js test/index.js
|
||||||
mocha=node_modules/.bin/mocha --reporter spec --harmony-generators
|
mocha=node_modules/.bin/mocha --reporter spec --harmony-generators
|
||||||
|
|
||||||
node_modules: package.json
|
node_modules: package.json
|
||||||
|
|
34
lib/helpers/check.js
Normal file
34
lib/helpers/check.js
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/**
|
||||||
|
* Dependencies
|
||||||
|
*/
|
||||||
|
var match = require('multimatch');
|
||||||
|
var utf8 = require('is-utf8');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Expose `check`
|
||||||
|
*/
|
||||||
|
module.exports = check;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper for checking whether a file should be processed.
|
||||||
|
*
|
||||||
|
* @param {Object} files
|
||||||
|
* @param {String} file
|
||||||
|
* @param {String} pattern
|
||||||
|
* @return {Boolean}
|
||||||
|
*/
|
||||||
|
function check(files, file, pattern){
|
||||||
|
var data = files[file];
|
||||||
|
|
||||||
|
// Don't process binary files
|
||||||
|
if (!utf8(data.contents)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only process files that match the pattern (if there is a pattern)
|
||||||
|
if (pattern && !match(file, pattern)[0]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
79
lib/index.js
79
lib/index.js
|
@ -1,21 +1,27 @@
|
||||||
|
/**
|
||||||
|
* Dependencies
|
||||||
|
*/
|
||||||
var consolidate = require('consolidate');
|
var consolidate = require('consolidate');
|
||||||
var debug = require('debug')('metalsmith-layouts');
|
var debug = require('debug')('metalsmith-layouts');
|
||||||
var each = require('async').each;
|
var each = require('async').each;
|
||||||
var extend = require('extend');
|
var extend = require('extend');
|
||||||
var match = require('multimatch');
|
|
||||||
var omit = require('lodash.omit');
|
var omit = require('lodash.omit');
|
||||||
var utf8 = require('is-utf8');
|
|
||||||
|
/**
|
||||||
|
* Helpers
|
||||||
|
*/
|
||||||
|
var check = require('./helpers/check');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Expose `plugin`.
|
* Expose `plugin`.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
module.exports = plugin;
|
module.exports = plugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Settings.
|
* Settings
|
||||||
|
*
|
||||||
|
* Options supported by metalsmith-layouts
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var settings = ['engine', 'directory', 'pattern', 'default'];
|
var settings = ['engine', 'directory', 'pattern', 'default'];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,56 +36,83 @@ var settings = ['engine', 'directory', 'pattern', 'default'];
|
||||||
*/
|
*/
|
||||||
|
|
||||||
function plugin(opts){
|
function plugin(opts){
|
||||||
|
/**
|
||||||
|
* Init
|
||||||
|
*/
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
if (typeof opts === 'string') opts = { engine: opts };
|
|
||||||
if (!opts.engine) throw new Error('"engine" option required');
|
|
||||||
|
|
||||||
|
// Accept string option to specify the engine
|
||||||
|
if (typeof opts === 'string') {
|
||||||
|
opts = {engine: opts};
|
||||||
|
}
|
||||||
|
|
||||||
|
// An engine should be specified
|
||||||
|
if (!opts.engine) {
|
||||||
|
throw new Error('"engine" option required');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Throw an error for unsupported engines or typos
|
||||||
|
if (!consolidate[opts.engine]) {
|
||||||
|
throw new Error('Unknown template engine: "' + opts.engine + '"');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Map options to local variables
|
||||||
var engine = opts.engine;
|
var engine = opts.engine;
|
||||||
var dir = opts.directory || 'layouts';
|
var dir = opts.directory || 'layouts';
|
||||||
var pattern = opts.pattern;
|
var pattern = opts.pattern;
|
||||||
var def = opts.default;
|
var def = opts.default;
|
||||||
|
|
||||||
|
// Move all unrecognised options to params
|
||||||
var params = omit(opts, settings);
|
var params = omit(opts, settings);
|
||||||
|
|
||||||
// Throw an error for unsupported engines or typos
|
/**
|
||||||
if (!consolidate[engine]) throw new Error('Unknown template engine: "' + engine + '"');
|
* Main plugin function
|
||||||
|
*/
|
||||||
return function(files, metalsmith, done){
|
return function(files, metalsmith, done){
|
||||||
var metadata = metalsmith.metadata();
|
var metadata = metalsmith.metadata();
|
||||||
var matches = {};
|
var matches = {};
|
||||||
|
|
||||||
function check(file){
|
/**
|
||||||
var data = files[file];
|
* Stringify files that pass the check, and store in matches
|
||||||
var lyt = data.layout || def;
|
*/
|
||||||
if (!utf8(data.contents)) return false;
|
|
||||||
if (pattern && !match(file, pattern)[0]) return false;
|
|
||||||
if (!lyt) return false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.keys(files).forEach(function(file){
|
Object.keys(files).forEach(function(file){
|
||||||
if (!check(file)) return;
|
if (!check(files, file, pattern)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
debug('stringifying file: %s', file);
|
debug('stringifying file: %s', file);
|
||||||
var data = files[file];
|
var data = files[file];
|
||||||
data.contents = data.contents.toString();
|
data.contents = data.contents.toString();
|
||||||
matches[file] = data;
|
matches[file] = data;
|
||||||
});
|
});
|
||||||
|
|
||||||
each(Object.keys(matches), convert, done);
|
/**
|
||||||
|
* Render files
|
||||||
|
*/
|
||||||
function convert(file, done){
|
function convert(file, done){
|
||||||
debug('converting file: %s', file);
|
debug('converting file: %s', file);
|
||||||
var data = files[file];
|
var data = files[file];
|
||||||
|
|
||||||
|
// Deep clone params (by passing 'true')
|
||||||
var clonedParams = extend(true, {}, params);
|
var clonedParams = extend(true, {}, params);
|
||||||
var clone = extend({}, clonedParams, metadata, data);
|
var clone = extend({}, clonedParams, metadata, data);
|
||||||
var str = metalsmith.path(dir, data.layout || def);
|
var str = metalsmith.path(dir, data.layout || def);
|
||||||
var render = consolidate[engine];
|
var render = consolidate[engine];
|
||||||
|
|
||||||
render(str, clone, function(err, str){
|
render(str, clone, function(err, str){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
|
|
||||||
data.contents = new Buffer(str);
|
data.contents = new Buffer(str);
|
||||||
debug('converted file: %s', file);
|
debug('converted file: %s', file);
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Render all matched files
|
||||||
|
*/
|
||||||
|
each(Object.keys(matches), convert, done);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,9 @@ describe('metalsmith-layouts', function(){
|
||||||
Metalsmith('test/fixtures/basic')
|
Metalsmith('test/fixtures/basic')
|
||||||
.use(layouts({ engine: 'swig' }))
|
.use(layouts({ engine: 'swig' }))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/basic/expected', 'test/fixtures/basic/build');
|
equal('test/fixtures/basic/expected', 'test/fixtures/basic/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -18,7 +20,9 @@ describe('metalsmith-layouts', function(){
|
||||||
Metalsmith('test/fixtures/basic')
|
Metalsmith('test/fixtures/basic')
|
||||||
.use(layouts('swig'))
|
.use(layouts('swig'))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/basic/expected', 'test/fixtures/basic/build');
|
equal('test/fixtures/basic/expected', 'test/fixtures/basic/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -28,7 +32,9 @@ describe('metalsmith-layouts', function(){
|
||||||
Metalsmith('test/fixtures/pattern')
|
Metalsmith('test/fixtures/pattern')
|
||||||
.use(layouts({ engine: 'swig', pattern: '*.md' }))
|
.use(layouts({ engine: 'swig', pattern: '*.md' }))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/pattern/expected', 'test/fixtures/pattern/build');
|
equal('test/fixtures/pattern/expected', 'test/fixtures/pattern/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -38,7 +44,9 @@ describe('metalsmith-layouts', function(){
|
||||||
Metalsmith('test/fixtures/default')
|
Metalsmith('test/fixtures/default')
|
||||||
.use(layouts({ engine: 'swig', pattern: '*.md', default: 'default.html' }))
|
.use(layouts({ engine: 'swig', pattern: '*.md', default: 'default.html' }))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/pattern/expected', 'test/fixtures/pattern/build');
|
equal('test/fixtures/pattern/expected', 'test/fixtures/pattern/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -48,7 +56,9 @@ describe('metalsmith-layouts', function(){
|
||||||
Metalsmith('test/fixtures/directory')
|
Metalsmith('test/fixtures/directory')
|
||||||
.use(layouts({ engine: 'swig', directory: 'templates' }))
|
.use(layouts({ engine: 'swig', directory: 'templates' }))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/directory/expected', 'test/fixtures/directory/build');
|
equal('test/fixtures/directory/expected', 'test/fixtures/directory/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -59,7 +69,9 @@ describe('metalsmith-layouts', function(){
|
||||||
.metadata({ title: 'Global Title' })
|
.metadata({ title: 'Global Title' })
|
||||||
.use(layouts({ engine: 'swig' }))
|
.use(layouts({ engine: 'swig' }))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/metadata/expected', 'test/fixtures/metadata/build');
|
equal('test/fixtures/metadata/expected', 'test/fixtures/metadata/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -69,7 +81,9 @@ describe('metalsmith-layouts', function(){
|
||||||
Metalsmith('test/fixtures/binary')
|
Metalsmith('test/fixtures/binary')
|
||||||
.use(layouts({ engine: 'swig' }))
|
.use(layouts({ engine: 'swig' }))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/binary/expected', 'test/fixtures/binary/build');
|
equal('test/fixtures/binary/expected', 'test/fixtures/binary/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -79,7 +93,9 @@ describe('metalsmith-layouts', function(){
|
||||||
Metalsmith('test/fixtures/include')
|
Metalsmith('test/fixtures/include')
|
||||||
.use(layouts({ engine: 'swig' }))
|
.use(layouts({ engine: 'swig' }))
|
||||||
.build(function(err){
|
.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/include/expected', 'test/fixtures/include/build');
|
equal('test/fixtures/include/expected', 'test/fixtures/include/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
@ -93,9 +109,13 @@ describe('metalsmith-layouts', function(){
|
||||||
}));
|
}));
|
||||||
|
|
||||||
instance.build(function(err){
|
instance.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
instance.build(function(err){
|
instance.build(function(err){
|
||||||
if (err) return done(err);
|
if (err) {
|
||||||
|
return done(err);
|
||||||
|
}
|
||||||
equal('test/fixtures/partials/expected', 'test/fixtures/partials/build');
|
equal('test/fixtures/partials/expected', 'test/fixtures/partials/build');
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue