chore(demos): start ionic-demo page

This commit is contained in:
Andrew Joslin
2014-05-16 13:29:52 -06:00
parent f19c6d0edc
commit 55e910d2e9
17 changed files with 414 additions and 67 deletions

119
docs/processors/demos.js Normal file
View File

@@ -0,0 +1,119 @@
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;
}
};

View File

@@ -1,56 +0,0 @@
var _ = require('lodash');
var fs = require('fs');
var path = require('canonical-path');
var log = require('winston');
var outputFolder;
var processorConfig;
var currentVersion;
module.exports = {
name: 'pages-data',
description: 'This plugin will create a new doc that will be rendered as an angularjs module ' +
'which will contain meta information about the pages and navigation',
runAfter: ['adding-extra-docs', 'component-groups-generate'],
runBefore: ['extra-docs-added'],
init: function(config) {
outputFolder = config.rendering.outputFolder;
processorConfig = config.get('processing.pages-data', {});
currentVersion = config.get('currentVersion');
},
process: function(docs, config) {
// Generate an object collection of pages that is grouped by section e.g.
// - section "directive"
// - group "Tab Bar"
// - ion-tabs
// - ion-tab
// - group ""
// - ion-toggle
// - ion-checkbox
// - ...
//
var sections = _(docs)
.filter(function(doc) { return doc.area === 'api'; })
.filter(function(doc) { return doc.module === 'ionic'; })
.filter(function(doc) { return doc.docType !== 'componentGroup'; })
.groupBy('docType')
.map(function(pages, docType) {
return {
name: docType,
components: pages.map(function(page) {
return {
href: page.path,
name: page.name,
docType: page.docType,
type: page.docType
};
})
};
})
.sortBy(function(section) {
//Directives always first
return section.name != 'directive';
})
.value();
}
};