# 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.'
console.log(prettify(html, { content_wrap: 40 }))
/*
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 = `
*/
```
### 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.