in tools/api-builder/angular.io-package/processors/addJadeDataDocsProcessor.js [85:202]
$process: function(docs) {
var extraDocs = [];
var modules = [];
var data = {};
var appDataDoc = {
id: 'api-list-data',
aliases: ['api-list-data'],
docType: 'api-list-data',
data: data
};
extraDocs.push(appDataDoc);
// create additional doc for auditing
var appDataAuditDoc = {
id: 'api-list-audit',
aliases: ['api-list-audit'],
docType: 'api-list-audit',
data: data
};
extraDocs.push(appDataAuditDoc);
/*
* Create Data for Modules
*
* Modules must be public and have content
*/
_.forEach(docs, function(doc) {
if (doc.docType === 'module' && !doc.internal && doc.exports.length) {
modules.push(doc);
// GET DATA FOR INDEX PAGE OF MODULE SECTION
var indexPageInfo = [{
name: 'index',
title: _.map(path.basename(doc.fileInfo.baseName).split('_'), function(part) {
return titleCase(part);
}).join(' '),
intro: doc.description.replace('"', '\"').replace(/\s*(\r?\n|\r)\s*/g," "),
docType: 'module'
}];
var decorators = {};
// GET DATA FOR EACH PAGE (CLASS, VARS, FUNCTIONS)
var modulePageInfo = _(doc.exports)
.map(function(exportDoc) {
// if it ends with "Decorator", we store it in the map
// to later merge with the token
if (exportDoc.name.endsWith("Decorator") && exportDoc.callMember) {
var p = processExportDoc(exportDoc.callMember);
decorators[exportDoc.name] = {
stability : p.stability,
howToUse : p.howToUse,
whatItDoes : p.whatItDoes,
security : p.security,
description : exportDoc.callMember.description,
docType: 'decorator'
};
return null;
} else {
var p = processExportDoc(exportDoc);
// Data inserted into jade-data.template.html
var dataDoc = {
name: exportDoc.name + '-' + exportDoc.docType,
title: exportDoc.name,
docType: exportDoc.docType,
exportDoc: exportDoc,
stability: p.stability,
howToUse: p.howToUse,
whatItDoes: p.whatItDoes,
security: p.security
};
if (exportDoc.symbolTypeName) dataDoc.varType = titleCase(exportDoc.symbolTypeName);
if (exportDoc.originalModule) dataDoc.originalModule = exportDoc.originalModule;
return dataDoc;
}
})
.filter(function(s) { return !!s; }) // filter out all null values
.sortBy('name')
.value();
// find a matching symbol for every decorator item
// and merge the data
_.forEach(Object.keys(decorators), function(name) {
var varToken = name.split("Decorator")[0];
var c = modulePageInfo.filter(function(n) { return n.exportDoc.name === varToken; });
c[0].docType = decorators[name].docType;
Object.assign(c[0].exportDoc, decorators[name]);
});
doc.childPages = modulePageInfo;
// ADD TO APP DATA DOC
data[doc.id] = modulePageInfo;
// COMBINE WITH INDEX PAGE DATA
var allPageData = indexPageInfo.concat(modulePageInfo);
// PUSH JADE DATA DOC TO EXTRA DOCS ARRAY
extraDocs.push({
id: doc.id + "-data",
aliases: [doc.id + "-data"],
docType: 'jade-data',
originalDoc: doc,
data: allPageData
});
}
});
return docs.concat(extraDocs);
}