use crate::*;
pub(crate) fn use_keyboard_event() -> UseKeyboardEvent {
let mut state: UseKeyboardEvent = UseKeyboardEvent::default();
state.set_last_key(use_signal(|| "None".to_string()));
state.set_last_key_code(use_signal(|| "None".to_string()));
state.set_last_key_up(use_signal(|| "None".to_string()));
state.set_key_repeat(use_signal(|| false));
state.set_modifier(use_signal(|| "None".to_string()));
state
}
pub(crate) fn use_mouse_event() -> UseMouseEvent {
let mut state: UseMouseEvent = UseMouseEvent::default();
state.set_click_count(use_signal(|| 0));
state.set_double_click_count(use_signal(|| 0));
state.set_mouse_pos(use_signal(|| "(0, 0)".to_string()));
state.set_mouse_screen_pos(use_signal(|| "(0, 0)".to_string()));
state.set_mouse_button(use_signal(|| "None".to_string()));
state.set_mouse_buttons(use_signal(|| "0".to_string()));
state.set_mouse_enter_count(use_signal(|| 0));
state.set_mouse_leave_count(use_signal(|| 0));
state.set_mouse_over_count(use_signal(|| 0));
state.set_mouse_out_count(use_signal(|| 0));
state.set_mouse_down_count(use_signal(|| 0));
state.set_mouse_up_count(use_signal(|| 0));
state
}
pub(crate) fn use_focus_event() -> UseFocusEvent {
let mut state: UseFocusEvent = UseFocusEvent::default();
state.set_focus_status(use_signal(|| "Not focused".to_string()));
state.set_focus_in_count(use_signal(|| 0));
state.set_focus_out_count(use_signal(|| 0));
state
}
pub(crate) fn use_drag_event() -> UseDragEvent {
let mut state: UseDragEvent = UseDragEvent::default();
state.set_drag_status(use_signal(|| "Idle".to_string()));
state.set_drag_pos(use_signal(|| "(-, -)".to_string()));
state.set_drag_types(use_signal(|| "None".to_string()));
state.set_drag_enter_counter(use_signal(|| 0));
state.set_drag_pending_pos(use_signal(String::new));
state.set_drag_raf_id(use_signal(|| -1));
state
}
pub(crate) fn use_wheel_event() -> UseWheelEvent {
let mut state: UseWheelEvent = UseWheelEvent::default();
state.set_wheel_delta(use_signal(|| "(0, 0)".to_string()));
state.set_wheel_total(use_signal(|| 0.0));
state
}
pub(crate) fn use_clipboard_event() -> UseClipboardEvent {
let mut state: UseClipboardEvent = UseClipboardEvent::default();
state.set_clipboard_data(use_signal(|| "None".to_string()));
state.set_clipboard_event_type(use_signal(|| "None".to_string()));
state
}
pub(crate) fn use_touch_event() -> UseTouchEvent {
let mut state: UseTouchEvent = UseTouchEvent::default();
state.set_touch_info(use_signal(|| "No touch".to_string()));
state
}
pub(crate) fn use_form_event() -> UseFormEvent {
let mut state: UseFormEvent = UseFormEvent::default();
state.set_form_input_value(use_signal(String::new));
state.set_form_change_value(use_signal(|| "None".to_string()));
state.set_form_checkbox(use_signal(|| false));
state.set_form_select_value(use_signal(|| "None".to_string()));
state.set_submit_count(use_signal(|| 0));
state
}
pub(crate) fn use_media_event() -> UseMediaEvent {
let mut state: UseMediaEvent = UseMediaEvent::default();
state.set_media_status(use_signal(|| "Not started".to_string()));
state.set_media_event_log(use_signal(|| "None".to_string()));
state
}
pub(crate) fn use_video_event() -> UseVideoEvent {
let mut state: UseVideoEvent = UseVideoEvent::default();
state.set_video_status(use_signal(|| "Not loaded".to_string()));
state.set_video_event_log(use_signal(|| "None".to_string()));
state.set_video_current_time(use_signal(|| "0.00".to_string()));
state.set_video_duration(use_signal(|| "0.00".to_string()));
state.set_video_buffered(use_signal(|| "0%".to_string()));
state.set_video_playback_rate(use_signal(|| "1.0".to_string()));
state
}
pub(crate) fn use_image_event() -> UseImageEvent {
let mut state: UseImageEvent = UseImageEvent::default();
state.set_image_status(use_signal(|| "Not loaded".to_string()));
state.set_image_event_log(use_signal(|| "None".to_string()));
state.set_image_natural_size(use_signal(|| "N/A".to_string()));
state
}
pub(crate) fn current_url_without_params() -> String {
let window: Window = window().expect("no global window exists");
let location: Location = window.location();
let origin: String = location
.origin()
.unwrap_or_else(|_error: JsValue| "Unknown".to_string());
let pathname: String = location
.pathname()
.unwrap_or_else(|_error: JsValue| "/".to_string());
format!("{origin}{pathname}")
}
fn encode_svg_for_data_url(raw: &str) -> String {
raw.chars()
.map(|character: char| match character {
'%' | '#' | '"' | '\'' | '<' | '>' | '&' | '{' | '}' => {
format!("%{:02X}", character as u8)
}
_ => character.to_string(),
})
.collect()
}
pub(crate) fn generate_qr_code_data_url(content: &str) -> String {
let code: QrCode = QrCode::new(content).unwrap_or_else(|_| QrCode::new("error").unwrap());
let svg_string: String = code
.render::<svg::Color>()
.min_dimensions(QR_CODE_MIN_DIMENSION, QR_CODE_MIN_DIMENSION)
.quiet_zone(false)
.build();
let encoded_svg: String = encode_svg_for_data_url(&svg_string);
format!("{SVG_DATA_URL_PREFIX}{encoded_svg}")
}