diff options
| author | Andreas Lubbe <git@lubbe.org> | 2015-01-23 18:24:23 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-02-09 20:31:51 +0000 |
| commit | 4d4d9e669b389be294373cf3c9bd4727dd5f32af (patch) | |
| tree | d66a47574dfea6c24328aa296cb3b67f2d7890f2 /lib | |
| parent | 37cdbc47dc105a3c745e0f718843e68cf1741aed (diff) | |
Add support for internal hyperlinks
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/document-to-html.js | 15 | ||||
| -rw-r--r-- | lib/documents.js | 14 | ||||
| -rw-r--r-- | lib/docx/document-xml-reader.js | 12 |
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, |
