From c30cf7121bfda90edd33cc1ec90f4162fa070d8e Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Wed, 18 Dec 2024 21:56:09 +0100 Subject: [PATCH] fix event handling --- .../phases/3-transform/client/visitors/SvelteHTML.js | 6 +++++- .../svelte/src/internal/client/dom/elements/events.js | 10 ++++++++-- .../tests/runtime-runes/samples/svelte-html/_config.js | 5 ++++- .../runtime-runes/samples/svelte-html/main.svelte | 4 +++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteHTML.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteHTML.js index f6e4f50c1a..3f239b930e 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteHTML.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/SvelteHTML.js @@ -12,13 +12,17 @@ import { visit_event_attribute } from './shared/events.js'; * @param {ComponentContext} context */ export function SvelteHTML(element, context) { + const event_context = { + ...context, + state: { ...context.state, node: b.id('$.document.documentElement') } + }; /** @type {Property[]} */ const attributes = []; for (const attribute of element.attributes) { if (attribute.type === 'Attribute') { if (is_event_attribute(attribute)) { - visit_event_attribute(attribute, context); + visit_event_attribute(attribute, event_context); } else { const name = normalize_attribute(attribute.name); const { value } = build_attribute_value(attribute.value, context); diff --git a/packages/svelte/src/internal/client/dom/elements/events.js b/packages/svelte/src/internal/client/dom/elements/events.js index f2038f96ad..e6309d9902 100644 --- a/packages/svelte/src/internal/client/dom/elements/events.js +++ b/packages/svelte/src/internal/client/dom/elements/events.js @@ -117,8 +117,14 @@ export function event(event_name, dom, handler, capture, passive) { var options = { capture, passive }; var target_handler = create_event(event_name, dom, handler, options); - // @ts-ignore - if (dom === document.body || dom === window || dom === document) { + if ( + // @ts-ignore + dom === window || + // @ts-ignore + dom === document || + dom === document.body || + dom === document.documentElement + ) { teardown(() => { dom.removeEventListener(event_name, target_handler, options); }); diff --git a/packages/svelte/tests/runtime-runes/samples/svelte-html/_config.js b/packages/svelte/tests/runtime-runes/samples/svelte-html/_config.js index cea9bba2aa..f843bf7df3 100644 --- a/packages/svelte/tests/runtime-runes/samples/svelte-html/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/svelte-html/_config.js @@ -1,7 +1,10 @@ import { test } from '../../test'; export default test({ - async test({ assert }) { + async test({ assert, target, logs }) { assert.deepEqual(document.documentElement.lang, 'de'); + + target.querySelector('button')?.click(); + assert.deepEqual(logs, ['clicked']); } }); diff --git a/packages/svelte/tests/runtime-runes/samples/svelte-html/main.svelte b/packages/svelte/tests/runtime-runes/samples/svelte-html/main.svelte index cd4ed850b4..c91f05045d 100644 --- a/packages/svelte/tests/runtime-runes/samples/svelte-html/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/svelte-html/main.svelte @@ -1 +1,3 @@ - + console.log('clicked')}> + +