Trait silkenweb::node::element::Element

source ·
pub trait Element: Sized {
    type Dom: Dom;
    type DomElement: JsCast + 'static;

    // Required methods
    fn class<'a, T>(self, class: impl RefSignalOrValue<'a, Item = T>) -> Self
       where T: 'a + AsRef<str>;
    fn classes<'a, T, Iter>(
        self,
        classes: impl RefSignalOrValue<'a, Item = Iter>
    ) -> Self
       where T: 'a + AsRef<str>,
             Iter: 'a + IntoIterator<Item = T>;
    fn attribute<'a>(
        self,
        name: &str,
        value: impl RefSignalOrValue<'a, Item = impl Attribute>
    ) -> Self;
    fn style_property<'a>(
        self,
        name: impl Into<String>,
        value: impl RefSignalOrValue<'a, Item = impl AsRef<str> + 'a>
    ) -> Self;
    fn effect(self, f: impl FnOnce(&Self::DomElement) + 'static) -> Self;
    fn effect_signal<T: 'static>(
        self,
        sig: impl Signal<Item = T> + 'static,
        f: impl Fn(&Self::DomElement, T) + Clone + 'static
    ) -> Self;
    fn map_element(self, f: impl FnOnce(&Self::DomElement) + 'static) -> Self;
    fn map_element_signal<T: 'static>(
        self,
        sig: impl Signal<Item = T> + 'static,
        f: impl Fn(&Self::DomElement, T) + Clone + 'static
    ) -> Self;
    fn handle(&self) -> ElementHandle<Self::Dom, Self::DomElement>;
    fn spawn_future(self, future: impl Future<Output = ()> + 'static) -> Self;
    fn on(self, name: &'static str, f: impl FnMut(JsValue) + 'static) -> Self;
}
Expand description

An HTML element.

Required Associated Types§

source

type Dom: Dom

source

type DomElement: JsCast + 'static

Required Methods§

source

fn class<'a, T>(self, class: impl RefSignalOrValue<'a, Item = T>) -> Self
where T: 'a + AsRef<str>,

Add a class to the element.

This method can be called multiple times to add multiple classes.

class must not be the empty string, or contain whitespace. Use Self::classes with an Option for optional classes.

Classes must be unique across all invocations of this method and Self::classes, otherwise the results are undefined. Any class signal values, past or present, must be unique w.r.t. other invocations.

§Panics

This panics if class is the empty string, or contains whitespace.

§Examples

Add static class names:

let app: Div<Dry> = div().class("my-class").class("my-other-class");
assert_eq!(
    app.freeze().to_string(),
    r#"<div class="my-class my-other-class"></div>"#
);

Add dynamic class names:

let my_class = Mutable::new("my-class");
let my_other_class = Mutable::new("my-other-class");
let app: Div<Dry> = div()
    .class(Sig(my_class.signal()))
    .class(Sig(my_other_class.signal()));
let app = app.freeze();

render_now().await;
assert_eq!(
    app.to_string(),
    r#"<div class="my-class my-other-class"></div>"#
);

my_other_class.set("my-other-class-updated");

render_now().await;
assert_eq!(
    app.to_string(),
    r#"<div class="my-class my-other-class-updated"></div>"#
);
source

fn classes<'a, T, Iter>( self, classes: impl RefSignalOrValue<'a, Item = Iter> ) -> Self
where T: 'a + AsRef<str>, Iter: 'a + IntoIterator<Item = T>,

Set the classes on an element

All classes must not contain spaces, or be the empty string. This method can be called multiple times and will add to existing classes.

Classes must be unique across all invocations of this method and Self::class, otherwise the results are undefined. Any class signal values, past or present, must be unique w.r.t. other invocations.

§Panics

Panics if any of the items in classes contain whitespace, or are empty strings.

§Examples

Add static class names:

let app: Div<Dry> = div().classes(["class0", "class1"]);
assert_eq!(
    app.freeze().to_string(),
    r#"<div class="class0 class1"></div>"#
);

Add dynamic class names:

let my_classes = Mutable::new(vec!["class0", "class1"]);
let app: Div<Dry> = div().classes(Sig(my_classes.signal_cloned()));
let app = app.freeze();

render_now().await;
assert_eq!(app.to_string(), r#"<div class="class0 class1"></div>"#);

my_classes.set(vec![]);

render_now().await;
assert_eq!(app.to_string(), r#"<div class=""></div>"#);
source

fn attribute<'a>( self, name: &str, value: impl RefSignalOrValue<'a, Item = impl Attribute> ) -> Self

Set an attribute

The attribute can either be a value or a signal. Signals should be wrapped in the Sig newtype.Option<impl Attribute> can be used to add/remove an attribute based on a signal.

source

fn style_property<'a>( self, name: impl Into<String>, value: impl RefSignalOrValue<'a, Item = impl AsRef<str> + 'a> ) -> Self

Set an inline style property

The property can be a value or a signal. Signals should be wrapped in the Sig newtype.

source

fn effect(self, f: impl FnOnce(&Self::DomElement) + 'static) -> Self

Apply an effect after the next render.

Effects give you access to the underlying DOM element.

§Example

Set the focus to an HTMLInputElement.

input().effect(|elem: &HtmlInputElement| elem.focus().unwrap());
source

fn effect_signal<T: 'static>( self, sig: impl Signal<Item = T> + 'static, f: impl Fn(&Self::DomElement, T) + Clone + 'static ) -> Self

Apply an effect after the next render each time a signal yields a new value.

source

fn map_element(self, f: impl FnOnce(&Self::DomElement) + 'static) -> Self

Map a function over the element.

source

fn map_element_signal<T: 'static>( self, sig: impl Signal<Item = T> + 'static, f: impl Fn(&Self::DomElement, T) + Clone + 'static ) -> Self

Map a function over the element each time a signal changes.

source

fn handle(&self) -> ElementHandle<Self::Dom, Self::DomElement>

Get a handle to the element.

Handles can be cloned and used within click handlers, for example.

§Example
let text = Mutable::new("".to_string());
let input = input();
let input_handle = input.handle();
let app: Div = div()
    .child(input)
    .child(button().text("Read Input").on_click({
        clone!(text);
        move |_, _| text.set(input_handle.dom_element().value())
    }))
    .text(Sig(text.signal_cloned()));
source

fn spawn_future(self, future: impl Future<Output = ()> + 'static) -> Self

Spawn a future on the element.

The future will be dropped when this element is dropped.

source

fn on(self, name: &'static str, f: impl FnMut(JsValue) + 'static) -> Self

Register an event handler.

name is the name of the event. See the MDN Events page for a list.

f is the callback when the event fires and will be passed the javascript Event object.

Object Safety§

This trait is not object safe.

Implementors§

source§

impl<D: Dom> Element for GenericElement<D>

§

type Dom = D

§

type DomElement = Element

source§

impl<Dom: Dom> Element for silkenweb::elements::html::A<Dom>

source§

impl<Dom: Dom> Element for Abbr<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Address<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Area<Dom>

source§

impl<Dom: Dom> Element for Article<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Aside<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Audio<Dom>

source§

impl<Dom: Dom> Element for B<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Base<Dom>

source§

impl<Dom: Dom> Element for Bdi<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Bdo<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Blockquote<Dom>

source§

impl<Dom: Dom> Element for Br<Dom>

source§

impl<Dom: Dom> Element for Button<Dom>

source§

impl<Dom: Dom> Element for Canvas<Dom>

source§

impl<Dom: Dom> Element for Caption<Dom>

source§

impl<Dom: Dom> Element for Cite<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Code<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Col<Dom>

source§

impl<Dom: Dom> Element for Colgroup<Dom>

source§

impl<Dom: Dom> Element for Data<Dom>

source§

impl<Dom: Dom> Element for Datalist<Dom>

source§

impl<Dom: Dom> Element for Dd<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Del<Dom>

source§

impl<Dom: Dom> Element for Details<Dom>

source§

impl<Dom: Dom> Element for Dfn<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Dialog<Dom>

source§

impl<Dom: Dom> Element for Div<Dom>

source§

impl<Dom: Dom> Element for Dl<Dom>

source§

impl<Dom: Dom> Element for Dt<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Em<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Embed<Dom>

source§

impl<Dom: Dom> Element for Fieldset<Dom>

source§

impl<Dom: Dom> Element for Figcaption<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Figure<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Footer<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Form<Dom>

source§

impl<Dom: Dom> Element for H1<Dom>

source§

impl<Dom: Dom> Element for H2<Dom>

source§

impl<Dom: Dom> Element for H3<Dom>

source§

impl<Dom: Dom> Element for H4<Dom>

source§

impl<Dom: Dom> Element for H5<Dom>

source§

impl<Dom: Dom> Element for H6<Dom>

source§

impl<Dom: Dom> Element for Head<Dom>

source§

impl<Dom: Dom> Element for Header<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Hgroup<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Hr<Dom>

source§

impl<Dom: Dom> Element for I<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Iframe<Dom>

source§

impl<Dom: Dom> Element for Img<Dom>

source§

impl<Dom: Dom> Element for Input<Dom>

source§

impl<Dom: Dom> Element for Ins<Dom>

source§

impl<Dom: Dom> Element for Kbd<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Label<Dom>

source§

impl<Dom: Dom> Element for Legend<Dom>

source§

impl<Dom: Dom> Element for Li<Dom>

source§

impl<Dom: Dom> Element for Link<Dom>

source§

impl<Dom: Dom> Element for Main<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Map<Dom>

source§

impl<Dom: Dom> Element for Mark<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Menu<Dom>

source§

impl<Dom: Dom> Element for Meta<Dom>

source§

impl<Dom: Dom> Element for Meter<Dom>

source§

impl<Dom: Dom> Element for Nav<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Noscript<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Object<Dom>

source§

impl<Dom: Dom> Element for Ol<Dom>

source§

impl<Dom: Dom> Element for Optgroup<Dom>

source§

impl<Dom: Dom> Element for Option<Dom>

source§

impl<Dom: Dom> Element for Output<Dom>

source§

impl<Dom: Dom> Element for P<Dom>

source§

impl<Dom: Dom> Element for Param<Dom>

source§

impl<Dom: Dom> Element for Picture<Dom>

source§

impl<Dom: Dom> Element for Pre<Dom>

source§

impl<Dom: Dom> Element for Progress<Dom>

source§

impl<Dom: Dom> Element for Q<Dom>

source§

impl<Dom: Dom> Element for Rb<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Rp<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Rt<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Rtc<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Ruby<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for S<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Samp<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for silkenweb::elements::html::Script<Dom>

source§

impl<Dom: Dom> Element for Section<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Select<Dom>

source§

impl<Dom: Dom> Element for Slot<Dom>

source§

impl<Dom: Dom> Element for Small<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Source<Dom>

source§

impl<Dom: Dom> Element for Span<Dom>

source§

impl<Dom: Dom> Element for Strong<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for silkenweb::elements::html::Style<Dom>

source§

impl<Dom: Dom> Element for Sub<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Summary<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Sup<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Table<Dom>

source§

impl<Dom: Dom> Element for Tbody<Dom>

source§

impl<Dom: Dom> Element for Td<Dom>

source§

impl<Dom: Dom> Element for Textarea<Dom>

source§

impl<Dom: Dom> Element for Tfoot<Dom>

source§

impl<Dom: Dom> Element for Th<Dom>

source§

impl<Dom: Dom> Element for Thead<Dom>

source§

impl<Dom: Dom> Element for Time<Dom>

source§

impl<Dom: Dom> Element for silkenweb::elements::html::Title<Dom>

source§

impl<Dom: Dom> Element for Tr<Dom>

source§

impl<Dom: Dom> Element for Track<Dom>

source§

impl<Dom: Dom> Element for U<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Ul<Dom>

source§

impl<Dom: Dom> Element for Var<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for Video<Dom>

source§

impl<Dom: Dom> Element for Wbr<Dom>

§

type Dom = Dom

§

type DomElement = HtmlElement

source§

impl<Dom: Dom> Element for silkenweb::elements::svg::A<Dom>

§

type Dom = Dom

§

type DomElement = SvgaElement

source§

impl<Dom: Dom> Element for Animate<Dom>

§

type Dom = Dom

§

type DomElement = SvgaElement

source§

impl<Dom: Dom> Element for Circle<Dom>

source§

impl<Dom: Dom> Element for ClipPath<Dom>

source§

impl<Dom: Dom> Element for Defs<Dom>

source§

impl<Dom: Dom> Element for Desc<Dom>

source§

impl<Dom: Dom> Element for Ellipse<Dom>

source§

impl<Dom: Dom> Element for FeBlend<Dom>

source§

impl<Dom: Dom> Element for FeColorMatrix<Dom>

source§

impl<Dom: Dom> Element for FeComponentTransfer<Dom>

source§

impl<Dom: Dom> Element for FeComposite<Dom>

source§

impl<Dom: Dom> Element for FeConvolveMatrix<Dom>

source§

impl<Dom: Dom> Element for FeDiffuseLighting<Dom>

source§

impl<Dom: Dom> Element for FeDisplacementMap<Dom>

source§

impl<Dom: Dom> Element for FeDistantLight<Dom>

source§

impl<Dom: Dom> Element for FeFlood<Dom>

source§

impl<Dom: Dom> Element for FeFuncA<Dom>

source§

impl<Dom: Dom> Element for FeFuncB<Dom>

source§

impl<Dom: Dom> Element for FeFuncG<Dom>

source§

impl<Dom: Dom> Element for FeFuncR<Dom>

source§

impl<Dom: Dom> Element for FeGaussianBlur<Dom>

source§

impl<Dom: Dom> Element for FeImage<Dom>

source§

impl<Dom: Dom> Element for FeMerge<Dom>

source§

impl<Dom: Dom> Element for FeMergeNode<Dom>

source§

impl<Dom: Dom> Element for FeMorphology<Dom>

source§

impl<Dom: Dom> Element for FeOffset<Dom>

source§

impl<Dom: Dom> Element for FePointLight<Dom>

source§

impl<Dom: Dom> Element for FeSpecularLighting<Dom>

source§

impl<Dom: Dom> Element for FeSpotLight<Dom>

source§

impl<Dom: Dom> Element for FeTile<Dom>

source§

impl<Dom: Dom> Element for FeTurbulence<Dom>

source§

impl<Dom: Dom> Element for Filter<Dom>

source§

impl<Dom: Dom> Element for ForeignObject<Dom>

source§

impl<Dom: Dom> Element for G<Dom>

§

type Dom = Dom

§

type DomElement = SvggElement

source§

impl<Dom: Dom> Element for Line<Dom>

source§

impl<Dom: Dom> Element for Marker<Dom>

source§

impl<Dom: Dom> Element for Mask<Dom>

source§

impl<Dom: Dom> Element for Metadata<Dom>

source§

impl<Dom: Dom> Element for Mpath<Dom>

source§

impl<Dom: Dom> Element for Path<Dom>

source§

impl<Dom: Dom> Element for Pattern<Dom>

source§

impl<Dom: Dom> Element for Polygon<Dom>

source§

impl<Dom: Dom> Element for Polyline<Dom>

source§

impl<Dom: Dom> Element for Rect<Dom>

source§

impl<Dom: Dom> Element for silkenweb::elements::svg::Script<Dom>

source§

impl<Dom: Dom> Element for Set<Dom>

source§

impl<Dom: Dom> Element for Stop<Dom>

source§

impl<Dom: Dom> Element for silkenweb::elements::svg::Style<Dom>

source§

impl<Dom: Dom> Element for Svg<Dom>

source§

impl<Dom: Dom> Element for Switch<Dom>

source§

impl<Dom: Dom> Element for Symbol<Dom>

source§

impl<Dom: Dom> Element for Text<Dom>

source§

impl<Dom: Dom> Element for TextPath<Dom>

source§

impl<Dom: Dom> Element for silkenweb::elements::svg::Title<Dom>

source§

impl<Dom: Dom> Element for Tspan<Dom>

source§

impl<Dom: Dom> Element for Use<Dom>

source§

impl<Dom: Dom> Element for View<Dom>