Adding in with_node macro
This commit is contained in:
parent
094ad20b51
commit
b4aadeb42b
|
@ -437,6 +437,12 @@ impl<A> DomBuilder<A> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<A> DomBuilder<A> where A: Clone {
|
impl<A> DomBuilder<A> where A: Clone {
|
||||||
|
#[inline]
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub fn __internal_element(&self) -> A {
|
||||||
|
self.element.clone()
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn with_element<B, F>(self, f: F) -> B where F: FnOnce(Self, A) -> B {
|
pub fn with_element<B, F>(self, f: F) -> B where F: FnOnce(Self, A) -> B {
|
||||||
let element = self.element.clone();
|
let element = self.element.clone();
|
||||||
|
|
|
@ -4,8 +4,8 @@ macro_rules! __internal_builder_method {
|
||||||
($this:expr,) => {
|
($this:expr,) => {
|
||||||
$this
|
$this
|
||||||
};
|
};
|
||||||
($this:expr, .$name:ident!($($args:expr),*) $($rest:tt)*) => {
|
($this:expr, .$name:ident!($($args:tt)*) $($rest:tt)*) => {
|
||||||
$crate::__internal_builder_method!($name!($this, $($args),*), $($rest)*)
|
$crate::__internal_builder_method!($name!($this, $($args)*), $($rest)*)
|
||||||
};
|
};
|
||||||
($this:expr, .$name:ident($($args:expr),*) $($rest:tt)*) => {
|
($this:expr, .$name:ident($($args:expr),*) $($rest:tt)*) => {
|
||||||
$crate::__internal_builder_method!($this.$name($($args),*), $($rest)*)
|
$crate::__internal_builder_method!($this.$name($($args),*), $($rest)*)
|
||||||
|
@ -16,6 +16,12 @@ macro_rules! __internal_builder_method {
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! __internal_builder {
|
macro_rules! __internal_builder {
|
||||||
|
($default:ty, $name:ident => $make:expr, $kind:expr) => {
|
||||||
|
$crate::__internal_builder!($default, $name => $make, $kind => $default, {})
|
||||||
|
};
|
||||||
|
($default:ty, $name:ident => $make:expr, $kind:expr, $($rest:tt)*) => {
|
||||||
|
$crate::__internal_builder!($default, $name => $make, $kind => $default, $($rest)*)
|
||||||
|
};
|
||||||
($default:ty, $name:ident => $make:expr, $kind:expr => $t:ty) => {
|
($default:ty, $name:ident => $make:expr, $kind:expr => $t:ty) => {
|
||||||
$crate::__internal_builder!($default, $name => $make, $kind => $t, {})
|
$crate::__internal_builder!($default, $name => $make, $kind => $t, {})
|
||||||
};
|
};
|
||||||
|
@ -28,13 +34,15 @@ macro_rules! __internal_builder {
|
||||||
let c = $crate::__internal_builder_method!(b, $($methods)*);
|
let c = $crate::__internal_builder_method!(b, $($methods)*);
|
||||||
$crate::DomBuilder::into_dom(c)
|
$crate::DomBuilder::into_dom(c)
|
||||||
}};
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
($default:ty, $name:ident => $make:expr, $kind:expr) => {
|
|
||||||
$crate::__internal_builder!($default, $name => $make, $kind => $default)
|
#[macro_export]
|
||||||
};
|
macro_rules! with_node {
|
||||||
($default:ty, $name:ident => $make:expr, $kind:expr, { $($methods:tt)* }) => {
|
($this:expr, $name:ident => { $($methods:tt)* }) => {{
|
||||||
$crate::__internal_builder!($default, $name => $make, $kind => $default, { $($methods)* })
|
let $name = $crate::DomBuilder::__internal_element(&$this);
|
||||||
};
|
$crate::__internal_builder_method!($this, $($methods)*)
|
||||||
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue