From 5b59155f9c0e91c9d9fa83bc50c756f4786ba904 Mon Sep 17 00:00:00 2001 From: yangchangtao Date: Wed, 20 Nov 2024 18:15:32 +0800 Subject: [PATCH 1/6] fix(compat): fix compat handler of draggable --- packages/runtime-dom/src/modules/attrs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/runtime-dom/src/modules/attrs.ts b/packages/runtime-dom/src/modules/attrs.ts index d7188aa9a1f..efce2ff2bbb 100644 --- a/packages/runtime-dom/src/modules/attrs.ts +++ b/packages/runtime-dom/src/modules/attrs.ts @@ -59,7 +59,7 @@ export function compatCoerceAttr( ): boolean { if (isEnumeratedAttr(key)) { const v2CoercedValue = - value === null + value == null || value === false || value === 'false' ? 'false' : typeof value !== 'boolean' && value !== undefined ? 'true' From d996c6a91885f09ed672f2846cbd245839808405 Mon Sep 17 00:00:00 2001 From: yangchangtao Date: Wed, 20 Nov 2024 18:51:31 +0800 Subject: [PATCH 2/6] chore: update --- packages/runtime-dom/src/modules/attrs.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/runtime-dom/src/modules/attrs.ts b/packages/runtime-dom/src/modules/attrs.ts index efce2ff2bbb..86b41ca0afe 100644 --- a/packages/runtime-dom/src/modules/attrs.ts +++ b/packages/runtime-dom/src/modules/attrs.ts @@ -59,9 +59,9 @@ export function compatCoerceAttr( ): boolean { if (isEnumeratedAttr(key)) { const v2CoercedValue = - value == null || value === false || value === 'false' + value === null || value === false || value === 'false' ? 'false' - : typeof value !== 'boolean' && value !== undefined + : value !== undefined ? 'true' : null if ( From 06fd87989fb7d8020355b3c1ecf2a2cd76f1e824 Mon Sep 17 00:00:00 2001 From: yangchangtao Date: Wed, 20 Nov 2024 19:41:09 +0800 Subject: [PATCH 3/6] chore: testcase --- packages/vue-compat/__tests__/global.spec.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/vue-compat/__tests__/global.spec.ts b/packages/vue-compat/__tests__/global.spec.ts index fcbdefa2f29..5f19be891a5 100644 --- a/packages/vue-compat/__tests__/global.spec.ts +++ b/packages/vue-compat/__tests__/global.spec.ts @@ -500,3 +500,11 @@ test('local app config should not affect other local apps in v3 mode', () => { const app2 = createApp({}) expect(app2.config.globalProperties.test).toBe(undefined) }) + +test('ATTR_ENUMERATED_COERCION: false', () => { + const vm = new Vue({ + compatConfig: { ATTR_ENUMERATED_COERCION: true }, + template: `
hello
`, + }).$mount() + expect(vm.$el.innerHTML).toBe(`
hello
`) +}) From 2a5894730db59a4b6391e8a9281c6c76847a3061 Mon Sep 17 00:00:00 2001 From: yangchangtao Date: Thu, 21 Nov 2024 11:06:48 +0800 Subject: [PATCH 4/6] chore: update --- packages/vue-compat/__tests__/global.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vue-compat/__tests__/global.spec.ts b/packages/vue-compat/__tests__/global.spec.ts index 5f19be891a5..0eb5de73103 100644 --- a/packages/vue-compat/__tests__/global.spec.ts +++ b/packages/vue-compat/__tests__/global.spec.ts @@ -501,7 +501,7 @@ test('local app config should not affect other local apps in v3 mode', () => { expect(app2.config.globalProperties.test).toBe(undefined) }) -test('ATTR_ENUMERATED_COERCION: false', () => { +test('ATTR_ENUMERATED_COERCION: true', () => { const vm = new Vue({ compatConfig: { ATTR_ENUMERATED_COERCION: true }, template: `
hello
`, From c67368a52f425050fabe1a8c56e5714265955908 Mon Sep 17 00:00:00 2001 From: yangchangtao Date: Tue, 27 May 2025 17:41:59 +0800 Subject: [PATCH 5/6] chore: update --- packages/runtime-dom/src/modules/attrs.ts | 10 +++++----- packages/vue-compat/__tests__/global.spec.ts | 8 -------- packages/vue-compat/__tests__/misc.spec.ts | 8 ++++++++ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/runtime-dom/src/modules/attrs.ts b/packages/runtime-dom/src/modules/attrs.ts index 86b41ca0afe..1e75e5343e9 100644 --- a/packages/runtime-dom/src/modules/attrs.ts +++ b/packages/runtime-dom/src/modules/attrs.ts @@ -59,11 +59,11 @@ export function compatCoerceAttr( ): boolean { if (isEnumeratedAttr(key)) { const v2CoercedValue = - value === null || value === false || value === 'false' - ? 'false' - : value !== undefined - ? 'true' - : null + value === undefined + ? null + : value === null || value === false || value === 'false' + ? 'false' + : 'true' if ( v2CoercedValue && compatUtils.softAssertCompatEnabled( diff --git a/packages/vue-compat/__tests__/global.spec.ts b/packages/vue-compat/__tests__/global.spec.ts index 0eb5de73103..fcbdefa2f29 100644 --- a/packages/vue-compat/__tests__/global.spec.ts +++ b/packages/vue-compat/__tests__/global.spec.ts @@ -500,11 +500,3 @@ test('local app config should not affect other local apps in v3 mode', () => { const app2 = createApp({}) expect(app2.config.globalProperties.test).toBe(undefined) }) - -test('ATTR_ENUMERATED_COERCION: true', () => { - const vm = new Vue({ - compatConfig: { ATTR_ENUMERATED_COERCION: true }, - template: `
hello
`, - }).$mount() - expect(vm.$el.innerHTML).toBe(`
hello
`) -}) diff --git a/packages/vue-compat/__tests__/misc.spec.ts b/packages/vue-compat/__tests__/misc.spec.ts index 17fddd94c4a..a1c265d40dd 100644 --- a/packages/vue-compat/__tests__/misc.spec.ts +++ b/packages/vue-compat/__tests__/misc.spec.ts @@ -275,3 +275,11 @@ test('ATTR_ENUMERATED_COERCION', () => { )('contenteditable', 'foo', 'true'), ).toHaveBeenWarned() }) + +test('ATTR_ENUMERATED_COERCION: true', () => { + const vm = new Vue({ + compatConfig: { ATTR_ENUMERATED_COERCION: true }, + template: `
hello
`, + }).$mount() + expect(vm.$el.innerHTML).toBe(`
hello
`) +}) From 5e0e684366d50cd3a022edaa3e08ddac2c6b3276 Mon Sep 17 00:00:00 2001 From: yangchangtao Date: Tue, 27 May 2025 17:49:33 +0800 Subject: [PATCH 6/6] chore: update --- packages/vue-compat/__tests__/misc.spec.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/vue-compat/__tests__/misc.spec.ts b/packages/vue-compat/__tests__/misc.spec.ts index a1c265d40dd..dba146fcbb1 100644 --- a/packages/vue-compat/__tests__/misc.spec.ts +++ b/packages/vue-compat/__tests__/misc.spec.ts @@ -282,4 +282,10 @@ test('ATTR_ENUMERATED_COERCION: true', () => { template: `
hello
`, }).$mount() expect(vm.$el.innerHTML).toBe(`
hello
`) + expect( + ( + deprecationData[DeprecationTypes.ATTR_ENUMERATED_COERCION] + .message as Function + )('draggable', 'false', 'false'), + ).toHaveBeenWarned() })