From ceb0d72396d6181104643b3ce403fddeb7391a98 Mon Sep 17 00:00:00 2001 From: mackie Date: Thu, 25 Apr 2019 01:51:36 -0700 Subject: [PATCH] fix(gatsby-transformer-remark): fix excerpt generation - strip excessive white spaces, extract alt from images (#12878) --- .../src/__tests__/extend-node.js | 19 +++++++++++++++++++ .../src/extend-node-type.js | 10 +++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/gatsby-transformer-remark/src/__tests__/extend-node.js b/packages/gatsby-transformer-remark/src/__tests__/extend-node.js index 7933d6f9aeec7..572ca78baa5bf 100644 --- a/packages/gatsby-transformer-remark/src/__tests__/extend-node.js +++ b/packages/gatsby-transformer-remark/src/__tests__/extend-node.js @@ -378,6 +378,25 @@ Where oh [*where*](nick.com) **_is_** ![that pony](pony.png)?`, } ) + bootstrapTest( + `excerpt does have missing words and extra spaces`, + `--- +title: "my little pony" +date: "2017-09-18T23:19:51.246Z" +--- + +Where oh [*where*](nick.com) **_is_** ![that pony](pony.png)?`, + `excerpt + frontmatter { + title + } + `, + node => { + expect(node.excerpt).toMatch(`Where oh where is that pony?`) + }, + {} + ) + bootstrapTest( `given raw html in the text body, this html is not escaped`, `--- diff --git a/packages/gatsby-transformer-remark/src/extend-node-type.js b/packages/gatsby-transformer-remark/src/extend-node-type.js index f02da84ab1e7e..33442a3a9eb37 100644 --- a/packages/gatsby-transformer-remark/src/extend-node-type.js +++ b/packages/gatsby-transformer-remark/src/extend-node-type.js @@ -430,17 +430,21 @@ module.exports = ( } const text = await getAST(markdownNode).then(ast => { - const excerptNodes = [] + let excerptNodes = [] visit(ast, node => { if (node.type === `text` || node.type === `inlineCode`) { excerptNodes.push(node.value) } + if (node.type === `image`) { + excerptNodes.push(node.alt) + } return }) + if (!truncate) { - return prune(excerptNodes.join(` `), pruneLength, `…`) + return prune(excerptNodes.join(``), pruneLength, `…`) } - return _.truncate(excerptNodes.join(` `), { + return _.truncate(excerptNodes.join(``), { length: pruneLength, omission: `…`, })