Crate dioxus_html

Crate dioxus_html 

Source
Expand description

§dioxus-html: Html (and SVG) Namespace for Dioxus

Crates.io MIT licensed Build Status Discord chat

Website | Guides | API Docs | Chat

§Overview

The Dioxus rsx! macro can accept any compile-time correct namespace on top of NodeFactory. This crate provides the HTML (and SVG) namespaces which get imported in the Dioxus prelude.

However, this abstraction enables you to add any namespace of elements, provided they’re in scope when rsx! is called. For an example, a UI that is designed for Augmented Reality might use different primitives than HTML:

use ar_namespace::*;

rsx! {
    magic_div {
        magic_header {}
        magic_paragraph {
            on_magic_click: move |event| {
                //
            }
        }
    }
}

This is currently a not-very-explored part of Dioxus. However, the namespacing system does make it possible to provide syntax highlighting, documentation, “go to definition” and compile-time correctness, so it’s worth having it abstracted.

§How it works:

Elements for dioxus must implement the (simple) DioxusElement trait to be used in the rsx! macro.

struct div;
impl DioxusElement for div {
    const TAG_NAME: &'static str = "div";
    const NAME_SPACE: Option<&'static str> = None;
}

All elements should be defined as a zero-sized-struct (also known as unit struct). These structs are zero-cost and just provide the type-level trickery to Rust for compile-time correct templates.

Attributes would then be implemented as constants on these unit structs.

The HTML namespace is defined mostly with macros. However, the expanded form would look something like this:

struct base;
impl DioxusElement for base {
    const TAG_NAME: &'static str = "base";
    const NAME_SPACE: Option<&'static str> = None;
}
impl base {
    const href: (&'static str, Option<'static str>, bool) = ("href", None, false);
    const target: (&'static str, Option<'static str>, bool) = ("target", None, false);
}

Because attributes are defined as methods on the unit struct, they guard the attribute creation behind a compile-time correct interface.

§How to extend it:

Whenever the rsx! macro is called, it relies on a module dioxus_elements to be in scope. When you enable the html feature in dioxus, this module gets imported in the prelude. However, you can extend this with your own set of custom elements by making your own dioxus_elements module and re-exporting the html namespace.

mod dioxus_elements {
    use dioxus::prelude::dioxus_elements::*;
    struct my_element;
    impl DioxusElement for my_element {
        const TAG_NAME: &'static str = "base";
        const NAME_SPACE: Option<&'static str> = None;
    }
}

§Contributing

  • Report issues on our issue tracker.
  • Join the discord and ask questions!

§License

This project is licensed under the MIT license.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Dioxus by you shall be licensed as MIT without any additional terms or conditions.

§Dioxus Namespace for HTML

This crate provides a set of compile-time correct HTML elements that can be used with the Rsx and Html macros. This system allows users to easily build new tags, new types, and customize the output of the Rsx and Html macros.

An added benefit of this approach is the ability to lend comprehensive documentation on how to use these elements inside of the Rsx and Html macros. Each element comes with a substantial amount of documentation on how to best use it, hopefully making the development cycle quick.

All elements are used as zero-sized unit structs with trait impls.

Currently, we don’t validate for structures, but do validate attributes.

Re-exports§

pub use bytes;
pub use keyboard_types;
pub use elements::*;
pub use events::*;
pub use crate::point_interaction::*;

Modules§

elements
events
Event Handlers
extensions
geometry
Geometry primitives for representing e.g. mouse events
global_attributes
input_data
Data structures representing user input, such as modifier keys and mouse buttons
point_interaction
svg_attributes
traits

Structs§

DataTransfer
FileData
HtmlEvent
Modifiers
Pressed modifier keys.
SerializedDataTransfer
A serialized version of DataTransfer
SerializedDataTransferItem
SerializedFileData
A serializable representation of file data
SerializedHtmlEventConverter
A trait for converting from a serialized event to a concrete event type.

Enums§

Code
Code is the physical position of a key.
EventData
Key
Key represents the meaning of a keypress.
Location
The location attribute contains an indication of the logical location of the key on the device.

