Feat: listeners now have scope information
This commit is contained in:
1 parent
cb74d70f83
commit
fcd68e61d2
17 files changed
+897
-906
No files matched your search
@@ -3,6 +3,7 @@
|
||||
use std::ops::Deref;
|
||||
|
||||
use crate::{
|
||||
context::NodeCtx,
|
||||
events::VirtualEvent,
|
||||
innerlude::VComponent,
|
||||
nodes::{Attribute, Listener, NodeKey, VNode},
|
||||
@@ -17,14 +18,14 @@ use bumpalo::Bump;
|
||||
/// Typically constructed with element-specific constructors, eg the `div`
|
||||
/// function for building `<div>` elements or the `button` function for building
|
||||
/// `<button>` elements.
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Debug)]
|
||||
pub struct ElementBuilder<'a, Listeners, Attributes, Children>
|
||||
where
|
||||
Listeners: 'a + AsRef<[Listener<'a>]>,
|
||||
Attributes: 'a + AsRef<[Attribute<'a>]>,
|
||||
Children: 'a + AsRef<[VNode<'a>]>,
|
||||
{
|
||||
bump: &'a Bump,
|
||||
ctx: &'a NodeCtx<'a>,
|
||||
key: NodeKey,
|
||||
tag_name: &'a str,
|
||||
listeners: Listeners,
|
||||
@@ -64,13 +65,11 @@ impl<'a>
|
||||
/// let my_element_builder = ElementBuilder::new(&b, tag_name);
|
||||
/// # fn flip_coin() -> bool { true }
|
||||
/// ```
|
||||
pub fn new<B>(bump: B, tag_name: &'a str) -> Self
|
||||
where
|
||||
B: Into<&'a Bump>,
|
||||
{
|
||||
let bump = bump.into();
|
||||
pub fn new(ctx: &'a NodeCtx<'a>, tag_name: &'static str) -> Self {
|
||||
// pub fn new<B>(ctx: &'a mut NodeCtx<'a>, tag_name: &'a str) -> Self {
|
||||
let bump = ctx.bump();
|
||||
ElementBuilder {
|
||||
bump,
|
||||
ctx,
|
||||
key: NodeKey::NONE,
|
||||
tag_name,
|
||||
listeners: bumpalo::collections::Vec::new_in(bump),
|
||||
@@ -120,7 +119,7 @@ where
|
||||
L: 'a + AsRef<[Listener<'a>]>,
|
||||
{
|
||||
ElementBuilder {
|
||||
bump: self.bump,
|
||||
ctx: self.ctx,
|
||||
key: self.key,
|
||||
tag_name: self.tag_name,
|
||||
listeners,
|
||||
@@ -159,7 +158,7 @@ where
|
||||
A: 'a + AsRef<[Attribute<'a>]>,
|
||||
{
|
||||
ElementBuilder {
|
||||
bump: self.bump,
|
||||
ctx: self.ctx,
|
||||
key: self.key,
|
||||
tag_name: self.tag_name,
|
||||
listeners: self.listeners,
|
||||
@@ -198,7 +197,7 @@ where
|
||||
C: 'a + AsRef<[VNode<'a>]>,
|
||||
{
|
||||
ElementBuilder {
|
||||
bump: self.bump,
|
||||
ctx: self.ctx,
|
||||
key: self.key,
|
||||
tag_name: self.tag_name,
|
||||
listeners: self.listeners,
|
||||
@@ -225,7 +224,7 @@ where
|
||||
#[inline]
|
||||
pub fn namespace(self, namespace: Option<&'a str>) -> Self {
|
||||
ElementBuilder {
|
||||
bump: self.bump,
|
||||
ctx: self.ctx,
|
||||
key: self.key,
|
||||
tag_name: self.tag_name,
|
||||
listeners: self.listeners,
|
||||
@@ -291,17 +290,17 @@ where
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn finish(self) -> VNode<'a> {
|
||||
let children: &'a Children = self.bump.alloc(self.children);
|
||||
let children: &'a Children = self.ctx.bump().alloc(self.children);
|
||||
let children: &'a [VNode<'a>] = children.as_ref();
|
||||
|
||||
let listeners: &'a Listeners = self.bump.alloc(self.listeners);
|
||||
let listeners: &'a Listeners = self.ctx.bump().alloc(self.listeners);
|
||||
let listeners: &'a [Listener<'a>] = listeners.as_ref();
|
||||
|
||||
let attributes: &'a Attributes = self.bump.alloc(self.attributes);
|
||||
let attributes: &'a Attributes = self.ctx.bump().alloc(self.attributes);
|
||||
let attributes: &'a [Attribute<'a>] = attributes.as_ref();
|
||||
|
||||
VNode::element(
|
||||
self.bump,
|
||||
self.ctx.bump(),
|
||||
self.key,
|
||||
self.tag_name,
|
||||
listeners,
|
||||
@@ -340,10 +339,18 @@ where
|
||||
/// ```
|
||||
#[inline]
|
||||
pub fn on(mut self, event: &'static str, callback: impl Fn(VirtualEvent) + 'a) -> Self {
|
||||
// todo:
|
||||
// increment listner id from nodectx ref
|
||||
// add listener attrs here instead of later?
|
||||
self.listeners.push(Listener {
|
||||
event,
|
||||
callback: self.bump.alloc(callback),
|
||||
callback: self.ctx.bump.alloc(callback),
|
||||
id: *self.ctx.idx.borrow(),
|
||||
scope: self.ctx.scope,
|
||||
});
|
||||
|
||||
// bump the context id forward
|
||||
*self.ctx.idx.borrow_mut() += 1;
|
||||
self
|
||||
}
|
||||
}
|
||||
@@ -435,593 +442,6 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! builder_constructors {
|
||||
( $(
|
||||
$(#[$attr:meta])*
|
||||
$name:ident;
|
||||
)* ) => {
|
||||
$(
|
||||
$(#[$attr])*
|
||||
#[inline]
|
||||
pub fn $name<'a, B>(
|
||||
bump: B,
|
||||
) -> ElementBuilder<
|
||||
'a,
|
||||
bumpalo::collections::Vec<'a, Listener<'a>>,
|
||||
bumpalo::collections::Vec<'a, Attribute<'a>>,
|
||||
bumpalo::collections::Vec<'a, VNode<'a>>,
|
||||
>
|
||||
where
|
||||
B: Into<&'a Bump>
|
||||
{
|
||||
ElementBuilder::new(bump, stringify!($name))
|
||||
}
|
||||
)*
|
||||
};
|
||||
( $(
|
||||
$(#[$attr:meta])*
|
||||
$name:ident <> $namespace:tt;
|
||||
)* ) => {
|
||||
$(
|
||||
$(#[$attr])*
|
||||
#[inline]
|
||||
pub fn $name<'a>(
|
||||
bump: &'a Bump,
|
||||
) -> ElementBuilder<
|
||||
'a,
|
||||
bumpalo::collections::Vec<'a, Listener<'a>>,
|
||||
bumpalo::collections::Vec<'a, Attribute<'a>>,
|
||||
bumpalo::collections::Vec<'a, VNode<'a>>,
|
||||
> {
|
||||
let builder = ElementBuilder::new(bump, stringify!($name));
|
||||
builder.namespace(Some($namespace))
|
||||
}
|
||||
)*
|
||||
}
|
||||
}
|
||||
|
||||
// Organized in the same order as
|
||||
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element
|
||||
//
|
||||
// Does not include obsolete elements.
|
||||
builder_constructors! {
|
||||
// Document metadata
|
||||
|
||||
/// Build a
|
||||
/// [`<base>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base)
|
||||
/// element.
|
||||
base;
|
||||
/// Build a
|
||||
/// [`<head>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head)
|
||||
/// element.
|
||||
head;
|
||||
/// Build a
|
||||
/// [`<link>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link)
|
||||
/// element.
|
||||
link;
|
||||
/// Build a
|
||||
/// [`<meta>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta)
|
||||
/// element.
|
||||
meta;
|
||||
/// Build a
|
||||
/// [`<style>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style)
|
||||
/// element.
|
||||
style;
|
||||
/// Build a
|
||||
/// [`<title>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title)
|
||||
/// element.
|
||||
title;
|
||||
|
||||
// Sectioning root
|
||||
|
||||
/// Build a
|
||||
/// [`<body>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body)
|
||||
/// element.
|
||||
body;
|
||||
|
||||
// Content sectioning
|
||||
|
||||
/// Build a
|
||||
/// [`<address>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/address)
|
||||
/// element.
|
||||
address;
|
||||
/// Build a
|
||||
/// [`<article>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article)
|
||||
/// element.
|
||||
article;
|
||||
/// Build a
|
||||
/// [`<aside>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside)
|
||||
/// element.
|
||||
aside;
|
||||
/// Build a
|
||||
/// [`<footer>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/footer)
|
||||
/// element.
|
||||
footer;
|
||||
/// Build a
|
||||
/// [`<header>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header)
|
||||
/// element.
|
||||
header;
|
||||
/// Build a
|
||||
/// [`<h1>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1)
|
||||
/// element.
|
||||
h1;
|
||||
/// Build a
|
||||
/// [`<h2>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h2)
|
||||
/// element.
|
||||
h2;
|
||||
/// Build a
|
||||
/// [`<h3>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h3)
|
||||
/// element.
|
||||
h3;
|
||||
/// Build a
|
||||
/// [`<h4>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h4)
|
||||
/// element.
|
||||
h4;
|
||||
/// Build a
|
||||
/// [`<h5>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h5)
|
||||
/// element.
|
||||
h5;
|
||||
/// Build a
|
||||
/// [`<h6>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h6)
|
||||
/// element.
|
||||
h6;
|
||||
/// Build a
|
||||
/// [`<hgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hgroup)
|
||||
/// element.
|
||||
hgroup;
|
||||
/// Build a
|
||||
/// [`<main>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/main)
|
||||
/// element.
|
||||
main;
|
||||
/// Build a
|
||||
/// [`<nav>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav)
|
||||
/// element.
|
||||
nav;
|
||||
/// Build a
|
||||
/// [`<section>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/section)
|
||||
/// element.
|
||||
section;
|
||||
|
||||
// Text content
|
||||
|
||||
/// Build a
|
||||
/// [`<blockquote>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote)
|
||||
/// element.
|
||||
blockquote;
|
||||
/// Build a
|
||||
/// [`<dd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd)
|
||||
/// element.
|
||||
dd;
|
||||
/// Build a
|
||||
/// [`<div>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div)
|
||||
/// element.
|
||||
div;
|
||||
/// Build a
|
||||
/// [`<dl>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl)
|
||||
/// element.
|
||||
dl;
|
||||
/// Build a
|
||||
/// [`<dt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt)
|
||||
/// element.
|
||||
dt;
|
||||
/// Build a
|
||||
/// [`<figcaption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption)
|
||||
/// element.
|
||||
figcaption;
|
||||
/// Build a
|
||||
/// [`<figure>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure)
|
||||
/// element.
|
||||
figure;
|
||||
/// Build a
|
||||
/// [`<hr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr)
|
||||
/// element.
|
||||
hr;
|
||||
/// Build a
|
||||
/// [`<li>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li)
|
||||
/// element.
|
||||
li;
|
||||
/// Build a
|
||||
/// [`<ol>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol)
|
||||
/// element.
|
||||
ol;
|
||||
/// Build a
|
||||
/// [`<p>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/p)
|
||||
/// element.
|
||||
p;
|
||||
/// Build a
|
||||
/// [`<pre>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre)
|
||||
/// element.
|
||||
pre;
|
||||
/// Build a
|
||||
/// [`<ul>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul)
|
||||
/// element.
|
||||
ul;
|
||||
|
||||
// Inline text semantics
|
||||
|
||||
/// Build a
|
||||
/// [`<a>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a)
|
||||
/// element.
|
||||
a;
|
||||
/// Build a
|
||||
/// [`<abbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr)
|
||||
/// element.
|
||||
abbr;
|
||||
/// Build a
|
||||
/// [`<b>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b)
|
||||
/// element.
|
||||
b;
|
||||
/// Build a
|
||||
/// [`<bdi>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi)
|
||||
/// element.
|
||||
bdi;
|
||||
/// Build a
|
||||
/// [`<bdo>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo)
|
||||
/// element.
|
||||
bdo;
|
||||
/// Build a
|
||||
/// [`<br>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br)
|
||||
/// element.
|
||||
br;
|
||||
/// Build a
|
||||
/// [`<cite>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite)
|
||||
/// element.
|
||||
cite;
|
||||
/// Build a
|
||||
/// [`<code>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code)
|
||||
/// element.
|
||||
code;
|
||||
/// Build a
|
||||
/// [`<data>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data)
|
||||
/// element.
|
||||
data;
|
||||
/// Build a
|
||||
/// [`<dfn>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn)
|
||||
/// element.
|
||||
dfn;
|
||||
/// Build a
|
||||
/// [`<em>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em)
|
||||
/// element.
|
||||
em;
|
||||
/// Build a
|
||||
/// [`<i>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i)
|
||||
/// element.
|
||||
i;
|
||||
/// Build a
|
||||
/// [`<kbd>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd)
|
||||
/// element.
|
||||
kbd;
|
||||
/// Build a
|
||||
/// [`<mark>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark)
|
||||
/// element.
|
||||
mark;
|
||||
/// Build a
|
||||
/// [`<q>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q)
|
||||
/// element.
|
||||
q;
|
||||
/// Build a
|
||||
/// [`<rb>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rb)
|
||||
/// element.
|
||||
rb;
|
||||
/// Build a
|
||||
/// [`<rp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rp)
|
||||
/// element.
|
||||
rp;
|
||||
/// Build a
|
||||
/// [`<rt>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt)
|
||||
/// element.
|
||||
rt;
|
||||
/// Build a
|
||||
/// [`<rtc>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rtc)
|
||||
/// element.
|
||||
rtc;
|
||||
/// Build a
|
||||
/// [`<ruby>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby)
|
||||
/// element.
|
||||
ruby;
|
||||
/// Build a
|
||||
/// [`<s>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s)
|
||||
/// element.
|
||||
s;
|
||||
/// Build a
|
||||
/// [`<samp>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp)
|
||||
/// element.
|
||||
samp;
|
||||
/// Build a
|
||||
/// [`<small>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small)
|
||||
/// element.
|
||||
small;
|
||||
/// Build a
|
||||
/// [`<span>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span)
|
||||
/// element.
|
||||
span;
|
||||
/// Build a
|
||||
/// [`<strong>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong)
|
||||
/// element.
|
||||
strong;
|
||||
/// Build a
|
||||
/// [`<sub>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub)
|
||||
/// element.
|
||||
sub;
|
||||
/// Build a
|
||||
/// [`<sup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup)
|
||||
/// element.
|
||||
sup;
|
||||
/// Build a
|
||||
/// [`<time>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time)
|
||||
/// element.
|
||||
time;
|
||||
/// Build a
|
||||
/// [`<u>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u)
|
||||
/// element.
|
||||
u;
|
||||
/// Build a
|
||||
/// [`<var>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var)
|
||||
/// element.
|
||||
var;
|
||||
/// Build a
|
||||
/// [`<wbr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr)
|
||||
/// element.
|
||||
wbr;
|
||||
|
||||
// Image and multimedia
|
||||
|
||||
/// Build a
|
||||
/// [`<area>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area)
|
||||
/// element.
|
||||
area;
|
||||
/// Build a
|
||||
/// [`<audio>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio)
|
||||
/// element.
|
||||
audio;
|
||||
/// Build a
|
||||
/// [`<img>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img)
|
||||
/// element.
|
||||
img;
|
||||
/// Build a
|
||||
/// [`<map>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map)
|
||||
/// element.
|
||||
map;
|
||||
/// Build a
|
||||
/// [`<track>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track)
|
||||
/// element.
|
||||
track;
|
||||
/// Build a
|
||||
/// [`<video>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video)
|
||||
/// element.
|
||||
video;
|
||||
|
||||
// Embedded content
|
||||
|
||||
/// Build a
|
||||
/// [`<embed>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed)
|
||||
/// element.
|
||||
embed;
|
||||
/// Build a
|
||||
/// [`<iframe>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe)
|
||||
/// element.
|
||||
iframe;
|
||||
/// Build a
|
||||
/// [`<object>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object)
|
||||
/// element.
|
||||
object;
|
||||
/// Build a
|
||||
/// [`<param>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param)
|
||||
/// element.
|
||||
param;
|
||||
/// Build a
|
||||
/// [`<picture>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture)
|
||||
/// element.
|
||||
picture;
|
||||
/// Build a
|
||||
/// [`<source>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source)
|
||||
/// element.
|
||||
source;
|
||||
|
||||
// Scripting
|
||||
|
||||
/// Build a
|
||||
/// [`<canvas>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas)
|
||||
/// element.
|
||||
canvas;
|
||||
/// Build a
|
||||
/// [`<noscript>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript)
|
||||
/// element.
|
||||
noscript;
|
||||
/// Build a
|
||||
/// [`<script>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script)
|
||||
/// element.
|
||||
script;
|
||||
|
||||
// Demarcating edits
|
||||
|
||||
/// Build a
|
||||
/// [`<del>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del)
|
||||
/// element.
|
||||
del;
|
||||
/// Build a
|
||||
/// [`<ins>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins)
|
||||
/// element.
|
||||
ins;
|
||||
|
||||
// Table content
|
||||
|
||||
/// Build a
|
||||
/// [`<caption>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption)
|
||||
/// element.
|
||||
caption;
|
||||
/// Build a
|
||||
/// [`<col>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col)
|
||||
/// element.
|
||||
col;
|
||||
/// Build a
|
||||
/// [`<colgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup)
|
||||
/// element.
|
||||
colgroup;
|
||||
/// Build a
|
||||
/// [`<table>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table)
|
||||
/// element.
|
||||
table;
|
||||
/// Build a
|
||||
/// [`<tbody>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody)
|
||||
/// element.
|
||||
tbody;
|
||||
/// Build a
|
||||
/// [`<td>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td)
|
||||
/// element.
|
||||
td;
|
||||
/// Build a
|
||||
/// [`<tfoot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot)
|
||||
/// element.
|
||||
tfoot;
|
||||
/// Build a
|
||||
/// [`<th>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th)
|
||||
/// element.
|
||||
th;
|
||||
/// Build a
|
||||
/// [`<thead>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead)
|
||||
/// element.
|
||||
thead;
|
||||
/// Build a
|
||||
/// [`<tr>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr)
|
||||
/// element.
|
||||
tr;
|
||||
|
||||
// Forms
|
||||
|
||||
/// Build a
|
||||
/// [`<button>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button)
|
||||
/// element.
|
||||
button;
|
||||
/// Build a
|
||||
/// [`<datalist>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist)
|
||||
/// element.
|
||||
datalist;
|
||||
/// Build a
|
||||
/// [`<fieldset>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset)
|
||||
/// element.
|
||||
fieldset;
|
||||
/// Build a
|
||||
/// [`<form>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form)
|
||||
/// element.
|
||||
form;
|
||||
/// Build a
|
||||
/// [`<input>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input)
|
||||
/// element.
|
||||
input;
|
||||
/// Build a
|
||||
/// [`<label>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label)
|
||||
/// element.
|
||||
label;
|
||||
/// Build a
|
||||
/// [`<legend>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend)
|
||||
/// element.
|
||||
legend;
|
||||
/// Build a
|
||||
/// [`<meter>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter)
|
||||
/// element.
|
||||
meter;
|
||||
/// Build a
|
||||
/// [`<optgroup>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup)
|
||||
/// element.
|
||||
optgroup;
|
||||
/// Build a
|
||||
/// [`<option>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option)
|
||||
/// element.
|
||||
option;
|
||||
/// Build a
|
||||
/// [`<output>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output)
|
||||
/// element.
|
||||
output;
|
||||
/// Build a
|
||||
/// [`<progress>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress)
|
||||
/// element.
|
||||
progress;
|
||||
/// Build a
|
||||
/// [`<select>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select)
|
||||
/// element.
|
||||
select;
|
||||
/// Build a
|
||||
/// [`<textarea>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea)
|
||||
/// element.
|
||||
textarea;
|
||||
|
||||
// Interactive elements
|
||||
|
||||
/// Build a
|
||||
/// [`<details>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details)
|
||||
/// element.
|
||||
details;
|
||||
/// Build a
|
||||
/// [`<dialog>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog)
|
||||
/// element.
|
||||
dialog;
|
||||
/// Build a
|
||||
/// [`<menu>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu)
|
||||
/// element.
|
||||
menu;
|
||||
/// Build a
|
||||
/// [`<menuitem>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menuitem)
|
||||
/// element.
|
||||
menuitem;
|
||||
/// Build a
|
||||
/// [`<summary>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary)
|
||||
/// element.
|
||||
summary;
|
||||
|
||||
// Web components
|
||||
|
||||
/// Build a
|
||||
/// [`<slot>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot)
|
||||
/// element.
|
||||
slot;
|
||||
/// Build a
|
||||
/// [`<template>`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template)
|
||||
/// element.
|
||||
template;
|
||||
}
|
||||
|
||||
builder_constructors! {
|
||||
// SVG components
|
||||
|
||||
/// Build a
|
||||
/// [`<svg>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/svg)
|
||||
/// element.
|
||||
svg <> "http://www.w3.org/2000/svg" ;
|
||||
/// Build a
|
||||
/// [`<path>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/path)
|
||||
/// element.
|
||||
path <> "http://www.w3.org/2000/svg";
|
||||
/// Build a
|
||||
/// [`<circle>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/circle)
|
||||
/// element.
|
||||
circle <> "http://www.w3.org/2000/svg";
|
||||
/// Build a
|
||||
/// [`<ellipse>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/ellipse)
|
||||
/// element.
|
||||
ellipse <> "http://www.w3.org/2000/svg";
|
||||
/// Build a
|
||||
/// [`<line>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/line)
|
||||
/// element.
|
||||
line <> "http://www.w3.org/2000/svg";
|
||||
/// Build a
|
||||
/// [`<polygon>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polygon)
|
||||
/// element.
|
||||
polygon <> "http://www.w3.org/2000/svg";
|
||||
/// Build a
|
||||
/// [`<polyline>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/polyline)
|
||||
/// element.
|
||||
polyline <> "http://www.w3.org/2000/svg";
|
||||
/// Build a
|
||||
/// [`<rect>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/rect)
|
||||
/// element.
|
||||
rect <> "http://www.w3.org/2000/svg";
|
||||
/// Build a
|
||||
/// [`<image>`](https://developer.mozilla.org/en-US/docs/Web/SVG/Element/image)
|
||||
/// element.
|
||||
image <> "http://www.w3.org/2000/svg";
|
||||
}
|
||||
|
||||
/// Construct a text VNode.
|
||||
///
|
||||
/// This is `dioxus`'s virtual DOM equivalent of `document.createTextVNode`.
|
||||
@@ -1062,33 +482,33 @@ pub fn attr<'a>(name: &'static str, value: &'a str) -> Attribute<'a> {
|
||||
Attribute { name, value }
|
||||
}
|
||||
|
||||
/// Create an event listener.
|
||||
///
|
||||
/// `event` is the type of event to listen for, e.g. `"click"`. The `callback`
|
||||
/// is the function that will be invoked when the event occurs.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```no_run
|
||||
/// use dioxus::{builder::*, bumpalo::Bump};
|
||||
///
|
||||
/// let b = Bump::new();
|
||||
///
|
||||
/// let listener = on(&b, "click", |root, vdom, event| {
|
||||
/// // do something when a click happens...
|
||||
/// });
|
||||
/// ```
|
||||
pub fn on<'a, 'b>(
|
||||
// pub fn on<'a, 'b, F: 'static>(
|
||||
bump: &'a Bump,
|
||||
event: &'static str,
|
||||
callback: impl Fn(VirtualEvent) + 'a,
|
||||
) -> Listener<'a> {
|
||||
Listener {
|
||||
event,
|
||||
callback: bump.alloc(callback),
|
||||
}
|
||||
}
|
||||
// /// Create an event listener.
|
||||
// ///
|
||||
// /// `event` is the type of event to listen for, e.g. `"click"`. The `callback`
|
||||
// /// is the function that will be invoked when the event occurs.
|
||||
// ///
|
||||
// /// # Example
|
||||
// ///
|
||||
// /// ```no_run
|
||||
// /// use dioxus::{builder::*, bumpalo::Bump};
|
||||
// ///
|
||||
// /// let b = Bump::new();
|
||||
// ///
|
||||
// /// let listener = on(&b, "click", |root, vdom, event| {
|
||||
// /// // do something when a click happens...
|
||||
// /// });
|
||||
// /// ```
|
||||
// pub fn on<'a, 'b>(
|
||||
// // pub fn on<'a, 'b, F: 'static>(
|
||||
// bump: &'a Bump,
|
||||
// event: &'static str,
|
||||
// callback: impl Fn(VirtualEvent) + 'a,
|
||||
// ) -> Listener<'a> {
|
||||
// Listener {
|
||||
// event,
|
||||
// callback: bump.alloc(callback),
|
||||
// }
|
||||
// }
|
||||
|
||||
pub fn virtual_child<'a, T>(_bump: &'a Bump, _props: T, _f: crate::innerlude::FC<T>) -> VNode<'a> {
|
||||
todo!()
|
||||
|
||||
Reference in new issue
Block a user