37 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const visit = require('unist-util-visit');
 | |
| const is = require('hast-util-is-element');
 | |
| const textContent = require('hast-util-to-string');
 | |
| 
 | |
| /**
 | |
|  * Automatically add in a link to the relevant document for simple
 | |
|  * code blocks, e.g. `<code>MyClass</code>` becomes
 | |
|  * `<code><a href="path/to/myclass">MyClass</a></code>`
 | |
|  *
 | |
|  * @property docTypes an array of strings. Only docs that have one of these docTypes
 | |
|  * will be linked to.
 | |
|  * Usually set to the API exported docTypes, e.g. "class", "function", "directive", etc.
 | |
|  */
 | |
| module.exports = function autoLinkCode(getDocFromAlias) {
 | |
|   autoLinkCodeImpl.docTypes = [];
 | |
|   return autoLinkCodeImpl;
 | |
| 
 | |
|   function autoLinkCodeImpl()  {
 | |
|     return (ast) => {
 | |
|       visit(ast, node => {
 | |
|         if (is(node, 'code')) {
 | |
|           const docs = getDocFromAlias(textContent(node));
 | |
|           if (docs.length === 1 && autoLinkCodeImpl.docTypes.indexOf(docs[0].docType) !== -1) {
 | |
|             const link = {
 | |
|               type: 'element',
 | |
|               tagName: 'a',
 | |
|               properties: { href: docs[0].path },
 | |
|               children: node.children
 | |
|             };
 | |
|             node.children = [link];
 | |
|           }
 | |
|         }
 | |
|       });
 | |
|     };
 | |
|   }
 | |
| };
 |