megadoc-plugin-lua
Version:
A Lua documentation generator plugin for megadoc.
107 lines (91 loc) • 2.67 kB
JavaScript
const React = require('react');
const HighlightedText = require('components/HighlightedText');
const ModuleHeader = require('../components/ModuleHeader');
const FunctionSignature = require('../components/FunctionSignature');
const FunctionParams = require('../components/FunctionParams');
const FunctionReturns = require('../components/FunctionReturns');
const ExampleTags = require('../components/ExampleTags');
const { string, array, } = React.PropTypes;
const AllModules = React.createClass({
propTypes: {
routeName: string,
database: array,
},
render() {
const { database } = this.props;
const modules = database.filter(function(doc) {
return doc.isModule;
});
return (
<div className="lua">
{modules.map(this.renderModule)}
</div>
)
},
renderModule(moduleDoc) {
const { database } = this.props;
const entities = database.filter(function(doc) {
return doc.receiver === moduleDoc.id;
});
const functions = entities.filter(e => e.ctx.type === 'function');
const description = moduleDoc.tags.reduce(function(fragments, tag) {
if (~[ 'module' ].indexOf(tag.type)) {
fragments.push(tag.description);
}
return fragments;
}, [ moduleDoc.description ]).join('\n');
return (
<div key={moduleDoc.path}>
<ModuleHeader
doc={moduleDoc}
anchorId={
undefined
/*
TODO: port to corpus
Router.generateAnchorId({
routeName: `${this.props.routeName}.module`,
params: {
moduleId: moduleDoc.id
}
})
*/
}
/>
<HighlightedText>
{description}
</HighlightedText>
<div>
{functions.map(this.renderFunction)}
</div>
</div>
);
},
renderFunction(doc) {
return (
<div key={doc.path} className="lua-function">
<ModuleHeader
level="2"
doc={doc}
anchorId={
undefined
/* TODO: port to corpus
Router.generateAnchorId({
routeName: `${this.props.routeName}.module.entity`,
params: {
moduleId: doc.receiver,
entityId: doc.symbol + doc.id
}
})
*/
}
/>
<HighlightedText>{doc.description}</HighlightedText>
<FunctionSignature doc={doc} />
<FunctionParams doc={doc} />
<FunctionReturns doc={doc} />
<ExampleTags doc={doc} />
</div>
);
}
});
module.exports = AllModules;