Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
cc3f60d
Adding PointInteraction trait, etc.
esimkowitz Aug 23, 2023
0e5600f
add impl for pointer
esimkowitz Aug 23, 2023
e0f42f8
Fix rink
esimkowitz Aug 23, 2023
b771386
fix dioxusmousebuttons
esimkowitz Aug 23, 2023
af9875f
revert change to cargo
esimkowitz Aug 23, 2023
5609511
Fix tests
esimkowitz Aug 23, 2023
e8b9599
fix text_like import
esimkowitz Aug 23, 2023
500051e
fix formatting issue
esimkowitz Aug 24, 2023
a8af958
Add dxfmt::skip and workspace recommendations
esimkowitz Aug 24, 2023
4e584fb
add even better toml
esimkowitz Aug 24, 2023
bad3078
address comments
esimkowitz Aug 24, 2023
f599ad6
remove unnecessary PointInteraction imports now that it's in prelude
esimkowitz Aug 24, 2023
c9da743
fix another bad format
esimkowitz Aug 24, 2023
a5b97aa
fix hover.rs formatting
esimkowitz Aug 24, 2023
f9de91e
revert settings.json, remove extensions.json
esimkowitz Aug 24, 2023
a5d687f
fix formatting
esimkowitz Aug 24, 2023
124b58a
missed one
esimkowitz Aug 24, 2023
a727181
fix failing check
esimkowitz Aug 24, 2023
299b123
trait based event system
ealmloff Aug 25, 2023
ca1a502
use an event converter for bundle splitting
ealmloff Aug 26, 2023
b54f7dd
fix no default features on the web renderer
ealmloff Aug 26, 2023
b4ebf34
forward data PointInteraction data in the PointerData debug and parti…
ealmloff Aug 28, 2023
f7dff22
expose all serialized events as public
ealmloff Aug 28, 2023
93cbfd0
derive more traits for serialized types
ealmloff Aug 28, 2023
0ef765e
move rink over to the new event system
ealmloff Aug 28, 2023
62556b2
fix desktop and liveview compilation
ealmloff Aug 28, 2023
bd387d6
fix formatting
ealmloff Aug 28, 2023
8ba1c05
fix desktop events
ealmloff Aug 28, 2023
097eb20
add extension to downcast web events
ealmloff Aug 28, 2023
177db23
add some inline hints
ealmloff Aug 28, 2023
4879f65
fix tui events
ealmloff Aug 31, 2023
f7451c0
port liveview events
ealmloff Aug 31, 2023
3eafb05
fix features on rink html dependency
ealmloff Aug 31, 2023
3c01593
document HtmlEventConverter
ealmloff Aug 31, 2023
bf90b75
add some inline hints
ealmloff Aug 31, 2023
364654e
fix clippy with events
ealmloff Aug 31, 2023
f812e52
Merge branch 'fix-new-clippy-lints' into events-2
ealmloff Aug 31, 2023
dee92b8
remove the serde feature flag from enumset
ealmloff Sep 1, 2023
df222c1
port examples to new events
ealmloff Sep 1, 2023
baf36ab
Merge branch 'master' into events-2
ealmloff Sep 2, 2023
b1b2537
Merge branch 'master' into events-2
ealmloff Sep 4, 2023
18fd40a
pin tauri bundler version
ealmloff Sep 4, 2023
9e623d5
Merge branch 'master' into events-2
ealmloff Sep 4, 2023
bd38cdd
fix dioxus core event tests
ealmloff Sep 5, 2023
0ab7a02
fix clippy
ealmloff Sep 6, 2023
d06e64e
fix dioxus-tui events
ealmloff Sep 6, 2023
3a02520
fix web onmount event
ealmloff Sep 8, 2023
f449823
Merge branch 'master' into events-2
ealmloff Sep 12, 2023
a9bb047
split the point interaction trait into smaller traits for touch compa…
ealmloff Sep 12, 2023
b470641
Merge branch 'events-2' of https://github.com/Demonthos/dioxus into e…
ealmloff Sep 12, 2023
c10700c
add touch data to touch events
ealmloff Sep 12, 2023
27f4b3f
add touches_changed and target_touches
ealmloff Sep 12, 2023
fc5c538
fix rink imports
ealmloff Sep 13, 2023
219c068
Merge branch 'master' into events-2
ealmloff Sep 18, 2023
c933bfa
fix formatting
ealmloff Sep 18, 2023
072ca35
Merge branch 'DioxusLabs:master' into events-2
ealmloff Oct 3, 2023
648499e
add metadata to events
ealmloff Oct 4, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ dioxus-core = { path = "packages/core", version = "0.4.2" }
dioxus-core-macro = { path = "packages/core-macro", version = "0.4.0" }
dioxus-router = { path = "packages/router", version = "0.4.1" }
dioxus-router-macro = { path = "packages/router-macro", version = "0.4.1" }
dioxus-html = { path = "packages/html", version = "0.4.0" }
dioxus-html = { path = "packages/html", default-features = false, version = "0.4.0" }
dioxus-hooks = { path = "packages/hooks", version = "0.4.0" }
dioxus-web = { path = "packages/web", version = "0.4.0" }
dioxus-ssr = { path = "packages/ssr", version = "0.4.0" }
Expand Down
2 changes: 1 addition & 1 deletion examples/compose.rs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ fn compose(cx: Scope<ComposeProps>) -> Element {

input {
oninput: move |e| {
user_input.set(e.value.clone());
user_input.set(e.value());
},
value: "{user_input}"
}
Expand Down
2 changes: 1 addition & 1 deletion examples/counter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ fn app(cx: Scope) -> Element {
input {
value: "{counter}",
oninput: move |e| {
if let Ok(value) = e.value.parse::<usize>() {
if let Ok(value) = e.value().parse::<usize>() {
counters.make_mut()[i] = value;
}
}
Expand Down
6 changes: 3 additions & 3 deletions examples/crm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ fn ClientAdd(cx: Scope) -> Element {
placeholder: "First Name…",
required: "",
value: "{first_name}",
oninput: move |e| first_name.set(e.value.clone())
oninput: move |e| first_name.set(e.value())
}
}

Expand All @@ -135,7 +135,7 @@ fn ClientAdd(cx: Scope) -> Element {
placeholder: "Last Name…",
required: "",
value: "{last_name}",
oninput: move |e| last_name.set(e.value.clone())
oninput: move |e| last_name.set(e.value())
}
}

Expand All @@ -149,7 +149,7 @@ fn ClientAdd(cx: Scope) -> Element {
id: "description",
placeholder: "Description…",
value: "{description}",
oninput: move |e| description.set(e.value.clone())
oninput: move |e| description.set(e.value())
}
}

Expand Down
4 changes: 2 additions & 2 deletions examples/file_upload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ fn App(cx: Scope) -> Element {
r#type: "checkbox",
checked: "{enable_directory_upload}",
oninput: move |evt| {
enable_directory_upload.set(evt.value.parse().unwrap());
enable_directory_upload.set(evt.value().parse().unwrap());
},
},
"Enable directory upload"
Expand All @@ -30,7 +30,7 @@ fn App(cx: Scope) -> Element {
onchange: |evt| {
to_owned![files_uploaded];
async move {
if let Some(file_engine) = &evt.files {
if let Some(file_engine) = &evt.files() {
let files = file_engine.files();
for file_name in files {
sleep(std::time::Duration::from_secs(1)).await;
Expand Down
4 changes: 2 additions & 2 deletions examples/form.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ fn app(cx: Scope) -> Element {
div {
h1 { "Form" }
form {
onsubmit: move |ev| println!("Submitted {:?}", ev.values),
oninput: move |ev| println!("Input {:?}", ev.values),
onsubmit: move |ev| println!("Submitted {:?}", ev.values()),
oninput: move |ev| println!("Input {:?}", ev.values()),
input { r#type: "text", name: "username" }
input { r#type: "text", name: "full-name" }
input { r#type: "password", name: "password" }
Expand Down
4 changes: 2 additions & 2 deletions examples/login_form.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ fn app(cx: Scope) -> Element {
let resp = reqwest::Client::new()
.post("http://localhost:8080/login")
.form(&[
("username", &evt.values["username"]),
("password", &evt.values["password"]),
("username", &evt.values()["username"]),
("password", &evt.values()["password"]),
])
.send()
.await;
Expand Down
2 changes: 1 addition & 1 deletion examples/shared_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ fn DataEditor(cx: Scope, id: usize) -> Element {
fn DataView(cx: Scope, id: usize) -> Element {
let cool_data = use_shared_state::<CoolData>(cx).unwrap();

let oninput = |e: FormEvent| cool_data.write().set(*id, e.value.clone());
let oninput = |e: FormEvent| cool_data.write().set(*id, e.value());

let cool_data = cool_data.read();
let my_data = &cool_data.view(id).unwrap();
Expand Down
2 changes: 1 addition & 1 deletion examples/textarea.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ fn app(cx: Scope) -> Element {
rows: "10",
cols: "80",
value: "{model}",
oninput: move |e| model.set(e.value.clone()),
oninput: move |e| model.set(e.value().clone()),
}
})
}
6 changes: 3 additions & 3 deletions examples/todomvc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ pub fn app(cx: Scope<()>) -> Element {
value: "{draft}",
autofocus: "true",
oninput: move |evt| {
draft.set(evt.value.clone());
draft.set(evt.value());
},
onkeydown: move |evt| {
if evt.key() == Key::Enter && !draft.is_empty() {
Expand Down Expand Up @@ -176,7 +176,7 @@ pub fn TodoEntry<'a>(cx: Scope<'a, TodoEntryProps<'a>>) -> Element {
id: "cbg-{todo.id}",
checked: "{todo.checked}",
oninput: move |evt| {
cx.props.todos.make_mut()[&cx.props.id].checked = evt.value.parse().unwrap();
cx.props.todos.make_mut()[&cx.props.id].checked = evt.value().parse().unwrap();
}
}
label {
Expand All @@ -195,7 +195,7 @@ pub fn TodoEntry<'a>(cx: Scope<'a, TodoEntryProps<'a>>) -> Element {
input {
class: "edit",
value: "{todo.contents}",
oninput: move |evt| cx.props.todos.make_mut()[&cx.props.id].contents = evt.value.clone(),
oninput: move |evt| cx.props.todos.make_mut()[&cx.props.id].contents = evt.value(),
autofocus: "true",
onfocusout: move |_| is_editing.set(false),
onkeydown: move |evt| {
Expand Down
2 changes: 1 addition & 1 deletion examples/window_zoom.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ fn app(cx: Scope) -> Element {
r#type: "number",
value: "{level}",
oninput: |e| {
if let Ok(new_zoom) = e.value.parse::<f64>() {
if let Ok(new_zoom) = e.value().parse::<f64>() {
level.set(new_zoom);
window.webview.zoom(new_zoom);
}
Expand Down
2 changes: 1 addition & 1 deletion examples/xss_safety.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ fn app(cx: Scope) -> Element {
input {
value: "{contents}",
r#type: "text",
oninput: move |e| contents.set(e.value.clone()),
oninput: move |e| contents.set(e.value()),
}
}
})
Expand Down
53 changes: 49 additions & 4 deletions packages/autofmt/src/component.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,11 +182,32 @@ impl Writer<'_> {
s.source.as_ref().unwrap().to_token_stream()
)?;
}
ContentField::OnHandlerRaw(exp) => {
let out = prettyplease::unparse_expr(exp);
ContentField::OnHandlerRaw { handler, metadata } => {
let out = prettyplease::unparse_expr(handler);
let mut lines = out.split('\n').peekable();
write!(self.out, "{name}")?;
if let Some(metadata) = metadata {
write!(self.out, "[")?;
for (index, expr) in metadata.iter().enumerate() {
let is_last = index == metadata.len() - 1;

let out = prettyplease::unparse_expr(expr);
let mut lines = out.split('\n').peekable();
let first = lines.next().unwrap();
write!(self.out, "{first}")?;
for line in lines {
self.out.new_line()?;
self.out.indented_tab()?;
write!(self.out, "{line}")?;
}
if !is_last {
write!(self.out, ", ")?;
}
}
write!(self.out, "]")?;
}
let first = lines.next().unwrap();
write!(self.out, "{name}: {first}")?;
write!(self.out, ": {first}")?;
for line in lines {
self.out.new_line()?;
self.out.indented_tab()?;
Expand Down Expand Up @@ -223,7 +244,31 @@ impl Writer<'_> {
.iter()
.map(|field| match &field.content {
ContentField::Formatted(s) => ifmt_to_string(s).len() ,
ContentField::OnHandlerRaw(exp) | ContentField::ManExpr(exp) => {
ContentField::OnHandlerRaw { handler, metadata} => {
let formatted = prettyplease::unparse_expr(handler);
let mut len= if formatted.contains('\n') {
10000
} else {
formatted.len()
};
self.cached_formats.insert(Location::new(handler.span().start()) , formatted);

if let Some(metadata) = metadata{
for expr in metadata {
let formatted = prettyplease::unparse_expr(expr);
len += if formatted.contains('\n') {
10000
} else {
formatted.len()
};
self.cached_formats.insert(Location::new(expr.span().start()) , formatted);
len += 2;
}
}

len
},
ContentField::ManExpr(exp) => {
let formatted = prettyplease::unparse_expr(exp);
let len = if formatted.contains('\n') {
10000
Expand Down
44 changes: 31 additions & 13 deletions packages/autofmt/src/element.rs
Original file line number Diff line number Diff line change
Expand Up @@ -252,28 +252,46 @@ impl Writer<'_> {
write!(self.out, "{}: {}", name.to_token_stream(), out)?;
}

ElementAttr::EventTokens { name, tokens } => {
ElementAttr::EventTokens {
name,
tokens,
metadata,
} => {
let out = self.retrieve_formatted_expr(tokens).to_string();

let mut lines = out.split('\n').peekable();
let first = lines.next().unwrap();

// a one-liner for whatever reason
// Does not need a new line
if lines.peek().is_none() {
write!(self.out, "{name}: {first}")?;
} else {
writeln!(self.out, "{name}: {first}")?;

while let Some(line) = lines.next() {
self.out.indented_tab()?;
write!(self.out, "{line}")?;
if lines.peek().is_none() {
write!(self.out, "")?;
} else {
writeln!(self.out)?;
if lines.peek().is_some() {
writeln!(self.out, "")?;
}
write!(self.out, "{name}")?;
if let Some(metadata) = metadata {
write!(self.out, "[")?;
for expr in metadata {
let out = self.retrieve_formatted_expr(expr).to_string();
let mut lines = out.split('\n').peekable();
let first = lines.next().unwrap();
write!(self.out, "{first}")?;
for line in lines {
self.out.indented_tab()?;
write!(self.out, "{line}")?;
}
}
write!(self.out, "]")?;
}
write!(self.out, ": {first}")?;

while let Some(line) = lines.next() {
self.out.indented_tab()?;
write!(self.out, "{line}")?;
if lines.peek().is_none() {
write!(self.out, "")?;
} else {
writeln!(self.out)?;
}
}
}
}
Expand Down
30 changes: 28 additions & 2 deletions packages/autofmt/src/writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,14 @@ impl<'a> Writer<'a> {
ElementAttr::CustomAttrExpression { name, value } => {
name.to_token_stream().to_string().len() + value.span().line_length() + 6
}
ElementAttr::EventTokens { tokens, name } => {
ElementAttr::EventTokens {
tokens,
name,
metadata,
} => {
let location = Location::new(tokens.span().start());

let len = if let std::collections::hash_map::Entry::Vacant(e) =
let mut len = if let std::collections::hash_map::Entry::Vacant(e) =
self.cached_formats.entry(location)
{
let formatted = prettyplease::unparse_expr(tokens);
Expand All @@ -177,6 +181,28 @@ impl<'a> Writer<'a> {
self.cached_formats[&location].len()
};

if let Some(metadata) = metadata {
for expr in metadata {
let location = Location::new(expr.span().start());

len += if let std::collections::hash_map::Entry::Vacant(e) =
self.cached_formats.entry(location)
{
let formatted = prettyplease::unparse_expr(expr);
let len = if formatted.contains('\n') {
10000
} else {
formatted.len()
};
e.insert(formatted);
len
} else {
self.cached_formats[&location].len()
};
len += 2;
}
}

len + name.span().line_length() + 6
}
};
Expand Down
1 change: 1 addition & 0 deletions packages/core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ serde = { version = "1", features = ["derive"], optional = true }
[dev-dependencies]
tokio = { workspace = true, features = ["full"] }
dioxus = { workspace = true }
dioxus-html = { workspace = true, features = ["serialize"] }
pretty_assertions = "1.3.0"
rand = "0.8.5"
dioxus-ssr = { workspace = true }
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/arena.rs
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ impl VirtualDom {
let listener = unsafe { &*listener };
match &listener.value {
AttributeValue::Listener(l) => {
_ = l.take();
_ = l.callback.take();
}
AttributeValue::Any(a) => {
_ = a.take();
Expand Down
Loading