fix meta issue with attributes

This commit is contained in:
Greg Johnston 2024-05-11 18:24:46 -04:00
parent 1e9d345831
commit b881167b8f
4 changed files with 99 additions and 4 deletions

View File

@ -19,7 +19,10 @@ use leptos::{
hydration::Cursor, hydration::Cursor,
reactive_graph::RenderEffectState, reactive_graph::RenderEffectState,
renderer::{dom::Dom, Renderer}, renderer::{dom::Dom, Renderer},
view::{Mountable, Position, PositionState, Render, RenderHtml}, view::{
add_attr::AddAnyAttr, Mountable, Position, PositionState, Render,
RenderHtml,
},
}, },
text_prop::TextProp, text_prop::TextProp,
IntoView, IntoView,
@ -114,6 +117,20 @@ impl Render<Dom> for BodyView {
} }
} }
impl AddAnyAttr<Dom> for BodyView {
type Output<SomeNewAttr: Attribute<Dom>> = BodyView;
fn add_any_attr<NewAttr: Attribute<Dom>>(
mut self,
attr: NewAttr,
) -> Self::Output<NewAttr>
where
Self::Output<NewAttr>: RenderHtml<Dom>,
{
todo!()
}
}
impl RenderHtml<Dom> for BodyView { impl RenderHtml<Dom> for BodyView {
type AsyncOutput = Self; type AsyncOutput = Self;

View File

@ -20,7 +20,10 @@ use leptos::{
hydration::Cursor, hydration::Cursor,
reactive_graph::RenderEffectState, reactive_graph::RenderEffectState,
renderer::{dom::Dom, Renderer}, renderer::{dom::Dom, Renderer},
view::{Mountable, Position, PositionState, Render, RenderHtml}, view::{
add_attr::AddAnyAttr, Mountable, Position, PositionState, Render,
RenderHtml,
},
}, },
text_prop::TextProp, text_prop::TextProp,
IntoView, IntoView,
@ -127,6 +130,20 @@ impl Render<Dom> for HtmlView {
} }
} }
impl AddAnyAttr<Dom> for HtmlView {
type Output<SomeNewAttr: Attribute<Dom>> = HtmlView;
fn add_any_attr<NewAttr: Attribute<Dom>>(
mut self,
attr: NewAttr,
) -> Self::Output<NewAttr>
where
Self::Output<NewAttr>: RenderHtml<Dom>,
{
todo!()
}
}
impl RenderHtml<Dom> for HtmlView { impl RenderHtml<Dom> for HtmlView {
type AsyncOutput = Self; type AsyncOutput = Self;

View File

@ -49,6 +49,7 @@
use futures::{Stream, StreamExt}; use futures::{Stream, StreamExt};
use leptos::{ use leptos::{
attr::NextAttribute,
component, component,
logging::debug_warn, logging::debug_warn,
reactive_graph::owner::{provide_context, use_context}, reactive_graph::owner::{provide_context, use_context},
@ -60,7 +61,10 @@ use leptos::{
}, },
hydration::Cursor, hydration::Cursor,
renderer::{dom::Dom, Renderer}, renderer::{dom::Dom, Renderer},
view::{Mountable, Position, PositionState, Render, RenderHtml}, view::{
add_attr::AddAnyAttr, Mountable, Position, PositionState, Render,
RenderHtml,
},
}, },
IntoView, IntoView,
}; };
@ -340,6 +344,31 @@ where
} }
} }
impl<E, At, Ch> AddAnyAttr<Dom> for RegisteredMetaTag<E, At, Ch>
where
E: ElementType + CreateElement<Dom> + Send,
At: Attribute<Dom> + Send,
Ch: RenderHtml<Dom> + Send,
{
type Output<SomeNewAttr: Attribute<Dom>> = RegisteredMetaTag<
E,
<At as NextAttribute<Dom>>::Output<SomeNewAttr>,
Ch,
>;
fn add_any_attr<NewAttr: Attribute<Dom>>(
mut self,
attr: NewAttr,
) -> Self::Output<NewAttr>
where
Self::Output<NewAttr>: RenderHtml<Dom>,
{
RegisteredMetaTag {
el: self.el.map(|inner| inner.add_any_attr(attr)),
}
}
}
impl<E, At, Ch> RenderHtml<Dom> for RegisteredMetaTag<E, At, Ch> impl<E, At, Ch> RenderHtml<Dom> for RegisteredMetaTag<E, At, Ch>
where where
E: ElementType + CreateElement<Dom>, E: ElementType + CreateElement<Dom>,
@ -439,6 +468,20 @@ impl Render<Dom> for MetaTagsView {
fn rebuild(self, state: &mut Self::State) {} fn rebuild(self, state: &mut Self::State) {}
} }
impl AddAnyAttr<Dom> for MetaTagsView {
type Output<SomeNewAttr: Attribute<Dom>> = MetaTagsView;
fn add_any_attr<NewAttr: Attribute<Dom>>(
self,
_attr: NewAttr,
) -> Self::Output<NewAttr>
where
Self::Output<NewAttr>: RenderHtml<Dom>,
{
self
}
}
impl RenderHtml<Dom> for MetaTagsView { impl RenderHtml<Dom> for MetaTagsView {
type AsyncOutput = Self; type AsyncOutput = Self;

View File

@ -1,5 +1,6 @@
use crate::{use_head, MetaContext, ServerMetaContext}; use crate::{use_head, MetaContext, ServerMetaContext};
use leptos::{ use leptos::{
attr::Attribute,
component, component,
error::Result, error::Result,
oco::Oco, oco::Oco,
@ -11,7 +12,10 @@ use leptos::{
dom::document, dom::document,
hydration::Cursor, hydration::Cursor,
renderer::{dom::Dom, Renderer}, renderer::{dom::Dom, Renderer},
view::{Mountable, Position, PositionState, Render, RenderHtml}, view::{
add_attr::AddAnyAttr, Mountable, Position, PositionState, Render,
RenderHtml,
},
}, },
text_prop::TextProp, text_prop::TextProp,
IntoView, IntoView,
@ -222,6 +226,20 @@ impl Render<Dom> for TitleView {
} }
} }
impl AddAnyAttr<Dom> for TitleView {
type Output<SomeNewAttr: Attribute<Dom>> = TitleView;
fn add_any_attr<NewAttr: Attribute<Dom>>(
self,
attr: NewAttr,
) -> Self::Output<NewAttr>
where
Self::Output<NewAttr>: RenderHtml<Dom>,
{
self
}
}
impl RenderHtml<Dom> for TitleView { impl RenderHtml<Dom> for TitleView {
type AsyncOutput = Self; type AsyncOutput = Self;