From 50f90d889affbd355f2f9caa4e5c039ab44500db Mon Sep 17 00:00:00 2001 From: Jonathan Kelley Date: Fri, 21 Jan 2022 00:21:23 -0500 Subject: [PATCH] fix: bump to readd desktop click handling code --- packages/jsinterpreter/interpreter.ts | 40 +++++++++++++++++++-------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/packages/jsinterpreter/interpreter.ts b/packages/jsinterpreter/interpreter.ts index 17617a209..533536277 100644 --- a/packages/jsinterpreter/interpreter.ts +++ b/packages/jsinterpreter/interpreter.ts @@ -558,31 +558,50 @@ export class Interpreter { this.RemoveEventListener(edit.root, edit.event_name); break; case "NewEventListener": - // todo: only on desktop should we make our own handler + + + // this handler is only provided on desktop implementations since this + // method is not used by the web implementation let handler = (event: Event) => { const target = event.target as Element | null; - // console.log("event", event); + if (target != null) { + const realId = target.getAttribute(`dioxus-id`); - const real_id = target.getAttribute(`dioxus-id`); - - const should_prevent_default = target.getAttribute( - `dioxus-prevent-default` - ); + const shouldPreventDefault = target.getAttribute(`dioxus-prevent-default`); let contents = serialize_event(event); - if (should_prevent_default === `on${event.type}`) { + if (shouldPreventDefault === `on${event.type}`) { event.preventDefault(); } - if (real_id == null) { + if (event.type == "submit") { + event.preventDefault(); + } + + if (event.type == "click") { + event.preventDefault(); + if (shouldPreventDefault !== `onclick`) { + if (target.tagName == "A") { + const href = target.getAttribute("href") + if (href !== "" && href !== null && href !== undefined && realId != null) { + window.rpc.call("browser_open", { + mounted_dom_id: parseInt(realId), + href + }); + } + } + } + } + + if (realId == null) { return; } window.rpc.call("user_event", { event: (edit as NewEventListener).event_name, - mounted_dom_id: parseInt(real_id), + mounted_dom_id: parseInt(realId), contents: contents, }); } @@ -655,4 +674,3 @@ declare global { } -type Edits = DomEdit[];