diff options
| -rw-r--r-- | lib/docx/footnotes-reader.js | 27 | ||||
| -rw-r--r-- | tests/docx/footnotes-reader.tests.js | 30 |
2 files changed, 57 insertions, 0 deletions
diff --git a/lib/docx/footnotes-reader.js b/lib/docx/footnotes-reader.js new file mode 100644 index 0000000..a55b261 --- /dev/null +++ b/lib/docx/footnotes-reader.js @@ -0,0 +1,27 @@ +exports.readFootnotesXml = readFootnotesXml; + +function Footnotes(footnotes) { + function findFootnoteById(id) { + return footnotes[id] || null; + } + + return { + findFootnoteById: findFootnoteById + }; +} + +function readFootnotesXml(xml) { + var footnotes = {}; + + xml.root.getElementsByTagName("w:footnote").forEach(function(footnoteElement) { + var id = footnoteElement.attributes["w:id"]; + footnotes[id] = readFootnoteElement(footnoteElement); + }); + + return new Footnotes(footnotes); +} + +function readFootnoteElement(footnoteElement) { + var body = footnoteElement.children; + return {body: body}; +} diff --git a/tests/docx/footnotes-reader.tests.js b/tests/docx/footnotes-reader.tests.js new file mode 100644 index 0000000..536fc55 --- /dev/null +++ b/tests/docx/footnotes-reader.tests.js @@ -0,0 +1,30 @@ +var assert = require("assert"); + +var duck = require("duck"); + +var readFootnotesXml = require("../../lib/docx/footnotes-reader").readFootnotesXml; +var XmlElement = require("../../lib/xmlreader").Element; +var test = require("../testing").test; + + +describe('readFootnotesXml', function() { + test('footnote can be looked up by ID', function() { + var footnoteBody = [new XmlElement("w:p", {}, [])]; + var footnotes = readFootnotesXml({ + root: new XmlElement("w:footnotes", {}, [ + new XmlElement("w:footnote", {"w:id": "1"}, footnoteBody) + ]) + }); + assert.strictEqual(footnotes.findFootnoteById("1").body, footnoteBody); + }); + + test('footnote is null if no footnote with that ID exists', function() { + var footnoteBody = [new XmlElement("w:p", {}, [])]; + var footnotes = readFootnotesXml({ + root: new XmlElement("w:footnotes", {}, [ + new XmlElement("w:footnote", {"w:id": "1"}, footnoteBody) + ]) + }); + assert.strictEqual(footnotes.findFootnoteById("2"), null); + }); +}); |
