@microflash/rehype-figure
Version:
rehype plugin to transform an image with alt text to a figure with caption
111 lines (76 loc) • 3.16 kB
Markdown
# rehype-figure
[](https://www.npmjs.com/package/@microflash/rehype-figure)
[](https://github.com/Microflash/rehype-figure/actions/workflows/regression.yml)
[](./LICENSE.md)
[rehype](https://github.com/rehypejs/rehype) plugin to transform an image with alt text to a figure with caption
## Status: feature complete
> [!IMPORTANT]
> Converting an image with alt text to a figure with caption is an [escape hatch](https://en.wiktionary.org/wiki/escape_hatch). Alt text, title, and captions have [different intended purposes](https://www.stylemanual.gov.au/content-types/images/alt-text-captions-and-titles-images), and you should eventually enhance your content to adopt them.
- [What's this?](#whats-this)
- [Install](#install)
- [Use](#use)
- [API](#api)
- [License](#license)
## What's this?
This package is a [unified](https://github.com/unifiedjs/unified) ([rehype](https://github.com/rehypejs/rehype)) plugin that takes an image node with alt text (e.g., ``) and converts it to a [figure](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure) element with caption.
```html
<figure>
<img src="path-to-image.jpg" alt="Alt text">
<figcaption>Alt Text</figcaption>
</figure>
```
## Install
This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).
In Node.js (16.0+), install with [npm](https://docs.npmjs.com/cli/install):
```sh
npm install @microflash/rehype-figure
```
> For Node.js versions below 16.0, stick to 1.x.x versions of this plugin.
In Deno, with [esm.sh](https://esm.sh/):
```js
import rehypeFigure from "https://esm.sh/@microflash/rehype-figure";
```
In browsers, with [esm.sh](https://esm.sh/):
```html
<script type="module">
import rehypeFigure from "https://esm.sh/@microflash/rehype-figure?bundle";
</script>
```
## Use
Say we have the following module `example.js`:
```js
import { unified } from "unified";
import remarkParse from "remark-parse";
import remarkGfm from "remark-gfm";
import remarkRehype from "remark-rehype";
import rehypeFigure from "@microflash/rehype-figure";
import rehypeStringify from "rehype-stringify";
main()
async function main() {
const file = await unified()
.use(remarkParse)
.use(remarkGfm)
.use(remarkRehype)
.use(rehypeFigure)
.use(rehypeStringify)
.process("");
console.log(String(file));
}
```
Running that with `node example.js` yields:
```html
<figure>
<img src="path-to-image.jpg" alt="Alt Text">
<figcaption>Alt Text</figcaption>
</figure>
```
## API
The default export is `rehypeFigure`.
The following options are available. All of them are optional.
- `className`: class for the wrapped `figure` element
By default, no classes are added to the `figure` element.
## Development
- Run `pnpm snapshot` to generate snapshots
- Run `pnpm test` to run tests
## License
[MIT](./LICENSE.md)