summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-09-02 22:06:01 +0100
committerMichael Williamson <mike@zwobble.org>2016-09-02 22:06:01 +0100
commitf6c25f725de0c4ee65e4a0d25aa1c08774b2b809 (patch)
tree2bdeb7d65616d5ab798d1f25079818def4f9eec8
parente5953b770484277e9119cef8358434cfad09df6b (diff)
Use alt text title if description is blank
-rw-r--r--NEWS3
-rw-r--r--lib/docx/body-reader.js7
-rw-r--r--test/docx/body-reader.tests.js34
3 files changed, 42 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index f17fe0c..0bd8d3e 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,9 @@
* Generate messages of type "error" instead of "warning" when image conversion
throws an exception.
+
+* Use alt text title as alt text for images when the alt text description is
+ blank.
# 1.1.0
diff --git a/lib/docx/body-reader.js b/lib/docx/body-reader.js
index 7b3120d..519a50b 100644
--- a/lib/docx/body-reader.js
+++ b/lib/docx/body-reader.js
@@ -316,10 +316,15 @@ function BodyReader(options) {
}
function readBlip(element, blip) {
- var altText = element.first("wp:docPr").attributes.descr;
+ var properties = element.first("wp:docPr").attributes;
+ var altText = isBlank(properties.descr) ? properties.title : properties.descr;
return readImage(findBlipImageFile(blip), altText);
}
+ function isBlank(value) {
+ return /^\s*$/.test(value);
+ }
+
function findBlipImageFile(blip) {
var embedRelationshipId = blip.attributes["r:embed"];
var linkRelationshipid = blip.attributes["r:link"];
diff --git a/test/docx/body-reader.tests.js b/test/docx/body-reader.tests.js
index 45b04ea..de9a6f9 100644
--- a/test/docx/body-reader.tests.js
+++ b/test/docx/body-reader.tests.js
@@ -464,6 +464,38 @@ test("can read inline pictures", function() {
}))));
});
+test("alt text title is used if alt text description is blank", function() {
+ var drawing = createInlineImage({
+ blip: createEmbeddedBlip(IMAGE_RELATIONSHIP_ID),
+ description: " ",
+ title: "It's a hat"
+ });
+
+ var result = readEmbeddedImage(drawing);
+
+ return promiseThat(result, isSuccess(contains(isImage({
+ altText: "It's a hat",
+ contentType: "image/png",
+ buffer: IMAGE_BUFFER
+ }))));
+});
+
+test("alt text description is preferred to alt text title", function() {
+ var drawing = createInlineImage({
+ blip: createEmbeddedBlip(IMAGE_RELATIONSHIP_ID),
+ description: "It's a hat",
+ title: "hat"
+ });
+
+ var result = readEmbeddedImage(drawing);
+
+ return promiseThat(result, isSuccess(contains(isImage({
+ altText: "It's a hat",
+ contentType: "image/png",
+ buffer: IMAGE_BUFFER
+ }))));
+});
+
test("can read anchored pictures", function() {
var drawing = new XmlElement("w:drawing", {}, [
new XmlElement("wp:anchor", {}, [
@@ -715,7 +747,7 @@ function single(array) {
function createInlineImage(options) {
return new XmlElement("w:drawing", {}, [
new XmlElement("wp:inline", {}, [
- new XmlElement("wp:docPr", {descr: options.description}),
+ new XmlElement("wp:docPr", {descr: options.description, title: options.title}),
new XmlElement("a:graphic", {}, [
new XmlElement("a:graphicData", {}, [
new XmlElement("pic:pic", {}, [