@thomaskoppelaar/markdown-it-wikilinks
Version:
WikiMedia-style links for the markdown-it parser
154 lines (99 loc) • 4.53 kB
Markdown
# Markdown-It Wikilinks
A fork of [jsepia's plugin](https://github.com/jsepia/markdown-it-wikilinks) (It's recommended you use that plugin, not this one).
Renders [Wikimedia-style links](https://www.mediawiki.org/wiki/Help:Links#Internal_links) in [markdown-it](https://github.com/markdown-it/markdown-it). This is useful for making Markdown-based wikis.
## Reason behind forking
I've created this fork in order to make it work more with the VSCode markdown preview window. It is by no means perfect.
## Usage
Install this into your project:
```bash
npm --save install markdown-it-wikilinks
```
...and *use* it:
```js
const wikilinks = require('markdown-it-wikilinks')(options)
const md = require('markdown-it')()
.use(wikilinks)
.render('Click [[Wiki Links|here]] to learn about [[/Wiki]] links.')
```
**Output:**
```html
<p>Click <a href="./Wiki_Links.html">here</a> to learn about <a href="/Wiki.html">Wiki</a> links.</p>
```
## Options
### `baseURL`
**Default:** `/`
The base URL for absolute wiki links.
```js
const html = require('markdown-it')()
.use(require('markdown-it-wikilinks')({ baseURL: '/wiki/' }))
.render('[[/Main Page]]')
// <p><a href="/wiki/Main_Page.html">Main Page</a></p>
```
### `relativeBaseURL`
**Default:** `./`
The base URL for relative wiki links.
```js
const html = require('markdown-it')()
.use(require('markdown-it-wikilinks')({ relativeBaseURL: '#', suffix: '' }))
.render('[[Main Page]]')
// <p><a href="#Main_Page">Main Page</a></p>
```
### `makeAllLinksAbsolute`
**Default:** `false`
Render all wiki links as absolute links.
### `uriSuffix`
**Default:** `.html`
Append this suffix to every URL.
```js
const html = require('markdown-it')()
.use(require('markdown-it-wikilinks')({ uriSuffix: '.php' }))
.render('[[Main Page]]')
// <p><a href="./Main_Page.php">Main Page</a></p>
```
### `htmlAttributes`
**Default:** `{}`
An object containing HTML attributes to be applied to every link.
```js
const attrs = {
'class': 'wikilink',
'rel': 'nofollow'
}
const html = require('markdown-it')()
.use(require('markdown-it-wikilinks')({ htmlAttributes: attrs }))
.render('[[Main Page]]')
// <p><a href="./Main_Page.html" class="wikilink" rel="nofollow">Main Page</a></p>
```
### `generatePageNameFromLabel`
Unless otherwise specified, the labels of the links are used as the targets. This means that a non-[piped](https://meta.wikimedia.org/wiki/Help:Piped_link) link such as `[[Slate]]` will point to the `Slate` page on your website.
But say you wanted a little more flexibility - like being able to have `[[Slate]]`, `[[slate]]`, `[[SLATE]]` and `[[Slate!]]` to all point to the same page. Well, you can do this by providing your own custom `generatePageNameFromLabel` function.
#### Example
```js
const _ = require('lodash')
function myCustomPageNameGenerator(label) {
return label.split('/').map(function(pathSegment) {
// clean up unwanted characters, normalize case and capitalize the first letter
pathSegment = _.deburr(pathSegment)
pathSegment = pathSegment.replace(/[^\w\s]/g, '')
// normalize case
pathSegment = _.capitalize(pathSegment.toLowerCase())
return pathSegment
})
}
const html = require('markdown-it')()
.use(require('markdown-it-wikilinks')({ generatePageNameFromLabel: myCustomPageNameGenerator }))
.render('Vive la [[révolution!]] VIVE LA [[RÉVOLUTION!!!]]')
// <p>Vive la <a href="./Revolution.html">révolution!</a> VIVE LA <a href="./Revolution.html">RÉVOLUTION!!!</a></p>
```
Please note that the `generatePageNameFromLabel` function does not get applied for [piped links](https://meta.wikimedia.org/wiki/Help:Piped_link) such as `[[/Misc/Cats/Slate|kitty]]` since those already come with a target.
### `postProcessPageName`
A transform applied to every page name. You can override it just like `generatePageNameFromLabel` (see above).
The default transform does the following things:
* trim surrounding whitespace
* [sanitize](https://github.com/parshap/node-sanitize-filename) the string
* replace spaces with underscores
### `postProcessLabel`
A transform applied to every link label. You can override it just like `generatePageNameFromLabel` (see above).
All the default transform does is trim surrounding whitespace.
## Credits
Based on the original [markdown-it-wikilinks](https://github.com/jsepia/markdown-it-wikilinks).
Which is based on [markdown-it-ins](https://github.com/markdown-it/markdown-it-ins) by Vitaly Puzrin, Alex Kocharin.