feat: add prevent default attribute and upgrade router
This commit is contained in:
1 parent
cb2782b4bb
commit
427b126bc1
16 files changed
+220
-181
No files matched your search
@@ -1,4 +1,3 @@
|
||||
|
||||
function serialize_event(event) {
|
||||
switch (event.type) {
|
||||
case "copy":
|
||||
@@ -10,8 +9,8 @@ function serialize_event(event) {
|
||||
case "compositionstart":
|
||||
case "compositionupdate":
|
||||
return {
|
||||
data: event.data
|
||||
}
|
||||
data: event.data,
|
||||
};
|
||||
|
||||
case "keydown":
|
||||
case "keypress":
|
||||
@@ -29,7 +28,7 @@ function serialize_event(event) {
|
||||
repeat: event.repeat,
|
||||
which: event.which,
|
||||
// locale: event.locale,
|
||||
}
|
||||
};
|
||||
|
||||
case "focus":
|
||||
case "blur":
|
||||
@@ -45,7 +44,7 @@ function serialize_event(event) {
|
||||
}
|
||||
|
||||
return {
|
||||
value: value
|
||||
value: value,
|
||||
};
|
||||
|
||||
case "input":
|
||||
@@ -60,7 +59,7 @@ function serialize_event(event) {
|
||||
}
|
||||
|
||||
return {
|
||||
value: value
|
||||
value: value,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -95,7 +94,7 @@ function serialize_event(event) {
|
||||
screen_x: event.screenX,
|
||||
screen_y: event.screenY,
|
||||
shift_key: event.shiftKey,
|
||||
}
|
||||
};
|
||||
|
||||
case "pointerdown":
|
||||
case "pointermove":
|
||||
@@ -130,7 +129,7 @@ function serialize_event(event) {
|
||||
twist: event.twist,
|
||||
pointer_type: event.pointerType,
|
||||
is_primary: event.isPrimary,
|
||||
}
|
||||
};
|
||||
|
||||
case "select":
|
||||
return {};
|
||||
@@ -148,7 +147,7 @@ function serialize_event(event) {
|
||||
// changed_touches: event.changedTouches,
|
||||
// target_touches: event.targetTouches,
|
||||
// touches: event.touches,
|
||||
}
|
||||
};
|
||||
|
||||
case "scroll":
|
||||
return {};
|
||||
@@ -208,17 +207,14 @@ function serialize_event(event) {
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
class Interpreter {
|
||||
constructor(root) {
|
||||
this.root = root;
|
||||
this.stack = [root];
|
||||
this.listeners = {
|
||||
"onclick": {}
|
||||
onclick: {},
|
||||
};
|
||||
this.lastNodeWasText = false;
|
||||
this.nodes = [root];
|
||||
@@ -304,35 +300,45 @@ class Interpreter {
|
||||
this.nodes[edit.root] = el;
|
||||
}
|
||||
|
||||
RemoveEventListener(edit) { }
|
||||
RemoveEventListener(edit) {}
|
||||
|
||||
NewEventListener(edit) {
|
||||
const event_name = edit.event_name;
|
||||
const mounted_node_id = edit.root;
|
||||
const scope = edit.scope;
|
||||
|
||||
const element = this.nodes[edit.root]
|
||||
element.setAttribute(`dioxus-event-${event_name}`, `${scope}.${mounted_node_id}`);
|
||||
const element = this.nodes[edit.root];
|
||||
element.setAttribute(
|
||||
`dioxus-event-${event_name}`,
|
||||
`${scope}.${mounted_node_id}`
|
||||
);
|
||||
|
||||
if (this.listeners[event_name] === undefined) {
|
||||
this.listeners[event_name] = true;
|
||||
|
||||
this.root.addEventListener(event_name, (event) => {
|
||||
console.log("handling event", event);
|
||||
|
||||
const target = event.target;
|
||||
const real_id = target.getAttribute(`dioxus-id`);
|
||||
|
||||
const should_prevent_default = target.getAttribute(
|
||||
`dioxus-prevent-default`
|
||||
);
|
||||
|
||||
let contents = serialize_event(event);
|
||||
|
||||
if (should_prevent_default === `on${event.type}`) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
if (real_id == null) {
|
||||
alert("no id");
|
||||
return;
|
||||
}
|
||||
|
||||
rpc.call('user_event', {
|
||||
rpc.call("user_event", {
|
||||
event: event_name,
|
||||
mounted_dom_id: parseInt(real_id),
|
||||
contents: serialize_event(event),
|
||||
contents: contents,
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -346,11 +352,11 @@ class Interpreter {
|
||||
const name = edit.field;
|
||||
const value = edit.value;
|
||||
const ns = edit.ns;
|
||||
const node = this.nodes[edit.root]
|
||||
const node = this.nodes[edit.root];
|
||||
|
||||
if (ns == "style") {
|
||||
node.style[name] = value;
|
||||
} else if ((ns != null) || (ns != undefined)) {
|
||||
} else if (ns != null || ns != undefined) {
|
||||
node.setAttributeNS(ns, name, value);
|
||||
} else {
|
||||
switch (name) {
|
||||
@@ -358,17 +364,15 @@ class Interpreter {
|
||||
node.value = value;
|
||||
break;
|
||||
case "checked":
|
||||
// console.log("setting checked");
|
||||
node.checked = (value === "true");
|
||||
node.checked = value === "true";
|
||||
break;
|
||||
case "selected":
|
||||
node.selected = (value === "true");
|
||||
node.selected = value === "true";
|
||||
break;
|
||||
case "dangerous_inner_html":
|
||||
node.innerHTML = value;
|
||||
break;
|
||||
default:
|
||||
// console.log("setting attr directly ", name, value);
|
||||
node.setAttribute(name, value);
|
||||
}
|
||||
}
|
||||
@@ -390,11 +394,6 @@ class Interpreter {
|
||||
}
|
||||
|
||||
handleEdits(edits) {
|
||||
|
||||
// console.log("handling raw edits", rawedits);
|
||||
// let edits = JSON.parse(rawedits);
|
||||
// console.log("handling edits", edits);
|
||||
|
||||
this.stack.push(this.root);
|
||||
|
||||
for (let x = 0; x < edits.length; x++) {
|
||||
@@ -410,7 +409,7 @@ function main() {
|
||||
window.interpreter = new Interpreter(root);
|
||||
console.log(window.interpreter);
|
||||
|
||||
rpc.call('initialize');
|
||||
rpc.call("initialize");
|
||||
}
|
||||
|
||||
main()
|
||||
main();
|
||||
@@ -279,37 +279,7 @@ impl DesktopController {
|
||||
cfg: &DesktopConfig,
|
||||
event_loop: &EventLoopWindowTarget<UserWindowEvent>,
|
||||
) {
|
||||
let builder = cfg.window.clone().with_menu({
|
||||
// create main menubar menu
|
||||
let mut menu_bar_menu = MenuBar::new();
|
||||
|
||||
// create `first_menu`
|
||||
let mut first_menu = MenuBar::new();
|
||||
|
||||
first_menu.add_native_item(MenuItem::About("App".to_string()));
|
||||
first_menu.add_native_item(MenuItem::Services);
|
||||
first_menu.add_native_item(MenuItem::Separator);
|
||||
first_menu.add_native_item(MenuItem::Hide);
|
||||
first_menu.add_native_item(MenuItem::HideOthers);
|
||||
first_menu.add_native_item(MenuItem::ShowAll);
|
||||
|
||||
first_menu.add_native_item(MenuItem::Quit);
|
||||
first_menu.add_native_item(MenuItem::CloseWindow);
|
||||
|
||||
// create second menu
|
||||
let mut second_menu = MenuBar::new();
|
||||
|
||||
// second_menu.add_submenu("Sub menu", true, my_sub_menu);
|
||||
second_menu.add_native_item(MenuItem::Copy);
|
||||
second_menu.add_native_item(MenuItem::Paste);
|
||||
second_menu.add_native_item(MenuItem::SelectAll);
|
||||
|
||||
menu_bar_menu.add_submenu("First menu", true, first_menu);
|
||||
menu_bar_menu.add_submenu("Second menu", true, second_menu);
|
||||
|
||||
menu_bar_menu
|
||||
});
|
||||
|
||||
let builder = cfg.window.clone();
|
||||
let window = builder.build(event_loop).unwrap();
|
||||
let window_id = window.id();
|
||||
|
||||
|
||||
Whitespace-only changes.
Reference in new issue
Block a user