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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//! https://developer.mozilla.org/en-US/docs/Web/Events
pub use sauron_vdom::builder::on;
use sauron_vdom::builder::Attribute;
use sauron_vdom::{Callback, Event};

macro_rules! declare_events {
    ( $(
         $(#[$attr:meta])*
         $name:ident => $event:ident;
       )*
     ) => {
        $(
            $(#[$attr])*
            #[inline]
            pub fn $name<'a, F>(f: F) -> Attribute<'a>
                where F: Into<Callback<Event>>
                {
                    on(stringify!($event), f)
                }
         )*
    }
}

// Mouse events
declare_events! {
    onauxclick => auxclick;
    onclick  => click;
    oncontextmenu =>contextmenu;
    ondblclick  => dblclick;
    onmousedown => mousedown;
    onmouseenter => mouseenter;
    onmouseleave => mouseleave;
    onmousemove => mousemove;
    onmouseover => mouseover;
    onmouseout => mouseout;
    onmouseup => mouseup;
    onpointerlockchange => pointerlockchange;
    onpointerlockerror => pointerlockerror;
    onselect => select;
    onwheel => wheel;
}

// keyboard events
declare_events! {
    onkeydown => keydown;
    onkeypress => keypress;
    onkeyup => keyup;
}

// focus events
declare_events! {
    onfocus => focus;
    onblur => blur;
}

// form events
declare_events! {
    onreset => reset;
    onsubmit => submit;
}

declare_events! {
    onbroadcast => broadcast;
    //CheckboxStateChange
    onhashchange => hashchange;
    oninput => input;
    //RadioStateChange
    onreadystatechange => readystatechange;
    //ValueChange
    onchange => change;
}