diff --git a/packages/dom/src/lib.rs b/packages/dom/src/lib.rs index 9c914cb..e128e78 100644 --- a/packages/dom/src/lib.rs +++ b/packages/dom/src/lib.rs @@ -11,6 +11,7 @@ mod pretty_dom; pub mod queries; pub mod query_helpers; mod role_helpers; +mod screen; mod suggestions; mod types; mod util; @@ -30,6 +31,7 @@ pub use role_helpers::{ GetRolesOptions, PrettyRolesOptions, get_implicit_aria_roles, get_roles, is_inaccessible, log_roles, }; +pub use screen::*; pub use suggestions::*; pub use types::*; pub use wait_for::*; diff --git a/packages/dom/src/pretty_dom.rs b/packages/dom/src/pretty_dom.rs index ba0896f..74d42d7 100644 --- a/packages/dom/src/pretty_dom.rs +++ b/packages/dom/src/pretty_dom.rs @@ -86,3 +86,8 @@ pub fn pretty_dom(dom: Option, max_length: Option) -> debug_content } } + +pub fn log_dom(dom: Option, max_length: Option) { + // TODO: User code frame. + log::info!("{}", pretty_dom(dom, max_length)); +} diff --git a/packages/dom/src/screen.rs b/packages/dom/src/screen.rs new file mode 100644 index 0000000..ab25b9e --- /dev/null +++ b/packages/dom/src/screen.rs @@ -0,0 +1,35 @@ +use std::ops::Deref; + +use web_sys::window; + +use crate::{BoundFunctions, DocumentOrElement, get_queries_for_element, log_dom}; + +pub struct Screen(BoundFunctions); + +impl Screen { + pub fn debug(&self, elements: Option>, max_length: Option) { + if let Some(elements) = elements { + for element in elements { + log_dom(Some(element), max_length); + } + } else { + log_dom(None, max_length); + } + } +} + +impl Deref for Screen { + type Target = BoundFunctions; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +pub fn screen() -> Screen { + let body = window() + .and_then(|window| window.document()) + .and_then(|document| document.body()) + .expect("For queries bound to document.body a global document has to be available."); + Screen(get_queries_for_element(body)) +}