GithubHelp home page GithubHelp logo

remarkjs / remark-external-links Goto Github PK

View Code? Open in Web Editor NEW
55.0 8.0 12.0 216 KB

Legacy plugin to automatically add target and rel attributes to external links — please use `rehype-external-links` instead

Home Page: https://remark.js.org

License: MIT License

JavaScript 100.00%
remark remark-plugin link markdown

remark-external-links's Introduction

remark-external-links

Stability: Legacy. This package is no longer recommended for use. It’s still covered by semantic-versioning guarantees and not yet deprecated, but use of this package should be avoided. Please use remark-rehype to move from remark (markdown) to rehype (HTML) and then replace remark-external-links with rehype-external-links.

Legacy documentation for this package is still available in Git.

License

MIT © Cédric Delpoux

remark-external-links's People

Contributors

fand avatar iloveip avatar makenowjust avatar mejanh avatar missmatsuko avatar murderlon avatar pd4d10 avatar wooorm avatar zslabs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

remark-external-links's Issues

plugin overwrites node data.hProperties set by other remark plugins

When using gatsby-remark-external-links in combination with a plugin also setting node data.hProperties, such as gatsby-remark-default-html-attrs, the attributes set by the other plugin (when it runs earlier in the build process) get lost.

In index.js for gatsby-remark-external-links, the code

        link.data = {
          hProperties: {}
        };

should change to

      if (!link.data.hProperties) {
        link.data = {
          hProperties: {}
        };
      }

Whitelisting domains?

👋 Thanks for creating this! I work with a team that creates content on a fairly regular basis; and unfortunately it'd be easier said then done to tell them to use just relative links for their internal links, but most do use a fully qualified domain; which at the moment - the regex sees as an external one. Any opinion on if you think that'd be a good feature to add?

Pass additional properties to a and span elements

I would like to be able to pass additional properties to the link itself and the span element, like className (for both elements) and role: 'img' for span.

At the moment I had to add another span inside the given span to do this:
content: h('span', {role: 'img', class: 'anticon'}, s('svg',...)). And I can't style the link, as there is no way to pass className to it.

HTML Anchor tags aren't accounted

HTML Anchor tags aren't accounted

Hey! I'm here from gatsby-remark-external-links

Oldschool <a> tags are not working.

Manjaro Linux

  • OS: Linux 4.19.88-1-MANJARO
  • Packages:
{
  "name": "remark-external-links",
  "version": "5.0.0",
  "description": "remark plugin to automatically add target and rel attributes to external links",
  "license": "MIT",
  "keywords": [
    "unified",
    "remark",
    "plugin",
    "mdast",
    "markdown",
    "external",
    "link",
    "url"
  ],
  "repository": "remarkjs/remark-external-links",
  "bugs": "https://github.com/remarkjs/remark-external-links/issues",
  "author": "Cédric Delpoux <[email protected]>",
  "contributors": [
    "Cédric Delpoux <[email protected]>",
    "Titus Wormer <[email protected]> (https://wooorm.com)",
    "Merlijn Vos <[email protected]>",
    "Takayosi Amagi <[email protected]>",
    "Zach Schnackel <[email protected]>",
    "Tsuyusato Kitsune <[email protected]>",
    "Matsuko Friedland <[email protected]>"
  ],
  "files": [
    "index.js"
  ],
  "dependencies": {
    "extend": "^3.0.0",
    "is-absolute-url": "^3.0.0",
    "mdast-util-definitions": "^1.2.3",
    "space-separated-tokens": "^1.1.2",
    "unist-util-visit": "^1.4.0"
  },
  "devDependencies": {
    "nyc": "^14.0.0",
    "prettier": "^1.0.0",
    "remark": "^11.0.0",
    "remark-cli": "^7.0.0",
    "remark-html": "^10.0.0",
    "remark-preset-wooorm": "^6.0.0",
    "tape": "^4.0.0",
    "xo": "^0.24.0"
  },
  "scripts": {
    "format": "remark . -qfo && prettier --write \"**/*.js\" && xo --fix",
    "test-api": "node test",
    "test-coverage": "nyc --reporter lcov tape test.js",
    "test": "npm run format && npm run test-coverage"
  },
  "nyc": {
    "check-coverage": true,
    "lines": 100,
    "functions": 100,
    "branches": 100
  },
  "prettier": {
    "tabWidth": 2,
    "useTabs": false,
    "singleQuote": true,
    "bracketSpacing": false,
    "semi": false,
    "trailingComma": "none"
  },
  "xo": {
    "prettier": true,
    "esnext": false
  },
  "remarkConfig": {
    "plugins": [
      "preset-wooorm"
    ]
  }
}
  • Env:
