aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Lubbe <git@lubbe.org>2015-01-23 18:24:23 +0100
committerMichael Williamson <mike@zwobble.org>2015-02-09 20:31:51 +0000
commit4d4d9e669b389be294373cf3c9bd4727dd5f32af (patch)
treed66a47574dfea6c24328aa296cb3b67f2d7890f2 /lib
parent37cdbc47dc105a3c745e0f718843e68cf1741aed (diff)
Add support for internal hyperlinks
Diffstat (limited to 'lib')
-rw-r--r--lib/document-to-html.js15
-rw-r--r--lib/documents.js14
-rw-r--r--lib/docx/document-xml-reader.js12
3 files changed, 36 insertions, 5 deletions
diff --git a/lib/document-to-html.js b/lib/document-to-html.js
index c068fba..000fc5c 100644
--- a/lib/document-to-html.js
+++ b/lib/document-to-html.js
@@ -234,7 +234,9 @@ function DocumentConversion(options) {
callback();
},
"hyperlink": function(element, html, messages, callback) {
- html.open(htmlPaths.element("a", {href: element.href}));
+ var href = element.anchor ? "#" + element.anchor : element.href;
+
+ html.open(htmlPaths.element("a", {href: href}));
convertElements(element.children, html, messages, function(err) {
if (err) {
callback(err);
@@ -280,6 +282,17 @@ function DocumentConversion(options) {
"lineBreak": function(element, html, messages, callback) {
html.selfClosing(htmlPaths.element("br"));
callback();
+ },
+ "bookmarkStart": function(element, html, messages, callback) {
+ if (element.name === "_GoBack") {
+ return callback();
+ }
+
+ html.open(htmlPaths.element("span", {
+ id: element.name
+ }), {alwaysWrite: true});
+ html.close();
+ callback();
}
};
return {
diff --git a/lib/documents.js b/lib/documents.js
index 78bea1a..10d8646 100644
--- a/lib/documents.js
+++ b/lib/documents.js
@@ -13,7 +13,8 @@ var types = {
table: "table",
tableRow: "tableRow",
tableCell: "tableCell",
- lineBreak: "lineBreak"
+ lineBreak: "lineBreak",
+ bookmarkStart: "bookmarkStart"
};
function Document(children, options) {
@@ -74,7 +75,8 @@ function Hyperlink(children, options) {
return {
type: types.hyperlink,
children: children,
- href: options.href
+ href: options.href,
+ anchor: options.anchor
};
}
@@ -149,6 +151,13 @@ function LineBreak() {
};
}
+function BookmarkStart(options) {
+ return {
+ type: types.bookmarkStart,
+ name: options.name
+ };
+}
+
exports.Document = Document;
exports.Paragraph = Paragraph;
exports.Run = Run;
@@ -163,5 +172,6 @@ exports.Table = Table;
exports.TableRow = TableRow;
exports.TableCell = TableCell;
exports.LineBreak = LineBreak;
+exports.BookmarkStart = BookmarkStart;
exports.verticalAlignment = verticalAlignment;
diff --git a/lib/docx/document-xml-reader.js b/lib/docx/document-xml-reader.js
index e290792..f25e7a3 100644
--- a/lib/docx/document-xml-reader.js
+++ b/lib/docx/document-xml-reader.js
@@ -167,10 +167,13 @@ function DocumentXmlReader(options) {
},
"w:hyperlink": function(element) {
var relationshipId = element.attributes["r:id"];
+ var anchor = element.attributes["w:anchor"];
return readXmlElements(element.children).map(function(children) {
if (relationshipId) {
var href = relationships[relationshipId].target;
return new documents.Hyperlink(children, {href: href});
+ } else if (anchor) {
+ return new documents.Hyperlink(children, {anchor: anchor});
} else {
return children;
}
@@ -195,7 +198,13 @@ function DocumentXmlReader(options) {
return new Result(new documents.LineBreak());
}
},
-
+ "w:bookmarkStart": function(element){
+ var name = element.attributes["w:name"];
+ return readXmlElements(element.children).map(function(){
+ return new documents.BookmarkStart({name: name});
+ });
+ },
+
"w:ins": readChildElements,
"w:smartTag": readChildElements,
"w:drawing": readChildElements,
@@ -245,7 +254,6 @@ var supportedImageTypes = {
};
var ignoreElements = {
- "w:bookmarkStart": true,
"w:bookmarkEnd": true,
"w:sectPr": true,
"w:proofErr": true,