fix event handling

svelte-html
Simon Holthausen 2 years ago
parent c2f97c7894
commit c30cf7121b

@ -12,13 +12,17 @@ import { visit_event_attribute } from './shared/events.js';
* @param {ComponentContext} context * @param {ComponentContext} context
*/ */
export function SvelteHTML(element, context) { export function SvelteHTML(element, context) {
const event_context = {
...context,
state: { ...context.state, node: b.id('$.document.documentElement') }
};
/** @type {Property[]} */ /** @type {Property[]} */
const attributes = []; const attributes = [];
for (const attribute of element.attributes) { for (const attribute of element.attributes) {
if (attribute.type === 'Attribute') { if (attribute.type === 'Attribute') {
if (is_event_attribute(attribute)) { if (is_event_attribute(attribute)) {
visit_event_attribute(attribute, context); visit_event_attribute(attribute, event_context);
} else { } else {
const name = normalize_attribute(attribute.name); const name = normalize_attribute(attribute.name);
const { value } = build_attribute_value(attribute.value, context); const { value } = build_attribute_value(attribute.value, context);

@ -117,8 +117,14 @@ export function event(event_name, dom, handler, capture, passive) {
var options = { capture, passive }; var options = { capture, passive };
var target_handler = create_event(event_name, dom, handler, options); var target_handler = create_event(event_name, dom, handler, options);
if (
// @ts-ignore
dom === window ||
// @ts-ignore // @ts-ignore
if (dom === document.body || dom === window || dom === document) { dom === document ||
dom === document.body ||
dom === document.documentElement
) {
teardown(() => { teardown(() => {
dom.removeEventListener(event_name, target_handler, options); dom.removeEventListener(event_name, target_handler, options);
}); });

@ -1,7 +1,10 @@
import { test } from '../../test'; import { test } from '../../test';
export default test({ export default test({
async test({ assert }) { async test({ assert, target, logs }) {
assert.deepEqual(document.documentElement.lang, 'de'); assert.deepEqual(document.documentElement.lang, 'de');
target.querySelector('button')?.click();
assert.deepEqual(logs, ['clicked']);
} }
}); });

@ -1 +1,3 @@
<svelte:html lang="de"></svelte:html> <svelte:html lang="de" onclick={() => console.log('clicked')}></svelte:html>
<button>click</button>

Loading…
Cancel
Save