nvm : 0.35.2
node: v12.13.0
npm: 6.12.0

Reproduction

Since <a href="link">text</a> is nothing but [text](link) i modified the first line of the test.js input. :

var test = require('tape')
var remark = require('remark')
var html = require('remark-html')
var externalLinks = require('.')

var input = [
  '<a href="https://github.com/remarkjs/remark">remark</a>',
  '',
  '[relative link](./example.md) and [fragment link](#fragment)',
  '',
  '[missing][], [local][], and [external][].',
  '',
  '[current](.) [up](..) [relative link without ./](example.md)',
  '',
  '[local]: #local',
  '[external]: https://github.com/remarkjs/remark',
  '',
  '<mailto:[email protected]>'
].join('\n')

test('remark-external-links', function(t) {
  t.equal(
    remark()
      .use(externalLinks)
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark</a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external</a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should add the defaults when without options'
  )

  t.equal(
    remark()
      .use(externalLinks, {target: false, rel: false})
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark">external</a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should do nothing if both are set to false'
  )

  t.equal(
    remark()
      .use(externalLinks, {target: '_blank', rel: false})
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark" target="_blank">remark</a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank">external</a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should add a target'
  )

  t.equal(
    remark()
      .use(externalLinks, {target: false, rel: 'nofollow'})
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark" rel="nofollow">remark</a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" rel="nofollow">external</a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should add a rel'
  )

  t.equal(
    remark()
      .use(externalLinks, {target: '_blank', rel: 'nofollow'})
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow">remark</a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow">external</a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should add both'
  )

  t.equal(
    remark()
      .use(externalLinks, {protocols: ['http', 'https', 'mailto']})
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark</a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external</a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]" target="_blank" rel="nofollow noopener noreferrer">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should add a target'
  )

  t.equal(
    remark()
      .use(externalLinks, {
        content: {type: 'text', value: ' (opens in a new window)'}
      })
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark<span> (opens in a new window)</span></a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external<span> (opens in a new window)</span></a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should add hast node as content'
  )

  t.equal(
    remark()
      .use(externalLinks, {
        content: [
          {type: 'text', value: ' ('},
          {
            type: 'element',
            tagName: 'em',
            properties: {},
            children: [{type: 'text', value: 'opens in a new window'}]
          },
          {type: 'text', value: ')'}
        ]
      })
      .use(html)
      .processSync(input)
      .toString(),
    [
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark<span> (<em>opens in a new window</em>)</span></a></p>',
      '<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>',
      '<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external<span> (<em>opens in a new window</em>)</span></a>.</p>',
      '<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>',
      '<p><a href="mailto:[email protected]">[email protected]</a></p>',
      ''
    ].join('\n'),
    'should add hast children as content'
  )

  t.end()
})

Command :

node test

Output :

