2
0
mirror of https://github.com/tenrok/vue-meta.git synced 2026-06-24 11:50:35 +03:00

fix: also render boolean attributes correctly for tags

This commit is contained in:
pimlie
2019-02-11 15:59:01 +01:00
parent deea5cfbbd
commit 66e4fb4e3e
2 changed files with 9 additions and 11 deletions
+2 -2
View File
@@ -1,4 +1,4 @@
import { tagsWithoutEndTag, tagsWithInnerContent, tagAttributeAsInnerContent } from '../../shared/constants' import { booleanHtmlAttributes, tagsWithoutEndTag, tagsWithInnerContent, tagAttributeAsInnerContent } from '../../shared/constants'
import { isUndefined } from '../../shared/typeof' import { isUndefined } from '../../shared/typeof'
/** /**
@@ -36,7 +36,7 @@ export default function tagGenerator({ attribute, tagIDKeyName } = {}, type, tag
prefix = 'data-' prefix = 'data-'
} }
return isUndefined(tag[attr]) return isUndefined(tag[attr]) || booleanHtmlAttributes.includes(attr)
? `${attrsStr} ${prefix}${attr}` ? `${attrsStr} ${prefix}${attr}`
: `${attrsStr} ${prefix}${attr}="${tag[attr]}"` : `${attrsStr} ${prefix}${attr}="${tag[attr]}"`
}, '') }, '')
+7 -9
View File
@@ -117,12 +117,15 @@ const metaInfoData = {
{ src: 'src', async: true, defer: true, body: true } { src: 'src', async: true, defer: true, body: true }
], ],
expect: [ expect: [
'<script data-vue-meta="true" src="src" async="true" defer="true" data-vmid="content"></script>', '<script data-vue-meta="true" src="src" async defer data-vmid="content"></script>',
'<script data-vue-meta="true" src="src" async="true" defer="true" data-body="true"></script>' '<script data-vue-meta="true" src="src" async defer data-body="true"></script>'
], ],
test(side, defaultTest) { test(side, defaultTest) {
return () => { return () => {
if (side === 'client') { if (side === 'client') {
for (const index in this.expect) {
this.expect[index] = this.expect[index].replace(/(async|defer)/g, '$1="true"')
}
const tags = defaultTest() const tags = defaultTest()
expect(tags.addedTags.script[0].parentNode.tagName).toBe('HEAD') expect(tags.addedTags.script[0].parentNode.tagName).toBe('HEAD')
@@ -139,15 +142,10 @@ const metaInfoData = {
} }
} }
}, },
// this test only runs for client so we can directly expect wrong boolean attributes
change: { change: {
data: [{ src: 'src', async: true, defer: true, [defaultOptions.tagIDKeyName]: 'content2' }], data: [{ src: 'src', async: true, defer: true, [defaultOptions.tagIDKeyName]: 'content2' }],
expect: ['<script data-vue-meta="true" src="src" async="true" defer data-vmid="content2"></script>'], expect: ['<script data-vue-meta="true" src="src" async="true" defer="true" data-vmid="content2"></script>']
test(side, defaultTest) {
if (side === 'client') {
// jsdom doesnt generate valid boolean attributes
this.expect[0] = this.expect[0].replace('defer', 'defer="true"')
}
}
}, },
remove: { remove: {
data: [], data: [],