From bced3fffa1a3dd40272aeb9582347c00af48fa27 Mon Sep 17 00:00:00 2001 From: yuchao Date: Tue, 12 Oct 2021 10:22:34 +1100 Subject: [PATCH 1/3] fix(compiler): do not add if guard when condition is empty --- src/compiler/codegen/events.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js index 4b0776115a0..0fb4263f197 100644 --- a/src/compiler/codegen/events.js +++ b/src/compiler/codegen/events.js @@ -130,12 +130,11 @@ function genHandler (handler: ASTElementHandler | Array): str } } else if (key === 'exact') { const modifiers: ASTModifiers = (handler.modifiers: any) - genModifierCode += genGuard( - ['ctrl', 'shift', 'alt', 'meta'] + const condition = ['ctrl', 'shift', 'alt', 'meta'] .filter(keyModifier => !modifiers[keyModifier]) .map(keyModifier => `$event.${keyModifier}Key`) - .join('||') - ) + .join('||'); + if (condition) genModifierCode += genGuard(condition) } else { keys.push(key) } From ae0d273c29b835c40b1f275c4081b387deceec92 Mon Sep 17 00:00:00 2001 From: yuchao Date: Tue, 12 Oct 2021 10:27:15 +1100 Subject: [PATCH 2/3] fix(compiler): remove semicolon --- src/compiler/codegen/events.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/codegen/events.js b/src/compiler/codegen/events.js index 0fb4263f197..0a7ca394450 100644 --- a/src/compiler/codegen/events.js +++ b/src/compiler/codegen/events.js @@ -133,7 +133,7 @@ function genHandler (handler: ASTElementHandler | Array): str const condition = ['ctrl', 'shift', 'alt', 'meta'] .filter(keyModifier => !modifiers[keyModifier]) .map(keyModifier => `$event.${keyModifier}Key`) - .join('||'); + .join('||') if (condition) genModifierCode += genGuard(condition) } else { keys.push(key) From b0675cff5ce90f245e64834ff36bdd2ebf97cfe0 Mon Sep 17 00:00:00 2001 From: yuchao Date: Tue, 12 Oct 2021 20:52:19 +1100 Subject: [PATCH 3/3] fix(compiler): add unit test --- test/unit/modules/compiler/codegen.spec.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/unit/modules/compiler/codegen.spec.js b/test/unit/modules/compiler/codegen.spec.js index d7faa204944..4add1d06ecb 100644 --- a/test/unit/modules/compiler/codegen.spec.js +++ b/test/unit/modules/compiler/codegen.spec.js @@ -430,6 +430,14 @@ describe('codegen', () => { ) }) + // GitHub Issues #12319 + it('generate events with ctrl shift alt meta exact modifiers are applied together', () => { + assertCodegen( + '', + `with(this){return _c('button',{on:{"keydown":function($event){if(!$event.ctrlKey)return null;if(!$event.shiftKey)return null;if(!$event.altKey)return null;if(!$event.metaKey)return null;return onClick.apply(null, arguments)}}},[_v("Click")])}` + ) + }) + it('generate events with mouse event modifiers', () => { assertCodegen( '',