The HTML post-processing now collects any h1 that is found in the renderedContent and attaches it to the doc via the `doc.vFile.title` property.
		
			
				
	
	
		
			32 lines
		
	
	
		
			897 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			897 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const visit = require('unist-util-visit');
 | 
						|
const is = require('hast-util-is-element');
 | 
						|
const source = require('unist-util-source');
 | 
						|
const toString = require('hast-util-to-string');
 | 
						|
const filter = require('unist-util-filter');
 | 
						|
 | 
						|
module.exports = function h1CheckerPostProcessor() {
 | 
						|
  return (ast, file) => {
 | 
						|
    let h1s = [];
 | 
						|
    visit(ast, node => {
 | 
						|
      if (is(node, 'h1')) {
 | 
						|
        h1s.push(node);
 | 
						|
        file.title = getText(node);
 | 
						|
      }
 | 
						|
    });
 | 
						|
 | 
						|
    if (h1s.length > 1) {
 | 
						|
      const h1Src = h1s.map(node => source(node, file)).join(', ');
 | 
						|
      file.fail(`More than one h1 found [${h1Src}]`);
 | 
						|
    }
 | 
						|
  };
 | 
						|
};
 | 
						|
 | 
						|
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 toString(cleaned);
 | 
						|
} |