Skip to content

Commit 6f5df62

Browse files
committed
feat: move Attrs to frender-dom
1 parent 7366fd8 commit 6f5df62

File tree

11 files changed

+66
-37
lines changed

11 files changed

+66
-37
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/frender-dom-values/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
pub use frender_dom::{
22
//
3+
attrs::Attrs,
34
special::DangerousInnerHtml,
45
string_element::StringElement,
56
Empty,

packages/frender-dom/Cargo.toml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ frender-dom-tokens = { version = "0.1.0", path = "../frender-dom-tokens", featur
1414
"experimental",
1515
] }
1616
frender-attr-value = { version = "0.1.0", path = "../frender-attr-value" }
17+
frender-attrs = { version = "0.1.0", path = "../frender-attrs", features = [
18+
"experimental",
19+
] }
1720

1821
# ssr
1922
frender-ssr = { version = "0.1.0", path = "../frender-ssr", optional = true }
@@ -59,8 +62,9 @@ ssr = [
5962
"dep:async-str-iter",
6063
"frender-reactive-value/ssr",
6164
"frender-dom-tokens/ssr",
65+
"frender-attrs/ssr",
6266
]
63-
csr = ["dep:frender-csr-core", "frender-dom-tokens/csr"]
67+
csr = ["dep:frender-csr-core", "frender-dom-tokens/csr", "frender-attrs/csr"]
6468
web = [
6569
"dep:web-sys",
6670
"dep:wasm-bindgen",
@@ -73,6 +77,7 @@ web = [
7377
either = [
7478
"frender-ssr?/either",
7579
"frender-attr-value/either",
80+
"frender-attrs/either",
7681
"frender-dom-tokens/either",
7782
"frender-style/either",
7883
]
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ use frender_attrs::IntoAttributes;
33
pub struct Attrs<A: IntoAttributes>(pub A);
44

55
#[cfg(feature = "csr")]
6+
#[cfg(feature = "experimental")]
67
mod csr;
8+
79
#[cfg(feature = "ssr")]
810
mod ssr;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
use frender_attrs::{
2+
experimental::csr::{CsrAttributes, RenderAttributes},
3+
IntoAttributes,
4+
};
5+
6+
use crate::csr::behaviors::Element;
7+
8+
use super::Attrs;
9+
10+
impl<T: IntoAttributes> Attrs<T> {
11+
pub fn csr_render_init<R: ?Sized>(
12+
self,
13+
renderer: &mut R,
14+
element: &mut (impl ?Sized + Element<R>),
15+
) -> <T::IntoAttributes as CsrAttributes>::State {
16+
T::into_attributes(self.0).render_init(&mut Render { renderer, element })
17+
}
18+
19+
pub fn csr_render_update<R: ?Sized>(
20+
self,
21+
renderer: &mut R,
22+
element: &mut (impl ?Sized + Element<R>),
23+
state: &mut <T::IntoAttributes as CsrAttributes>::State,
24+
) {
25+
T::into_attributes(self.0).render_update(&mut Render { renderer, element }, state)
26+
}
27+
}
28+
29+
struct Render<'a, R: ?Sized, E: ?Sized> {
30+
renderer: &'a mut R,
31+
element: &'a mut E,
32+
}
33+
34+
impl<R: ?Sized, E: ?Sized + Element<R>> RenderAttributes for Render<'_, R, E> {
35+
fn set_attribute(&mut self, name: &str, value: &str) {
36+
self.element.set_attribute(self.renderer, name, value)
37+
}
38+
39+
fn remove_attribute(&mut self, name: &str) {
40+
self.element.remove_attribute(self.renderer, name)
41+
}
42+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use frender_attrs::{experimental::ssr::SsrAttributes, IntoAttributes};
2-
use frender_dom::ssr::IntoSpaceAndHtmlAttributesOrEmpty;
2+
3+
use crate::ssr::IntoSpaceAndHtmlAttributesOrEmpty;
34

45
use super::Attrs;
56

packages/frender-dom/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,7 @@ pub mod node_ref;
2828

2929
pub mod string_element;
3030

31+
pub mod attrs;
32+
3133
#[cfg(feature = "web")]
3234
mod shims;

packages/frender-html/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ frender-common = { version = "0.1.0", path = "../frender-common" }
1414
gloo-events = { version = "0.2.0", optional = true }
1515
js-sys = { version = "0.3.64", optional = true }
1616
frender-ssr = { version = "0.1.0", path = "../frender-ssr", optional = true }
17-
frender-dom = { version = "0.1.0", path = "../frender-dom" }
17+
frender-dom = { version = "0.1.0", path = "../frender-dom", features = [
18+
"experimental",
19+
] }
1820
async-str-iter = { version = "0.1.0", path = "../async-str-iter" }
1921
either = { version = "1.9.0", default-features = false, optional = true }
2022
frender-style = { version = "0.1.0", path = "../frender-style", features = [
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
11
use std::marker::PhantomData;
22

3-
use frender_attrs::{
4-
experimental::csr::{CsrAttributes, RenderAttributes},
5-
IntoAttributes,
6-
};
3+
use frender_attrs::{experimental::csr::CsrAttributes, IntoAttributes};
74
use frender_common::convert::FromMut as _;
8-
use frender_dom::csr::behaviors;
95

106
use crate::{
117
csr::behavior_type::{BehaviorType, UnpinnedNonReactiveRenderStateKind, UnpinnedRenderWithBehavior},
128
html::{behavior_type_traits, RenderHtml},
139
};
1410

15-
use super::Attrs;
11+
use frender_dom_values::Attrs;
1612

1713
enum Never {}
1814
pub struct StateKind<S>(Never, PhantomData<S>);
@@ -35,10 +31,7 @@ impl<
3531
renderer: &mut R,
3632
b: &mut <BT as BehaviorType>::OfBehaviorType<R>,
3733
) -> <Self::UnpinnedRenderStateKind as crate::csr::behavior_type::UnpinnedNonReactiveRenderStateKind>::UnpinnedNonReactiveState<R> {
38-
T::into_attributes(this.0).render_init(&mut Render {
39-
renderer,
40-
element: BT::Element::from_mut(b),
41-
})
34+
this.csr_render_init(renderer, BT::Element::from_mut(b))
4235
}
4336

4437
fn unpinned_render_update_with_behavior<R: ?Sized + RenderHtml>(
@@ -48,27 +41,6 @@ impl<
4841
b: &mut <BT as BehaviorType>::OfBehaviorType<R>,
4942
state: &mut <Self::UnpinnedRenderStateKind as crate::csr::behavior_type::UnpinnedNonReactiveRenderStateKind>::UnpinnedNonReactiveState<R>,
5043
) {
51-
T::into_attributes(this.0).render_update(
52-
&mut Render {
53-
renderer,
54-
element: BT::Element::from_mut(b),
55-
},
56-
state,
57-
)
58-
}
59-
}
60-
61-
struct Render<'a, R: ?Sized, E: ?Sized> {
62-
renderer: &'a mut R,
63-
element: &'a mut E,
64-
}
65-
66-
impl<R: ?Sized, E: ?Sized + behaviors::Element<R>> RenderAttributes for Render<'_, R, E> {
67-
fn set_attribute(&mut self, name: &str, value: &str) {
68-
self.element.set_attribute(self.renderer, name, value)
69-
}
70-
71-
fn remove_attribute(&mut self, name: &str) {
72-
self.element.remove_attribute(self.renderer, name)
44+
this.csr_render_update(renderer, BT::Element::from_mut(b), state)
7345
}
7446
}

packages/frender-html/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@ pub mod __private {
3838
mod special;
3939

4040
mod attr_value;
41-
mod attrs;
4241
mod dom_tokens;
4342
mod event_listener;
4443
mod style;
@@ -68,6 +67,8 @@ pub mod csr {
6867

6968
pub(crate) mod kinds;
7069

70+
mod attrs;
71+
7172
#[cfg(feature = "experimental")]
7273
pub mod experimental;
7374

0 commit comments

Comments
 (0)