Files
ionic-framework/docs/processors/demos.js
2014-05-16 15:05:13 -06:00

120 lines
3.3 KiB
JavaScript

var path = require('canonical-path');
var log = require('winston');
var _ = require('lodash');
var currentVersion;
var contentsFolder;
module.exports = {
name: 'demos',
runAfter: ['api-docs'],
runBefore: ['index-page'],
description: 'Create demos',
init: function(config) {
currentVersion = config.get('currentVersion');
contentsFolder = config.get('rendering.contentsFolder');
},
process: function(docs, config, extraData) {
var demoTags = [
'javascript',
'html',
'css',
'spec',
'scenario'
];
var extensions = {
javascript: 'js',
html: 'html',
css: 'css',
spec: 'js',
scenario: 'js'
};
var demoFolder = path.join(config.get('versionData.current.folder'),
'${docType}/${name}');
var demoPath = '${name}/${filename}.${extension}';
var templatePath = 'demo/${filename}.template.${extension}';
var allDemos = [];
_(docs)
.filter(function(doc) { return doc.demos; })
.forEach(function(doc) {
var outputFolder = _.template(demoFolder,doc);
doc.demos.forEach(function(demo) {
var demoData = {};
allDemos.push(demoData);
var outputFolder = _.template(demoFolder, doc);
demoData.module = demo.module;
demoData.name = demo.name;
demoData.docName = doc.name;
demoData.href = '/' + outputFolder + '/' + demo.name;
demoTags.forEach(function(tagName) {
var data = demo.tags.tagsByName[tagName];
if (data && data.length) {
var content = data.map(function(d) {
return d.description;
}).join('\n');
var filename = tagName;
var ext = extensions[tagName];
var outputPath = outputFolder + '/' + _.template(demoPath, {
name: demo.name,
filename: filename,
extension: ext
});
var template = _.template(templatePath, {
filename: filename,
extension: ext
});
demoData[tagName] = {
path: outputPath,
content: content
};
//Write all the files for this demo (html, css, js)
docs.push({
docType: 'demo',
id: doc.name + '/' + demo.name,
outputPath: config.get('demos.outputFolder') + '/' + outputPath,
template: template,
contents: content
});
}
});
var outputPath = outputFolder + '/' + _.template(demoPath, {
name: demo.name,
filename: 'index',
extension: 'html'
});
//Write this specific demo's index page
docs.push({
docType: 'demo',
outputPath: path.join(config.get('demos.outputFolder'), outputPath),
template: 'demo_index.template.html',
demoData: demoData,
name: doc.name
});
});
})
.value();
//Write the demo page for this whole version (eg at /nightly)
docs.push({
docType: 'demo',
template: 'demo_index.template.html',
outputPath: path.join(
config.get('demos.outputFolder'),
config.get('versionData.current.folder'),
'index.html'
)
});
extraData.demos = allDemos;
}
};