Skip to content

Commit ddcea20

Browse files
Jinjiangyyx990803
authored andcommitted
fix: more robust handling for parsing 'srcset' attribute value (#1057)
* fix #1052 * added test case for #1052
1 parent 21809a0 commit ddcea20

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

lib/template-compiler/modules/transform-srcset.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,15 @@ function transform (node) {
2828
return { require: urlToRequire(url), descriptor: descriptor }
2929
})
3030

31-
let code = ''
32-
imageCandidates.forEach((o, i, a) => {
33-
code += o.require + ' + " ' + o.descriptor + (i < a.length - 1 ? ', " + ' : '"')
34-
})
31+
// "require(url1)"
32+
// "require(url1) 1x"
33+
// "require(url1), require(url2)"
34+
// "require(url1), require(url2) 2x"
35+
// "require(url1) 1x, require(url2)"
36+
// "require(url1) 1x, require(url2) 2x"
37+
const code = imageCandidates.map(
38+
({ require, descriptor }) => `${require} + "${descriptor ? ' ' + descriptor : ''}, " + `
39+
).join('').slice(0, -6).concat('"').replace(/ \+ ""$/, '')
3540

3641
attr.value = code
3742
}

test/fixtures/transform.vue

+4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink">
55
<image xlink:href="./logo.png" />
66
</svg>
7+
<img src="./logo.png" srcset="./logo.png">
78
<img src="./logo.png" srcset="./logo.png 2x">
9+
<img src="./logo.png" srcset="./logo.png, ./logo.png 2x">
10+
<img src="./logo.png" srcset="./logo.png 2x, ./logo.png">
811
<img src="./logo.png" srcset="./logo.png 2x, ./logo.png 3x">
12+
<img src="./logo.png" srcset="./logo.png, ./logo.png 2x, ./logo.png 3x">
913
<img
1014
src="./logo.png"
1115
srcset="

test/test.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -444,11 +444,14 @@ describe('vue-loader', () => {
444444
const dataURL = vnode.children[0].data.attrs.src
445445

446446
// image tag with srcset
447-
expect(vnode.children[4].data.attrs.srcset).to.equal(dataURL + ' 2x')
448-
// image tag with srcset with two candidates
449-
expect(vnode.children[6].data.attrs.srcset).to.equal(dataURL + ' 2x, ' + dataURL + ' 3x')
447+
expect(vnode.children[4].data.attrs.srcset).to.equal(dataURL)
448+
expect(vnode.children[6].data.attrs.srcset).to.equal(dataURL + ' 2x')
450449
// image tag with multiline srcset
451-
expect(vnode.children[8].data.attrs.srcset).to.equal(dataURL + ' 2x, ' + dataURL + ' 3x')
450+
expect(vnode.children[8].data.attrs.srcset).to.equal(dataURL + ', ' + dataURL + ' 2x')
451+
expect(vnode.children[10].data.attrs.srcset).to.equal(dataURL + ' 2x, ' + dataURL)
452+
expect(vnode.children[12].data.attrs.srcset).to.equal(dataURL + ' 2x, ' + dataURL + ' 3x')
453+
expect(vnode.children[14].data.attrs.srcset).to.equal(dataURL + ', ' + dataURL + ' 2x, ' + dataURL + ' 3x')
454+
expect(vnode.children[16].data.attrs.srcset).to.equal(dataURL + ' 2x, ' + dataURL + ' 3x')
452455

453456
// style
454457
expect(includeDataURL(style)).to.equal(true)

0 commit comments

Comments
 (0)