# markdown-it-anchor [![npm version](http://img.shields.io/npm/v/markdown-it-anchor.svg?style=flat-square)](https://www.npmjs.org/package/markdown-it-anchor)
> Header anchors for [markdown-it].
[markdown-it]: https://github.com/markdown-it/markdown-it
English | [中文 (v7.0.1)](./README-zh_CN.md)
## Usage
```js
const md = require('markdown-it')()
.use(require('markdown-it-anchor'), opts)
```
See a [demo as JSFiddle](https://jsfiddle.net/9ukc8dy6/).
The `opts` object can contain:
Name | Description | Default
-----------------------|----------------------------------------------------------------|-----------------------------------
`level` | Minimum level to apply anchors on or array of selected levels. | 1
`slugify` | A custom slugification function. | See [`index.js`](index.js)
`uniqueSlugStartIndex` | Index to start with when making duplicate slugs unique. | 1
`permalink` | Whether to add permalinks next to titles. | `false`
`renderPermalink` | A custom permalink rendering function. | See [`index.js`](index.js)
`permalinkClass` | The class of the permalink anchor. | `header-anchor`
`permalinkSpace` | Place space between the header text and the permalink anchor. | `true`
`permalinkSymbol` | The symbol in the permalink anchor. | `¶`
`permalinkBefore` | Place the permalink before the title. | `false`
`permalinkHref` | A custom permalink `href` rendering function. | See [`index.js`](index.js)
`permalinkAttrs` | A custom permalink attributes rendering function. | See [`index.js`](index.js)
`callback` | Called with token and info after rendering. | `undefined`
The `renderPermalink` function takes the slug, an options object with
the above options, and then all the usual markdown-it rendering
arguments.
All headers above `level` will then have an `id` attribute with a slug
of their content. `level` can also be an array of headers levels to
apply the anchor, like `[2, 3]` to have an anchor on only level 2 and
3 headers.
If `permalink` is `true`, a `¶` symbol linking to the header itself will
be added.
You may want to use the [link symbol](http://graphemica.com/🔗) as
`permalinkSymbol`, or a symbol from your favorite web font.
The `callback` option is a function that will be called at the end of
rendering with the `token` and an `info` object. The `info` object has
`title` and `slug` properties with the token content and the slug used
for the identifier.
## User-Friendly URLs
Starting from `v5.0.0`, `markdown-it-anchor` dropped package `string`
keeping it's core value of being an unopinionated and secure library. Yet,
users looking for backward compatibility may want the old slugify:
```sh
$ npm i -S string
```
```js
const string = require('string')
const legacySlugify = s => string(s).slugify().toString()
const md = require('markdown-it')()
const anchor = require('markdown-it-anchor', {
slugify: legacySlugify
})
```
## Unicode Support
Unicode is supported by default. Yet, if you are looking for a "prettier"
--opinionated-- link, _i.e_ without %xx, you may want to take a look at `uslug`:
```sh
$ npm i -S uslug
```
```js
const uslug = require('uslug')
const uslugify = s => uslug(s)
const md = require('markdown-it')()
const anchor = require('markdown-it-anchor', {
slugify: uslugify
})
```
## Table of Contents
Looking for an automatic table of contents (TOC) generator? Take a look at
[markdown-it-toc-done-right](https://www.npmjs.com/package/markdown-it-toc-done-right) it's
made from the ground to be a great companion of this plugin.
## Browser Example
See `example.html`.