Automatically mark required options in API-docs
This commit is contained in:
@@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
var lastOlxTypedef = null;
|
var lastOlxTypedef = null;
|
||||||
var olxTypes = {};
|
var olxTypes = {};
|
||||||
|
// names of the olx typenames
|
||||||
|
var olxTypeNames = [];
|
||||||
|
// types that are undefined or typedefs containing undefined
|
||||||
|
var undefinedLikes = null;
|
||||||
|
|
||||||
function addSubparams(params) {
|
function addSubparams(params) {
|
||||||
for (var j = 0, jj = params.length; j < jj; ++j) {
|
for (var j = 0, jj = params.length; j < jj; ++j) {
|
||||||
@@ -23,6 +27,63 @@ function addSubparams(params) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the description of the param, if it is found to be a required
|
||||||
|
* option of an olxTypeName.
|
||||||
|
*/
|
||||||
|
function markRequiredIfNeeded(doclet){
|
||||||
|
var memberof = doclet.memberof;
|
||||||
|
// only check doclets that belong to an olxTypeName
|
||||||
|
if (!memberof || olxTypeNames.indexOf(memberof) == -1) {
|
||||||
|
return doclet;
|
||||||
|
}
|
||||||
|
|
||||||
|
var types = doclet.type.names;
|
||||||
|
var isRequiredParam = true;
|
||||||
|
|
||||||
|
// iterate over all types that are like-undefined (see above for explanation)
|
||||||
|
for (var idx = undefinedLikes.length - 1; idx >= 0; idx--) {
|
||||||
|
var undefinedLike = undefinedLikes[idx];
|
||||||
|
// … if the current types contains a type that is undefined-like,
|
||||||
|
// it is not required.
|
||||||
|
if (types.indexOf(undefinedLike) != -1) {
|
||||||
|
isRequiredParam = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isRequiredParam) {
|
||||||
|
var reqSnippet = '<span class="required-option">Required.</span></p>';
|
||||||
|
var endsWithP = /<\/p>$/i;
|
||||||
|
var description = doclet.description;
|
||||||
|
if (description && endsWithP.test(description)) {
|
||||||
|
description = description.replace(endsWithP, ' ' + reqSnippet);
|
||||||
|
} else if (doclet.description === undefined) {
|
||||||
|
description = '<p>' + reqSnippet;
|
||||||
|
}
|
||||||
|
doclet.description = description;
|
||||||
|
}
|
||||||
|
return doclet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterates over all doclets and finds the names of types that contain
|
||||||
|
* undefined. Stores the names in the global variable undefinedLikes, so
|
||||||
|
* that e.g. markRequiredIfNeeded can use these.
|
||||||
|
*/
|
||||||
|
function findTypesLikeUndefined(doclets) {
|
||||||
|
undefinedLikes = ['undefined']; // include type 'undefined' explicitly
|
||||||
|
for (var i = doclets.length - 1; i >= 0; --i) {
|
||||||
|
var doclet = doclets[i];
|
||||||
|
if(doclet.kind === 'typedef') {
|
||||||
|
var types = doclet.type.names;
|
||||||
|
if (types.indexOf('undefined') !== -1) {
|
||||||
|
// the typedef contains 'undefined', so it self is undefinedLike.
|
||||||
|
undefinedLikes.push(doclet.longname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
exports.handlers = {
|
exports.handlers = {
|
||||||
|
|
||||||
newDoclet: function(e) {
|
newDoclet: function(e) {
|
||||||
@@ -34,6 +95,7 @@ exports.handlers = {
|
|||||||
}
|
}
|
||||||
if (doclet.kind == 'typedef') {
|
if (doclet.kind == 'typedef') {
|
||||||
lastOlxTypedef = doclet;
|
lastOlxTypedef = doclet;
|
||||||
|
olxTypeNames.push(doclet.longname);
|
||||||
olxTypes[doclet.longname] = [];
|
olxTypes[doclet.longname] = [];
|
||||||
doclet.properties = [];
|
doclet.properties = [];
|
||||||
} else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) {
|
} else if (lastOlxTypedef && doclet.memberof == lastOlxTypedef.longname) {
|
||||||
@@ -51,12 +113,14 @@ exports.handlers = {
|
|||||||
|
|
||||||
parseComplete: function(e) {
|
parseComplete: function(e) {
|
||||||
var doclets = e.doclets;
|
var doclets = e.doclets;
|
||||||
|
findTypesLikeUndefined(doclets);
|
||||||
for (var i = doclets.length - 1; i >= 0; --i) {
|
for (var i = doclets.length - 1; i >= 0; --i) {
|
||||||
var doclet = doclets[i];
|
var doclet = doclets[i];
|
||||||
var params = doclet.params;
|
var params = doclet.params;
|
||||||
if (params) {
|
if (params) {
|
||||||
addSubparams(params);
|
addSubparams(params);
|
||||||
}
|
}
|
||||||
|
markRequiredIfNeeded(doclet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user