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
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
use gxi_interface::wasm_bindgen::JsCast;
use gxi_interface::{web_sys, Node};

use crate::Closure;

pub trait GlobalAttributes: Node {
    #[inline]
    fn inner_html(&self, str: &str) {
        self.get_widget().set_inner_html(str)
    }

    //Global attributes according to https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes
    generate_attr!(accesskey);
    generate_attr!(autocapitalize);
    generate_attr!(class);
    generate_attr!(contenteditable);
    generate_attr!(dir);
    generate_attr!(draggable);
    generate_attr!(enterkeyhint);
    generate_attr!(hidden);
    generate_attr!(id);
    generate_attr!(inputmode);
    generate_attr!(is);
    generate_attr!(itemid);
    generate_attr!(itemprop);
    generate_attr!(itemref);
    generate_attr!(itemscope);
    generate_attr!(itemtype);
    generate_attr!(lang);
    generate_attr!(nonce);
    generate_attr!(part);
    generate_attr!(slot);
    generate_attr!(spellcheck);
    generate_attr!(style);
    generate_attr!(tabindex);
    generate_attr!(title);
    generate_attr!(translate);

    // Assigns the closure f to the the given event
    fn on<F: Fn() + 'static>(&self, event: &str, f: F) {
        let closure = Closure::wrap(Box::new(move |_: web_sys::MouseEvent| {
            f();
        }) as Box<dyn Fn(_)>);
        self.get_widget()
            .add_event_listener_with_callback(event, closure.as_ref().unchecked_ref())
            .unwrap();
        closure.forget();
    }

    //Global event handlers according to https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes
    generate_on_func!(on_abort "abort");
    generate_on_func!(on_autocomplete "autocomplete");
    generate_on_func!(on_autocompleteerror "autocompleteerror");
    generate_on_func!(on_blur "blur");
    generate_on_func!(on_cancel "cancel");
    generate_on_func!(on_canplay "canplay");
    generate_on_func!(on_canplaythrough "canplaythrough");
    generate_on_func!(on_change "change");
    generate_on_func!(on_click "click");
    generate_on_func!(on_close "close");
    generate_on_func!(on_contextmenu "contextmenu");
    generate_on_func!(on_cuechange "cuechange");
    generate_on_func!(on_dblclick "dblclick");
    generate_on_func!(on_drag "drag");
    generate_on_func!(on_dragend "dragend");
    generate_on_func!(on_dragenter "dragenter");
    generate_on_func!(on_dragexit "dragexit");
    generate_on_func!(on_dragleave "dragleave");
    generate_on_func!(on_dragover "dragover");
    generate_on_func!(on_dragstart "dragstart");
    generate_on_func!(on_drop "drop");
    generate_on_func!(on_durationchange "durationchange");
    generate_on_func!(on_emptied "emptied");
    generate_on_func!(on_ended "ended");
    generate_on_func!(on_error "error");
    generate_on_func!(on_focus "focus");
    generate_on_func!(on_input "input");
    generate_on_func!(on_invalid "invalid");
    generate_on_func!(on_keydown "keydown");
    generate_on_func!(on_keypress "keypress");
    generate_on_func!(on_keyup "keyup");
    generate_on_func!(on_load "load");
    generate_on_func!(on_loadeddata "loadeddata");
    generate_on_func!(on_loadedmetadata "loadedmetadata");
    generate_on_func!(on_loadstart "loadstart");
    generate_on_func!(on_mousedown "mousedown");
    generate_on_func!(on_mouseenter "mouseenter");
    generate_on_func!(on_mouseleave "mouseleave");
    generate_on_func!(on_mousemove "mousemove");
    generate_on_func!(on_mouseout "mouseout");
    generate_on_func!(on_mouseover "mouseover");
    generate_on_func!(on_mouseup "mouseup");
    generate_on_func!(on_mousewheel "mousewheel");
    generate_on_func!(on_pause "pause");
    generate_on_func!(on_play "play");
    generate_on_func!(on_playing "playing");
    generate_on_func!(on_progress "progress");
    generate_on_func!(on_ratechange "ratechange");
    generate_on_func!(on_reset "reset");
    generate_on_func!(on_resize "resize");
    generate_on_func!(on_scroll "scroll");
    generate_on_func!(on_seeked "seeked");
    generate_on_func!(on_seeking "seeking");
    generate_on_func!(on_select "select");
    generate_on_func!(on_show "show");
    generate_on_func!(on_sort "sort");
    generate_on_func!(on_stalled "stalled");
    generate_on_func!(on_submit "submit");
    generate_on_func!(on_suspend "suspend");
    generate_on_func!(on_timeupdate "timeupdate");
    generate_on_func!(on_toggle "toggle");
    generate_on_func!(on_volumechange "volumechange");
    generate_on_func!(on_waiting "waiting");
}