markdown-it-wikilinks v1.4.0
Markdown-It Wikilinks
Renders Wikimedia-style links in markdown-it. This is useful for making Markdown-based wikis.
Usage
Install this into your project:
npm --save install markdown-it-wikilinks...and use it:
const wikilinks = require('markdown-it-wikilinks')(options)
const md = require('markdown-it')()
.use(wikilinks)
const html = md.render('Click [[Wiki Links|here]] to learn about [[/Wiki]] links.')Output:
<p>Click <a href="./Wiki_Links.html">here</a> to learn about <a href="/Wiki.html">Wiki</a> links.</p>It works with spaces and anchors too:
Input:
const md = require('markdown-it')()
.use(wikilinks)
const html = md.render('[[Feline hypercuteness#Signs and symptoms]]')Output:
<p><a href="./Feline_hypercuteness.html#Signs_and_symptoms">Feline hypercuteness</a> with anchor</p>Options
baseURL
Default: /
The base URL for absolute wiki links.
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.
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.
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.
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>generatePagePathFromLabel
Unless otherwise specified, the labels of the links are used as the targets. This means that a non-piped 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 generatePagePathFromLabel function.
Example
const _ = require('lodash')
function myCustomPagePathGenerator(label) {
// clean up unwanted characters, normalize case and capitalize the first letter
label = _.deburr(label)
label = label.replace(/[^\w\s]/g, '')
// normalize case
label = _.capitalize(label.toLowerCase())
return label
}
const html = require('markdown-it')()
.use(require('markdown-it-wikilinks')({ generatePagePathFromLabel: myCustomPagePathGenerator }))
.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 generatePagePathFromLabel function does not get applied for piped links such as [[/Misc/Cats/Slate|kitty]] since those already come with a target.
postProcessPagePath
A transform applied to every page name. You can override it just like generatePagePathFromLabel (see above).
The default transform does the following things:
- trim surrounding whitespace
- sanitize the string
- replace spaces with underscores
postProcessLabel
A transform applied to every link label. You can override it just like generatePagePathFromLabel (see above).
All the default transform does is trim surrounding whitespace.
stripHashFromLabel
Removes the #hash part of labels in direct wikilinks ([[page]]). Does not run on piped links ([[page|label]]).
TODO
- Unit test options
- Add examples to
postProcessPageNameandpostProcessLabel - Ability to customize trailing letters behavior (e.g.
[[cat]]s=><a href='./cat.html'>cats</a>)
Credits
Based on markdown-it-ins by Vitaly Puzrin, Alex Kocharin.
Uses a fork of reurl by Alwin Blok.