Nodejs HTML map parser
Use case
You have a static site generator that fetches blog posts from an api. You convert the posts from markdown to HTML. Now you have a HTML string. You want to add syntax highlighting and header anchors to your HTML string before saving it as a file. You also want your page to be able to run with javascript disabled. This library makes that easy.
It is useful in cases where you have a HTML string and would like to modify the content of all instances of certain elements. I have not found any other XML/HTML parser libraries that makes this task easy.
TL;DR
This lib is useful for:
- Adding syntax highlighting to your static site without using runtime javascript.
- Adding Header anchors to your static site without using runtime javascript.
Usage
This parser has an api somewhat similar to Array.map
. Every node (element) of the HTML string will be passed to the transformer
function, before being converted back to HTML and placed back in the string.
const Prism = ;const parse = ; const highlight = Prism; const htmlString = ` <h2 id="header-without-anchor"> Header without anchor </h2> <pre> <code> const noop = () => {}; </code> </pre>`; { // Syntax highlighting with prism if nodename === 'code' && nodeparent && nodeparentname === 'pre' return ...node content: ; // Header anchors ifnodename === 'h2' || nodename === 'h1' const idAttr = nodeattributes; if!idAttr return node; return ...node content: `<a href="#">#</a>` return node;} const processedHtml = ;
API
function parse(htmlString: String, transformer: TransformerFunction): String
Returns a HTML string after it has applied the transformer
function to all the nodes.
function TransformerFunction(node: Node): Node
Gets passed a node and should return a transformed node.
object Node
The node object has the following properties:
property | type | description |
---|---|---|
name | String | The element type, e.g. 'h1' |
parent | ?Node | A Node object like this that is the parent of this node |
attributes | Array | An array of attribute object. i.e. { name: 'id', value: '123' } |
content | String | the content of the html tag |