From 7729607d2ec301eddaa1863773f0660932ab2e8a Mon Sep 17 00:00:00 2001 From: Steve Larson <9larsons@gmail.com> Date: Wed, 18 Oct 2023 10:57:14 -0500 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=90=9B=20Supported=20parsing=20images?= =?UTF-8?q?=20nested=20in=20anchor=20tags?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes TryGhost/Product#4035 - added support for images wrapped in an anchor tag - previously only supported this if additionally wrapped in a figure --- .../lib/nodes/image/image-parser.js | 15 +++++++++++++++ .../kg-default-nodes/test/nodes/image.test.js | 13 +++++++++++++ 2 files changed, 28 insertions(+) diff --git a/packages/kg-default-nodes/lib/nodes/image/image-parser.js b/packages/kg-default-nodes/lib/nodes/image/image-parser.js index 39a827ddb..16ca0bcde 100644 --- a/packages/kg-default-nodes/lib/nodes/image/image-parser.js +++ b/packages/kg-default-nodes/lib/nodes/image/image-parser.js @@ -46,6 +46,21 @@ export function parseImageNode(ImageNode) { }; } return null; + }, + a: (nodeElem) => { + const img = nodeElem.querySelector('img'); + if (img) { + return { + conversion(domNode) { + const href = domNode.getAttribute('href'); + const {src, width, height, alt, title} = readImageAttributesFromElement(img); + + const node = new ImageNode({alt, src, title, width, height, href}); + return {node}; + }, + priority: 0 + }; + } } }; } diff --git a/packages/kg-default-nodes/test/nodes/image.test.js b/packages/kg-default-nodes/test/nodes/image.test.js index 8dc282d31..9517f6fc0 100644 --- a/packages/kg-default-nodes/test/nodes/image.test.js +++ b/packages/kg-default-nodes/test/nodes/image.test.js @@ -435,6 +435,19 @@ describe('ImageNode', function () { nodes[0].src.should.equal('http://example.com/test.png'); nodes[0].href.should.equal('https://example.com/link'); })); + + it('extracts href when img wrapped in anchor tag not within figure', editorTest(function () { + const dom = (new JSDOM(html` + + + + `)).window.document; + const nodes = $generateNodesFromDOM(editor, dom); + + nodes.length.should.equal(1); + nodes[0].src.should.equal('http://example.com/test.png'); + nodes[0].href.should.equal('https://example.com/link'); + })); }); describe('exportJSON', function () { From f6d3b751ed5c9d7f1aa6638dec5ddfd1b4deb409 Mon Sep 17 00:00:00 2001 From: Steve Larson <9larsons@gmail.com> Date: Wed, 18 Oct 2023 11:43:01 -0500 Subject: [PATCH 2/2] add href --- .../lib/nodes/image/image-parser.js | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/packages/kg-default-nodes/lib/nodes/image/image-parser.js b/packages/kg-default-nodes/lib/nodes/image/image-parser.js index 16ca0bcde..c13d66a4a 100644 --- a/packages/kg-default-nodes/lib/nodes/image/image-parser.js +++ b/packages/kg-default-nodes/lib/nodes/image/image-parser.js @@ -6,9 +6,9 @@ export function parseImageNode(ImageNode) { img: () => ({ conversion(domNode) { if (domNode.tagName === 'IMG') { - const {src, width, height, alt, title} = readImageAttributesFromElement(domNode); + const {src, width, height, alt, title, href} = readImageAttributesFromElement(domNode); - const node = new ImageNode({alt, src, title, width, height}); + const node = new ImageNode({alt, src, title, width, height, href}); return {node}; } @@ -46,21 +46,6 @@ export function parseImageNode(ImageNode) { }; } return null; - }, - a: (nodeElem) => { - const img = nodeElem.querySelector('img'); - if (img) { - return { - conversion(domNode) { - const href = domNode.getAttribute('href'); - const {src, width, height, alt, title} = readImageAttributesFromElement(img); - - const node = new ImageNode({alt, src, title, width, height, href}); - return {node}; - }, - priority: 0 - }; - } } }; }