diff --git a/README.md b/README.md
index 5b680a1ba..40981401e 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,7 @@
|
Examples
|
- Guide
+ Guide
|
中文
|
diff --git a/docs/guide/src/en/interactivity/custom_hooks.md b/docs/guide/src/en/interactivity/custom_hooks.md
index 2f0155cb5..ebf4f94db 100644
--- a/docs/guide/src/en/interactivity/custom_hooks.md
+++ b/docs/guide/src/en/interactivity/custom_hooks.md
@@ -14,7 +14,7 @@ For example, if many components need to access an `AppSettings` struct, you can
## Custom Hook Logic
-You can use [`cx.use_hook`](https://docs.rs/dioxus/latest/dioxus/prelude/struct.Scope.html#method.use_hook) to build your own hooks. In fact, this is what all the standard hooks are built on!
+You can use [`cx.use_hook`](https://docs.rs/dioxus/latest/dioxus/prelude/struct.ScopeState.html#method.use_hook) to build your own hooks. In fact, this is what all the standard hooks are built on!
`use_hook` accepts a single closure for initializing the hook. It will be only run the first time the component is rendered. The return value of that closure will be used as the value of the hook – Dioxus will take it, and store it for as long as the component is alive. On every render (not just the first one!), you will get a reference to this value.
diff --git a/docs/router/src/README.md b/docs/router/src/README.md
index fcbd79aef..055c3009b 100644
--- a/docs/router/src/README.md
+++ b/docs/router/src/README.md
@@ -1,10 +1,11 @@
# Dioxus Router: Introduction
+
Whether or not you're building a website, desktop app, or mobile app, organizing your app's views into "pages" can be an effective method for organization and maintainability.
-Dioxus comes with a router built-in. To start utilizing Dioxus Router, enable the ``router`` feature in your ``Cargo.toml`` file.
-```toml
-[dependencies]
-dioxus = { version = "x.x.x", features = [.., "router"] }
-```
+The `dioxus-router` crate contains the Router module. To add it to your project run:
+
+ cargo add dioxus-router
+
+> **Be sure to include the `web` feature (`--feature web`) for deployment into a browser!**
In this book you'll find a short [guide](./guide/index.md) to get up to speed with Dioxus Router, as well as the router's [reference](./reference/index.md).
\ No newline at end of file
diff --git a/packages/core/src/arena.rs b/packages/core/src/arena.rs
index 7fbaf0e12..caa863adf 100644
--- a/packages/core/src/arena.rs
+++ b/packages/core/src/arena.rs
@@ -175,10 +175,10 @@ impl VirtualDom {
}
impl ElementPath {
- pub(crate) fn is_ascendant(&self, big: &&[u8]) -> bool {
+ pub(crate) fn is_decendant(&self, small: &&[u8]) -> bool {
match *self {
- ElementPath::Deep(small) => small.len() <= big.len() && small == &big[..small.len()],
- ElementPath::Root(r) => big.len() == 1 && big[0] == r as u8,
+ ElementPath::Deep(big) => small.len() <= big.len() && *small == &big[..small.len()],
+ ElementPath::Root(r) => small.len() == 1 && small[0] == r as u8,
}
}
}
diff --git a/packages/core/src/scheduler/task.rs b/packages/core/src/scheduler/task.rs
index 997953f8e..fc668b364 100644
--- a/packages/core/src/scheduler/task.rs
+++ b/packages/core/src/scheduler/task.rs
@@ -72,9 +72,9 @@ pub struct LocalTaskHandle {
impl ArcWake for LocalTaskHandle {
fn wake_by_ref(arc_self: &Arc) {
- arc_self
+ // This can fail if the scheduler has been dropped while the application is shutting down
+ let _ = arc_self
.tx
- .unbounded_send(SchedulerMsg::TaskNotified(arc_self.id))
- .unwrap();
+ .unbounded_send(SchedulerMsg::TaskNotified(arc_self.id));
}
}
diff --git a/packages/core/src/virtual_dom.rs b/packages/core/src/virtual_dom.rs
index a29671f5d..2269815aa 100644
--- a/packages/core/src/virtual_dom.rs
+++ b/packages/core/src/virtual_dom.rs
@@ -396,7 +396,7 @@ impl VirtualDom {
// Remove the "on" prefix if it exists, TODO, we should remove this and settle on one
if attr.name.trim_start_matches("on") == name
- && target_path.is_ascendant(&this_path)
+ && target_path.is_decendant(&this_path)
{
listeners.push(&attr.value);
diff --git a/packages/interpreter/src/interpreter.js b/packages/interpreter/src/interpreter.js
index 233c70590..b921c7c22 100644
--- a/packages/interpreter/src/interpreter.js
+++ b/packages/interpreter/src/interpreter.js
@@ -357,10 +357,11 @@ class Interpreter {
if (event.type === "click") {
// todo call prevent default if it's the right type of event
- if (shouldPreventDefault !== `onclick`) {
- if (target.tagName === "A") {
- event.preventDefault();
- const href = target.getAttribute("href");
+ let a_element = target.closest("a");
+ if (a_element != null) {
+ event.preventDefault();
+ if (shouldPreventDefault !== `onclick` && a_element.getAttribute(`dioxus-prevent-default`) !== `onclick`) {
+ const href = a_element.getAttribute("href");
if (href !== "" && href !== null && href !== undefined) {
window.ipc.postMessage(
serializeIpcMessage("browser_open", { href })
diff --git a/packages/router/README.md b/packages/router/README.md
index 0e38512e8..c7be4496d 100644
--- a/packages/router/README.md
+++ b/packages/router/README.md
@@ -1,4 +1,4 @@
-# Dioxus Native Core
+# Dioxus Router
[![Crates.io][crates-badge]][crates-url]
[![MIT licensed][mit-badge]][mit-url]
diff --git a/packages/tui/src/config.rs b/packages/tui/src/config.rs
index 8251b13b6..41e068542 100644
--- a/packages/tui/src/config.rs
+++ b/packages/tui/src/config.rs
@@ -46,18 +46,13 @@ impl Default for Config {
}
}
-#[derive(Clone, Copy)]
+#[derive(Clone, Copy, Default)]
pub enum RenderingMode {
/// only 16 colors by accessed by name, no alpha support
BaseColors,
/// 8 bit colors, will be downsampled from rgb colors
Ansi,
/// 24 bit colors, most terminals support this
+ #[default]
Rgb,
}
-
-impl Default for RenderingMode {
- fn default() -> Self {
- RenderingMode::Rgb
- }
-}
diff --git a/packages/tui/src/focus.rs b/packages/tui/src/focus.rs
index 57f1c9e1f..89245d9b9 100644
--- a/packages/tui/src/focus.rs
+++ b/packages/tui/src/focus.rs
@@ -14,8 +14,9 @@ use dioxus_native_core::{
state::NodeDepState,
};
-#[derive(Clone, Copy, PartialEq, Eq, Debug)]
+#[derive(Clone, Copy, PartialEq, Eq, Debug, Default)]
pub(crate) enum FocusLevel {
+ #[default]
Unfocusable,
Focusable,
Ordered(std::num::NonZeroU16),
@@ -53,12 +54,6 @@ impl Ord for FocusLevel {
}
}
-impl Default for FocusLevel {
- fn default() -> Self {
- FocusLevel::Unfocusable
- }
-}
-
#[derive(Clone, PartialEq, Debug, Default)]
pub(crate) struct Focus {
pub level: FocusLevel,
diff --git a/packages/tui/src/node.rs b/packages/tui/src/node.rs
index 26ea4412e..7ef7d9c9a 100644
--- a/packages/tui/src/node.rs
+++ b/packages/tui/src/node.rs
@@ -20,7 +20,7 @@ pub(crate) struct NodeState {
pub focused: bool,
}
-#[derive(PartialEq, Debug, Clone)]
+#[derive(PartialEq, Debug, Clone, Default)]
pub(crate) enum PreventDefault {
Focus,
KeyPress,
@@ -32,6 +32,7 @@ pub(crate) enum PreventDefault {
MouseEnter,
MouseLeave,
MouseOut,
+ #[default]
Unknown,
MouseOver,
ContextMenu,
@@ -39,12 +40,6 @@ pub(crate) enum PreventDefault {
MouseUp,
}
-impl Default for PreventDefault {
- fn default() -> Self {
- PreventDefault::Unknown
- }
-}
-
impl NodeDepState for PreventDefault {
type DepState = ();
type Ctx = ();