Adding in nightly feature and new events::Event type
This commit is contained in:
parent
089a073913
commit
bbc3e3a68e
|
@ -14,6 +14,7 @@ edition = "2018"
|
||||||
[features]
|
[features]
|
||||||
# TODO should this enable interning ?
|
# TODO should this enable interning ?
|
||||||
default = ["wasm-bindgen/enable-interning"]
|
default = ["wasm-bindgen/enable-interning"]
|
||||||
|
nightly = []
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
lazy_static = "1.3.0"
|
lazy_static = "1.3.0"
|
||||||
|
|
|
@ -265,11 +265,13 @@ impl Dom {
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn create_element<A>(name: &str) -> A where A: JsCast {
|
fn create_element<A>(name: &str) -> A where A: JsCast {
|
||||||
|
// TODO use unchecked_into in release mode ?
|
||||||
bindings::create_element(intern(name)).dyn_into().unwrap_throw()
|
bindings::create_element(intern(name)).dyn_into().unwrap_throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn create_element_ns<A>(name: &str, namespace: &str) -> A where A: JsCast {
|
fn create_element_ns<A>(name: &str, namespace: &str) -> A where A: JsCast {
|
||||||
|
// TODO use unchecked_into in release mode ?
|
||||||
bindings::create_element_ns(intern(namespace), intern(name)).dyn_into().unwrap_throw()
|
bindings::create_element_ns(intern(namespace), intern(name)).dyn_into().unwrap_throw()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,39 @@ use wasm_bindgen::JsCast;
|
||||||
use web_sys::{EventTarget, HtmlInputElement, HtmlTextAreaElement};
|
use web_sys::{EventTarget, HtmlInputElement, HtmlTextAreaElement};
|
||||||
|
|
||||||
|
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
pub struct Event<const NAME: &'static str, T> {
|
||||||
|
event: T,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
impl<T, const NAME: &'static str> StaticEvent for Event<NAME, T> where T: JsCast {
|
||||||
|
const EVENT_TYPE: &'static str = NAME;
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn unchecked_from_event(event: web_sys::Event) -> Self {
|
||||||
|
Self {
|
||||||
|
// TODO use unchecked_into in release mode ?
|
||||||
|
event: event.dyn_into().unwrap(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO code duplication
|
||||||
|
// TODO implement the rest of the methods
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
impl<T, const NAME: &'static str> Event<NAME, T> where T: AsRef<web_sys::Event> {
|
||||||
|
#[inline] pub fn prevent_default(&self) { self.event.as_ref().prevent_default(); }
|
||||||
|
|
||||||
|
#[inline] pub fn target(&self) -> Option<EventTarget> { self.event.as_ref().target() }
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub fn dyn_target<A>(&self) -> Option<A> where A: JsCast {
|
||||||
|
self.target()?.dyn_into().ok()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
macro_rules! make_event {
|
macro_rules! make_event {
|
||||||
($name:ident, $type:literal => $event:path) => {
|
($name:ident, $type:literal => $event:path) => {
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
#![warn(unreachable_pub)]
|
#![warn(unreachable_pub)]
|
||||||
#![deny(warnings)]
|
#![deny(warnings)]
|
||||||
|
|
||||||
|
#![cfg_attr(feature = "nightly", allow(incomplete_features))]
|
||||||
|
#![cfg_attr(feature = "nightly", feature(const_generics))]
|
||||||
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
mod macros;
|
mod macros;
|
||||||
|
|
Loading…
Reference in New Issue