summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2017-05-30 11:05:18 +0100
committerMichael Williamson <mike@zwobble.org>2017-05-30 11:05:18 +0100
commita9661689a03cdaf3590250a0bd7887f07aeafa7e (patch)
tree57f33c9506abd51eb5867a373ae011e2d7e1c206
parent9cc065c434b00b10ba234afa952fedf7e20a59af (diff)
Read target frame on hyperlinks
-rw-r--r--lib/documents.js3
-rw-r--r--lib/docx/body-reader.js13
-rw-r--r--test/docx/body-reader.tests.js11
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() {