From 292b0e0b0716716b5505e43a3de75487794f887d Mon Sep 17 00:00:00 2001 From: ache Date: Fri, 7 Feb 2020 18:57:12 +0100 Subject: Support for linkReferences and footnotes --- __tests__/index.js | 35 +++++++++++++++++++++++++++++++++-- dist/index.js | 5 +++-- src/index.js | 3 ++- 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/__tests__/index.js b/__tests__/index.js index 7ac7b0c..6cfa471 100644 --- a/__tests__/index.js +++ b/__tests__/index.js @@ -25,6 +25,13 @@ const render = text => unified() .use(stringify) .processSync(text); +const renderFootnotes = text => unified() + .use(reParse, {footnotes: true}) + .use(plugin, {allowDangerousDOMEventHandlers: false, scope: 'permissive'}) + .use(remark2rehype) + .use(stringify) + .processSync(text); + const renderRaw = text => unified() .use(reParse) .use(plugin, {allowDangerousDOMEventHandlers: false, scope: 'permissive'}) @@ -128,16 +135,40 @@ Title of the article {data-id="title"} `; - const {contents} = render(imageMd); + const {contents} = renderDefault(imageMd); t.deepEqual(parse(contents), parse('

Title of the article

')); }); test('emphasis and strong', t => { const emphasis = 'Hey ! *That looks cool*{style="color: blue;"} ! No, that\'s **not**{.not} !'; - const {contents} = render(emphasis); + const {contents} = renderDefault(emphasis); t.deepEqual(parse(contents), parse('

Hey ! That looks cool ! No, that\'s not !')); }); +test('linkReference', t => { + const linkRef = `[Google][google]{hreflang="en"} + +[google]: https://google.com +`; + const {contents} = renderDefault(linkRef); + t.deepEqual(parse(contents), parse('

Google

')); +}); + +test('footnote', t => { + const footnotes = `Since XP is good we should always use XP[^xp]{ data-id=xp } + +[^xp]: Apply XP principe to XP. +`; + const {contents} = renderFootnotes(footnotes); + t.deepEqual(parse(contents), parse(`

Since XP is good we should always use XPxp

+
+
+
    +
  1. Apply XP principe to XP.
  2. +
+
`)); +}); + /* Readme tests * * Should be act acording to the README.md diff --git a/dist/index.js b/dist/index.js index b857126..92abac4 100644 --- a/dist/index.js +++ b/dist/index.js @@ -2,7 +2,7 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } +function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } @@ -10,7 +10,7 @@ var parseAttr = require('md-attr-parser'); var htmlElemAttr = require('html-element-attributes'); -var supportedElements = ['link', 'atxHeading', 'strong', 'emphasis', 'deletion', 'code', 'setextHeading', 'fencedCode']; +var supportedElements = ['link', 'atxHeading', 'strong', 'emphasis', 'deletion', 'code', 'setextHeading', 'fencedCode', 'reference']; var blockElements = ['atxHeading', 'setextHeading']; var particularElements = ['fencedCode']; var particularTokenize = {}; @@ -28,6 +28,7 @@ var convTypeTag = { "delete": 's', inlineCode: 'code', code: 'code', + linkReference: 'a', '*': '*' }; /* This function is a generic function that transform diff --git a/src/index.js b/src/index.js index 9f5fd12..3007b90 100644 --- a/src/index.js +++ b/src/index.js @@ -3,7 +3,7 @@ const parseAttr = require('md-attr-parser'); const htmlElemAttr = require('html-element-attributes'); -const supportedElements = ['link', 'atxHeading', 'strong', 'emphasis', 'deletion', 'code', 'setextHeading', 'fencedCode']; +const supportedElements = ['link', 'atxHeading', 'strong', 'emphasis', 'deletion', 'code', 'setextHeading', 'fencedCode', 'reference']; const blockElements = ['atxHeading', 'setextHeading']; const particularElements = ['fencedCode']; @@ -21,6 +21,7 @@ const convTypeTag = { delete: 's', inlineCode: 'code', code: 'code', + linkReference: 'a', '*': '*', }; -- cgit v1.2.3