mikser
Version:
Real-time static site generator
48 lines (44 loc) • 1.67 kB
JavaScript
let Promise = require('bluebird');
var _ = require('lodash');
let path = require('path');
module.exports = function (mikser, context) {
let debug = mikser.debug('versions');
let versions;
if (context.entity.meta && context.entity.meta.versions) {
versions = context.entity.meta.versions;
}
else if (context.layout.meta && context.layout.meta.versions) {
versions = context.layout.meta.versions;
}
if (versions) {
context.version = function(name) {
if (context.entity.canonical) {
return context.entity.canonical + '/' + name;
} else {
return context.entity.meta.href + '/' + name;
}
}
return Promise.map(_.keys(versions), (name) => {
let version = _.cloneDeep(context.entity);
delete version.meta.versions;
version._id += "." + name;
version.meta.href = context.entity.meta.href + '/' + name;
if (mikser.config.cleanUrls) {
version.destination = version.destination.replace(mikser.config.cleanUrlDestination, name + '/' + mikser.config.cleanUrlDestination);
} else {
let dir = path.dirname(version.destination);
let basename = path.basename(version.destination);
basename = basename.replace('.', '.' + name + '.');
version.destination = path.join(dir, basename);
}
version.meta.layout = versions[name];
version.canonical = context.entity.meta.href;
version.url = mikser.utils.getUrl(version.destination);
debug('Adding', '[' + name + ']', 'version for:', context.entity._id);
return mikser.runtime.importDocument(version, context.strategy, context.database);
});
} else {
return Promise.resolve();
}
}