From d113e01fe5a0c6fa839b0c2c62032455d4f07a56 Mon Sep 17 00:00:00 2001 From: Hamza Date: Fri, 29 Oct 2021 15:56:51 +0500 Subject: [PATCH 1/4] Use functions from `gloo_utils` instead of re-implementing them --- examples/dyn_create_destroy_apps/Cargo.toml | 1 + examples/dyn_create_destroy_apps/src/main.rs | 2 +- examples/futures/Cargo.toml | 1 + examples/futures/src/main.rs | 2 +- examples/inner_html/Cargo.toml | 1 + examples/inner_html/src/main.rs | 2 +- examples/mount_point/Cargo.toml | 1 + examples/mount_point/src/main.rs | 2 +- examples/two_apps/Cargo.toml | 1 + examples/two_apps/src/main.rs | 2 +- packages/yew-agent/Cargo.toml | 1 + packages/yew-agent/src/worker/mod.rs | 2 +- packages/yew-router/Cargo.toml | 1 + packages/yew-router/src/router.rs | 4 +- packages/yew-router/src/service.rs | 8 ++-- packages/yew-router/src/utils.rs | 2 +- packages/yew-router/tests/router.rs | 2 +- packages/yew-router/tests/utils.rs | 6 +-- packages/yew/Cargo.toml | 1 + packages/yew/src/app_handle.rs | 2 +- .../yew/src/functional/hooks/use_effect.rs | 4 +- packages/yew/src/functional/hooks/use_ref.rs | 2 +- packages/yew/src/html/component/lifecycle.rs | 2 +- packages/yew/src/html/component/scope.rs | 2 +- packages/yew/src/html/mod.rs | 2 +- packages/yew/src/lib.rs | 2 +- packages/yew/src/utils/mod.rs | 43 ------------------- packages/yew/src/virtual_dom/listeners.rs | 7 +-- packages/yew/src/virtual_dom/mod.rs | 6 +-- packages/yew/src/virtual_dom/vcomp.rs | 5 ++- packages/yew/src/virtual_dom/vlist.rs | 2 +- packages/yew/src/virtual_dom/vnode.rs | 2 +- packages/yew/src/virtual_dom/vtag.rs | 2 +- packages/yew/src/virtual_dom/vtext.rs | 2 +- packages/yew/tests/common/mod.rs | 4 +- packages/yew/tests/mod.rs | 2 +- packages/yew/tests/use_context.rs | 6 +-- packages/yew/tests/use_effect.rs | 8 ++-- packages/yew/tests/use_reducer.rs | 2 +- packages/yew/tests/use_ref.rs | 2 +- packages/yew/tests/use_state.rs | 6 +-- 41 files changed, 62 insertions(+), 95 deletions(-) diff --git a/examples/dyn_create_destroy_apps/Cargo.toml b/examples/dyn_create_destroy_apps/Cargo.toml index 9c4f7331f35..68b0d94979f 100644 --- a/examples/dyn_create_destroy_apps/Cargo.toml +++ b/examples/dyn_create_destroy_apps/Cargo.toml @@ -11,6 +11,7 @@ yew = { path = "../../packages/yew" } slab = "0.4.3" gloo = "0.3" wasm-bindgen = "0.2" +gloo-utils = "0.1" [dependencies.web-sys] version = "0.3.50" diff --git a/examples/dyn_create_destroy_apps/src/main.rs b/examples/dyn_create_destroy_apps/src/main.rs index f1f5173171a..622f8273db2 100644 --- a/examples/dyn_create_destroy_apps/src/main.rs +++ b/examples/dyn_create_destroy_apps/src/main.rs @@ -1,7 +1,7 @@ +use gloo_utils::document; use slab::Slab; use web_sys::Element; use yew::prelude::*; -use yew::utils::document; mod counter; diff --git a/examples/futures/Cargo.toml b/examples/futures/Cargo.toml index 4a57166fc1a..8202aa528a8 100644 --- a/examples/futures/Cargo.toml +++ b/examples/futures/Cargo.toml @@ -10,6 +10,7 @@ pulldown-cmark = { version = "0.8", default-features = false } wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" yew = { path = "../../packages/yew" } +gloo-utils = "0.1" [dependencies.web-sys] version = "0.3" diff --git a/examples/futures/src/main.rs b/examples/futures/src/main.rs index d257676e804..18c6d006f0b 100644 --- a/examples/futures/src/main.rs +++ b/examples/futures/src/main.rs @@ -50,7 +50,7 @@ async fn fetch_markdown(url: &'static str) -> Result { let request = Request::new_with_str_and_init(url, &opts)?; - let window = yew::utils::window(); + let window = gloo_utils::window(); let resp_value = JsFuture::from(window.fetch_with_request(&request)).await?; let resp: Response = resp_value.dyn_into().unwrap(); diff --git a/examples/inner_html/Cargo.toml b/examples/inner_html/Cargo.toml index 04773c7f3cb..a01639b3e6e 100644 --- a/examples/inner_html/Cargo.toml +++ b/examples/inner_html/Cargo.toml @@ -7,6 +7,7 @@ license = "MIT OR Apache-2.0" [dependencies] yew = { path = "../../packages/yew" } +gloo-utils = "0.1" [dependencies.web-sys] version = "0.3" diff --git a/examples/inner_html/src/main.rs b/examples/inner_html/src/main.rs index 8343f25efd4..9ab6992e3ee 100644 --- a/examples/inner_html/src/main.rs +++ b/examples/inner_html/src/main.rs @@ -16,7 +16,7 @@ impl Component for Model { } fn view(&self, _ctx: &Context) -> Html { - let div = yew::utils::document().create_element("div").unwrap(); + let div = gloo_utils::document().create_element("div").unwrap(); div.set_inner_html(HTML); // See console::log_1(&div); diff --git a/examples/mount_point/Cargo.toml b/examples/mount_point/Cargo.toml index cfcc0b58b7b..6c5024a4d4e 100644 --- a/examples/mount_point/Cargo.toml +++ b/examples/mount_point/Cargo.toml @@ -8,6 +8,7 @@ license = "MIT OR Apache-2.0" [dependencies] wasm-bindgen = "0.2" yew = { path = "../../packages/yew" } +gloo-utils = "0.1" [dependencies.web-sys] version = "0.3" diff --git a/examples/mount_point/src/main.rs b/examples/mount_point/src/main.rs index 631d440e59b..1eecb3d9fdc 100644 --- a/examples/mount_point/src/main.rs +++ b/examples/mount_point/src/main.rs @@ -60,7 +60,7 @@ fn create_canvas(document: &Document) -> HtmlCanvasElement { } fn main() { - let document = yew::utils::document(); + let document = gloo_utils::document(); let body = document.query_selector("body").unwrap().unwrap(); let canvas = create_canvas(&document); diff --git a/examples/two_apps/Cargo.toml b/examples/two_apps/Cargo.toml index 7fd73fa7c4e..bd1b29dfcc4 100644 --- a/examples/two_apps/Cargo.toml +++ b/examples/two_apps/Cargo.toml @@ -7,3 +7,4 @@ license = "MIT OR Apache-2.0" [dependencies] yew = { path = "../../packages/yew" } +gloo-utils = "0.1" diff --git a/examples/two_apps/src/main.rs b/examples/two_apps/src/main.rs index 9502471e25b..862bc76a324 100644 --- a/examples/two_apps/src/main.rs +++ b/examples/two_apps/src/main.rs @@ -70,7 +70,7 @@ impl Component for Model { } fn mount_app(selector: &'static str) -> AppHandle { - let document = yew::utils::document(); + let document = gloo_utils::document(); let element = document.query_selector(selector).unwrap().unwrap(); yew::start_app_in_element(element) } diff --git a/packages/yew-agent/Cargo.toml b/packages/yew-agent/Cargo.toml index 823c383ae36..cd7fdc20db7 100644 --- a/packages/yew-agent/Cargo.toml +++ b/packages/yew-agent/Cargo.toml @@ -10,6 +10,7 @@ edition = "2018" anymap2 = "0.13" bincode = "1" gloo-console = "0.1" +gloo-utils = "0.1" js-sys = "0.3" serde = { version = "1", features = ["derive"] } slab = "0.4" diff --git a/packages/yew-agent/src/worker/mod.rs b/packages/yew-agent/src/worker/mod.rs index 297ba205c2b..6777f5eeace 100644 --- a/packages/yew-agent/src/worker/mod.rs +++ b/packages/yew-agent/src/worker/mod.rs @@ -71,7 +71,7 @@ where } fn worker_new(name_of_resource: &str, is_module: bool) -> Worker { - let origin = yew::utils::origin().unwrap(); + let origin = gloo_utils::document().location().unwrap().origin().unwrap(); let script_url = format!("{}/{}", origin, name_of_resource); let wasm_url = format!("{}/{}", origin, name_of_resource.replace(".js", "_bg.wasm")); let array = Array::new(); diff --git a/packages/yew-router/Cargo.toml b/packages/yew-router/Cargo.toml index 43e1f0f23bc..4b781c660c5 100644 --- a/packages/yew-router/Cargo.toml +++ b/packages/yew-router/Cargo.toml @@ -16,6 +16,7 @@ wasm_test = [] [dependencies] yew = { path = "../yew", default-features= false } yew-router-macro = { path = "../yew-router-macro" } +gloo-utils = "0.1" wasm-bindgen = "0.2" js-sys = "0.3" diff --git a/packages/yew-router/src/router.rs b/packages/yew-router/src/router.rs index 059171f5d29..99db5efb130 100644 --- a/packages/yew-router/src/router.rs +++ b/packages/yew-router/src/router.rs @@ -80,7 +80,7 @@ where fn create(ctx: &Context) -> Self { let link = ctx.link().clone(); - let route_listener = EventListener::new(&yew::utils::window(), "popstate", move |_| { + let route_listener = EventListener::new(&gloo_utils::window(), "popstate", move |_| { link.send_message(Msg::ReRender) }); @@ -97,7 +97,7 @@ where } fn view(&self, ctx: &Context) -> Html { - let pathname = yew::utils::window().location().pathname().unwrap(); + let pathname = gloo_utils::window().location().pathname().unwrap(); let route = R::recognize(&pathname); match route { diff --git a/packages/yew-router/src/service.rs b/packages/yew-router/src/service.rs index 1c39bf29410..c36a1ffed5b 100644 --- a/packages/yew-router/src/service.rs +++ b/packages/yew-router/src/service.rs @@ -64,7 +64,7 @@ where } fn update_route_impl(url: String, push: bool) { - let history = yew::utils::window().history().expect("no history"); + let history = gloo_utils::window().history().expect("no history"); let base = base_url(); let path = match base { Some(base) => { @@ -88,7 +88,7 @@ fn update_route_impl(url: String, push: bool) { .expect("replace history"); } let event = Event::new("popstate").unwrap(); - yew::utils::window() + gloo_utils::window() .dispatch_event(&event) .expect("dispatch"); } @@ -97,7 +97,7 @@ pub fn parse_query() -> Result where T: for<'de> Deserialize<'de>, { - let query = yew::utils::document().location().unwrap().search().unwrap(); + let query = gloo_utils::document().location().unwrap().search().unwrap(); serde_urlencoded::from_str(query.strip_prefix('?').unwrap_or("")) } @@ -119,7 +119,7 @@ pub fn attach_route_listener(callback: Callback>) -> RouteListener where R: Routable + 'static, { - let listener = EventListener::new(&yew::utils::window(), "popstate", move |_| { + let listener = EventListener::new(&gloo_utils::window(), "popstate", move |_| { callback.emit(current_route()) }); diff --git a/packages/yew-router/src/utils.rs b/packages/yew-router/src/utils.rs index e6b294be5ef..c3d2dcc185f 100644 --- a/packages/yew-router/src/utils.rs +++ b/packages/yew-router/src/utils.rs @@ -22,7 +22,7 @@ pub fn base_url() -> Option { } pub fn fetch_base_url() -> Option { - match yew::utils::document().query_selector("base[href]") { + match gloo_utils::document().query_selector("base[href]") { Ok(Some(base)) => { let base = base.unchecked_into::().href(); diff --git a/packages/yew-router/tests/router.rs b/packages/yew-router/tests/router.rs index 0db3df24226..81c165f16f8 100644 --- a/packages/yew-router/tests/router.rs +++ b/packages/yew-router/tests/router.rs @@ -97,7 +97,7 @@ fn component() -> Html { // - 404 redirects #[test] fn router_works() { - yew::start_app_in_element::(yew::utils::document().get_element_by_id("output").unwrap()); + yew::start_app_in_element::(gloo_utils::document().get_element_by_id("output").unwrap()); assert_eq!("Home", obtain_result_by_id("result")); diff --git a/packages/yew-router/tests/utils.rs b/packages/yew-router/tests/utils.rs index 031c3815d10..03c60a86c1f 100644 --- a/packages/yew-router/tests/utils.rs +++ b/packages/yew-router/tests/utils.rs @@ -1,14 +1,14 @@ use wasm_bindgen::JsCast; pub fn obtain_result_by_id(id: &str) -> String { - yew::utils::document() + gloo_utils::document() .get_element_by_id(id) .expect("No result found. Most likely, the application crashed and burned") .inner_html() } pub fn click(selector: &str) { - yew::utils::document() + gloo_utils::document() .query_selector(selector) .unwrap() .unwrap() @@ -18,7 +18,7 @@ pub fn click(selector: &str) { } pub fn history_length() -> u32 { - yew::utils::window() + gloo_utils::window() .history() .expect("No history found") .length() diff --git a/packages/yew/Cargo.toml b/packages/yew/Cargo.toml index 1129976d585..868c840e15e 100644 --- a/packages/yew/Cargo.toml +++ b/packages/yew/Cargo.toml @@ -19,6 +19,7 @@ description = "A framework for making client-side single-page apps" anyhow = "1" console_error_panic_hook = "0.1" gloo = "0.3" +gloo-utils = "0.1.0" indexmap = { version = "1", features = ["std"] } js-sys = "0.3" slab = "0.4" diff --git a/packages/yew/src/app_handle.rs b/packages/yew/src/app_handle.rs index 1b0feda4dd2..8ac8cfcc8f8 100644 --- a/packages/yew/src/app_handle.rs +++ b/packages/yew/src/app_handle.rs @@ -4,7 +4,7 @@ use std::ops::Deref; use crate::html::{Component, NodeRef, Scope, Scoped}; -use crate::utils::document; +use gloo_utils::document; use std::rc::Rc; use web_sys::Element; diff --git a/packages/yew/src/functional/hooks/use_effect.rs b/packages/yew/src/functional/hooks/use_effect.rs index 6e3c2580612..4ddacc1aad8 100644 --- a/packages/yew/src/functional/hooks/use_effect.rs +++ b/packages/yew/src/functional/hooks/use_effect.rs @@ -19,10 +19,10 @@ struct UseEffect { /// let counter_one = counter.clone(); /// use_effect(move || { /// // Make a call to DOM API after component is rendered -/// yew::utils::document().set_title(&format!("You clicked {} times", *counter_one)); +/// gloo_utils::document().set_title(&format!("You clicked {} times", *counter_one)); /// /// // Perform the cleanup -/// || yew::utils::document().set_title(&format!("You clicked 0 times")) +/// || gloo_utils::document().set_title(&format!("You clicked 0 times")) /// }); /// /// let onclick = { diff --git a/packages/yew/src/functional/hooks/use_ref.rs b/packages/yew/src/functional/hooks/use_ref.rs index 4ec1ee7cfff..12a7e6782a8 100644 --- a/packages/yew/src/functional/hooks/use_ref.rs +++ b/packages/yew/src/functional/hooks/use_ref.rs @@ -21,7 +21,7 @@ use std::{cell::RefCell, rc::Rc}; /// let message_count = use_ref(|| 0); /// /// let onclick = Callback::from(move |e| { -/// let window = yew::utils::window(); +/// let window = gloo_utils::window(); /// /// if *message_count.borrow_mut() > 3 { /// window.alert_with_message("Message limit reached"); diff --git a/packages/yew/src/html/component/lifecycle.rs b/packages/yew/src/html/component/lifecycle.rs index 86a4267ae2f..49931d551c2 100644 --- a/packages/yew/src/html/component/lifecycle.rs +++ b/packages/yew/src/html/component/lifecycle.rs @@ -322,7 +322,7 @@ mod tests { } fn test_lifecycle(props: Props, expected: &[&str]) { - let document = crate::utils::document(); + let document = gloo_utils::document(); let scope = Scope::::new(None); let el = document.create_element("div").unwrap(); let lifecycle = props.lifecycle.clone(); diff --git a/packages/yew/src/html/component/scope.rs b/packages/yew/src/html/component/scope.rs index c491640d43f..ef88d11ad1d 100644 --- a/packages/yew/src/html/component/scope.rs +++ b/packages/yew/src/html/component/scope.rs @@ -11,8 +11,8 @@ use crate::callback::Callback; use crate::context::{ContextHandle, ContextProvider}; use crate::html::NodeRef; use crate::scheduler::{self, Shared}; -use crate::utils::document; use crate::virtual_dom::{insert_node, VNode}; +use gloo_utils::document; use std::any::{Any, TypeId}; use std::cell::{Ref, RefCell}; use std::future::Future; diff --git a/packages/yew/src/html/mod.rs b/packages/yew/src/html/mod.rs index e3b93d1ec44..91caebda302 100644 --- a/packages/yew/src/html/mod.rs +++ b/packages/yew/src/html/mod.rs @@ -139,7 +139,7 @@ impl NodeRef { #[cfg(test)] mod tests { use super::*; - use crate::utils::document; + use gloo_utils::document; #[cfg(feature = "wasm_test")] use wasm_bindgen_test::{wasm_bindgen_test as test, wasm_bindgen_test_configure}; diff --git a/packages/yew/src/lib.rs b/packages/yew/src/lib.rs index 33cec405859..c74520153cb 100644 --- a/packages/yew/src/lib.rs +++ b/packages/yew/src/lib.rs @@ -352,7 +352,7 @@ where COMP: Component, { start_app_with_props_in_element( - crate::utils::document() + gloo_utils::document() .body() .expect("no body node found") .into(), diff --git a/packages/yew/src/utils/mod.rs b/packages/yew/src/utils/mod.rs index 15ae37684d7..29e9a8874f0 100644 --- a/packages/yew/src/utils/mod.rs +++ b/packages/yew/src/utils/mod.rs @@ -1,51 +1,8 @@ //! This module contains useful utilities to get information about the current document. use std::marker::PhantomData; - -use anyhow::{anyhow, Error}; -use web_sys::{Document, Window}; - use yew::html::ChildrenRenderer; -/// Returns the current window. This function will panic if there is no available window. -pub fn window() -> Window { - web_sys::window().expect("no window available") -} - -/// Returns the current document. -pub fn document() -> Document { - window().document().unwrap() -} - -/// Returns the `host` for the current document. Useful for connecting to the server which serves -/// the app. -pub fn host() -> Result { - let location = document() - .location() - .ok_or_else(|| anyhow!("can't get location"))?; - - let host = location.host().map_err(|e| { - anyhow!(e - .as_string() - .unwrap_or_else(|| String::from("error not recoverable")),) - })?; - - Ok(host) -} - -/// Returns the `origin` of the current window. -pub fn origin() -> Result { - let location = window().location(); - - let origin = location.origin().map_err(|e| { - anyhow!(e - .as_string() - .unwrap_or_else(|| String::from("error not recoverable")),) - })?; - - Ok(origin) -} - /// Map IntoIterator> to Iterator pub fn into_node_iter(it: IT) -> impl Iterator where diff --git a/packages/yew/src/virtual_dom/listeners.rs b/packages/yew/src/virtual_dom/listeners.rs index 3c13f369086..5b3099e9fb2 100644 --- a/packages/yew/src/virtual_dom/listeners.rs +++ b/packages/yew/src/virtual_dom/listeners.rs @@ -15,7 +15,7 @@ thread_local! { static LISTENER_ID_PROP: wasm_bindgen::JsValue = "__yew_listener_id".into(); /// Cached reference to the document body - static BODY: web_sys::HtmlElement = crate::utils::document().body().unwrap(); + static BODY: web_sys::HtmlElement = gloo_utils::document().body().unwrap(); } /// Bubble events during delegation @@ -526,7 +526,8 @@ mod tests { use web_sys::{Event, EventInit}; wasm_bindgen_test_configure!(run_in_browser); - use crate::{html, html::TargetCast, utils::document, AppHandle, Component, Context, Html}; + use crate::{html, html::TargetCast, AppHandle, Component, Context, Html}; + use gloo_utils::document; use wasm_bindgen::JsCast; use wasm_bindgen_futures::JsFuture; @@ -665,7 +666,7 @@ mod tests { async fn await_animation_frame() { JsFuture::from(js_sys::Promise::new(&mut |resolve, _| { - crate::utils::window() + gloo_utils::window() .request_animation_frame(&resolve) .unwrap(); })) diff --git a/packages/yew/src/virtual_dom/mod.rs b/packages/yew/src/virtual_dom/mod.rs index 04d3f831193..b8e001365c3 100644 --- a/packages/yew/src/virtual_dom/mod.rs +++ b/packages/yew/src/virtual_dom/mod.rs @@ -286,7 +286,7 @@ impl Apply for Attributes { } macro_rules! set { ($new:expr) => { - Self::set_attribute(el, key!(), $new); + Self::set_attribute(el, key!(), $new) }; } @@ -417,7 +417,7 @@ mod layout_tests { } pub(crate) fn diff_layouts(layouts: Vec>) { - let document = crate::utils::document(); + let document = gloo_utils::document(); let parent_scope: AnyScope = Scope::::new(None).into(); let parent_element = document.create_element("div").unwrap(); let parent_node: Node = parent_element.clone().into(); @@ -542,7 +542,7 @@ mod benchmarks { { let mut old = $old.clone(); let new = $new.clone(); - let el = crate::utils::document().create_element("div").unwrap(); + let el = gloo_utils::document().create_element("div").unwrap(); old.apply(&el); ( format!("{} -> {}", attr_variant(&old), attr_variant(&new)), diff --git a/packages/yew/src/virtual_dom/vcomp.rs b/packages/yew/src/virtual_dom/vcomp.rs index ae33995e4b7..df21da5111a 100644 --- a/packages/yew/src/virtual_dom/vcomp.rs +++ b/packages/yew/src/virtual_dom/vcomp.rs @@ -281,7 +281,8 @@ impl fmt::Debug for VChild { #[cfg(test)] mod tests { use super::*; - use crate::{html, utils::document, Children, Component, Context, Html, NodeRef, Properties}; + use crate::{html, Children, Component, Context, Html, NodeRef, Properties}; + use gloo_utils::document; use web_sys::Node; #[cfg(feature = "wasm_test")] @@ -319,7 +320,7 @@ mod tests { #[test] fn update_loop() { - let document = crate::utils::document(); + let document = gloo_utils::document(); let parent_scope: AnyScope = crate::html::Scope::::new(None).into(); let parent_element = document.create_element("div").unwrap(); diff --git a/packages/yew/src/virtual_dom/vlist.rs b/packages/yew/src/virtual_dom/vlist.rs index 6d43c02e6a4..001c42fde61 100644 --- a/packages/yew/src/virtual_dom/vlist.rs +++ b/packages/yew/src/virtual_dom/vlist.rs @@ -513,7 +513,7 @@ mod layout_tests_keys { fn diff() { let mut layouts = vec![]; - let vref_node: Node = crate::utils::document().create_element("i").unwrap().into(); + let vref_node: Node = gloo_utils::document().create_element("i").unwrap().into(); layouts.push(TestLayout { name: "All VNode types as children", node: html! { diff --git a/packages/yew/src/virtual_dom/vnode.rs b/packages/yew/src/virtual_dom/vnode.rs index 518b86a2760..bdcec4a2f87 100644 --- a/packages/yew/src/virtual_dom/vnode.rs +++ b/packages/yew/src/virtual_dom/vnode.rs @@ -256,7 +256,7 @@ mod layout_tests { #[test] fn diff() { - let document = crate::utils::document(); + let document = gloo_utils::document(); let vref_node_1 = VNode::VRef(document.create_element("i").unwrap().into()); let vref_node_2 = VNode::VRef(document.create_element("b").unwrap().into()); diff --git a/packages/yew/src/virtual_dom/vtag.rs b/packages/yew/src/virtual_dom/vtag.rs index ad30b4c6d01..03ec65580fd 100644 --- a/packages/yew/src/virtual_dom/vtag.rs +++ b/packages/yew/src/virtual_dom/vtag.rs @@ -2,8 +2,8 @@ use super::{Apply, AttrValue, Attributes, Key, Listener, Listeners, VDiff, VList, VNode}; use crate::html::{AnyScope, IntoPropValue, NodeRef}; -use crate::utils::document; use gloo::console; +use gloo_utils::document; use std::borrow::Cow; use std::cmp::PartialEq; use std::hint::unreachable_unchecked; diff --git a/packages/yew/src/virtual_dom/vtext.rs b/packages/yew/src/virtual_dom/vtext.rs index 6848aaac418..c6f8aa658ab 100644 --- a/packages/yew/src/virtual_dom/vtext.rs +++ b/packages/yew/src/virtual_dom/vtext.rs @@ -2,8 +2,8 @@ use super::{AttrValue, VDiff, VNode}; use crate::html::{AnyScope, NodeRef}; -use crate::utils::document; use gloo::console; +use gloo_utils::document; use std::cmp::PartialEq; use web_sys::{Element, Text as TextNode}; diff --git a/packages/yew/tests/common/mod.rs b/packages/yew/tests/common/mod.rs index 0dc2efb2247..8da829ab7d3 100644 --- a/packages/yew/tests/common/mod.rs +++ b/packages/yew/tests/common/mod.rs @@ -1,14 +1,14 @@ #![allow(dead_code)] pub fn obtain_result() -> String { - yew::utils::document() + gloo_utils::document() .get_element_by_id("result") .expect("No result found. Most likely, the application crashed and burned") .inner_html() } pub fn obtain_result_by_id(id: &str) -> String { - yew::utils::document() + gloo_utils::document() .get_element_by_id(id) .expect("No result found. Most likely, the application crashed and burned") .inner_html() diff --git a/packages/yew/tests/mod.rs b/packages/yew/tests/mod.rs index 48e9b04a79d..ef98943a984 100644 --- a/packages/yew/tests/mod.rs +++ b/packages/yew/tests/mod.rs @@ -28,7 +28,7 @@ fn props_are_passed() { } type PropsComponent = FunctionComponent; yew::start_app_with_props_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), PropsPassedFunctionProps { value: "props".to_string(), }, diff --git a/packages/yew/tests/use_context.rs b/packages/yew/tests/use_context.rs index c00bf243deb..8d339f3b28d 100644 --- a/packages/yew/tests/use_context.rs +++ b/packages/yew/tests/use_context.rs @@ -73,7 +73,7 @@ fn use_context_scoping_works() { } yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result: String = obtain_result_by_id("result"); assert_eq!("correct", result); @@ -165,7 +165,7 @@ fn use_context_works_with_multiple_types() { type TestComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); } @@ -276,7 +276,7 @@ fn use_context_update_works() { type TestComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); // 1 initial render + 3 update steps diff --git a/packages/yew/tests/use_effect.rs b/packages/yew/tests/use_effect.rs index 244ba9bc502..2c655569b6d 100644 --- a/packages/yew/tests/use_effect.rs +++ b/packages/yew/tests/use_effect.rs @@ -72,7 +72,7 @@ fn use_effect_destroys_on_component_drop() { let destroy_counter = Rc::new(std::cell::RefCell::new(0)); let destroy_counter_c = destroy_counter.clone(); yew::start_app_with_props_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), WrapperProps { destroy_called: Rc::new(move || *destroy_counter_c.borrow_mut().deref_mut() += 1), }, @@ -112,7 +112,7 @@ fn use_effect_works_many_times() { type UseEffectComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); assert_eq!(result.as_str(), "4"); @@ -147,7 +147,7 @@ fn use_effect_works_once() { } type UseEffectComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); assert_eq!(result.as_str(), "1"); @@ -195,7 +195,7 @@ fn use_effect_refires_on_dependency_change() { } type UseEffectComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result: String = obtain_result(); diff --git a/packages/yew/tests/use_reducer.rs b/packages/yew/tests/use_reducer.rs index 411232dadfd..d4446ffa384 100644 --- a/packages/yew/tests/use_reducer.rs +++ b/packages/yew/tests/use_reducer.rs @@ -47,7 +47,7 @@ fn use_reducer_works() { } type UseReducerComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); diff --git a/packages/yew/tests/use_ref.rs b/packages/yew/tests/use_ref.rs index 396e34764e8..6a14cd8309d 100644 --- a/packages/yew/tests/use_ref.rs +++ b/packages/yew/tests/use_ref.rs @@ -32,7 +32,7 @@ fn use_ref_works() { } type UseRefComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); diff --git a/packages/yew/tests/use_state.rs b/packages/yew/tests/use_state.rs index c3de10416f8..44e3934036b 100644 --- a/packages/yew/tests/use_state.rs +++ b/packages/yew/tests/use_state.rs @@ -29,7 +29,7 @@ fn use_state_works() { } type UseComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); assert_eq!(result.as_str(), "5"); @@ -74,7 +74,7 @@ fn multiple_use_state_setters() { } type UseComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); assert_eq!(result.as_str(), "11"); @@ -108,7 +108,7 @@ fn use_state_handle_set_neq_works() { } type UseComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + gloo_utils::document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); assert_eq!(result.as_str(), "1"); From 595d8b646825af669f137243f06522af3d151736 Mon Sep 17 00:00:00 2001 From: Hamza Date: Fri, 29 Oct 2021 15:58:54 +0500 Subject: [PATCH 2/4] Remove `anyhow` dependency --- packages/yew/Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/yew/Cargo.toml b/packages/yew/Cargo.toml index 868c840e15e..d1e2ba4a22f 100644 --- a/packages/yew/Cargo.toml +++ b/packages/yew/Cargo.toml @@ -16,7 +16,6 @@ categories = ["gui", "wasm", "web-programming"] description = "A framework for making client-side single-page apps" [dependencies] -anyhow = "1" console_error_panic_hook = "0.1" gloo = "0.3" gloo-utils = "0.1.0" From 4446ed98d42f7eb0f1afc4d46da7ae27f3249142 Mon Sep 17 00:00:00 2001 From: Hamza Date: Fri, 29 Oct 2021 16:09:58 +0500 Subject: [PATCH 3/4] fix errors --- packages/website-test/Cargo.toml | 1 + packages/yew-router/src/utils.rs | 2 +- .../docs/concepts/function-components/pre-defined-hooks.md | 6 +++--- website/docs/concepts/html/elements.md | 5 ++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/website-test/Cargo.toml b/packages/website-test/Cargo.toml index 9e184ef34b6..2abcc028d41 100644 --- a/packages/website-test/Cargo.toml +++ b/packages/website-test/Cargo.toml @@ -12,6 +12,7 @@ yew-agent = { path = "../../packages/yew-agent/" } boolinator = "2.4" derive_more = "0.99" gloo-events = "0.1" +gloo-utils = "0.1" js-sys = "0.3" wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" diff --git a/packages/yew-router/src/utils.rs b/packages/yew-router/src/utils.rs index c3d2dcc185f..2f1d284825d 100644 --- a/packages/yew-router/src/utils.rs +++ b/packages/yew-router/src/utils.rs @@ -43,10 +43,10 @@ pub fn fetch_base_url() -> Option { #[cfg(test)] mod tests { + use gloo_utils::document; use serde::Serialize; use std::collections::HashMap; use wasm_bindgen_test::wasm_bindgen_test as test; - use yew::utils::*; use yew_router::parse_query; use yew_router::prelude::*; use yew_router::utils::*; diff --git a/website/docs/concepts/function-components/pre-defined-hooks.md b/website/docs/concepts/function-components/pre-defined-hooks.md index ec064db4f1f..05d59fea554 100644 --- a/website/docs/concepts/function-components/pre-defined-hooks.md +++ b/website/docs/concepts/function-components/pre-defined-hooks.md @@ -62,7 +62,7 @@ fn ref_hook() -> Html { let message_count = use_ref(|| 0); let onclick = Callback::from(move |_| { - let window = yew::utils::window(); + let window = gloo_utils::window(); if *message_count.borrow_mut() > 3 { window.alert_with_message("Message limit reached").unwrap(); @@ -213,10 +213,10 @@ fn effect() -> Html { let counter = counter.clone(); use_effect(move || { // Make a call to DOM API after component is rendered - yew::utils::document().set_title(&format!("You clicked {} times", *counter)); + gloo_utils::document().set_title(&format!("You clicked {} times", *counter)); // Perform the cleanup - || yew::utils::document().set_title("You clicked 0 times") + || gloo_utils::document().set_title("You clicked 0 times") }); } let onclick = { diff --git a/website/docs/concepts/html/elements.md b/website/docs/concepts/html/elements.md index d1f84dad5bc..ab0a71e0daf 100644 --- a/website/docs/concepts/html/elements.md +++ b/website/docs/concepts/html/elements.md @@ -13,9 +13,8 @@ used as a `Html` value using `VRef`: ```rust use web_sys::{Element, Node}; -use yew::{ - Component, Context, html, Html, utils::document, -}; +use yew::{Component, Context, html, Html}; +use gloo_utils::document; struct Comp; From ff211e300ebd528cb32f9a47ad89680afed3bb51 Mon Sep 17 00:00:00 2001 From: Hamza Date: Thu, 11 Nov 2021 17:04:01 +0500 Subject: [PATCH 4/4] review + post merge fixes --- packages/yew-agent/src/worker/mod.rs | 8 ++++++-- packages/yew-router/src/history.rs | 2 +- packages/yew-router/src/utils.rs | 1 - packages/yew/tests/use_reducer.rs | 11 ++++++----- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/yew-agent/src/worker/mod.rs b/packages/yew-agent/src/worker/mod.rs index 6777f5eeace..7a932931300 100644 --- a/packages/yew-agent/src/worker/mod.rs +++ b/packages/yew-agent/src/worker/mod.rs @@ -8,7 +8,7 @@ pub use public::Public; use super::*; use js_sys::{Array, Reflect, Uint8Array}; use serde::{Deserialize, Serialize}; -use wasm_bindgen::{closure::Closure, JsCast, JsValue}; +use wasm_bindgen::{closure::Closure, JsCast, JsValue, UnwrapThrowExt}; use web_sys::{ Blob, BlobPropertyBag, DedicatedWorkerGlobalScope, MessageEvent, Url, Worker, WorkerOptions, }; @@ -71,7 +71,11 @@ where } fn worker_new(name_of_resource: &str, is_module: bool) -> Worker { - let origin = gloo_utils::document().location().unwrap().origin().unwrap(); + let origin = gloo_utils::document() + .location() + .unwrap_throw() + .origin() + .unwrap_throw(); let script_url = format!("{}/{}", origin, name_of_resource); let wasm_url = format!("{}/{}", origin, name_of_resource.replace(".js", "_bg.wasm")); let array = Array::new(); diff --git a/packages/yew-router/src/history.rs b/packages/yew-router/src/history.rs index e75b7bc171b..fd4d0c9e970 100644 --- a/packages/yew-router/src/history.rs +++ b/packages/yew-router/src/history.rs @@ -5,12 +5,12 @@ use std::cell::RefCell; use std::rc::{Rc, Weak}; use gloo::events::EventListener; +use gloo_utils::window; use serde::de::DeserializeOwned; use serde::Serialize; use thiserror::Error; use wasm_bindgen::{JsValue, UnwrapThrowExt}; use yew::callback::Callback; -use yew::utils::window; use crate::utils::base_url; use crate::Routable; diff --git a/packages/yew-router/src/utils.rs b/packages/yew-router/src/utils.rs index 56e9a04d377..bae8e68fa5d 100644 --- a/packages/yew-router/src/utils.rs +++ b/packages/yew-router/src/utils.rs @@ -45,7 +45,6 @@ pub fn fetch_base_url() -> Option { mod tests { use gloo_utils::document; use wasm_bindgen_test::wasm_bindgen_test as test; - use yew::utils::*; use yew_router::prelude::*; use yew_router::utils::*; diff --git a/packages/yew/tests/use_reducer.rs b/packages/yew/tests/use_reducer.rs index 785b4067c1a..50c0ab0241b 100644 --- a/packages/yew/tests/use_reducer.rs +++ b/packages/yew/tests/use_reducer.rs @@ -1,6 +1,7 @@ use std::collections::HashSet; use std::rc::Rc; +use gloo_utils::document; use wasm_bindgen::JsCast; use wasm_bindgen_test::*; use web_sys::HtmlElement; @@ -116,13 +117,13 @@ fn use_reducer_eq_works() { } type UseReducerComponent = FunctionComponent; yew::start_app_in_element::( - yew::utils::document().get_element_by_id("output").unwrap(), + document().get_element_by_id("output").unwrap(), ); let result = obtain_result(); assert_eq!(result.as_str(), "1"); - yew::utils::document() + document() .get_element_by_id("add-a") .unwrap() .unchecked_into::() @@ -131,7 +132,7 @@ fn use_reducer_eq_works() { let result = obtain_result(); assert_eq!(result.as_str(), "2"); - yew::utils::document() + document() .get_element_by_id("add-a") .unwrap() .unchecked_into::() @@ -140,7 +141,7 @@ fn use_reducer_eq_works() { let result = obtain_result(); assert_eq!(result.as_str(), "2"); - yew::utils::document() + document() .get_element_by_id("add-b") .unwrap() .unchecked_into::() @@ -149,7 +150,7 @@ fn use_reducer_eq_works() { let result = obtain_result(); assert_eq!(result.as_str(), "3"); - yew::utils::document() + document() .get_element_by_id("add-b") .unwrap() .unchecked_into::()