diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-04-27 23:05:19 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-04-27 23:05:19 +0100 |
| commit | c73f4f17b9d02e952110ee8d9849b6e2293569d7 (patch) | |
| tree | db318b502eedad34711e67a870cd2b10dbdafcbb | |
| parent | 43db35ec5e5125055fa8ccfdef17d077a63f31f9 (diff) | |
Read overrides from [Content_Types].xml
| -rw-r--r-- | lib/content-types-reader.js | 19 | ||||
| -rw-r--r-- | tests/content-types-reader.tests.js | 10 |
2 files changed, 26 insertions, 3 deletions
diff --git a/lib/content-types-reader.js b/lib/content-types-reader.js index 0346b8c..0a74eb9 100644 --- a/lib/content-types-reader.js +++ b/lib/content-types-reader.js @@ -13,18 +13,31 @@ function readContentTypesFromZipFile(file) { function readContentTypesFromXml(xml) { var extensionDefaults = {}; + var overrides = {}; xml.root.children.forEach(function(child) { if (child.name === "content-types:Default") { extensionDefaults[child.attributes.Extension] = child.attributes.ContentType; } + if (child.name === "content-types:Override") { + var name = child.attributes.PartName; + if (name.charAt(0) === "/") { + name = name.substring(1); + } + overrides[name] = child.attributes.ContentType; + } }); return { findContentType: function(path) { - var pathParts = path.split("."); - var extension = pathParts[pathParts.length - 1]; - return extensionDefaults[extension]; + var overrideContentType = overrides[path]; + if (overrideContentType) { + return overrideContentType; + } else { + var pathParts = path.split("."); + var extension = pathParts[pathParts.length - 1]; + return extensionDefaults[extension]; + } } } } diff --git a/tests/content-types-reader.tests.js b/tests/content-types-reader.tests.js index 7cd7295..df7ed47 100644 --- a/tests/content-types-reader.tests.js +++ b/tests/content-types-reader.tests.js @@ -14,4 +14,14 @@ describe('readContentTypesFromXml', function() { }); assert.equal(contentTypes.findContentType("word/media/hat.png"), "image/png"); }); + + test('reads overrides in preference to defaults', function() { + var contentTypes = readContentTypesFromXml({ + root: new XmlElement("content-types:Types", {}, [ + new XmlElement("content-types:Default", {Extension: "png", ContentType: "image/png"}), + new XmlElement("content-types:Override", {PartName: "/word/media/hat.png", ContentType: "image/hat"}) + ]) + }); + assert.equal(contentTypes.findContentType("word/media/hat.png"), "image/hat"); + }); }); |
