diff options
Diffstat (limited to 'node_modules/markdown-it-anchor')
| -rw-r--r-- | node_modules/markdown-it-anchor/CHANGELOG.md | 133 | ||||
| -rw-r--r-- | node_modules/markdown-it-anchor/README.md | 93 | ||||
| -rw-r--r-- | node_modules/markdown-it-anchor/UNLICENSE | 24 | ||||
| -rw-r--r-- | node_modules/markdown-it-anchor/index.js | 93 | ||||
| l--------- | node_modules/markdown-it-anchor/node_modules/.bin/markdown-it | 1 | ||||
| -rw-r--r-- | node_modules/markdown-it-anchor/package.json | 39 | ||||
| -rw-r--r-- | node_modules/markdown-it-anchor/runkit.js | 22 |
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 [](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)) |