TAP version 13
# remark-external-links
not ok 1 should add the defaults when without options
  ---
    operator: equal
    expected: |-
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    actual: |-
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    at: Test.<anonymous> (/tmp/remark-external-links/test.js:22:5)
    stack: |-
      Error: should add the defaults when without options
          at Test.assert [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.equal (/tmp/remark-external-links/node_modules/tape/lib/test.js:389:10)
          at Test.bound [as equal] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.<anonymous> (/tmp/remark-external-links/test.js:22:5)
          at Test.bound [as _cb] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.run (/tmp/remark-external-links/node_modules/tape/lib/test.js:96:10)
          at Test.bound [as run] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Immediate.next [as _onImmediate] (/tmp/remark-external-links/node_modules/tape/lib/results.js:81:19)
          at processImmediate (internal/timers.js:439:21)
  ...
ok 2 should do nothing if both are set to false
not ok 3 should add a target
  ---
    operator: equal
    expected: |-
      '<p><a href="https://github.com/remarkjs/remark" target="_blank">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    actual: |-
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    at: Test.<anonymous> (/tmp/remark-external-links/test.js:56:5)
    stack: |-
      Error: should add a target
          at Test.assert [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.equal (/tmp/remark-external-links/node_modules/tape/lib/test.js:389:10)
          at Test.bound [as equal] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.<anonymous> (/tmp/remark-external-links/test.js:56:5)
          at Test.bound [as _cb] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.run (/tmp/remark-external-links/node_modules/tape/lib/test.js:96:10)
          at Test.bound [as run] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Immediate.next [as _onImmediate] (/tmp/remark-external-links/node_modules/tape/lib/results.js:81:19)
          at processImmediate (internal/timers.js:439:21)
  ...
not ok 4 should add a rel
  ---
    operator: equal
    expected: |-
      '<p><a href="https://github.com/remarkjs/remark" rel="nofollow">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" rel="nofollow">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    actual: |-
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" rel="nofollow">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    at: Test.<anonymous> (/tmp/remark-external-links/test.js:73:5)
    stack: |-
      Error: should add a rel
          at Test.assert [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.equal (/tmp/remark-external-links/node_modules/tape/lib/test.js:389:10)
          at Test.bound [as equal] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.<anonymous> (/tmp/remark-external-links/test.js:73:5)
          at Test.bound [as _cb] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.run (/tmp/remark-external-links/node_modules/tape/lib/test.js:96:10)
          at Test.bound [as run] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Immediate.next [as _onImmediate] (/tmp/remark-external-links/node_modules/tape/lib/results.js:81:19)
          at processImmediate (internal/timers.js:439:21)
  ...
not ok 5 should add both
  ---
    operator: equal
    expected: |-
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    actual: |-
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    at: Test.<anonymous> (/tmp/remark-external-links/test.js:90:5)
    stack: |-
      Error: should add both
          at Test.assert [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.equal (/tmp/remark-external-links/node_modules/tape/lib/test.js:389:10)
          at Test.bound [as equal] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.<anonymous> (/tmp/remark-external-links/test.js:90:5)
          at Test.bound [as _cb] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.run (/tmp/remark-external-links/node_modules/tape/lib/test.js:96:10)
          at Test.bound [as run] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Immediate.next [as _onImmediate] (/tmp/remark-external-links/node_modules/tape/lib/results.js:81:19)
          at processImmediate (internal/timers.js:439:21)
  ...
not ok 6 should add a target
  ---
    operator: equal
    expected: |-
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]" target="_blank" rel="nofollow noopener noreferrer">[email protected]</a></p>\n'
    actual: |-
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external</a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]" target="_blank" rel="nofollow noopener noreferrer">[email protected]</a></p>\n'
    at: Test.<anonymous> (/tmp/remark-external-links/test.js:107:5)
    stack: |-
      Error: should add a target
          at Test.assert [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.equal (/tmp/remark-external-links/node_modules/tape/lib/test.js:389:10)
          at Test.bound [as equal] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.<anonymous> (/tmp/remark-external-links/test.js:107:5)
          at Test.bound [as _cb] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.run (/tmp/remark-external-links/node_modules/tape/lib/test.js:96:10)
          at Test.bound [as run] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Immediate.next [as _onImmediate] (/tmp/remark-external-links/node_modules/tape/lib/results.js:81:19)
          at processImmediate (internal/timers.js:439:21)
  ...
not ok 7 should add hast node as content
  ---
    operator: equal
    expected: |-
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark<span> (opens in a new window)</span></a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external<span> (opens in a new window)</span></a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    actual: |-
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external<span> (opens in a new window)</span></a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    at: Test.<anonymous> (/tmp/remark-external-links/test.js:124:5)
    stack: |-
      Error: should add hast node as content
          at Test.assert [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.equal (/tmp/remark-external-links/node_modules/tape/lib/test.js:389:10)
          at Test.bound [as equal] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.<anonymous> (/tmp/remark-external-links/test.js:124:5)
          at Test.bound [as _cb] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.run (/tmp/remark-external-links/node_modules/tape/lib/test.js:96:10)
          at Test.bound [as run] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Immediate.next [as _onImmediate] (/tmp/remark-external-links/node_modules/tape/lib/results.js:81:19)
          at processImmediate (internal/timers.js:439:21)
  ...
not ok 8 should add hast children as content
  ---
    operator: equal
    expected: |-
      '<p><a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">remark<span> (<em>opens in a new window</em>)</span></a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external<span> (<em>opens in a new window</em>)</span></a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    actual: |-
      '<p><a href="https://github.com/remarkjs/remark">remark</a></p>\n<p><a href="./example.md">relative link</a> and <a href="#fragment">fragment link</a></p>\n<p>[missing][], <a href="#local">local</a>, and <a href="https://github.com/remarkjs/remark" target="_blank" rel="nofollow noopener noreferrer">external<span> (<em>opens in a new window</em>)</span></a>.</p>\n<p><a href=".">current</a> <a href="..">up</a> <a href="example.md">relative link without ./</a></p>\n<p><a href="mailto:[email protected]">[email protected]</a></p>\n'
    at: Test.<anonymous> (/tmp/remark-external-links/test.js:143:5)
    stack: |-
      Error: should add hast children as content
          at Test.assert [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:228:54)
          at Test.bound [as _assert] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.equal (/tmp/remark-external-links/node_modules/tape/lib/test.js:389:10)
          at Test.bound [as equal] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.<anonymous> (/tmp/remark-external-links/test.js:143:5)
          at Test.bound [as _cb] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Test.run (/tmp/remark-external-links/node_modules/tape/lib/test.js:96:10)
          at Test.bound [as run] (/tmp/remark-external-links/node_modules/tape/lib/test.js:80:32)
          at Immediate.next [as _onImmediate] (/tmp/remark-external-links/node_modules/tape/lib/results.js:81:19)
          at processImmediate (internal/timers.js:439:21)
  ...

1..8
# tests 8
# pass  1
# fail  7

Expected behaviour

The tests should pass.

Actual behaviour

The tests fail.

Refer to this issue.

For now, I have to manually add the attributes. I am relatively inexperienced in JavaScript and thus cannot submit a PR. I hope the fix is as simple as a change in function call order.

Thanks in advance.

Add to remarkjs npm org

Hey! I just reworked some of the code here to align it more to other remarkjs projects, similar options, but also to remove babel. I applied some fixes, added 100% coverage, reworded the readme and some config files. Etc.

Anyway, could you add me as a collaborator on npm? I’ll make sure to add this project to the remarkjs org on npm, so that we can have the community maintain it!

I’ll cut a new major release if you’re okay with all this?

👋

Add more support

Please support the following link:

[TypeScript][typescript-url]

[typescript-url]: https://www.typescriptlang.org/

Ignoring specific URLs

Subject of the feature

Add an option to ignore/whitelist specific URLs

Problem

This module doesn't handle the edge case where you have absolute links that should not be external (which has just happened to me). I could change them all to be relative but there are thousands. You may (for some reason) also like to ignore specific URLs, i.e. links to items on a CDN which are 'external' but you dont want them treated as such as they are still part of your site.

Example for acme.com

Expected behaviour

Ignoring specific URL patterns should not treat links as external

Alternatives

N/A

Update for changes in remark

Hi! 👋

remark just changed: you can read more about the changed here.

That means that this plugin doesn’t work with the latest remark. If you get around to updating, use the previously mentioned changelog for help, but feel free to respond below or ask questions on Gitter!

mailto links (weird behavior)

Currently links that start with mailto: have the external link options applied; which is an odd behavior as when clicked the mail client is opened, but a blank tab is shown in the browser.

is it possible to exclude fragment anchors?

This plugin is great.
Thanks for making it.

Is it possible to exclude fragment anchors?
As it is now, all my fragment links are getting the external link treatment.

image

thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.