markdown-it-link-attributes
Link attributes plugin for markdown-it markdown parser.
Install
node.js, browser:
npm install markdown-it-link-attributes --save
bower install markdown-it-link-attributes --save
Use
Basic Configuration
You can pass an object with an attrs property. Each link parsed with this config will have the passed attributes.
var md = require("markdown-it")();
var mila = require("markdown-it-link-attributes");
md.use(mila, {
attrs: {
target: "_blank",
rel: "noopener",
},
});
var result = md.render("[Example](https://example.com");
result;
If the linkify
option is set to true
on markdown-it
, then the attributes will be applied to plain links as well.
var md = require("markdown-it")({
linkify: true,
});
md.use(mila, {
target: "_blank",
rel: "noopener",
});
var html = md.render("foo https://google.com bar");
html;
Applying classes
You can apply a class
to a link by using a class
or a className
property. Either one will work, but use only one, not both.
md.use(mila, {
attrs: {
class: "my-class",
},
});
md.use(mila, {
attrs: {
className: "my-class",
},
});
Conditionally apply attributes
You can choose to test a link's href
against a matcher function. The attributes will be applied only if the matcher function returns true.
md.use(mila, {
matcher(href, config) {
return href.startsWith("https:");
},
attrs: {
target: "_blank",
rel: "noopener",
},
});
var matchingResult = md.render("[Matching Example](https://example.com");
var ignoredResult = md.render("[Not Matching Example](http://example.com");
matchingResult;
ignoredResult;
Multiple Configurations
Alternatively, you can pass an Array of configurations. The first matcher function to return true will be applied to the link.
md.use(mila, [
{
matcher(href) {
return href.match(/^https?:\/\//);
},
attrs: {
class: "external-link",
},
},
{
matcher(href) {
return href.startsWith("/");
},
attrs: {
class: "absolute-link",
},
},
{
matcher(href) {
return href.startsWith("/blue/");
},
attrs: {
class: "link-that-contains-the-word-blue",
},
},
]);
var externalResult = md.render("[external](https://example.com");
var absoluteResult = md.render("[absolute](/some-page");
var blueResult = md.render("[blue](relative/link/with/blue/in/the/name");
externalResult;
absoluteResult;
blueResult;
If multiple matcher functions return true, the first configuration to match will be used.
var result = md.render("[external](https://example.com/blue");
result;
Usage in the browser
Differences in browser. If you load script directly into the page, without a package system, the module will add itself globally as window.markdownitLinkAttributes
.
You need to load dist/markdown-it-link-attributes.min.js
, if you don't use a build system.
Testing
This plugin is tested against the latest version of markdown-it
License
MIT