39 lines
		
	
	
		
			1002 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1002 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| const visit = require('unist-util-visit');
 | |
| const is = require('hast-util-is-element');
 | |
| const toString = require('hast-util-to-string');
 | |
| const filter = require('unist-util-filter');
 | |
| 
 | |
| module.exports = function h1CheckerPostProcessor() {
 | |
|   return (ast, file) => {
 | |
|     file.headings = {
 | |
|       h1: [],
 | |
|       h2: [],
 | |
|       h3: [],
 | |
|       h4: [],
 | |
|       h5: [],
 | |
|       h6: [],
 | |
|       hgroup: []
 | |
|     };
 | |
|     visit(ast, node => {
 | |
|       if (is(node, ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup'])) {
 | |
|         file.headings[node.tagName].push(getText(node));
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     file.title = file.headings.h1[0];
 | |
|     if (file.headings.h1.length > 1) {
 | |
|       file.fail(`More than one h1 found in ${file}`);
 | |
|     }
 | |
|   };
 | |
| };
 | |
| 
 | |
| function getText(h1) {
 | |
|   // Remove the aria-hidden anchor from the h1 node
 | |
|   const cleaned = filter(h1, node => !(
 | |
|     is(node, 'a') && node.properties &&
 | |
|     (node.properties.ariaHidden === 'true' || node.properties['aria-hidden'] === 'true')
 | |
|   ));
 | |
| 
 | |
|   return cleaned ? toString(cleaned) : '';
 | |
| }
 |