1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
//! Element is the most general base class from which all element objects in a
//! Document inherit.
/// Element is the most general base class from which all element objects (i.e.
/// objects that represent elements) in a Document inherit. It only has methods
/// and properties common to all kinds of elements. More specific classes
/// inherit from Element. For example, the [HTMLElement] interface is the base
/// interface for HTML elements, while the SVGElement interface is the basis for
/// all SVG elements. Most functionality is specified further down the class
/// hierarchy.
///
/// Note: this trait cannot be implemented outside of this crate.
///
/// [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/Element
/// [HTMLElement]: [HtmlElementBuilder]
pub trait ElementBuilder: crate::interfaces::node::NodeWrapper {
/// Declare an attribute of the element, mutating the actual element's
/// attribute when the passed value changes.
///
/// A guard value is stored as a resulting "effect" of the mutation, and
/// removes the attribute when `drop`ped, to ensure that the attribute
/// is removed when this declaration is no longer referenced in the most
/// recent (`moxie::Revision`).
fn attribute(self, name: &'static str, value: impl AsRef<str>) -> Self {
self.node().set_attribute(name, value.as_ref());
self
}
attr_method! {
/// Updates the element's `class`.
class
}
attr_method! {
/// Updates the element's `id`.
id
}
attr_method! {
/// Updates the element's [`style`].
///
/// [`style`]: https://developer.mozilla.org/en-US/docs/Web/API/ElementCSSInlineStyle/style
style
}
}
/// A built Element. See [`ElementBuilder`] docs for more details.
pub trait Element: crate::interfaces::node::NodeWrapper {}