summaryrefslogtreecommitdiffstats
path: root/web/src/widget
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-02-04 03:28:47 +0100
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-02-04 03:28:47 +0100
commit6d46833eb2a068bd3655859ea828dad04293e5ba (patch)
tree42cbe1d9a65a2e03e63887611251ed8532f49872 /web/src/widget
parentf5186f31f1e5eed8fe20c5d6e62e2f531fee6365 (diff)
downloadiced-6d46833eb2a068bd3655859ea828dad04293e5ba.tar.gz
iced-6d46833eb2a068bd3655859ea828dad04293e5ba.tar.bz2
iced-6d46833eb2a068bd3655859ea828dad04293e5ba.zip
Support event subscriptions in `iced_web`
Also improves the overall web runtime, avoiding nested update loops.
Diffstat (limited to 'web/src/widget')
-rw-r--r--web/src/widget/button.rs6
-rw-r--r--web/src/widget/checkbox.rs4
-rw-r--r--web/src/widget/radio.rs6
-rw-r--r--web/src/widget/slider.rs5
-rw-r--r--web/src/widget/text_input.rs5
5 files changed, 10 insertions, 16 deletions
diff --git a/web/src/widget/button.rs b/web/src/widget/button.rs
index e628bd18..6fef48ce 100644
--- a/web/src/widget/button.rs
+++ b/web/src/widget/button.rs
@@ -163,10 +163,8 @@ where
if let Some(on_press) = self.on_press.clone() {
let event_bus = bus.clone();
- node = node.on("click", move |root, vdom, _event| {
- event_bus.publish(on_press.clone(), root);
-
- vdom.schedule_render();
+ node = node.on("click", move |_root, _vdom, _event| {
+ event_bus.publish(on_press.clone());
});
}
diff --git a/web/src/widget/checkbox.rs b/web/src/widget/checkbox.rs
index 34d13a1b..1e864875 100644
--- a/web/src/widget/checkbox.rs
+++ b/web/src/widget/checkbox.rs
@@ -84,9 +84,9 @@ where
input(bump)
.attr("type", "checkbox")
.bool_attr("checked", self.is_checked)
- .on("click", move |root, vdom, _event| {
+ .on("click", move |_root, vdom, _event| {
let msg = on_toggle(!is_checked);
- event_bus.publish(msg, root);
+ event_bus.publish(msg);
vdom.schedule_render();
})
diff --git a/web/src/widget/radio.rs b/web/src/widget/radio.rs
index 4e7d02b8..6dd0ad45 100644
--- a/web/src/widget/radio.rs
+++ b/web/src/widget/radio.rs
@@ -93,10 +93,8 @@ where
.attr("type", "radio")
.attr("style", "margin-right: 10px")
.bool_attr("checked", self.is_selected)
- .on("click", move |root, vdom, _event| {
- event_bus.publish(on_click.clone(), root);
-
- vdom.schedule_render();
+ .on("click", move |_root, _vdom, _event| {
+ event_bus.publish(on_click.clone());
})
.finish(),
text(radio_label.into_bump_str()),
diff --git a/web/src/widget/slider.rs b/web/src/widget/slider.rs
index fc955781..25c57933 100644
--- a/web/src/widget/slider.rs
+++ b/web/src/widget/slider.rs
@@ -111,7 +111,7 @@ where
.attr("max", max.into_bump_str())
.attr("value", value.into_bump_str())
.attr("style", "width: 100%")
- .on("input", move |root, vdom, event| {
+ .on("input", move |_root, _vdom, event| {
let slider = match event.target().and_then(|t| {
t.dyn_into::<web_sys::HtmlInputElement>().ok()
}) {
@@ -120,8 +120,7 @@ where
};
if let Ok(value) = slider.value().parse::<f32>() {
- event_bus.publish(on_change(value), root);
- vdom.schedule_render();
+ event_bus.publish(on_change(value));
}
})
.finish()
diff --git a/web/src/widget/text_input.rs b/web/src/widget/text_input.rs
index a478874a..078e05b2 100644
--- a/web/src/widget/text_input.rs
+++ b/web/src/widget/text_input.rs
@@ -175,7 +175,7 @@ where
"type",
bumpalo::format!(in bump, "{}", if self.is_secure { "password" } else { "text" }).into_bump_str(),
)
- .on("input", move |root, vdom, event| {
+ .on("input", move |_root, _vdom, event| {
let text_input = match event.target().and_then(|t| {
t.dyn_into::<web_sys::HtmlInputElement>().ok()
}) {
@@ -183,8 +183,7 @@ where
Some(text_input) => text_input,
};
- event_bus.publish(on_change(text_input.value()), root);
- vdom.schedule_render();
+ event_bus.publish(on_change(text_input.value()));
})
.finish()
}