| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  | const visit = require('unist-util-visit'); | 
					
						
							|  |  |  | const is = require('hast-util-is-element'); | 
					
						
							| 
									
										
										
										
											2017-05-30 22:24:20 +03:00
										 |  |  | const toString = require('hast-util-to-string'); | 
					
						
							|  |  |  | const filter = require('unist-util-filter'); | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = function h1CheckerPostProcessor() { | 
					
						
							|  |  |  |   return (ast, file) => { | 
					
						
							| 
									
										
										
										
											2017-07-04 12:57:22 +01:00
										 |  |  |     file.headings = { | 
					
						
							|  |  |  |       h1: [], | 
					
						
							|  |  |  |       h2: [], | 
					
						
							|  |  |  |       h3: [], | 
					
						
							|  |  |  |       h4: [], | 
					
						
							|  |  |  |       h5: [], | 
					
						
							|  |  |  |       h6: [], | 
					
						
							|  |  |  |       hgroup: [] | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  |     visit(ast, node => { | 
					
						
							| 
									
										
										
										
											2017-07-04 12:57:22 +01:00
										 |  |  |       if (is(node, ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup'])) { | 
					
						
							|  |  |  |         file.headings[node.tagName].push(getText(node)); | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2017-05-30 22:24:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-04 12:57:22 +01:00
										 |  |  |     file.title = file.headings.h1[0]; | 
					
						
							|  |  |  |     if (file.headings.h1.length > 1) { | 
					
						
							|  |  |  |       file.fail(`More than one h1 found in ${file}`); | 
					
						
							| 
									
										
										
										
											2017-05-10 10:59:50 +01:00
										 |  |  |     } | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-05-30 22:24:20 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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') | 
					
						
							|  |  |  |   )); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-27 01:28:11 +03:00
										 |  |  |   return cleaned ? toString(cleaned) : ''; | 
					
						
							|  |  |  | } |