# htmlfy HTML formatter yo! Prettify, minify and more! `htmlfy` is a fork of [html-formatter](https://github.com/uznam8x/html-formatter/tree/master). A lot of the processing logic has been preserved, and full credit for that goes to the original author. I've made the following major enhancements. - Fully typed. - Converted to ESM. - Added configuration options. - Added support for custom HTML elements (web components) - Lots of refactoring. - Made it go brrr fast. ## Install `npm install htmlfy` ## API Most projects will only need to use `prettify` and/or `minify`. ### Prettify Turn single-line or ugly HTML into highly formatted HTML. This is a wrapper for all other functions, except `trimify`, and then it adds indentation. ```js import { prettify } from 'htmlfy' const html = `
Welcome to htmlfy!
` console.log(prettify(html)) /*
Welcome to htmlfy!
*/ ``` ### Minify Turn well-formatted or ugly HTML into a single line of HTML. > This feature is not a replacement for compressors like [htmlnano](https://github.com/posthtml/htmlnano), which focus on giving you the smallest data-size possible; but rather, it simply removes tabs, returns, and redundant whitespace. ```js import { minify } from 'htmlfy' const html = `
Welcome to htmlfy!
` console.log(minify(html)) /*
Welcome to htmlfy!
*/ ``` ### Closify > This is done when using prettify, but you can use it in a one-off scenario if needed. Ensure [void elements](https://developer.mozilla.org/en-US/docs/Glossary/Void_element) are "self-closing". ```js import { closify } from 'htmlfy' const html = `
` console.log(closify(html)) /*
*/ ``` ### Entify > This is done when using prettify, but you can use it in a one-off scenario if needed. Enforce entity characters for textarea content. This also performs basic minification on textareas before setting entities. When running this function as a standalone, you'll likely want to pass `minify` as `true` for full minification of the textarea. The minification does not process any other tags. ```js import { entify } from 'htmlfy' const html = `
Welcome to htmlfy!
` console.log(entify(html, true)) /*
Welcome to htmlfy!
*/ ``` ### Trimify Trim leading and trailing whitespace for whatever HTML element(s) you'd like. This is a standalone function, which is not run with `prettify` by default. ```js import { trimify } from 'htmlfy' const html = `
Hello World
` console.log(trimify(html, [ 'div' ])) /*
Hello World
*/ ``` ### Default Import If needed, you can use a default import for `htmlfy`. ```js import * as htmlfy from 'htmlfy' console.log(htmlfy.prettify('
Hello World
Lorem ipsum dolor sit amet consectetur adipiscing elit. Quisque faucibus ex sapien vitae pellentesque sem placerat. In id cursus mi pretium tellus duis convallis. */ ``` ### Ignore Tell htmlfy to not process some elements and leave them as-is. ```js import { prettify } from 'htmlfy' const html = `
Hello World
` console.log(prettify(html, { ignore: [ 'style' ] })) /*
Hello World
*/ ``` ### Ignore With You can pass in your own string, for ignoring elements, if the default is actually being used in your ignored elements. ```js prettify(html, { ignore: [ 'p' ], ignore_with: 'some-string-that-wont-be-in-your-ignored-elements' }) ``` ### Strict If set to `true`, removes comments and ensures void elements are not self-closing. ```js import { prettify } from 'htmlfy' const html = `

` console.log(prettify(html, { strict: true })) /*

*/ ``` ### Tab Size Determines the number of spaces, per tab, for indentation. For sanity reasons, the valid range is between 1 and 16. ```js import { prettify } from 'htmlfy' const html = `
Welcome to htmlfy!
` console.log(prettify(html, { tab_size: 4 })) /*
Welcome to htmlfy!
*/ ``` ### Tag Wrap Wrap and prettify attributes within opening tags and void elements if they're overall length is above a certain character width. Default is `0`, which does not wrap. In the below example, the `` element is well over 40 characters long, so it's wrapped and prettified. ```js import { prettify } from 'htmlfy' const html = `
` console.log(prettify(html, { tag_wrap: 40 })) /*
*/ ``` ### Trim Trim leading and trailing whitespace within `textarea` elements, since all whitespace is preserved by default. ```js import { prettify } from 'htmlfy' const html = '' console.log(prettify(html, { trim: [ 'textarea' ]})) /**/ ``` > For compatibility and possible future expansion, we require declaring an array with the value 'textarea', as opposed to using something like `{ trim: true }`. Passing in additional HTML element values has no real effect, since we already trim whitespace for all other elements.