From f9b2d0c27fa9c3407e24dda32301c4f566af8d26 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 11 Jun 2014 15:38:04 +0100 Subject: Generate links back to main body --- lib/document-to-html.js | 15 +++++++++++++-- tests/document-to-html.tests.js | 6 +++--- tests/mammoth.tests.js | 9 +++++---- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/document-to-html.js b/lib/document-to-html.js index d7b6a86..faae02b 100644 --- a/lib/document-to-html.js +++ b/lib/document-to-html.js @@ -181,8 +181,13 @@ function DocumentConversion(options) { }); }, "footnoteReference": function(element, html, messages, callback) { + var uid = footnoteUid(element.footnoteId); + html.open(htmlPaths.element("sup")); - html.open(htmlPaths.element("a", {href: "#footnote-" + footnoteUid(element.footnoteId)})); + html.open(htmlPaths.element("a", { + href: "#footnote-" + uid, + id: "footnote-ref-" + uid + })); footnoteIds.push(element.footnoteId); html.text("[" + (footnoteNumber++) + "]"); html.close(); @@ -190,7 +195,9 @@ function DocumentConversion(options) { callback(); }, "footnote": function(element, html, messages, callback) { - html.open(htmlPaths.element("li", {id: "footnote-" + footnoteUid(element.id)})); + var uid = footnoteUid(element.id); + + html.open(htmlPaths.element("li", {id: "footnote-" + uid})); var footnoteHtml = new HtmlGenerator(); convertElements(element.body, footnoteHtml, messages, function(err) { if (err) { @@ -198,6 +205,10 @@ function DocumentConversion(options) { } else { footnoteHtml.closeAll(); html.append(footnoteHtml); + html.text(" "); + html.open(htmlPaths.element("a", {href: "#footnote-ref-" + uid})); + html.text("↑"); + html.close(); html.close(); callback(); } diff --git a/tests/document-to-html.tests.js b/tests/document-to-html.tests.js index 51ee625..cf6fa5b 100644 --- a/tests/document-to-html.tests.js +++ b/tests/document-to-html.tests.js @@ -206,7 +206,7 @@ describe('DocumentConverter', function() { generateUniquifier: function() { return 42; } }); return converter.convertToHtml(footnoteReference).then(function(result) { - assert.equal(result.value, '[1]'); + assert.equal(result.value, '[1]'); }); }); @@ -233,8 +233,8 @@ describe('DocumentConverter', function() { generateUniquifier: function() { return 42; } }); return converter.convertToHtml(document).then(function(result) { - var expectedOutput = '

Knock knock[1]

' + - '
  1. Who\'s there?

'; + var expectedOutput = '

Knock knock[1]

' + + '
  1. Who\'s there?

    ↑
'; assert.equal(result.value, expectedOutput); }); }); diff --git a/tests/mammoth.tests.js b/tests/mammoth.tests.js index 0b529dd..7b502a4 100644 --- a/tests/mammoth.tests.js +++ b/tests/mammoth.tests.js @@ -89,16 +89,17 @@ describe('mammoth', function() { }); test('footnotes are appended to text', function() { - // TODO: generate links back to main body // TODO: don't duplicate footnotes with multiple references var docxPath = path.join(__dirname, "test-data/footnotes.docx"); var options = { generateUniquifier: function() { return 42; } }; return mammoth.convertToHtml({path: docxPath}, options).then(function(result) { - var expectedOutput = '

Ouch[1].[2]

' + - '
  1. A tachyon walks into a bar.

  2. ' + - '
  3. Fin.

' + var expectedOutput = '

Ouch' + + '[1].' + + '[2]

' + + '
  1. A tachyon walks into a bar.

    ↑
  2. ' + + '
  3. Fin.

    ↑
' assert.equal(result.value, expectedOutput); // TODO: get rid of warnings //~ assert.deepEqual(result.messages, []); -- cgit v1.2.3