diff --git a/NEWS b/NEWS index 9f6fe81b2..b9c9d40c2 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +# 1.5.0 + +* Only use the alt text of image elements as a fallback. If an alt attribute is + returned from the function passed to mammoth.images.imgElement, that value + will now be preferred to the alt text of the image element. + # 1.4.21 * Ignore w:u elements when w:val is missing. diff --git a/lib/images.js b/lib/images.js index c7d3ef527..fc45115f7 100644 --- a/lib/images.js +++ b/lib/images.js @@ -8,10 +8,12 @@ exports.imgElement = imgElement; function imgElement(func) { return function(element, messages) { return promises.when(func(element)).then(function(result) { - var attributes = _.clone(result); + var attributes = {}; if (element.altText) { attributes.alt = element.altText; } + _.extend(attributes, result); + return [Html.freshElement("img", attributes)]; }); }; diff --git a/test/images.tests.js b/test/images.tests.js index 9a9344d97..cd8d51b45 100644 --- a/test/images.tests.js +++ b/test/images.tests.js @@ -83,5 +83,30 @@ test('mammoth.images.imgElement()', { }) )); }); + }, + + 'image alt text can be overriden by alt attribute returned from function': function() { + var imageBuffer = new Buffer("abc"); + var image = new documents.Image({ + readImage: function(encoding) { + return promises.when(imageBuffer.toString(encoding)); + }, + contentType: "image/jpeg", + altText: "" + }); + + var result = mammoth.images.imgElement(function(image) { + return {alt: "", src: ""}; + })(image); + + return result.then(function(result) { + assertThat(result, contains( + hasProperties({ + tag: hasProperties({ + attributes: equalTo({alt: "", src: ""}) + }) + }) + )); + }); } });