From 6b83c00d1c94159f1bff474a790bc8ebbd795bc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Sat, 3 Aug 2019 00:12:49 +0200 Subject: [PATCH 1/3] Stop appending canvas to document in web platform --- src/platform_impl/web/stdweb/canvas.rs | 5 ----- src/platform_impl/web/web_sys/canvas.rs | 6 ------ 2 files changed, 11 deletions(-) diff --git a/src/platform_impl/web/stdweb/canvas.rs b/src/platform_impl/web/stdweb/canvas.rs index 14194858f7..d29e884de6 100644 --- a/src/platform_impl/web/stdweb/canvas.rs +++ b/src/platform_impl/web/stdweb/canvas.rs @@ -49,11 +49,6 @@ impl Canvas { .try_into() .map_err(|_| os_error!(OsError("Failed to create canvas element".to_owned())))?; - document() - .body() - .ok_or_else(|| os_error!(OsError("Failed to find body node".to_owned())))? - .append_child(&canvas); - // TODO: Set up unique ids canvas .set_attribute("tabindex", "0") diff --git a/src/platform_impl/web/web_sys/canvas.rs b/src/platform_impl/web/web_sys/canvas.rs index 4e435aafad..1be23a6d57 100644 --- a/src/platform_impl/web/web_sys/canvas.rs +++ b/src/platform_impl/web/web_sys/canvas.rs @@ -42,12 +42,6 @@ impl Canvas { .map_err(|_| os_error!(OsError("Failed to create canvas element".to_owned())))? .unchecked_into(); - document - .body() - .ok_or_else(|| os_error!(OsError("Failed to find body node".to_owned())))? - .append_child(&canvas) - .map_err(|_| os_error!(OsError("Failed to append canvas".to_owned())))?; - // TODO: Set up unique ids canvas .set_attribute("tabindex", "0") From 99102979d0864371836dc462cf01eb73aa10837e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Sat, 3 Aug 2019 00:14:31 +0200 Subject: [PATCH 2/3] Remove `tabindex` TODO in web backend --- src/platform_impl/web/stdweb/canvas.rs | 6 +++++- src/platform_impl/web/web_sys/canvas.rs | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/platform_impl/web/stdweb/canvas.rs b/src/platform_impl/web/stdweb/canvas.rs index d29e884de6..67aa8c4874 100644 --- a/src/platform_impl/web/stdweb/canvas.rs +++ b/src/platform_impl/web/stdweb/canvas.rs @@ -49,7 +49,11 @@ impl Canvas { .try_into() .map_err(|_| os_error!(OsError("Failed to create canvas element".to_owned())))?; - // TODO: Set up unique ids + // A tabindex is needed in order to capture local keyboard events. + // A "0" value means that the element should be focusable in + // sequential keyboard navigation, but its order is defined by the + // document's source order. + // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex canvas .set_attribute("tabindex", "0") .expect("Failed to set a tabindex"); diff --git a/src/platform_impl/web/web_sys/canvas.rs b/src/platform_impl/web/web_sys/canvas.rs index 1be23a6d57..9f93e0bd1c 100644 --- a/src/platform_impl/web/web_sys/canvas.rs +++ b/src/platform_impl/web/web_sys/canvas.rs @@ -42,7 +42,11 @@ impl Canvas { .map_err(|_| os_error!(OsError("Failed to create canvas element".to_owned())))? .unchecked_into(); - // TODO: Set up unique ids + // A tabindex is needed in order to capture local keyboard events. + // A "0" value means that the element should be focusable in + // sequential keyboard navigation, but its order is defined by the + // document's source order. + // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex canvas .set_attribute("tabindex", "0") .expect("Failed to set a tabindex"); From 88e2d879e088e2cdb652ef3070e4583118b45e82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ram=C3=B3n=20Jim=C3=A9nez?= Date: Sat, 3 Aug 2019 00:17:27 +0200 Subject: [PATCH 3/3] Return `OsError` instead of panicking on web canvas creation --- src/platform_impl/web/stdweb/canvas.rs | 2 +- src/platform_impl/web/web_sys/canvas.rs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/platform_impl/web/stdweb/canvas.rs b/src/platform_impl/web/stdweb/canvas.rs index 67aa8c4874..1cd99e7e10 100644 --- a/src/platform_impl/web/stdweb/canvas.rs +++ b/src/platform_impl/web/stdweb/canvas.rs @@ -56,7 +56,7 @@ impl Canvas { // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex canvas .set_attribute("tabindex", "0") - .expect("Failed to set a tabindex"); + .map_err(|_| os_error!(OsError("Failed to set a tabindex".to_owned())))?; Ok(Canvas { raw: canvas, diff --git a/src/platform_impl/web/web_sys/canvas.rs b/src/platform_impl/web/web_sys/canvas.rs index 9f93e0bd1c..39a17e5bcf 100644 --- a/src/platform_impl/web/web_sys/canvas.rs +++ b/src/platform_impl/web/web_sys/canvas.rs @@ -34,8 +34,12 @@ impl Canvas { where F: 'static + Fn(), { - let window = web_sys::window().expect("Failed to obtain window"); - let document = window.document().expect("Failed to obtain document"); + let window = + web_sys::window().ok_or(os_error!(OsError("Failed to obtain window".to_owned())))?; + + let document = window + .document() + .ok_or(os_error!(OsError("Failed to obtain document".to_owned())))?; let canvas: HtmlCanvasElement = document .create_element("canvas") @@ -49,7 +53,7 @@ impl Canvas { // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex canvas .set_attribute("tabindex", "0") - .expect("Failed to set a tabindex"); + .map_err(|_| os_error!(OsError("Failed to set a tabindex".to_owned())))?; Ok(Canvas { raw: canvas,