diff options
| author | Michael Williamson <mike@zwobble.org> | 2017-05-30 11:05:18 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2017-05-30 11:05:18 +0100 |
| commit | a9661689a03cdaf3590250a0bd7887f07aeafa7e (patch) | |
| tree | 57f33c9506abd51eb5867a373ae011e2d7e1c206 | |
| parent | 9cc065c434b00b10ba234afa952fedf7e20a59af (diff) | |
Read target frame on hyperlinks
| -rw-r--r-- | lib/documents.js | 3 | ||||
| -rw-r--r-- | lib/docx/body-reader.js | 13 | ||||
| -rw-r--r-- | test/docx/body-reader.tests.js | 11 |
3 files changed, 23 insertions, 4 deletions
diff --git a/lib/documents.js b/lib/documents.js index 81fea00..605b1b4 100644 --- a/lib/documents.js +++ b/lib/documents.js @@ -81,7 +81,8 @@ function Hyperlink(children, options) { type: types.hyperlink, children: children, href: options.href, - anchor: options.anchor + anchor: options.anchor, + targetFrame: options.targetFrame }; } diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js index f035c1a..71c9855 100644 --- a/lib/docx/body-reader.js +++ b/lib/docx/body-reader.js @@ -208,14 +208,23 @@ function BodyReader(options) { var relationshipId = element.attributes["r:id"]; var anchor = element.attributes["w:anchor"]; return readXmlElements(element.children).map(function(children) { + function create(options) { + var targetFrame = element.attributes["w:tgtFrame"]; + + return new documents.Hyperlink( + children, + _.extend({targetFrame: targetFrame}, options) + ); + } + if (relationshipId) { var href = relationships[relationshipId].target; if (anchor) { href = uris.replaceFragment(href, anchor); } - return new documents.Hyperlink(children, {href: href}); + return create({href: href}); } else if (anchor) { - return new documents.Hyperlink(children, {anchor: anchor}); + return create({anchor: anchor}); } else { return children; } diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js index 1eb229f..f866e9b 100644 --- a/test/docx/body-reader.tests.js +++ b/test/docx/body-reader.tests.js @@ -945,7 +945,16 @@ test("w:hyperlink", { var hyperlinkXml = new XmlElement("w:hyperlink", {}, [runXml]); var result = readXmlElement(hyperlinkXml); assert.deepEqual(result.value[0].type, "run"); - } + }, + + "target frame is read": function() { + var hyperlinkXml = new XmlElement("w:hyperlink", { + "w:anchor": "Introduction", + "w:tgtFrame": "_blank" + }); + var result = readXmlElementValue(hyperlinkXml); + assertThat(result, hasProperties({targetFrame: "_blank"})); + }, }); test("w:br without explicit type is read as line break", function() { |
