fix event handling

svelte-html
Simon Holthausen 11 months ago
parent c2f97c7894
commit c30cf7121b

@ -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);

@ -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);
});

@ -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']);
}
});

@ -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