use crate::*;
impl NativeEventName {
pub fn as_str(&self) -> String {
match self {
NativeEventName::Click => "click".to_string(),
NativeEventName::DblClick => "dblclick".to_string(),
NativeEventName::MouseDown => "mousedown".to_string(),
NativeEventName::MouseUp => "mouseup".to_string(),
NativeEventName::MouseMove => "mousemove".to_string(),
NativeEventName::MouseEnter => "mouseenter".to_string(),
NativeEventName::MouseLeave => "mouseleave".to_string(),
NativeEventName::MouseOver => "mouseover".to_string(),
NativeEventName::MouseOut => "mouseout".to_string(),
NativeEventName::ContextMenu => "contextmenu".to_string(),
NativeEventName::Input => "input".to_string(),
NativeEventName::KeyDown => "keydown".to_string(),
NativeEventName::KeyUp => "keyup".to_string(),
NativeEventName::KeyPress => "keypress".to_string(),
NativeEventName::Focus => "focus".to_string(),
NativeEventName::Blur => "blur".to_string(),
NativeEventName::FocusIn => "focusin".to_string(),
NativeEventName::FocusOut => "focusout".to_string(),
NativeEventName::Submit => "submit".to_string(),
NativeEventName::Change => "change".to_string(),
NativeEventName::Drag => "drag".to_string(),
NativeEventName::DragStart => "dragstart".to_string(),
NativeEventName::DragEnd => "dragend".to_string(),
NativeEventName::DragOver => "dragover".to_string(),
NativeEventName::DragEnter => "dragenter".to_string(),
NativeEventName::DragLeave => "dragleave".to_string(),
NativeEventName::Drop => "drop".to_string(),
NativeEventName::TouchStart => "touchstart".to_string(),
NativeEventName::TouchEnd => "touchend".to_string(),
NativeEventName::TouchMove => "touchmove".to_string(),
NativeEventName::TouchCancel => "touchcancel".to_string(),
NativeEventName::Wheel => "wheel".to_string(),
NativeEventName::Copy => "copy".to_string(),
NativeEventName::Cut => "cut".to_string(),
NativeEventName::Paste => "paste".to_string(),
NativeEventName::Play => "play".to_string(),
NativeEventName::Pause => "pause".to_string(),
NativeEventName::Ended => "ended".to_string(),
NativeEventName::LoadedData => "loadeddata".to_string(),
NativeEventName::CanPlay => "canplay".to_string(),
NativeEventName::VolumeChange => "volumechange".to_string(),
NativeEventName::TimeUpdate => "timeupdate".to_string(),
NativeEventName::HashChange => "hashchange".to_string(),
NativeEventName::EuvSignalUpdate => "__euv_signal_update__".to_string(),
NativeEventName::Other(name) => name.clone(),
}
}
}
impl std::fmt::Display for NativeEventName {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl NativeEventHandler {
pub fn new<F>(event_name: NativeEventName, callback: F) -> Self
where
F: FnMut(NativeEvent) + 'static,
{
NativeEventHandler {
event_name: event_name.as_str(),
callback: Rc::new(RefCell::new(callback)),
}
}
pub fn handle(&self, event: NativeEvent) {
let mut cb = self.get_callback().borrow_mut();
cb(event);
}
}
impl Clone for NativeEventHandler {
fn clone(&self) -> Self {
NativeEventHandler {
event_name: self.get_event_name().clone(),
callback: Rc::clone(self.get_callback()),
}
}
}
impl IntoEventAttribute for NativeEventHandler {
fn into_event_attribute(self) -> AttributeValue {
AttributeValue::Event(self)
}
}
impl IntoEventAttribute for Option<NativeEventHandler> {
fn into_event_attribute(self) -> AttributeValue {
match self {
Some(handler) => AttributeValue::Event(handler),
None => AttributeValue::Text(String::new()),
}
}
}
impl NativeInputEvent {
pub fn new(value: String, input_type: String) -> Self {
let mut event: NativeInputEvent = NativeInputEvent::default();
event.set_value(value);
event.set_input_type(input_type);
event
}
}
impl NativeFocusEvent {
pub fn new(is_focus: bool, is_blur: bool) -> Self {
let mut event: NativeFocusEvent = NativeFocusEvent::default();
event.set_is_focus(is_focus);
event.set_is_blur(is_blur);
event
}
}
impl NativeSubmitEvent {
pub fn new(submitter: Option<String>) -> Self {
let mut event: NativeSubmitEvent = NativeSubmitEvent::default();
event.set_submitter(submitter);
event
}
}
impl NativeChangeEvent {
pub fn new(value: String, checked: bool) -> Self {
let mut event: NativeChangeEvent = NativeChangeEvent::default();
event.set_value(value);
event.set_checked(checked);
event
}
}
impl NativeDragEvent {
pub fn new(client_x: i32, client_y: i32, types: Vec<String>) -> Self {
let mut event: NativeDragEvent = NativeDragEvent::default();
event.set_client_x(client_x);
event.set_client_y(client_y);
event.set_types(types);
event
}
}
impl NativeTouchEvent {
pub fn new(touches_count: u32, client_x: i32, client_y: i32) -> Self {
let mut event: NativeTouchEvent = NativeTouchEvent::default();
event.set_touches_count(touches_count);
event.set_client_x(client_x);
event.set_client_y(client_y);
event
}
}
impl NativeWheelEvent {
pub fn new(delta_x: f64, delta_y: f64, delta_mode: u32) -> Self {
let mut event: NativeWheelEvent = NativeWheelEvent::default();
event.set_delta_x(delta_x);
event.set_delta_y(delta_y);
event.set_delta_mode(delta_mode);
event
}
}
impl NativeClipboardEvent {
pub fn new(data: Option<String>) -> Self {
let mut event: NativeClipboardEvent = NativeClipboardEvent::default();
event.set_data(data);
event
}
}
impl NativeMediaEvent {
pub fn new(event_type: String) -> Self {
let mut event: NativeMediaEvent = NativeMediaEvent::default();
event.set_event_type(event_type);
event
}
}