Reimplement menu() in web-sys
This commit is contained in:
parent
0b8b1bf25f
commit
db581a955b
30
Cargo.lock
generated
30
Cargo.lock
generated
@ -1929,9 +1929,9 @@ checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.46"
|
version = "0.3.47"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175"
|
checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
@ -3013,6 +3013,8 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
"stdweb",
|
"stdweb",
|
||||||
"stdweb-internal-runtime",
|
"stdweb-internal-runtime",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"web-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -5181,9 +5183,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e"
|
checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"serde 1.0.118",
|
"serde 1.0.118",
|
||||||
@ -5193,9 +5195,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62"
|
checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
@ -5220,9 +5222,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084"
|
checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote 1.0.8",
|
"quote 1.0.8",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
@ -5230,9 +5232,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549"
|
checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.24",
|
"proc-macro2 1.0.24",
|
||||||
"quote 1.0.8",
|
"quote 1.0.8",
|
||||||
@ -5243,15 +5245,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158"
|
checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "web-sys"
|
name = "web-sys"
|
||||||
version = "0.3.46"
|
version = "0.3.47"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "222b1ef9334f92a21d3fb53dc3fd80f30836959a90f9274a626d7e06315ba3c3"
|
checksum = "c40dc691fc48003eba817c38da7113c15698142da971298003cac3ef175680b3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
|
@ -17,3 +17,15 @@ lazy_static = "1.3"
|
|||||||
serde = "1.0"
|
serde = "1.0"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
wasm-bindgen = "0.2.70"
|
wasm-bindgen = "0.2.70"
|
||||||
|
|
||||||
|
[dependencies.web-sys]
|
||||||
|
version = "0.3.47"
|
||||||
|
features = [
|
||||||
|
'Document',
|
||||||
|
'DomTokenList',
|
||||||
|
'Element',
|
||||||
|
'EventTarget',
|
||||||
|
'Navigator',
|
||||||
|
'TouchEvent',
|
||||||
|
'Window'
|
||||||
|
]
|
||||||
|
121
plume-front/src/lib.rs
Executable file
121
plume-front/src/lib.rs
Executable file
@ -0,0 +1,121 @@
|
|||||||
|
#![recursion_limit = "128"]
|
||||||
|
#![feature(decl_macro, proc_macro_hygiene, try_trait)]
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate gettext_macros;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate lazy_static;
|
||||||
|
|
||||||
|
use wasm_bindgen::{prelude::*, JsCast};
|
||||||
|
use web_sys::window;
|
||||||
|
|
||||||
|
init_i18n!(
|
||||||
|
"plume-front",
|
||||||
|
af,
|
||||||
|
ar,
|
||||||
|
bg,
|
||||||
|
ca,
|
||||||
|
cs,
|
||||||
|
cy,
|
||||||
|
da,
|
||||||
|
de,
|
||||||
|
el,
|
||||||
|
en,
|
||||||
|
eo,
|
||||||
|
es,
|
||||||
|
fa,
|
||||||
|
fi,
|
||||||
|
fr,
|
||||||
|
gl,
|
||||||
|
he,
|
||||||
|
hi,
|
||||||
|
hr,
|
||||||
|
hu,
|
||||||
|
it,
|
||||||
|
ja,
|
||||||
|
ko,
|
||||||
|
nb,
|
||||||
|
nl,
|
||||||
|
no,
|
||||||
|
pl,
|
||||||
|
pt,
|
||||||
|
ro,
|
||||||
|
ru,
|
||||||
|
sat,
|
||||||
|
si,
|
||||||
|
sk,
|
||||||
|
sl,
|
||||||
|
sr,
|
||||||
|
sv,
|
||||||
|
tr,
|
||||||
|
uk,
|
||||||
|
vi,
|
||||||
|
zh
|
||||||
|
);
|
||||||
|
|
||||||
|
compile_i18n!();
|
||||||
|
|
||||||
|
lazy_static! {
|
||||||
|
static ref CATALOG: gettext::Catalog = {
|
||||||
|
let catalogs = include_i18n!();
|
||||||
|
let lang = window().unwrap().navigator().language().unwrap();
|
||||||
|
let lang = lang.splitn(2, '-').next().unwrap_or("en");
|
||||||
|
|
||||||
|
let english_position = catalogs
|
||||||
|
.iter()
|
||||||
|
.position(|(language_code, _)| *language_code == "en")
|
||||||
|
.unwrap();
|
||||||
|
catalogs
|
||||||
|
.iter()
|
||||||
|
.find(|(l, _)| l == &lang)
|
||||||
|
.unwrap_or(&catalogs[english_position])
|
||||||
|
.clone()
|
||||||
|
.1
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen(start)]
|
||||||
|
pub fn main() -> Result<(), JsValue> {
|
||||||
|
menu();
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Toggle menu on mobile devices
|
||||||
|
///
|
||||||
|
/// It should normally be working fine even without this code
|
||||||
|
/// But :focus-within is not yet supported by Webkit/Blink
|
||||||
|
fn menu() {
|
||||||
|
let document = window().unwrap().document().unwrap();
|
||||||
|
if let Some(button) = document.get_element_by_id("menu") {
|
||||||
|
if let Some(menu) = document.get_element_by_id("content") {
|
||||||
|
let show_menu = Closure::wrap(Box::new(|_: web_sys::TouchEvent| {
|
||||||
|
window()
|
||||||
|
.unwrap()
|
||||||
|
.document()
|
||||||
|
.unwrap()
|
||||||
|
.get_element_by_id("menu")
|
||||||
|
.map(|menu| menu.class_list().add_1("show"))
|
||||||
|
.unwrap()
|
||||||
|
.unwrap();
|
||||||
|
}) as Box<dyn FnMut(web_sys::TouchEvent)>);
|
||||||
|
button
|
||||||
|
.add_event_listener_with_callback("touchend", show_menu.as_ref().unchecked_ref())
|
||||||
|
.unwrap();
|
||||||
|
show_menu.forget();
|
||||||
|
|
||||||
|
let close_menu = Closure::wrap(Box::new(|_: web_sys::TouchEvent| {
|
||||||
|
window()
|
||||||
|
.unwrap()
|
||||||
|
.document()
|
||||||
|
.unwrap()
|
||||||
|
.get_element_by_id("menu")
|
||||||
|
.map(|menu| menu.class_list().remove_1("show"))
|
||||||
|
.unwrap()
|
||||||
|
.unwrap()
|
||||||
|
}) as Box<dyn FnMut(web_sys::TouchEvent)>);
|
||||||
|
menu.add_event_listener_with_callback("touchend", close_menu.as_ref().unchecked_ref())
|
||||||
|
.unwrap();
|
||||||
|
close_menu.forget();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user