Traits§

AExtension
AbbrExtension
AddressExtension
AnimateExtension
AnimateMotionExtension
AnimateTransformExtension
AnnotationExtension
AnnotationXmlExtension
AreaExtension
ArticleExtension
AsideExtension
AudioExtension
BExtension
BaseExtension
BdiExtension
BdoExtension
BlockquoteExtension
BodyExtension
BrExtension
ButtonExtension
CanvasExtension
CaptionExtension
CircleExtension
CiteExtension
ClipPathExtension
CodeExtension
ColExtension
ColgroupExtension
DataExtension
DatalistExtension
DdExtension
DefsExtension
DelExtension
DescExtension
DetailsExtension
DfnExtension
DialogExtension
DiscardExtension
DivExtension
DlExtension
DtExtension
EllipseExtension
EmExtension
EmbedExtension
FeBlendExtension
FeColorMatrixExtension
FeComponentTransferExtension
FeCompositeExtension
FeConvolveMatrixExtension
FeDiffuseLightingExtension
FeDisplacementMapExtension
FeDistantLightExtension
FeDropShadowExtension
FeFloodExtension
FeFuncAExtension
FeFuncBExtension
FeFuncGExtension
FeFuncRExtension
FeGaussianBlurExtension
FeImageExtension
FeMergeExtension
FeMergeNodeExtension
FeMorphologyExtension
FeOffsetExtension
FePointLightExtension
FeSpecularLightingExtension
FeSpotLightExtension
FeTileExtension
FeTurbulenceExtension
FieldsetExtension
FigcaptionExtension
FigureExtension
FilterExtension
FooterExtension
ForeignObjectExtension
FormExtension
GExtension
GlobalAttributesExtension
H1Extension
H2Extension
H3Extension
H4Extension
H5Extension
H6Extension
HasDataTransferData
HasFileData
HatchExtension
HatchpathExtension
HeadExtension
HeaderExtension
HgroupExtension
HrExtension
IExtension
IframeExtension
ImageExtension
ImgExtension
InputExtension
InsExtension
KbdExtension
LabelExtension
LegendExtension
LiExtension
LineExtension
LinearGradientExtension
LinkExtension
MainExtension
MapExtension
MarkExtension
MarkerExtension
MaskExtension
MathExtension
MenuExtension
MerrorExtension
MetaExtension
MetadataExtension
MeterExtension
MfracExtension
MiExtension
MmultiscriptsExtension
MnExtension
MoExtension
MoverExtension
MpaddedExtension
MpathExtension
MphantomExtension
MprescriptsExtension
MrootExtension
MrowExtension
MsExtension
MspaceExtension
MsqrtExtension
MstyleExtension
MsubExtension
MsubsupExtension
MsupExtension
MtableExtension
MtdExtension
MtextExtension
MtrExtension
MunderExtension
MunderoverExtension
NativeDataTransfer
NativeFileData
NavExtension
NoscriptExtension
ObjectExtension
OlExtension
OptgroupExtension
OptionExtension
OutputExtension
PExtension
ParamExtension
PathExtension
PatternExtension
PictureExtension
PolygonExtension
PolylineExtension
PreExtension
ProgressExtension
QExtension
RadialGradientExtension
RectExtension
RpExtension
RtExtension
RubyExtension
SExtension
SampExtension
ScriptExtension
SectionExtension
SelectExtension
SemanticsExtension
SetExtension
SlotExtension
SmallExtension
SourceExtension
SpanExtension
StopExtension
StrongExtension
StyleExtension
SubExtension
SummaryExtension
SupExtension
SvgAttributesExtension
SvgExtension
SwitchExtension
SymbolExtension
TableExtension
TbodyExtension
TdExtension
TemplateExtension
TextExtension
TextPathExtension
TextareaExtension
TfootExtension
ThExtension
TheadExtension
TimeExtension
TitleExtension
TrExtension
TrackExtension
TspanExtension
UExtension
UlExtension
UseExtension
VarExtension
VideoExtension
ViewExtension
WbrExtension

Functions§

render_template_to_html
Render a template to an HTML string