Use head elements and new manganis syntax in examples (#2688)
* use head elements and new manganis syntax in examples * only enable desktop workspace example scraping during a dioxus release --------- Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
This commit is contained in:
1 parent
bd58a92441
commit
c6a2e5b6c8
31 files changed
+379
-374
No files matched your search
@@ -118,94 +118,3 @@ harness = false
|
||||
name = "check_eval"
|
||||
path = "headless_tests/eval.rs"
|
||||
harness = false
|
||||
|
||||
# Most of the examples live in the workspace. We include some here so that docs.rs can scrape our examples for better inline docs
|
||||
[[example]]
|
||||
name = "video_stream"
|
||||
path = "../../examples/video_stream.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "suspense"
|
||||
path = "../../examples/suspense.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "calculator_mutable"
|
||||
path = "../../examples/calculator_mutable.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "custom_html"
|
||||
path = "../../examples/custom_html.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "custom_menu"
|
||||
path = "../../examples/custom_menu.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "errors"
|
||||
path = "../../examples/errors.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "file_explorer"
|
||||
path = "../../examples/file_explorer.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "future"
|
||||
path = "../../examples/future.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "hydration"
|
||||
path = "../../examples/hydration.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "multiwindow"
|
||||
path = "../../examples/multiwindow.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "overlay"
|
||||
path = "../../examples/overlay.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "popup"
|
||||
path = "../../examples/popup.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "read_size"
|
||||
path = "../../examples/read_size.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "shortcut"
|
||||
path = "../../examples/shortcut.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "streams"
|
||||
path = "../../examples/streams.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "window_event"
|
||||
path = "../../examples/window_event.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "window_focus"
|
||||
path = "../../examples/window_focus.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "window_zoom"
|
||||
path = "../../examples/window_zoom.rs"
|
||||
doc-scrape-examples = true
|
||||
@@ -1,3 +1,5 @@
|
||||
use std::{io::Write as _, path::PathBuf};
|
||||
|
||||
fn check_gnu() {
|
||||
// WARN about wry support on windows gnu targets. GNU windows targets don't work well in wry currently
|
||||
if std::env::var("CARGO_CFG_WINDOWS").is_ok()
|
||||
@@ -6,8 +8,126 @@ fn check_gnu() {
|
||||
{
|
||||
println!("cargo:warning=GNU windows targets have some limitations within Wry. Using the MSVC windows toolchain is recommended. If you would like to use continue using GNU, you can read https://github.com/wravery/webview2-rs#cross-compilation and disable this warning by adding the gnu feature to dioxus-desktop in your Cargo.toml")
|
||||
}
|
||||
|
||||
// To prepare for a release, we add extra examples to desktop for doc scraping and copy assets from the workspace to make those examples compile
|
||||
if option_env!("DIOXUS_RELEASE").is_some() {
|
||||
// Append EXAMPLES_TOML to the cargo.toml
|
||||
let cargo_toml = std::fs::OpenOptions::new()
|
||||
.append(true)
|
||||
.open("Cargo.toml")
|
||||
.unwrap();
|
||||
let mut write = std::io::BufWriter::new(cargo_toml);
|
||||
write.write_all(EXAMPLES_TOML.as_bytes()).unwrap();
|
||||
|
||||
// Copy the assets from the workspace to the examples directory
|
||||
let crate_dir = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
|
||||
let workspace_dir = crate_dir.parent().unwrap().parent().unwrap();
|
||||
let workspace_assets_dir = workspace_dir.join("examples").join("assets");
|
||||
let desktop_assets_dir = PathBuf::from("examples").join("assets");
|
||||
std::fs::create_dir_all(&desktop_assets_dir).unwrap();
|
||||
// move all files from the workspace assets dir to the desktop assets dir
|
||||
for entry in std::fs::read_dir(workspace_assets_dir).unwrap() {
|
||||
let entry = entry.unwrap();
|
||||
let path = entry.path();
|
||||
if path.is_file() {
|
||||
std::fs::copy(&path, desktop_assets_dir.join(path.file_name().unwrap())).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
check_gnu();
|
||||
}
|
||||
|
||||
const EXAMPLES_TOML: &str = r#"
|
||||
# Most of the examples live in the workspace. We include some here so that docs.rs can scrape our examples for better inline docs
|
||||
[[example]]
|
||||
name = "video_stream"
|
||||
path = "../../examples/video_stream.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "suspense"
|
||||
path = "../../examples/suspense.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "calculator_mutable"
|
||||
path = "../../examples/calculator_mutable.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "custom_html"
|
||||
path = "../../examples/custom_html.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "custom_menu"
|
||||
path = "../../examples/custom_menu.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "errors"
|
||||
path = "../../examples/errors.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "file_explorer"
|
||||
path = "../../examples/file_explorer.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "future"
|
||||
path = "../../examples/future.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "hydration"
|
||||
path = "../../examples/hydration.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "multiwindow"
|
||||
path = "../../examples/multiwindow.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "overlay"
|
||||
path = "../../examples/overlay.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "popup"
|
||||
path = "../../examples/popup.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "read_size"
|
||||
path = "../../examples/read_size.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "shortcut"
|
||||
path = "../../examples/shortcut.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "streams"
|
||||
path = "../../examples/streams.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "window_event"
|
||||
path = "../../examples/window_event.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "window_focus"
|
||||
path = "../../examples/window_focus.rs"
|
||||
doc-scrape-examples = true
|
||||
|
||||
[[example]]
|
||||
name = "window_zoom"
|
||||
path = "../../examples/window_zoom.rs"
|
||||
doc-scrape-examples = true"#;
|
||||
@@ -0,0 +1,17 @@
|
||||
@keyframes spin {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
.spinner {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border: 4px solid #f3f3f3;
|
||||
border-top: 4px solid #3498db;
|
||||
border-radius: 50%;
|
||||
animation: spin 2s linear infinite;
|
||||
}
|
||||
@@ -33,30 +33,10 @@ pub fn App() -> Element {
|
||||
}
|
||||
}
|
||||
|
||||
const STYLE: &str = r#"@keyframes spin {
|
||||
0% {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
.spinner {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border: 4px solid #f3f3f3;
|
||||
border-top: 4px solid #3498db;
|
||||
border-radius: 50%;
|
||||
animation: spin 2s linear infinite;
|
||||
}"#;
|
||||
|
||||
#[component]
|
||||
fn Homepage(story: ReadOnlySignal<PreviewState>) -> Element {
|
||||
rsx! {
|
||||
style {
|
||||
{STYLE}
|
||||
}
|
||||
head::Link { rel: "stylesheet", href: asset!("./assets/hackernews.css") }
|
||||
div { display: "flex", flex_direction: "row", width: "100%",
|
||||
div {
|
||||
width: "50%",
|
||||
|
||||
@@ -245,7 +245,7 @@ impl ScriptProps {
|
||||
/// rsx! {
|
||||
/// // You can use the Script component to render a script tag into the head of the page
|
||||
/// Script {
|
||||
/// src: manganis::mg!(file("./assets/script.js")),
|
||||
/// src: asset!("./assets/script.js"),
|
||||
/// }
|
||||
/// }
|
||||
/// }
|
||||
@@ -435,7 +435,7 @@ impl LinkProps {
|
||||
/// // You can use the meta component to render a meta tag into the head of the page
|
||||
/// // This meta tag will redirect the user to the dioxuslabs homepage in 10 seconds
|
||||
/// head::Link {
|
||||
/// href: manganis::mg!(file("./assets/style.css")),
|
||||
/// href: asset!("./assets/style.css"),
|
||||
/// rel: "stylesheet",
|
||||
/// }
|
||||
/// }
|
||||
|
||||
Reference in new issue
Block a user