front-matter-markdown
Version:
get the config and toc object from the markdown string.
86 lines (74 loc) • 2.38 kB
JavaScript
(function() {
var AstListToFileObject, isArray, isString;
isArray = require('util-ex/lib/is/type/array');
isString = require('util-ex/lib/is/type/string');
module.exports = AstListToFileObject = (function() {
var bodyToObject, listToObject, textToObject;
function AstListToFileObject(src, dest) {
if (src.type === 'list') {
return listToObject(src, dest);
}
}
AstListToFileObject.listToObject = listToObject = function(listNode, dest) {
if (dest == null) {
dest = {};
}
dest.ordered = listNode.ordered;
dest.contents = bodyToObject(listNode.body);
return dest;
};
AstListToFileObject.bodyToObject = bodyToObject = function(bodyNode) {
var i, len, node, result;
if (!isArray(bodyNode)) {
bodyNode = [bodyNode];
}
result = [];
for (i = 0, len = bodyNode.length; i < len; i++) {
node = bodyNode[i];
if (node.type !== 'listitem') {
continue;
}
result.push(textToObject(node.text));
}
return result;
};
AstListToFileObject.textToObject = textToObject = function(textNode) {
var i, len, node, result;
result = {};
if (isArray(textNode)) {
result.title = [];
result.contents = [];
for (i = 0, len = textNode.length; i < len; i++) {
node = textNode[i];
if (node.type === 'link') {
result.title = result.title.concat(node.text);
result.path = node.href;
if (node.title) {
result.hint = node.title;
}
} else if (node.type === 'list') {
listToObject(node, result);
} else {
result.title = result.title.concat(node);
}
}
if (isArray(result.title) && result.title.length === 1) {
result.title = result.title[0];
}
} else if (isString(textNode)) {
result.title = textNode;
} else if (textNode.type === 'link') {
result.title = textNode.text;
result.path = textNode.href;
if (textNode.title) {
result.hint = textNode.title;
}
} else {
result.title = textNode;
}
return result;
};
return AstListToFileObject;
})();
}).call(this);
//# sourceMappingURL=ast-list-to-file-object.js.map