aboutsummaryrefslogtreecommitdiff
path: root/node_modules/markdown-it-anchor
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/markdown-it-anchor')
-rw-r--r--node_modules/markdown-it-anchor/CHANGELOG.md133
-rw-r--r--node_modules/markdown-it-anchor/README.md93
-rw-r--r--node_modules/markdown-it-anchor/UNLICENSE24
-rw-r--r--node_modules/markdown-it-anchor/index.js93
l---------node_modules/markdown-it-anchor/node_modules/.bin/markdown-it1
-rw-r--r--node_modules/markdown-it-anchor/package.json39
-rw-r--r--node_modules/markdown-it-anchor/runkit.js22
7 files changed, 405 insertions, 0 deletions
diff --git a/node_modules/markdown-it-anchor/CHANGELOG.md b/node_modules/markdown-it-anchor/CHANGELOG.md
new file mode 100644
index 00000000..9c1b34b1
--- /dev/null
+++ b/node_modules/markdown-it-anchor/CHANGELOG.md
@@ -0,0 +1,133 @@
+# Changelog
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
+
+## [Unreleased][unreleased]
+
+## [5.0.2] - 2018-06-16
+* Patch to fix ([#35])
+
+## [5.0.1] - 2018-06-14
+* `trim()` before `toLowerCase()` to prevent dashes as prefixes and suffixes.
+
+## [5.0.0] - 2018-06-14
+* NEW Contributor: nagaozen
+* Drop `string` package in favour of `encodeURIComponent`.
+ Fixes: [#44], [#43], [#38], [#17]. Obsoletes [#45].
+
+## [4.0.0] - 2017-02-26
+* Drop Babel. This drops support for Node.js versions that doesn't
+ support ES6.
+* Support code in titles. ([#27])
+* Support individual header level selection. ([#27])
+
+## [3.0.0] - 2017-02-06
+* Use existing ID as slug if present. This drops the support for
+ markdown-it 5 and lower, hence the major bump. ([#22])
+
+## [2.5.1] - 2016-11-19
+* Patch for supporting "Constructor" title. ([#18])
+
+## [2.5.0] - 2016-03-22
+* Test against markdown-it 6.
+* Support anchors with HTML in header.
+
+## [2.4.0] - 2016-02-12
+* Add a callback option. ([#16]).
+
+## [2.3.3] - 2015-12-21
+* Add a live example ([#13]).
+
+## [2.3.2] - 2015-11-29
+* Test against markdown-it 5.
+* Keep assigning `module.exports` after Babel 6 upgrade (that
+ assigns `exports.default` only instead), using
+ `babel-plugin-add-module-exports`. ([#12])
+
+## [2.3.1] - 2015-11-29
+* Remove hard dependency on markdown-it and replace `lodash.assign` with
+ `Object.assign`. ([#11])
+* Move to Babel 6.
+* Use `babel-plugin-transform-object-assign` to have `Object.assign`
+ work in ES5 environments.
+* Add the permalink during compilation instead of rendering.
+
+## [2.3.0] - 2015-08-13
+* Allow to pass HTML as permalink symbol. ([#8])
+
+## [2.2.1] - 2015-08-13
+* Do not crash when permalink is enabled and headers below specified
+ level are present. ([#7])
+
+## [2.2.0] - 2015-07-20
+* Use `core.ruler` to add attributes so other plugins can reuse them. ([#5])
+
+## [2.1.0] - 2015-06-22
+* Set `aria-hidden` on permalink anchor.
+
+## [2.0.0] - 2015-05-28
+* Place the permalink after the header by default. ([#3])
+
+ If you want to keep the old behavior, set the `permalinkBefore` option
+ to `true`:
+
+ ```js
+ const md = require('markdown-it')
+ .use(require('markdown-it-anchor'), {
+ permalink: true,
+ permalinkBefore: true
+ })
+ ```
+
+## [1.1.2] - 2015-05-23
+* Fix a code example in the readme.
+
+## [1.1.1] - 2015-05-20
+* Slight tweaks in `package.json`.
+* Upgrade Babel.
+
+## [1.1.0] - 2015-04-24
+* Allow to customize the permalink symbol. ([#1])
+* Handle duplicate slugs by appending a number.
+
+## 1.0.0 - 2015-03-18
+* Initial release.
+
+[unreleased]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v5.0.0...HEAD
+[4.0.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v3.0.0...v4.0.0
+[3.0.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.5.1...v3.0.0
+[2.5.1]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.5.0...v2.5.1
+[2.5.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.4.0...v2.5.0
+[2.4.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.3.3...v2.4.0
+[2.3.3]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.3.2...v2.3.3
+[2.3.2]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.3.1...v2.3.2
+[2.3.1]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.3.0...v2.3.1
+[2.3.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.2.1...v2.3.0
+[2.2.1]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.2.0...v2.2.1
+[2.2.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.1.0...v2.2.0
+[2.1.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v2.0.0...v2.1.0
+[2.0.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v1.1.2...v2.0.0
+[1.1.2]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v1.1.1...v1.1.2
+[1.1.1]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v1.1.0...v1.1.1
+[1.1.0]: https://github.com/valeriangalliat/markdown-it-anchor/compare/v1.0.0...v1.1.0
+
+[#1]: https://github.com/valeriangalliat/markdown-it-anchor/pull/1
+[#3]: https://github.com/valeriangalliat/markdown-it-anchor/issues/3
+[#5]: https://github.com/valeriangalliat/markdown-it-anchor/issues/5
+[#7]: https://github.com/valeriangalliat/markdown-it-anchor/issues/7
+[#8]: https://github.com/valeriangalliat/markdown-it-anchor/issues/8
+[#11]: https://github.com/valeriangalliat/markdown-it-anchor/pull/11
+[#12]: https://github.com/valeriangalliat/markdown-it-anchor/issues/12
+[#13]: https://github.com/valeriangalliat/markdown-it-anchor/issues/13
+[#16]: https://github.com/valeriangalliat/markdown-it-anchor/issues/16
+[#17]: https://github.com/valeriangalliat/markdown-it-anchor/issues/17
+[#18]: https://github.com/valeriangalliat/markdown-it-anchor/issues/18
+[#22]: https://github.com/valeriangalliat/markdown-it-anchor/pull/22
+[#27]: https://github.com/valeriangalliat/markdown-it-anchor/issues/27
+[#35]: https://github.com/valeriangalliat/markdown-it-anchor/issues/35
+[#38]: https://github.com/valeriangalliat/markdown-it-anchor/issues/38
+[#43]: https://github.com/valeriangalliat/markdown-it-anchor/issues/43
+[#44]: https://github.com/valeriangalliat/markdown-it-anchor/issues/44
+[#45]: https://github.com/valeriangalliat/markdown-it-anchor/pull/45
diff --git a/node_modules/markdown-it-anchor/README.md b/node_modules/markdown-it-anchor/README.md
new file mode 100644
index 00000000..580a6a7e
--- /dev/null
+++ b/node_modules/markdown-it-anchor/README.md
@@ -0,0 +1,93 @@
+# 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
+
+## 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)
+`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`
+`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)
+`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.
diff --git a/node_modules/markdown-it-anchor/UNLICENSE b/node_modules/markdown-it-anchor/UNLICENSE
new file mode 100644
index 00000000..68a49daa
--- /dev/null
+++ b/node_modules/markdown-it-anchor/UNLICENSE
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>
diff --git a/node_modules/markdown-it-anchor/index.js b/node_modules/markdown-it-anchor/index.js
new file mode 100644
index 00000000..1a087b58
--- /dev/null
+++ b/node_modules/markdown-it-anchor/index.js
@@ -0,0 +1,93 @@
+const slugify = (s) => encodeURIComponent(String(s).trim().toLowerCase().replace(/\s+/g, '-'))
+
+const position = {
+ false: 'push',
+ true: 'unshift'
+}
+
+const hasProp = Object.prototype.hasOwnProperty
+
+const permalinkHref = slug => `#${slug}`
+
+const renderPermalink = (slug, opts, state, idx) => {
+ const space = () => Object.assign(new state.Token('text', '', 0), { content: ' ' })
+
+ const linkTokens = [
+ Object.assign(new state.Token('link_open', 'a', 1), {
+ attrs: [
+ ['class', opts.permalinkClass],
+ ['href', opts.permalinkHref(slug, state)],
+ ['aria-hidden', 'true']
+ ]
+ }),
+ Object.assign(new state.Token('html_block', '', 0), { content: opts.permalinkSymbol }),
+ new state.Token('link_close', 'a', -1)
+ ]
+
+ // `push` or `unshift` according to position option.
+ // Space is at the opposite side.
+ linkTokens[position[!opts.permalinkBefore]](space())
+ state.tokens[idx + 1].children[position[opts.permalinkBefore]](...linkTokens)
+}
+
+const uniqueSlug = (slug, slugs) => {
+ let uniq = slug
+ let i = 2
+ while (hasProp.call(slugs, uniq)) uniq = `${slug}-${i++}`
+ slugs[uniq] = true
+ return uniq
+}
+
+const isLevelSelectedNumber = selection => level => level >= selection
+const isLevelSelectedArray = selection => level => selection.includes(level)
+
+const anchor = (md, opts) => {
+ opts = Object.assign({}, anchor.defaults, opts)
+
+ md.core.ruler.push('anchor', state => {
+ const slugs = {}
+ const tokens = state.tokens
+
+ const isLevelSelected = Array.isArray(opts.level)
+ ? isLevelSelectedArray(opts.level)
+ : isLevelSelectedNumber(opts.level)
+
+ tokens
+ .filter(token => token.type === 'heading_open')
+ .filter(token => isLevelSelected(Number(token.tag.substr(1))))
+ .forEach(token => {
+ // Aggregate the next token children text.
+ const title = tokens[tokens.indexOf(token) + 1].children
+ .filter(token => token.type === 'text' || token.type === 'code_inline')
+ .reduce((acc, t) => acc + t.content, '')
+
+ let slug = token.attrGet('id')
+
+ if (slug == null) {
+ slug = uniqueSlug(opts.slugify(title), slugs)
+ token.attrPush(['id', slug])
+ }
+
+ if (opts.permalink) {
+ opts.renderPermalink(slug, opts, state, tokens.indexOf(token))
+ }
+
+ if (opts.callback) {
+ opts.callback(token, { slug, title })
+ }
+ })
+ })
+}
+
+anchor.defaults = {
+ level: 1,
+ slugify,
+ permalink: false,
+ renderPermalink,
+ permalinkClass: 'header-anchor',
+ permalinkSymbol: '¶',
+ permalinkBefore: false,
+ permalinkHref
+}
+
+module.exports = anchor
diff --git a/node_modules/markdown-it-anchor/node_modules/.bin/markdown-it b/node_modules/markdown-it-anchor/node_modules/.bin/markdown-it
new file mode 120000
index 00000000..25a1c2f8
--- /dev/null
+++ b/node_modules/markdown-it-anchor/node_modules/.bin/markdown-it
@@ -0,0 +1 @@
+../../../markdown-it/bin/markdown-it.js \ No newline at end of file
diff --git a/node_modules/markdown-it-anchor/package.json b/node_modules/markdown-it-anchor/package.json
new file mode 100644
index 00000000..04c0d844
--- /dev/null
+++ b/node_modules/markdown-it-anchor/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "markdown-it-anchor",
+ "version": "5.0.2",
+ "description": "Header anchors for markdown-it.",
+ "keywords": [
+ "markdown",
+ "markdown-it",
+ "markdown-it-plugin",
+ "header",
+ "anchor"
+ ],
+ "homepage": "https://github.com/valeriangalliat/markdown-it-anchor",
+ "license": "Unlicense",
+ "files": [
+ "README.md",
+ "UNLICENSE",
+ "index.js",
+ "runkit.js"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/valeriangalliat/markdown-it-anchor.git"
+ },
+ "scripts": {
+ "lint": "standard",
+ "prepublish": "npm test",
+ "test": "npm run lint && node test"
+ },
+ "runkitExampleFilename": "runkit.js",
+ "dependencies": {},
+ "devDependencies": {
+ "markdown-it": "^8.3.0",
+ "markdown-it-attrs": "^0.8.0",
+ "standard": "^11.0.1"
+ },
+ "peerDependencies": {
+ "markdown-it": "^8.4.1"
+ }
+}
diff --git a/node_modules/markdown-it-anchor/runkit.js b/node_modules/markdown-it-anchor/runkit.js
new file mode 100644
index 00000000..df7624e1
--- /dev/null
+++ b/node_modules/markdown-it-anchor/runkit.js
@@ -0,0 +1,22 @@
+const md = require('markdown-it')()
+const anchor = require('markdown-it-anchor')
+
+md.use(anchor, {
+ level: 1,
+ // slugify: string => string,
+ permalink: false,
+ // renderPermalink: (slug, opts, state, permalink) => {},
+ permalinkClass: 'header-anchor',
+ permalinkSymbol: '¶',
+ permalinkBefore: false
+})
+
+const src = `# First header
+
+Lorem ipsum.
+
+## Next section!
+
+This is totaly awesome.`
+
+console.log(md.render(src))