Clone in a terminal:
Commit 023e4be
Johan Mattsson - 2026-06-18T00:19:08+00:00
023e4be3e32339ed2ed8cfe26bdf2bd34cdd39b5johan.mattsson.m@gmail.com

Add a function for getting a referense to a callback function

Changed files (2)

Diff

diff --git a/src/lib.rs b/src/lib.rsindex 9c3a2b5..215a8f2 100644--- a/src/lib.rs+++ b/src/lib.rs@@ -1,6 +1,6 @@ #![doc = include_str!("../README.md")] -use gloo_console::error;+use gloo_console::{error, log}; use wasm_bindgen::JsCast; use web_sys::{Element, HtmlDocument, HtmlElement, HtmlInputElement, NodeList}; @@ -247,3 +247,45 @@ pub fn set_session_cookie_value(name: &str, value: &str) -> Result<()> {      Err(Error) }++/// A callback registerd with `#[callback(someFoo)]` can ge retrieved via+/// `get_callback("someFoo")`. This is usefull for assigning the callback+/// to HTML elements without generating an HTML string.+///+/// Example:+/// ```rust+/// use web_sys::HtmlImageElement;+/// use gloo_console::log;+///+/// #[callback(taskImageLoaded)]+/// pub fn task_image_loaded_callback(event: web_sys::Event) {+///     log!("Image loaded. Processing it ...");+/// }+///+/// fn create_image() {+///     let img_element = get_element(".the-image");+///+///     if let Ok(img_element) = img_element.dyn_into::<HtmlImageElement>() {+///         let onload_callback = get_callback("taskImageLoaded");+///         img_element.set_onload(onload_callback.as_ref());+///+///         img_element.set_src("https://example.com/the-image.jpg");+///     }+/// }+/// ```+pub fn get_callback(name: &str) -> Option<js_sys::Function> {+    let window = web_sys::window()?;++    if let Ok(val) = js_sys::Reflect::get(&window, &wasm_bindgen::JsValue::from_str(name)) {+        if let Ok(func) = val.dyn_into::<js_sys::Function>() {+            return Some(func);+        } else {+            log!(+                "Not a callback function: ",+                name,+                "Did you run init_callbacks()?"+            );+        }+    }+    None+}diff --git a/src/prelude.rs b/src/prelude.rsindex 0874254..dfadf5b 100644--- a/src/prelude.rs+++ b/src/prelude.rs@@ -1,6 +1,7 @@ pub use crate::{-    get_cookie_value, get_element, get_elements, init_callbacks, inner_html, inner_text,-    try_get_value, try_inner_html, try_inner_text, CallbackRegistration, Error, InitFn, Result,+    get_callback, get_cookie_value, get_element, get_elements, init_callbacks, inner_html,+    inner_text, try_get_value, try_inner_html, try_inner_text, CallbackRegistration, Error, InitFn,+    Result, };  pub use gloo::console::error;

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112